@tinycloud/share-sdk 1.4.2-beta.0 → 1.4.2-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/share-index.cjs +209 -42
- package/dist/share-index.cjs.map +1 -1
- package/dist/share-index.d.cts +46 -21
- package/dist/share-index.d.ts +46 -21
- package/dist/share-index.js +207 -43
- package/dist/share-index.js.map +1 -1
- package/package.json +2 -2
package/dist/share-index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/share-index/index.ts","../src/share-index/ids.ts","../../../node_modules/multiformats/src/bytes.ts","../../../node_modules/multiformats/src/vendor/base-x.js","../../../node_modules/multiformats/src/bases/base.ts","../../../node_modules/multiformats/src/bases/base32.ts","../../../node_modules/multiformats/src/bases/base36.ts","../../../node_modules/multiformats/src/bases/base58.ts","../../../node_modules/multiformats/src/vendor/varint.js","../../../node_modules/multiformats/src/varint.ts","../../../node_modules/multiformats/src/hashes/digest.ts","../../../node_modules/multiformats/src/cid.ts","../../../node_modules/multiformats/src/codecs/raw.ts","../../share-envelope/src/cid.ts","../../share-envelope/src/bearer-delegation.ts","../../../node_modules/multiformats/src/bases/base64.ts","../../share-envelope/src/bytes.ts","../../share-envelope/src/didkey.ts","../../share-envelope/src/bearer.ts","../../share-envelope/src/schema.ts","../../share-envelope/src/aead.ts","../../share-envelope/src/jcs.ts","../../share-envelope/src/email.ts","../../share-envelope/src/compact-ucan.ts","../../share-envelope/src/sign.ts","../../share-envelope/src/link.ts","../../../node_modules/zod/v3/external.js","../../../node_modules/zod/v3/helpers/util.js","../../../node_modules/zod/v3/ZodError.js","../../../node_modules/zod/v3/locales/en.js","../../../node_modules/zod/v3/errors.js","../../../node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/zod/v3/types.js","../src/share-index/link.ts","../src/native.ts","../src/share-index/agent-key.ts","../src/share-index/agent-record.ts","../src/share-index/backend.ts","../src/share-index/cas.ts","../src/share-index/delivery.ts","../src/share-index/record-store.ts","../src/share-index/schema.ts","../src/share-index/precedence.ts","../src/share-index/verify/chain.ts","../src/share-index/verify/policy-v3.ts","../../../node_modules/multiformats/src/bytes.ts","../../../node_modules/multiformats/src/vendor/base-x.js","../../../node_modules/multiformats/src/bases/base.ts","../../../node_modules/multiformats/src/bases/base32.ts","../../../node_modules/multiformats/src/bases/base36.ts","../../../node_modules/multiformats/src/bases/base58.ts","../../../node_modules/multiformats/src/vendor/varint.js","../../../node_modules/multiformats/src/varint.ts","../../../node_modules/multiformats/src/hashes/digest.ts","../../../node_modules/multiformats/src/cid.ts","../src/share-index/verify/registration.ts","../src/owner-policy.ts","../../../node_modules/multiformats/src/codecs/raw.ts","../src/share-index/verify/enforcement-delegation.ts","../src/share-index/verify/cacao-times.ts","../src/share-index/verify/attenuation.ts","../src/share-index/verify/ucan.ts","../src/share-index/verify/session.ts","../src/share-index/sender-share-index.ts"],"sourcesContent":["/**\n * `@tinycloud/share-sdk/share-index`: the shared share index (TC-1432 design C).\n * Published as its own entry so browser bundles that import the package root\n * (web-sdk) do not carry it. Reference: `docs/share-index.md`.\n */\nexport { AGENT_ID_LENGTH, INDEX_MAIN_KEY, SHARE_RECORDS_VAULT_PREFIX, agentIdFromDid, agentRecordKey, agentRecordPrefix, classifyRecordKey, isAgentId, isShareId, type ClassifiedRecordKey } from \"./ids.js\";\nexport { validateShareLink, type ShareLinkCheck, type ShareLinkShape } from \"./link.js\";\nexport { deriveAgentKeyMaterial, type AgentKeyMaterial } from \"./agent-key.js\";\nexport { AGENT_RECORD_VERSION, MAX_AGENT_RECORD_BYTES, SUPPORTED_AGENT_RECORD_V, AgentRecordError, OwnerUnwrapUnavailableError, agentRecordBinding, openAgentRecordAsAgent, openAgentRecordAsOwner, parseStoredAgentRecord, sealAgentRecord, type AgentRecordFailure, type AgentRecordHeader, type OwnerNetworkUnwrap, type OwnerNetworkWrap, type StoredAgentRecord } from \"./agent-record.js\";\nexport { INVALID_ETAG_MESSAGE, createTinyCloudShareIndexBackend, type ShareDocumentRead, type ShareIndexBackend, type ShareListResult, type ShareRawRead, type ShareWriteCondition, type ShareWriteResult, type TinyCloudShareIndexBackendOptions, type TinyCloudShareIndexClient, type VaultNetworkRead } from \"./backend.js\";\nexport { DEFAULT_CAS_POLICY, ShareIndexCasError, type CasPolicy, type ShareIndexCasErrorCode } from \"./cas.js\";\nexport { AgentShareRecordStore, WebShareRecordStore, type AgentShareRecordStoreOptions } from \"./record-store.js\";\nexport { INDEX_SCHEMA_VERSION, ShareRecordSchemaError, displayName, isSpaceOwnedBy, parseIndexDocument, project, type ShareIndexAgentEntry, type ShareIndexArchiveDocument, type ShareIndexDocument, type ShareIndexRow, type ShareProofState } from \"./schema.js\";\nexport { claimRank, decideClaim, type ClaimDecision } from \"./precedence.js\";\nexport { verifyAgentRecordChain, type ChainContext, type ChainVerdict, type ShareRegistrationKey } from \"./verify/chain.js\";\nexport { parseSignedUcan, type SignedUcanDelegation } from \"./verify/ucan.js\";\nexport { verifyOwnerSessionDelegation, type ParsedSiweCacao, type SiweCacaoParser } from \"./verify/session.js\";\nexport { verifyPolicyEnforcementDelegation } from \"./verify/enforcement-delegation.js\";\nexport { attenuationCovers, type Attenuation } from \"./verify/attenuation.js\";\nexport { DEFAULT_SHARE_INDEX_LIMITS, MemoryShareIndexOutbox, SenderShareIndex, headerBytes, type AgentRejectReason, type SenderShareIndexOptions, type ShareIndexFlushResult, type ShareIndexLimits, type ShareIndexLoad, type ShareIndexOp, type ShareIndexOutbox, type ShareIndexReconcileReport, type ShareIndexWriteOutcome, type ShareIndexWriteStatus, type ShareStatusPort } from \"./sender-share-index.js\";\nexport type { SenderShareRecord, SenderShareRecordProofs } from \"../history.js\";\nexport { checkRegistrationReceipt, type CheckedRegistration, type RegistrationKey } from \"./verify/registration.js\";\nexport { verifyEnvelopeV3At } from \"./verify/policy-v3.js\";\nexport { DeliveryMaterialError, STORED_DELIVERY_MATERIAL_KEYS, assertLinkBoundToMaterial, compactShareRecord, expandShareRecord, openDeliveryEnvelope, type StoredDeliveryMaterial, type StoredShareRecord } from \"./delivery.js\";\n","import { sha256 } from \"@noble/hashes/sha256\";\nimport { toBase64Url } from \"@tinycloud/share-envelope\";\n\n/**\n * Identifiers and the key classifier for the shared share index\n * (TC-1432 design C §1). All keys here are relative to the vault prefix\n * `sender-history/v2/records/`.\n */\n\n/** Vault key prefix of every share record and of the index documents. */\nexport const SHARE_RECORDS_VAULT_PREFIX = \"sender-history/v2/records/\";\n/** The main index document key. */\nexport const INDEX_MAIN_KEY = \"_index/main\";\n/** Length of a DID-derived agent id (132 bits of base64url). */\nexport const AGENT_ID_LENGTH = 22;\n/** Length of a `rejectedKeys`/`newerKeys` entry: base64url of SHA-256 of the key suffix, truncated (96 bits). */\nexport const REJECTED_KEY_ENTRY_LENGTH = 16;\n\nconst AGENT_ID_DOMAIN = \"xyz.tinycloud.share/agent-id/v1|\";\nconst SHARE_ID = /^[A-Za-z0-9_-]{1,512}$/;\nconst AGENT_ID = /^[A-Za-z0-9_-]{22}$/;\nconst ARCHIVE_NAME = /^archive-\\d{4}$/;\n\n/** `^[A-Za-z0-9_-]{1,512}$`, excluding the reserved first segments `_index` and `agents`. */\nexport function isShareId(value: unknown): value is string {\n return typeof value === \"string\" && SHARE_ID.test(value) && value !== \"_index\" && value !== \"agents\";\n}\n\nexport function isAgentId(value: unknown): value is string {\n return typeof value === \"string\" && AGENT_ID.test(value);\n}\n\n/** Index document names under `_index/`: `main` and `archive-<yyyy>`. */\nexport function isIndexDocumentName(value: unknown): value is string {\n return typeof value === \"string\" && (value === \"main\" || ARCHIVE_NAME.test(value));\n}\n\n/**\n * The first 22 base64url characters of\n * `sha256(\"xyz.tinycloud.share/agent-id/v1|\" + agentDid)`. `agentDid` is the\n * DID of the key that signs the agent's invocations and delegations, so a new\n * key gets a new prefix.\n */\nexport function agentIdFromDid(agentDid: string): string {\n if (typeof agentDid !== \"string\" || !agentDid.startsWith(\"did:\") || /[\\s#]/.test(agentDid)) throw new TypeError(\"agent DID is invalid\");\n return toBase64Url(sha256(new TextEncoder().encode(AGENT_ID_DOMAIN + agentDid))).slice(0, AGENT_ID_LENGTH);\n}\n\nexport function agentRecordKey(agentId: string, shareId: string): string {\n if (!isAgentId(agentId) || !isShareId(shareId)) throw new TypeError(\"agent record key is invalid\");\n return `agents/${agentId}/${shareId}`;\n}\n\n/** Explicit list prefix (with the trailing slash) of one agent's records, relative to `records/`. */\nexport function agentRecordPrefix(agentId: string): string {\n if (!isAgentId(agentId)) throw new TypeError(\"agent id is invalid\");\n return `agents/${agentId}/`;\n}\n\nexport type ClassifiedRecordKey =\n | { readonly kind: \"index\"; readonly name: string }\n | { readonly kind: \"web\"; readonly shareId: string }\n | { readonly kind: \"agent\"; readonly agentId: string; readonly shareId: string }\n /**\n * Never fetched, never rendered. `agentId`/`suffix` are set when the key\n * lies inside an agent prefix (`agents/<valid id>/…`), so it is counted\n * once against that agent; any other key can only be written by owner\n * clients and is skipped without counting.\n */\n | { readonly kind: \"rejected\"; readonly agentId?: string; readonly suffix?: string };\n\n/**\n * The `rejectedKeys`/`newerKeys` entry for a key suffix: a short hash, so an\n * agent-chosen string never reaches the index and every entry is 16\n * characters (≤100 per list keeps an agent's header state small).\n */\nexport function rejectedKeyEntry(suffix: string): string {\n return toBase64Url(sha256(new TextEncoder().encode(suffix))).slice(0, REJECTED_KEY_ENTRY_LENGTH);\n}\n\nfunction hasUnsafeShape(key: string): boolean {\n if (key.length === 0 || key.startsWith(\"/\") || key.includes(\"%\") || key.includes(\"\\\\\")) return true;\n return key.split(\"/\").some((segment) => segment === \"\" || segment === \".\" || segment === \"..\");\n}\n\n/**\n * Classify one raw listed key (relative to `records/`), before any\n * needs-attention logic. A key containing `%`, `\\`, a `.`/`..` segment, an\n * empty segment or a leading `/` is rejected first.\n */\nexport function classifyRecordKey(key: string): ClassifiedRecordKey {\n if (typeof key !== \"string\") return { kind: \"rejected\" };\n const agentPrefix = /^agents\\/([A-Za-z0-9_-]{22})\\//.exec(key);\n const owner = agentPrefix === null ? {} : { agentId: agentPrefix[1]!, suffix: key.slice(agentPrefix[0].length) };\n if (hasUnsafeShape(key)) return { kind: \"rejected\", ...owner };\n const segments = key.split(\"/\");\n if (segments.length === 1) return isShareId(key) ? { kind: \"web\", shareId: key } : { kind: \"rejected\" };\n if (segments[0] === \"_index\") return segments.length === 2 && isIndexDocumentName(segments[1]) ? { kind: \"index\", name: segments[1]! } : { kind: \"rejected\" };\n if (segments[0] === \"agents\" && segments.length === 3 && isAgentId(segments[1]) && isShareId(segments[2])) {\n return { kind: \"agent\", agentId: segments[1]!, shareId: segments[2]! };\n }\n return { kind: \"rejected\", ...owner };\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 { 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 const prefixCodePoint = prefix.codePointAt(0)\n /* c8 ignore next 3 */\n if (prefixCodePoint === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefixCodePoint\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 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, alphabetIdx: Record<string, number>, bitsPerChar: number, name: string): Uint8Array {\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 = alphabetIdx[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\nfunction createAlphabetIdx (alphabet: string): Record<string, number> {\n // Build the character lookup table:\n const alphabetIdx: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n alphabetIdx[alphabet[i]] = i\n }\n return alphabetIdx\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 const alphabetIdx = createAlphabetIdx(alphabet)\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, alphabetIdx, bitsPerChar, name)\n }\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","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","/* 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","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","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\n/**\n * Used to check that the passed multihash has the passed code\n */\nexport function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {\n return digest.code === code\n}\n","import { base32 } from './bases/base32.js'\nimport { base36 } from './bases/base36.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 case base36.prefix: {\n const decoder = base ?? base36\n return [base36.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32, base36 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 { coerce } from '../bytes.js'\nimport type { ArrayBufferView, 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> | ArrayBufferView<Uint8Array>): Uint8Array {\n return coerce(data)\n}\n","import { CID } from \"multiformats/cid\";\nimport * as raw from \"multiformats/codecs/raw\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\nimport { sha256 } from \"@noble/hashes/sha2\";\n\nconst SHA256_CODE = 0x12;\n\n/**\n * Compute the CID of a single raw block, per sharing-viewer-and-registry.md §6.3:\n * CIDv1, codec raw (0x55), sha2-256, canonical lowercase base32 (\"bafkr…\").\n * Hashes the exact bytes given — no chunking, no UnixFS/dag-pb wrapping.\n */\nexport async function computeCid(bytes: Uint8Array): Promise<string> {\n // Normalize cross-realm typed arrays (notably jsdom's TextEncoder output)\n // before multiformats performs its instanceof check.\n const digest = createDigest(SHA256_CODE, sha256(new Uint8Array(bytes)));\n return CID.create(1, raw.code, digest).toString();\n}\n\n/**\n * Is `cidString` a canonical CIDv1/raw/sha2-256 lowercase-base32 CID *string*\n * (no bytes check — see `verifyCid` for that)? Used by the envelope schema's\n * `content.cid` pointer so a non-canonical or non-raw CID never gets signed.\n */\nexport function isCanonicalRawCid(cidString: string): boolean {\n let cid: CID;\n try {\n cid = CID.parse(cidString);\n } catch {\n return false;\n }\n return (\n cid.version === 1 &&\n cid.code === raw.code &&\n cid.multihash.code === SHA256_CODE &&\n // `toString` of a parsed CID gives back the string it was parsed from; a fresh CID is encoded again.\n CID.createV1(cid.code, cid.multihash).toString() === cidString\n );\n}\n\n/**\n * Verify that `cidString` is the canonical CIDv1/raw/sha2-256 base32 CID of `bytes`.\n * Returns false for any mismatch: wrong hash, wrong version/codec, or a\n * non-canonical string form of the right CID.\n */\nexport async function verifyCid(\n bytes: Uint8Array,\n cidString: string,\n): Promise<boolean> {\n let cid: CID;\n try {\n cid = CID.parse(cidString);\n } catch {\n return false;\n }\n if (cid.version !== 1 || cid.code !== raw.code) return false;\n // Require the canonical lowercase base32 string form.\n if (cid.toString() !== cidString) return false;\n return (await computeCid(bytes)) === cidString;\n}\n","/**\n * Bearer-slice delegation: ONE module for both sides so create and verify\n * cannot drift — the CLI mints with `mintBearerDelegation`, the viewer checks\n * with `checkBearerDelegation`, and both share `bearerResourceUri` and\n * `READ_ABILITIES` (this module began life as the stage-3 viewer's\n * delegation.ts and moved here when the stage-4 create flow needed the same\n * conventions from node).\n *\n * --- The check (viewer spec §1 \"Mode detection\") -------------------------\n *\n * The UI must derive its mode from EFFECTIVE CAPABILITIES, never from the\n * envelope's unsigned hints — and never from the mere fact that the envelope\n * decrypted. `checkBearerDelegation` decodes AND cryptographically verifies\n * the envelope's embedded delegation (a UCAN/JWT-shaped token: three\n * base64url segments, header.payload.signature, capabilities in the\n * payload's `att` array) and fails closed unless ALL of the following hold:\n *\n * 1. the token parses (three non-empty base64url segments; header and\n * payload are JSON objects; the signature segment decodes),\n * 2. the header's `alg` is EdDSA and the signature VERIFIES (strict\n * RFC 8032 ed25519) over the JWS signing input against the key the\n * token's own `iss` did:key names — the token is internally\n * consistent: `iss` really signed exactly these claims,\n * 3. the token carries a REQUIRED integer `exp` (UCAN epoch-seconds\n * convention) that has not passed, and — if present — an `nbf` that\n * has (expiry-less tokens are rejected outright),\n * 4. the delegatee (`aud`) DID EQUALS the did:key derived from the\n * envelope's embedded bearer sessionJwk — otherwise the key the link\n * carries cannot use this delegation at all,\n * 5. some capability grants the read ability (`BEARER_READ_ABILITY`,\n * the SAME single constant the mint emits) on a CANONICAL resource\n * URI that covers the envelope's signed target\n * (origin + spaceId + resource.path) exactly or via a `/*` prefix on\n * a segment boundary — see `resourceUriCovers`.\n *\n * WHAT THE CHECK DOES **NOT** DO — and must never be presented as doing:\n * verification of a delegation CHAIN against an out-of-band trust root\n * (proof/`prf` chains, issuer authority over the resource, revocation).\n * In the bearer slice the delegation is SELF-ISSUED — internal consistency\n * is everything there is to verify. In the policy / recipient-DID slices\n * this becomes full chain verification against the owner/issuer roots, and\n * the NODE repeats it at read time as the real enforcement boundary. This\n * check makes the viewer honest — a link whose delegation is unsigned,\n * expired, or cannot authorize its own embedded key is rejected before any\n * \"read access\" claim is shown — it does not make the link authorized.\n *\n * --- The mint (bearer slice ONLY) ----------------------------------------\n *\n * In the bearer slice there is no owner node: possession of the link IS the\n * authority, so `mintBearerDelegation` self-issues a minimal, internally\n * consistent token — a fresh ed25519 issuer signs (real EdDSA over the JWS\n * signing input) a delegation whose `aud` is the link's embedded session\n * did:key and whose single capability grants read over the bearer resource\n * URI. It satisfies exactly the structure `checkBearerDelegation` validates.\n * In the policy / recipient-DID slices this mint is REPLACED by a real\n * owner-signed delegation chain that the node verifies at read time; nothing\n * about the check side changes.\n */\nimport { ed25519 } from \"@noble/curves/ed25519\";\n\nimport { fromBase64Url, toBase64Url, utf8Bytes } from \"./bytes.js\";\nimport {\n didKeyFromEd25519PublicKey,\n ed25519PublicKeyFromDidKey,\n} from \"./didkey.js\";\nimport { getBearerSessionJwk } from \"./bearer.js\";\nimport {\n isCanonicalHttpsOrigin,\n isCanonicalResourcePath,\n type ShareEnvelope,\n} from \"./schema.js\";\n\n/** The ONE read ability of the bearer slice — minted AND checked (no drift). */\nexport const BEARER_READ_ABILITY = \"kv/get\";\n\n/**\n * Read abilities accepted for the single-file bearer viewer (spec §1 table).\n * Derived from — never listed separately from — the single mint constant, so\n * the set the checker accepts is PROVABLY identical to what the mint emits.\n */\nexport const READ_ABILITIES: ReadonlySet<string> = new Set([BEARER_READ_ABILITY]);\n\n/**\n * Strict ed25519 verification (RFC 8032, not ZIP-215) — same interop\n * rationale as sign.ts: agree byte-for-byte with a strict Rust verifier.\n */\nconst ED25519_VERIFY_OPTS = { zip215: false } as const;\n\nexport type DelegationCheckResult =\n | { ok: true; delegateeDid: string }\n | { ok: false; detail: string };\n\ninterface UcanCapability {\n readonly with: string;\n readonly can: string;\n}\n\n/** Strict base64url segment → JSON value, or null on ANY failure. */\nfunction decodeJsonSegment(segment: string): unknown {\n try {\n const bytes = fromBase64Url(segment);\n return JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes));\n } catch {\n return null;\n }\n}\n\nfunction isJsonObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseCapability(value: unknown): UcanCapability | null {\n if (!isJsonObject(value)) return null;\n const withUri = value[\"with\"];\n const can = value[\"can\"];\n if (typeof withUri !== \"string\" || withUri.length === 0) return null;\n if (typeof can !== \"string\" || can.length === 0) return null;\n return { with: withUri, can };\n}\n\n/**\n * Parse a resource URI into a canonical https origin plus CANONICAL path\n * segments (schema.ts grammar: no `.`/`..` segments, no `//`, no backslash,\n * no percent-encoded separator aliases, no control chars). Returns null —\n * fail closed — for anything else, so a URI carrying a traversal alias can\n * never even reach the comparison below.\n */\nfunction parseCanonicalResourceUri(\n uri: string,\n): { origin: string; segments: readonly string[] } | null {\n const match = /^(https:\\/\\/[^/\\\\]+)\\/(.*)$/.exec(uri);\n if (match === null) return null;\n const [, origin, path] = match as unknown as [string, string, string];\n if (!isCanonicalHttpsOrigin(origin)) return null;\n if (!isCanonicalResourcePath(path)) return null;\n return { origin, segments: path.split(\"/\") };\n}\n\n/**\n * Does a granted resource URI cover the target resource URI? BOTH sides must\n * parse under the canonical grammar (anything non-canonical — `..` segments,\n * `//`, encoded separators — is rejected outright, never normalized-and-\n * accepted). Coverage is exact segment-wise equality, or a `<prefix>/*`\n * grant whose segments are a strict prefix of the target's segments — i.e.\n * only on canonical segment boundaries: `foo/*` covers `foo/bar`, never\n * `foobar` and never `foo/../bar`. Nothing looser (no mid-segment globs,\n * no scheme-relative tricks) — fail closed.\n */\nexport function resourceUriCovers(granted: string, target: string): boolean {\n const targetParsed = parseCanonicalResourceUri(target);\n if (targetParsed === null) return false;\n const wildcard = granted.endsWith(\"/*\");\n const grantedParsed = parseCanonicalResourceUri(\n wildcard ? granted.slice(0, -2) : granted,\n );\n if (grantedParsed === null) return false;\n if (grantedParsed.origin !== targetParsed.origin) return false;\n const grantedSegments = grantedParsed.segments;\n const targetSegments = targetParsed.segments;\n const prefixMatches = grantedSegments.every(\n (segment, index) => segment === targetSegments[index],\n );\n if (!prefixMatches) return false;\n return wildcard\n ? targetSegments.length > grantedSegments.length\n : targetSegments.length === grantedSegments.length;\n}\n\n/**\n * The canonical bearer-slice resource URI: `<origin>/<spaceId>/<path>`.\n * THE single convention shared by mint (CLI) and check (viewer) — it must be\n * aligned with the node's authoritative resource grammar before real\n * node-gated reads ship in the policy/recipient-DID slices.\n */\nexport function bearerResourceUri(\n origin: string,\n spaceId: string,\n path: string,\n): string {\n return `${origin}/${spaceId}/${path}`;\n}\n\n/** The resource URI a delegation must cover for this envelope's signed target. */\nexport function requiredResourceUri(envelope: ShareEnvelope): string {\n const { origin, spaceId, resource } = envelope.target;\n return bearerResourceUri(origin, spaceId, resource.path);\n}\n\nexport interface CheckBearerDelegationOptions {\n /** Clock override (epoch MILLISECONDS) for exp/nbf; defaults to Date.now(). */\n now?: () => number;\n}\n\n/**\n * Bearer-binding check described in the module header: structural decode +\n * cryptographic verification of the token's own EdDSA signature, expiry, and\n * not-before. Returns a failure `detail` suitable for logging/diagnostics —\n * NOT for claiming more than internal consistency (see module header for\n * what chain verification is deferred to the node in later slices).\n */\nexport function checkBearerDelegation(\n envelope: ShareEnvelope,\n options: CheckBearerDelegationOptions = {},\n): DelegationCheckResult {\n // 1. Derive the did:key the embedded bearer key actually is. Only Ed25519\n // OKP session keys are supported in this slice (the did:key helper is\n // ed25519-only); anything else fails closed rather than guessing.\n let sessionDid: string;\n try {\n const jwk = getBearerSessionJwk(envelope);\n if (jwk.kty !== \"OKP\" || jwk.crv !== \"Ed25519\") {\n return {\n ok: false,\n detail: `unsupported bearer session key family ${jwk.kty}/${jwk.crv}; this build binds Ed25519 keys only`,\n };\n }\n const publicKey = fromBase64Url(jwk.x);\n const privateKey = fromBase64Url(jwk.d);\n if (publicKey.length !== 32 || privateKey.length !== 32) {\n return { ok: false, detail: \"bearer session key must contain 32-byte Ed25519 coordinates\" };\n }\n const derivedPublicKey = ed25519.getPublicKey(privateKey);\n if (!derivedPublicKey.every((byte, index) => byte === publicKey[index])) {\n return { ok: false, detail: \"bearer session private and public keys do not match\" };\n }\n sessionDid = didKeyFromEd25519PublicKey(publicKey);\n } catch (error) {\n return {\n ok: false,\n detail: `could not derive did:key from embedded session key: ${\n error instanceof Error ? error.message : String(error)\n }`,\n };\n }\n\n // 2. Structural token decode: header.payload.signature.\n const segments = envelope.delegation.split(\".\");\n if (segments.length !== 3 || segments.some((segment) => segment.length === 0)) {\n return { ok: false, detail: \"delegation is not a three-segment JWT-shaped token\" };\n }\n const [headerSegment, payloadSegment, signatureSegment] = segments as [\n string,\n string,\n string,\n ];\n const header = decodeJsonSegment(headerSegment);\n if (!isJsonObject(header)) {\n return { ok: false, detail: \"delegation header is not a base64url JSON object\" };\n }\n const payload = decodeJsonSegment(payloadSegment);\n if (!isJsonObject(payload)) {\n return { ok: false, detail: \"delegation payload is not a base64url JSON object\" };\n }\n let signatureBytes: Uint8Array;\n try {\n signatureBytes = fromBase64Url(signatureSegment);\n if (signatureBytes.length === 0) {\n return { ok: false, detail: \"delegation signature segment is empty\" };\n }\n } catch {\n return { ok: false, detail: \"delegation signature segment is not base64url\" };\n }\n\n // 3. Cryptographic verification: the token must be EdDSA-signed by the key\n // its own `iss` did:key names (the mint signs for real — an unsigned or\n // tampered token is rejected, never waved through on shape alone).\n if (header[\"alg\"] !== \"EdDSA\") {\n return {\n ok: false,\n detail: `delegation alg must be EdDSA, got ${JSON.stringify(header[\"alg\"])}`,\n };\n }\n const issuer = payload[\"iss\"];\n if (typeof issuer !== \"string\" || issuer.length === 0) {\n return { ok: false, detail: \"delegation payload has no issuer (iss) DID\" };\n }\n let issuerPublicKey: Uint8Array;\n try {\n issuerPublicKey = ed25519PublicKeyFromDidKey(issuer);\n } catch (error) {\n return {\n ok: false,\n detail: `delegation issuer is not an ed25519 did:key: ${\n error instanceof Error ? error.message : String(error)\n }`,\n };\n }\n let signatureValid: boolean;\n try {\n signatureValid = ed25519.verify(\n signatureBytes,\n utf8Bytes(`${headerSegment}.${payloadSegment}`),\n issuerPublicKey,\n ED25519_VERIFY_OPTS,\n );\n } catch {\n signatureValid = false;\n }\n if (!signatureValid) {\n return { ok: false, detail: \"delegation signature does not verify against iss\" };\n }\n\n // 4. Time bounds, fail closed: `exp` is REQUIRED (UCAN epoch seconds — an\n // expiry-less delegation is rejected outright) and `nbf` is enforced\n // when present.\n const nowMs = options.now?.() ?? Date.now();\n const exp = payload[\"exp\"];\n if (typeof exp !== \"number\" || !Number.isSafeInteger(exp) || exp <= 0) {\n return { ok: false, detail: \"delegation has no valid expiry (exp) claim\" };\n }\n if (nowMs >= exp * 1000) {\n return { ok: false, detail: \"delegation is expired\" };\n }\n const nbf = payload[\"nbf\"];\n if (nbf !== undefined) {\n if (typeof nbf !== \"number\" || !Number.isSafeInteger(nbf)) {\n return { ok: false, detail: \"delegation nbf claim is not a valid time\" };\n }\n if (nowMs < nbf * 1000) {\n return { ok: false, detail: \"delegation is not yet valid (nbf)\" };\n }\n }\n\n // 5. Delegatee binding: aud must BE the embedded key's did:key.\n const audience = payload[\"aud\"];\n if (typeof audience !== \"string\" || audience.length === 0) {\n return { ok: false, detail: \"delegation payload has no audience (aud) DID\" };\n }\n if (audience !== sessionDid) {\n return {\n ok: false,\n detail: \"delegation audience is not the link's embedded session key\",\n };\n }\n\n // 6. Capability coverage: some `att` entry must grant read on a CANONICAL\n // resource URI covering the envelope's signed target.\n const att = payload[\"att\"];\n if (!Array.isArray(att) || att.length === 0) {\n return { ok: false, detail: \"delegation payload has no capabilities (att)\" };\n }\n const required = requiredResourceUri(envelope);\n const granted = att\n .map(parseCapability)\n .some(\n (capability) =>\n capability !== null &&\n READ_ABILITIES.has(capability.can) &&\n resourceUriCovers(capability.with, required),\n );\n if (!granted) {\n return {\n ok: false,\n detail: `delegation grants no read capability covering ${required}`,\n };\n }\n\n return { ok: true, delegateeDid: audience };\n}\n\nexport interface MintBearerDelegationOptions {\n /** ed25519 private key (32-byte seed) of the self-issued bearer issuer. */\n issuerPrivateKey: Uint8Array;\n /** The link's embedded session did:key — the delegatee (`aud`). */\n audienceDid: string;\n /** Resource the capability covers — build it with `bearerResourceUri`. */\n resourceUri: string;\n /** Delegation expiry, epoch SECONDS (UCAN `exp` convention). */\n expiresAtSeconds: number;\n}\n\n/**\n * Mint the bearer slice's self-issued delegation token (see module header:\n * a stand-in for a real owner-signed chain, replaced in later slices).\n * JWT-shaped: base64url(header) \".\" base64url(payload) \".\" base64url(sig),\n * signed EdDSA (ed25519) over the UTF-8 signing input `header.payload` by\n * the issuer key, so the token is internally consistent — `iss` really did\n * sign it — even though no node verifies the chain in this slice.\n */\nexport function mintBearerDelegation(options: MintBearerDelegationOptions): string {\n const { issuerPrivateKey, audienceDid, resourceUri, expiresAtSeconds } = options;\n if (!audienceDid.startsWith(\"did:\")) {\n throw new TypeError(`audienceDid must be a DID, got ${audienceDid}`);\n }\n if (resourceUri.length === 0) {\n throw new TypeError(\"resourceUri must be non-empty\");\n }\n if (!Number.isSafeInteger(expiresAtSeconds) || expiresAtSeconds <= 0) {\n throw new TypeError(\n `expiresAtSeconds must be a positive integer (epoch seconds), got ${expiresAtSeconds}`,\n );\n }\n const issuerDid = didKeyFromEd25519PublicKey(\n ed25519.getPublicKey(issuerPrivateKey),\n );\n const header = { alg: \"EdDSA\", typ: \"JWT\", ucv: \"0.9.1\" };\n const payload = {\n iss: issuerDid,\n aud: audienceDid,\n att: [{ with: resourceUri, can: BEARER_READ_ABILITY }],\n prf: [],\n exp: expiresAtSeconds,\n };\n const signingInput = `${toBase64Url(utf8Bytes(JSON.stringify(header)))}.${toBase64Url(\n utf8Bytes(JSON.stringify(payload)),\n )}`;\n const signature = ed25519.sign(utf8Bytes(signingInput), issuerPrivateKey);\n return `${signingInput}.${toBase64Url(signature)}`;\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 { base64url as mfBase64url } from \"multiformats/bases/base64\";\n\n/** Encode bytes as unpadded base64url (RFC 4648 §5, no multibase prefix). */\nexport function toBase64Url(bytes: Uint8Array): string {\n return mfBase64url.baseEncode(bytes);\n}\n\n/**\n * STRICT decode of unpadded base64url into bytes. Throws on characters\n * outside the alphabet, impossible lengths, non-zero trailing bits, and any\n * padded or otherwise non-canonical form: the input must re-encode to itself\n * byte-for-byte. (multiformats' baseDecode alone tolerates trailing `=`.)\n */\nexport function fromBase64Url(text: string): Uint8Array {\n const bytes = mfBase64url.baseDecode(text);\n if (mfBase64url.baseEncode(bytes) !== text) {\n // Deliberately does not echo the input — it may be key material.\n throw new TypeError(\"non-canonical base64url input\");\n }\n return bytes;\n}\n\nexport function utf8Bytes(text: string): Uint8Array {\n return new TextEncoder().encode(text);\n}\n","import { base58btc } from \"multiformats/bases/base58\";\n\n/** Multicodec varint prefix for an ed25519 public key (0xed → varint ed 01). */\nconst ED25519_MULTICODEC_PREFIX = Uint8Array.of(0xed, 0x01);\nconst PUBLIC_KEY_LENGTH = 32;\n\n/** Encode a 32-byte ed25519 public key as a did:key (multibase base58btc). */\nexport function didKeyFromEd25519PublicKey(publicKey: Uint8Array): string {\n if (publicKey.length !== PUBLIC_KEY_LENGTH) {\n throw new TypeError(\n `ed25519 public key must be ${PUBLIC_KEY_LENGTH} bytes, got ${publicKey.length}`,\n );\n }\n const prefixed = new Uint8Array(ED25519_MULTICODEC_PREFIX.length + publicKey.length);\n prefixed.set(ED25519_MULTICODEC_PREFIX, 0);\n prefixed.set(publicKey, ED25519_MULTICODEC_PREFIX.length);\n return `did:key:${base58btc.encode(prefixed)}`;\n}\n\n/** Decode a did:key back to the raw 32-byte ed25519 public key. Throws on any other DID. */\nexport function ed25519PublicKeyFromDidKey(did: string): Uint8Array {\n if (!did.startsWith(\"did:key:\")) {\n throw new TypeError(`not a did:key: ${did}`);\n }\n const multibase = did.slice(\"did:key:\".length);\n const prefixed = base58btc.decode(multibase);\n if (\n prefixed.length !== ED25519_MULTICODEC_PREFIX.length + PUBLIC_KEY_LENGTH ||\n prefixed[0] !== ED25519_MULTICODEC_PREFIX[0] ||\n prefixed[1] !== ED25519_MULTICODEC_PREFIX[1]\n ) {\n throw new TypeError(\"did:key does not encode an ed25519 public key\");\n }\n return prefixed.slice(ED25519_MULTICODEC_PREFIX.length);\n}\n","import type { SessionJwk, ShareEnvelope } from \"./schema.js\";\n\n/**\n * Extract the embedded session JWK from a bearer-target envelope\n * (blueprint §2.1 \"Embedded key\" row). Node invocation with this key is\n * stage 3/4 — this is only the envelope side.\n *\n * Throws if the envelope's authorizationTarget is not `bearerKey`; callers\n * must switch on the discriminated union first (viewer spec §1).\n */\nexport function getBearerSessionJwk(envelope: ShareEnvelope): SessionJwk {\n const target = envelope.authorizationTarget;\n if (target.kind !== \"bearerKey\") {\n throw new TypeError(\n `envelope authorizationTarget is \"${target.kind}\", not \"bearerKey\"`,\n );\n }\n return target.sessionJwk;\n}\n","import { z } from \"zod\";\n\nimport { fromBase64Url } from \"./bytes.js\";\nimport { isCanonicalRawCid } from \"./cid.js\";\n\n/**\n * ShareEnvelope schema per sharing-ux-blueprint.md §2.1, with the signed\n * typed resource selector and optional display.mode presentation hint from\n * sharing-viewer-and-registry.md §1. All objects are strict — unknown fields\n * are rejected everywhere.\n */\n\n/** Strictly-decodable unpadded base64url: alphabet, length, AND zero trailing bits. */\nfunction decodeBase64UrlOrNull(value: string): Uint8Array | null {\n try {\n return fromBase64Url(value);\n } catch {\n return null;\n }\n}\n\nconst base64UrlString = () =>\n z.string().refine((value) => decodeBase64UrlOrNull(value) !== null, {\n message: \"expected strictly-decodable unpadded base64url\",\n });\n\n/**\n * A canonical HTTPS web origin: `https://host[:non-default-port]` and nothing\n * else. No path, query, fragment, userinfo, trailing slash, default-port\n * alias (`:443`), or non-lowercase host — the string must round-trip exactly\n * through URL origin serialization. Rejects every non-https scheme\n * (http:, ftp:, file:, javascript:, …). This must byte-match what a Rust\n * verifier would accept, so it is exact-string, not \"URL-ish\".\n */\nexport function isCanonicalHttpsOrigin(value: string): boolean {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n return false;\n }\n return url.protocol === \"https:\" && url.origin === value;\n}\n\n/**\n * Session JWK carried by bearer-target envelopes. Strict discriminated union\n * over the asymmetric private-key families a session key can be (OKP / EC).\n * The private component (`d`) is REQUIRED — a bearer envelope without it is\n * useless — and cross-family members (`y` on OKP, `k` anywhere) are rejected,\n * as are unknown JWK members, rather than silently signed over.\n */\nconst sessionJwkCommonFields = {\n alg: z.string().min(1).optional(),\n use: z.string().min(1).optional(),\n key_ops: z.array(z.string().min(1)).optional(),\n kid: z.string().min(1).optional(),\n ext: z.boolean().optional(),\n};\n\nconst okpPrivateJwkSchema = z\n .object({\n kty: z.literal(\"OKP\"),\n crv: z.string().min(1),\n x: base64UrlString(),\n d: base64UrlString(),\n ...sessionJwkCommonFields,\n })\n .strict();\n\nconst ecPrivateJwkSchema = z\n .object({\n kty: z.literal(\"EC\"),\n crv: z.string().min(1),\n x: base64UrlString(),\n y: base64UrlString(),\n d: base64UrlString(),\n ...sessionJwkCommonFields,\n })\n .strict();\n\nexport const sessionJwkSchema = z.discriminatedUnion(\"kty\", [\n okpPrivateJwkSchema,\n ecPrivateJwkSchema,\n]);\n\nexport const policyTargetSchema = z\n .object({\n kind: z.literal(\"policy\"),\n policyCid: z.string().min(1),\n /** Canonical policy bytes, base64url-encoded (bytes are not JSON). */\n policyBytes: base64UrlString(),\n })\n .strict();\n\nexport const bearerKeyTargetSchema = z\n .object({\n kind: z.literal(\"bearerKey\"),\n sessionJwk: sessionJwkSchema,\n })\n .strict();\n\nexport const recipientDidTargetSchema = z\n .object({\n kind: z.literal(\"recipientDid\"),\n did: z.string().regex(/^did:[a-z0-9]+:.+$/, \"expected a DID\"),\n })\n .strict();\n\n/** Signed discriminated union — the target kind itself is signature-covered. */\nexport const authorizationTargetSchema = z.discriminatedUnion(\"kind\", [\n policyTargetSchema,\n bearerKeyTargetSchema,\n recipientDidTargetSchema,\n]);\n\n/**\n * THE canonical resource-path grammar — the ONE grammar shared by schema\n * validation here and capability coverage in bearer-delegation.ts (which\n * previously compared raw concatenated strings, so `shares/s/../victim.md`\n * aliased into a `shares/s/*` grant). A canonical path is \"/\"-joined\n * segments where every segment is non-empty (no `//`, no leading/trailing\n * slash) and none is `.` or `..`, and the whole string contains no\n * backslash, no ASCII control characters, and no percent-encoded\n * separator/dot aliases (%2f, %5c, %2e in any casing). Fail closed: anything\n * outside this grammar is rejected before any comparison happens.\n */\nexport function isCanonicalResourcePath(value: string): boolean {\n if (value.length === 0) return false;\n // eslint-disable-next-line no-control-regex\n if (/[\\u0000-\\u001f\\u007f\\\\]/.test(value)) return false;\n if (/%2f|%5c|%2e/i.test(value)) return false;\n return value\n .split(\"/\")\n .every((segment) => segment.length > 0 && segment !== \".\" && segment !== \"..\");\n}\n\n/** ONE canonical path segment: canonical-path rules, and no separator at all. */\nexport function isCanonicalPathSegment(value: string): boolean {\n return isCanonicalResourcePath(value) && !value.includes(\"/\");\n}\n\nexport const resourceSelectorSchema = z\n .object({\n kind: z.union([z.literal(\"exact\"), z.literal(\"prefix\")]),\n path: z.string().min(1),\n })\n .strict()\n .superRefine((selector, ctx) => {\n // Prefix selectors may carry ONE trailing \"/\" (folder convention);\n // the body must be canonical either way.\n const body =\n selector.kind === \"prefix\" && selector.path.endsWith(\"/\")\n ? selector.path.slice(0, -1)\n : selector.path;\n if (!isCanonicalResourcePath(body)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"path\"],\n message:\n \"expected a canonical resource path (non-empty segments, no . or .. segments, no //, no backslash, no %2f/%5c/%2e, no control chars)\",\n });\n }\n });\n\nexport const targetSchema = z\n .object({\n origin: z.string().refine(isCanonicalHttpsOrigin, {\n message: \"expected a canonical https origin (https://host[:port], nothing else)\",\n }),\n nodeAudience: z.string().min(1),\n spaceId: z.string().refine(isCanonicalPathSegment, {\n message:\n \"expected a single canonical path segment (spaceId joins the resource URI; separators/traversal would alias grants)\",\n }),\n resource: resourceSelectorSchema,\n })\n .strict();\n\nexport const displaySchema = z\n .object({\n senderName: z.string().optional(),\n filename: z.string().optional(),\n recipientHint: z.string().optional(),\n /**\n * Presentation preference only (viewer spec §1): may narrow, never widen;\n * capabilities always win.\n */\n mode: z.union([z.literal(\"document\"), z.literal(\"source\"), z.literal(\"folder\")]).optional(),\n })\n .strict();\n\n/**\n * BEARER-SLICE content pointer (stage 4). The shared file's bytes are sealed\n * as their OWN AEAD blob (same `seal` machinery as the envelope) and put in\n * the registry; this field points at it:\n *\n * - `cid` — CIDv1/raw/sha2-256 of the sealed content blob. The viewer\n * re-verifies fetched bytes against it (trustless), so a lying registry\n * cannot substitute content.\n * - `key` — the content blob's own 32-byte AES-256-GCM key, base64url. It\n * rides INSIDE the sealed envelope (confidential to link holders) and is\n * signature-covered like every other field (a tampered pointer fails the\n * envelope signature before any fetch). Carrying a distinct key — rather\n * than reusing the fragment key — preserves the viewer's key-hygiene\n * contract: the fragment key is still dead (zeroed) the moment the\n * envelope is decrypted.\n *\n * This is a bearer-slice mechanism: possession of the link IS the read\n * authority, so the content is fetched straight from the registry. In the\n * policy / recipient-DID slices this field is absent and the viewer instead\n * performs a capability-gated read from the node named in `target` — the\n * node, not the registry, is the enforcement boundary there.\n */\nexport const contentPointerSchema = z\n .object({\n cid: z.string().refine(isCanonicalRawCid, {\n message: \"expected a canonical CIDv1 raw sha2-256 base32 CID\",\n }),\n key: z.string().refine((value) => decodeBase64UrlOrNull(value)?.length === 32, {\n message: \"expected base64url decoding to exactly 32 bytes\",\n }),\n })\n .strict();\n\nexport const signatureSchema = z\n .object({\n /** did:key of the sender's ed25519 signing key. */\n signerDid: z.string().regex(/^did:key:z[1-9A-HJ-NP-Za-km-z]+$/, \"expected a did:key\"),\n algorithm: z.literal(\"Ed25519\"),\n /** base64url-encoded ed25519 signature over the JCS bytes of all other fields. */\n value: z.string().refine((value) => decodeBase64UrlOrNull(value)?.length === 64, {\n message: \"expected base64url decoding to exactly 64 bytes\",\n }),\n })\n .strict();\n\n/** Envelope body — every signature-covered field. */\nexport const unsignedShareEnvelopeSchema = z\n .object({\n version: z.literal(1),\n shareId: z.string().min(1),\n /** Full signed delegation chain, opaque serialized form. */\n delegation: z.string().min(1),\n authorizationTarget: authorizationTargetSchema,\n target: targetSchema,\n display: displaySchema,\n /** ISO 8601 UTC datetime. Advisory here; enforcement is the delegation's. */\n expiry: z.string().datetime(),\n /** Bearer-slice sealed-content pointer (see contentPointerSchema). */\n content: contentPointerSchema.optional(),\n })\n .strict();\n\nexport const shareEnvelopeSchema = unsignedShareEnvelopeSchema\n .extend({ signature: signatureSchema })\n .strict();\n\nexport type SessionJwk = z.infer<typeof sessionJwkSchema>;\nexport type ContentPointer = z.infer<typeof contentPointerSchema>;\nexport type PolicyTarget = z.infer<typeof policyTargetSchema>;\nexport type BearerKeyTarget = z.infer<typeof bearerKeyTargetSchema>;\nexport type RecipientDidTarget = z.infer<typeof recipientDidTargetSchema>;\nexport type AuthorizationTarget = z.infer<typeof authorizationTargetSchema>;\nexport type ResourceSelector = z.infer<typeof resourceSelectorSchema>;\nexport type ShareTarget = z.infer<typeof targetSchema>;\nexport type ShareDisplay = z.infer<typeof displaySchema>;\nexport type EnvelopeSignature = z.infer<typeof signatureSchema>;\nexport type UnsignedShareEnvelope = z.infer<typeof unsignedShareEnvelopeSchema>;\nexport type ShareEnvelope = z.infer<typeof shareEnvelopeSchema>;\n\n/** Version 2 additions shared by the browser composer and recipient SDK. */\nexport const recipientMatcherSchema = z.discriminatedUnion(\"kind\", [\n z.object({ kind: z.literal(\"exactEmail\"), value: z.string().min(3).regex(/^[^@\\s]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/) }).strict(),\n z.object({ kind: z.literal(\"emailDomain\"), value: z.string().regex(/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/) }).strict(),\n z.object({ kind: z.literal(\"recipientDid\"), value: z.string().regex(/^did:[a-z0-9]+:.+$/) }).strict(),\n z.object({ kind: z.literal(\"policyDigest\"), value: z.string().regex(/^[A-Za-z0-9_-]{43}$/) }).strict(),\n z.object({ kind: z.literal(\"bearer\") }).strict(),\n]);\n\nexport const shareActionSchema = z.union([z.literal(\"read\"), z.literal(\"list\"), z.literal(\"edit\")]);\n\n/** The source selector is shared byte-for-byte by the envelope, policy, and\n * native Node request. It deliberately describes a named operation, never\n * executable SQL or a browser-controlled URL. */\nconst kvContentSourceSchema = z.object({\n kind: z.literal(\"kv\"),\n space: z.string().min(1),\n path: z.string().min(1),\n action: z.literal(\"tinycloud.kv/get\"),\n}).strict();\nconst sqlContentSourceSchema = z.object({\n kind: z.literal(\"sql\"),\n space: z.string().min(1),\n database: z.string().min(1),\n path: z.string().min(1),\n statement: z.string().min(1),\n arguments: z.record(z.string(), z.number().int()),\n argumentsDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n action: z.literal(\"tinycloud.sql/read\"),\n}).strict();\nexport const contentSourceSchema = z.discriminatedUnion(\"kind\", [kvContentSourceSchema, sqlContentSourceSchema]);\n\nexport const v2TargetSchema = z.object({\n origin: z.string().refine(isCanonicalHttpsOrigin, { message: \"expected a canonical https origin\" }),\n nodeAudience: z.string().min(1),\n spaceId: z.string().refine(isCanonicalPathSegment, { message: \"expected a canonical space id\" }),\n}).strict();\n\nconst shareDecryptionSchema = z.object({\n networkId: z.string().min(1),\n action: z.literal(\"tinycloud.encryption/decrypt\"),\n}).strict();\n\nconst ownerAuthoritySchema = z.object({\n registrationCid: z.string().min(1),\n shareCid: z.string().min(1),\n envelopeCid: z.string().min(1),\n enforcementDelegation: z.record(z.string(), z.unknown()),\n outerEnvelope: z.record(z.string(), z.unknown()),\n /** Node-signed registration evidence; required by trusted policy adapters. */\n registrationReceipt: z.object({\n registration: z.record(z.string(), z.unknown()),\n proof: z.record(z.string(), z.unknown()),\n }).strict().optional(),\n}).strict();\n\nexport const contentMetadataSchema = z.object({\n mediaType: z.string().min(1).max(128).optional(),\n byteLength: z.number().int().nonnegative().max(100 * 1024 * 1024).optional(),\n filename: z.string().min(1).max(255).optional(),\n encoding: z.literal(\"utf-8\").optional(),\n /** Encrypted presentation discriminator. The fixed entry point is index.html. */\n artifact: z.literal(\"html\").optional(),\n}).strict();\n\n/**\n * The rule every v2/v3 envelope applies to `deliveryEmail`. Deployed viewers\n * validate with it, so senders must not sign an address it rejects; it is\n * stricter than `canonicalMailbox` (for example `a/b@example.com`).\n */\nconst deliveryEmailSchema = z.string().email();\n\n/** Whether `value` may be signed as an envelope's `deliveryEmail`. */\nexport function isEnvelopeDeliveryEmail(value: string): boolean {\n return deliveryEmailSchema.safeParse(value).success;\n}\n\nconst unsignedShareEnvelopeV2BaseSchema = z.object({\n version: z.literal(2),\n shareId: z.string().min(1),\n recipientMatcher: recipientMatcherSchema,\n deliveryEmail: deliveryEmailSchema.optional(),\n actions: z.array(shareActionSchema).min(1).max(3),\n resource: resourceSelectorSchema,\n target: v2TargetSchema,\n delegationCid: z.string().min(1),\n authorityMaterialHandle: z.string().min(1),\n authorityMaterialDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n decryption: shareDecryptionSchema.optional(),\n contentSource: contentSourceSchema,\n contentSourceDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n authorizationTarget: authorizationTargetSchema,\n display: displaySchema,\n expiry: z.string().datetime(),\n encrypted: z.boolean(),\n content: contentPointerSchema.optional(),\n metadata: contentMetadataSchema,\n ownerAuthority: ownerAuthoritySchema.optional(),\n}).strict();\n\nfunction validateV2Invariants(value: z.infer<typeof unsignedShareEnvelopeV2BaseSchema>, ctx: z.RefinementCtx): void {\n const actions = [...value.actions];\n if (new Set(actions).size !== actions.length) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"actions\"], message: \"actions must be unique\" });\n if (actions.some((action, index) => action !== ([\"read\", \"list\", \"edit\"] as const).filter((candidate) => actions.includes(candidate))[index])) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"actions\"], message: \"actions must be canonically ordered\" });\n if (!value.encrypted && value.recipientMatcher.kind !== \"policyDigest\") ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"recipientMatcher\"], message: \"safe plaintext must carry only a matcher digest\" });\n if (!value.encrypted && value.authorizationTarget.kind !== \"policy\") ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"encrypted\"], message: \"unencrypted content requires a policy target\" });\n if (!value.encrypted && value.content !== undefined) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"content\"], message: \"policy-only plaintext cannot carry content\" });\n if (value.encrypted && (value.metadata.mediaType === undefined || value.metadata.filename === undefined || value.metadata.byteLength === undefined)) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"metadata\"], message: \"encrypted shares must describe their content\" });\n if (!value.encrypted && Object.keys(value.metadata).length !== 0) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"metadata\"], message: \"policy-only plaintext cannot describe content\" });\n if (!value.encrypted && value.metadata.encoding !== undefined) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"metadata\", \"encoding\"], message: \"policy-only plaintext cannot carry content encoding\" });\n if (value.metadata.artifact === \"html\" && (!value.encrypted || value.resource.kind !== \"prefix\" || !value.actions.includes(\"read\") || !value.actions.includes(\"list\"))) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"metadata\", \"artifact\"], message: \"html artifacts require an encrypted readable prefix\" });\n if (!value.encrypted && (value.display.senderName !== undefined || value.display.filename !== undefined || value.display.recipientHint !== undefined)) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"display\"], message: \"policy-only plaintext cannot carry display metadata\" });\n if (!value.encrypted && value.deliveryEmail !== undefined) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"deliveryEmail\"], message: \"policy-only plaintext cannot carry delivery metadata\" });\n if (value.recipientMatcher.kind === \"exactEmail\" && value.deliveryEmail !== undefined && value.deliveryEmail !== value.recipientMatcher.value) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"deliveryEmail\"], message: \"delivery email must match the exact matcher\" });\n if (value.recipientMatcher.kind === \"emailDomain\" && value.deliveryEmail !== undefined && value.deliveryEmail.toLowerCase().endsWith(`@${value.recipientMatcher.value}`) === false) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"deliveryEmail\"], message: \"delivery email must belong to the matcher domain\" });\n if (value.contentSource.kind === \"kv\" && value.contentSource.action !== \"tinycloud.kv/get\") ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"contentSource\"], message: \"source action mismatch\" });\n if (value.contentSource.kind === \"sql\" && value.contentSource.action !== \"tinycloud.sql/read\") ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"contentSource\"], message: \"source action mismatch\" });\n}\n\nexport const unsignedShareEnvelopeV2Schema = unsignedShareEnvelopeV2BaseSchema.superRefine(validateV2Invariants);\n\n// Extend the unsigned object instead of intersecting two strict objects. A\n// strict intersection rejects every valid signed envelope because each side\n// treats the other side's fields as unknown.\nexport const shareEnvelopeV2Schema = unsignedShareEnvelopeV2BaseSchema.extend({ signature: signatureSchema }).strict().superRefine(validateV2Invariants);\nexport type RecipientMatcher = z.infer<typeof recipientMatcherSchema>;\nexport type ShareAction = z.infer<typeof shareActionSchema>;\nexport type ContentSource = z.infer<typeof contentSourceSchema>;\nexport type ContentMetadata = z.infer<typeof contentMetadataSchema>;\nexport type UnsignedShareEnvelopeV2 = z.infer<typeof unsignedShareEnvelopeV2Schema>;\nexport type ShareEnvelopeV2 = z.infer<typeof shareEnvelopeV2Schema>;\n\n/**\n * TC-405 addressed-share envelope. This is intentionally a separate\n * contract from v2: a v3 reader must never reinterpret a v2 policy/session\n * artifact as an ordinary delegation claim.\n */\nconst unifiedResourceSchema = z.string().refine((value) => {\n const marker = value.indexOf(\"/kv/\");\n if (marker < 1) return false;\n const space = value.slice(0, marker);\n const legacy = space.startsWith(\"tinycloud://\");\n if (legacy ? /[:/?#%]/.test(space.slice(\"tinycloud://\".length)) : !space.startsWith(\"tinycloud:\") || /[/?#%]/.test(space)) return false;\n const path = value.slice(marker + 4);\n return !path.startsWith(\"/\") && !path.endsWith(\"/\") && !path.includes(\"//\") && path.split(\"/\").every((segment) => segment.length > 0 && segment !== \".\" && segment !== \"..\");\n}, { message: \"expected canonical TinyCloud KV resource\" });\nconst unifiedEncryptionNetworkSchema = z.string().refine((value) => {\n if (!value.startsWith(\"urn:tinycloud:encryption:\")) return false;\n const rest = value.slice(\"urn:tinycloud:encryption:\".length);\n const separator = rest.lastIndexOf(\":\");\n const owner = separator < 0 ? \"\" : rest.slice(0, separator);\n const network = separator < 0 ? \"\" : rest.slice(separator + 1);\n return owner.startsWith(\"did:\") && owner.length > 4 && network.length > 0 && !/[:/%?#\\s]/.test(network);\n}, { message: \"expected canonical TinyCloud encryption network\" });\nconst unifiedEncryptionResourceSchema = z.string().refine((value) => {\n const prefix = \"urn:tinycloud:encryption:\";\n if (!value.startsWith(prefix)) return false;\n const match = /^(did:.+):([^/:?#\\s]+)(?:\\/(.+))?$/.exec(value.slice(prefix.length));\n if (match === null) return false;\n const path = match[3];\n return path === undefined || path.split(\"/\").every((segment) =>\n segment.length > 0 && segment !== \".\" && segment !== \"..\" && !/[\\\\:%?#\\s]/.test(segment)\n );\n}, { message: \"expected a canonical TinyCloud encryption resource\" });\nconst unifiedEncryptionKeyPathSchema = z.string().regex(/^share\\/[^/]+$/).refine(\n (value) => {\n const segment = value.slice(\"share/\".length);\n return segment !== \".\" && segment !== \"..\" && !/[\\\\:%?#\\s]/.test(segment);\n },\n { message: \"expected an exact share key path\" },\n);\nconst unifiedKvCapabilitySchema = z.object({\n kind: z.literal(\"kv\"),\n resource: unifiedResourceSchema,\n selector: z.union([z.literal(\"exact\"), z.literal(\"prefix\")]),\n actions: z.array(z.union([\n z.literal(\"tinycloud.kv/get\"),\n z.literal(\"tinycloud.kv/list\"),\n z.literal(\"tinycloud.kv/metadata\"),\n z.literal(\"tinycloud.kv/put\"),\n ])).min(1),\n}).strict();\nconst unifiedEncryptionCapabilitySchema = z.object({\n kind: z.literal(\"encryption\"),\n resource: unifiedEncryptionResourceSchema,\n action: z.literal(\"tinycloud.encryption/decrypt\"),\n}).strict();\nconst unifiedCapabilitySchema = z.union([unifiedKvCapabilitySchema, unifiedEncryptionCapabilitySchema]);\nconst unifiedContentSourceSchema = z.object({\n shareId: z.string().min(1),\n kvResource: unifiedResourceSchema,\n selector: z.union([z.literal(\"exact\"), z.literal(\"prefix\")]),\n encryptionNetwork: unifiedEncryptionNetworkSchema,\n encryptionKeyPath: unifiedEncryptionKeyPathSchema.optional(),\n encryptedSymmetricKeyDigestHex: z.string().regex(/^[0-9a-f]{64}$/),\n keyVersion: z.number().int().positive(),\n mode: z.union([z.literal(\"mutable\"), z.literal(\"immutable\")]),\n initialCiphertextDigestHex: z.string().regex(/^[0-9a-f]{64}$/).optional(),\n}).strict();\nexport const unifiedPolicyV1Schema = z.object({\n schema: z.literal(\"xyz.tinycloud.policy/policy/v1\"),\n policyId: z.string().regex(/^pol_[a-z2-7]+$/),\n ownerDid: z.string().min(1),\n createdAt: z.string().datetime({ offset: true }),\n expiresAt: z.string().datetime({ offset: true }).optional(),\n contentSource: unifiedContentSourceSchema,\n capabilityCeiling: z.array(unifiedCapabilitySchema).min(2),\n signature: z.object({ suite: z.string().min(1), signerDid: z.string().min(1), value: z.string().min(1) }).strict(),\n}).strict();\nexport const policyCredentialRequirementV1Schema = z.object({\n type: z.literal(\"TinyCloudPolicyCredentialRequirement\"),\n version: z.literal(1),\n requirementDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n descriptorDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n issuerDid: z.string().min(1),\n issuerKid: z.string().min(1),\n profile: z.object({ id: z.string().min(1), version: z.literal(1) }).strict(),\n credentialType: z.object({ id: z.string().min(1), version: z.literal(1) }).strict(),\n}).strict();\nexport const unifiedPolicyV2Schema = z.object({\n schema: z.literal(\"xyz.tinycloud.policy/policy/v2\"),\n policyId: z.string().regex(/^pol_[a-z2-7]+$/),\n ownerDid: z.string().min(1),\n createdAt: z.string().datetime({ offset: true }),\n expiresAt: z.string().datetime({ offset: true }).optional(),\n contentSource: unifiedContentSourceSchema,\n capabilityCeiling: z.array(unifiedCapabilitySchema).min(2),\n credentialRequirement: policyCredentialRequirementV1Schema,\n signature: z.object({ suite: z.literal(\"Ed25519\"), signerDid: z.string().min(1), value: z.string().min(1) }).strict(),\n}).strict();\nexport const unifiedPolicySchema = z.discriminatedUnion(\"schema\", [\n unifiedPolicyV1Schema,\n unifiedPolicyV2Schema,\n]);\nconst unifiedRootSchema = z.object({\n cid: z.string().min(1),\n authorization: z.string().regex(/^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$/),\n role: z.union([z.literal(\"policy-authority\"), z.literal(\"policy-enforcement\")]),\n}).strict();\nconst attestedEnforcerBindingV2Schema = z.object({\n schema: z.literal(\"xyz.tinycloud.policy/attested-enforcer/v2\"),\n enforcerDid: z.string().regex(/^did:key:z[1-9A-HJ-NP-Za-km-z]+$/),\n nodeAudience: z.string().min(1),\n attestationBindingDigestHex: z.string().regex(/^[0-9a-f]{64}$/),\n issuedAt: z.string().datetime({ offset: true }),\n expiresAt: z.string().datetime({ offset: true }),\n signature: z.object({ suite: z.literal(\"Ed25519\"), signerDid: z.string().min(1), value: base64UrlString() }).strict(),\n}).strict();\nconst v3TargetSchema = z.object({\n origin: z.string().refine(isCanonicalHttpsOrigin, { message: \"expected a canonical https origin\" }),\n nodeAudience: z.string().min(1),\n spaceId: z.string().refine(isCanonicalPathSegment, { message: \"expected a canonical space id\" }),\n}).strict();\n/** Artifact id as `share-sdk` mints and parses it (`assertArtifactId`); `artifact-pin.test.ts` keeps the two in step. */\nconst ARTIFACT_ID_PATTERN = /^[a-z0-9][a-z0-9_-]{2,62}$/;\nexport const artifactPinSchema = z.object({\n v: z.literal(1),\n artifactId: z.string().regex(ARTIFACT_ID_PATTERN),\n version: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER),\n /** SHA-256 (lowercase hex) of the exact `manifest.json` bytes. The manifest itself stays an owner-side record. */\n manifestSha256: z.string().regex(/^[0-9a-f]{64}$/),\n /** An addressed share reads one exact file, so exactly one entry: the stored bytes (ciphertext) it will fetch. */\n files: z.array(z.object({\n path: z.string().min(1).max(255),\n sha256: z.string().regex(/^[0-9a-f]{64}$/),\n bytes: z.number().int().nonnegative(),\n }).strict()).length(1),\n}).strict();\nexport type ArtifactPin = z.infer<typeof artifactPinSchema>;\nconst unsignedShareEnvelopeV3BaseSchema = z.object({\n version: z.literal(3),\n shareId: z.string().min(1),\n recipientMatcher: recipientMatcherSchema,\n deliveryEmail: deliveryEmailSchema.optional(),\n actions: z.array(shareActionSchema).min(1).max(3),\n resource: resourceSelectorSchema,\n target: v3TargetSchema,\n policy: unifiedPolicySchema,\n policyCid: z.string().min(1),\n policyRoot: unifiedRootSchema,\n enforcementRoot: unifiedRootSchema,\n attestedEnforcerBinding: attestedEnforcerBindingV2Schema,\n contentSource: unifiedContentSourceSchema,\n contentSourceDigestHex: z.string().regex(/^[0-9a-f]{64}$/),\n encryptionNetwork: unifiedEncryptionNetworkSchema,\n expiry: z.string().datetime({ offset: true }),\n display: displaySchema,\n encrypted: z.literal(true),\n metadata: contentMetadataSchema,\n /**\n * TC-1428: an owner-signed statement that this share reads one write-once artifact version. Additive: absent on\n * every other share, and covered by the envelope signature because the signature spans the whole unsigned object.\n * The shape is checked here; its binding to the content source is `verifyArtifactShare` in share-sdk.\n */\n artifactPin: artifactPinSchema.optional(),\n}).strict();\n\nfunction validateV3Invariants(value: z.infer<typeof unsignedShareEnvelopeV3BaseSchema>, ctx: z.RefinementCtx): void {\n const actions = [...value.actions];\n if (new Set(actions).size !== actions.length || actions.some((action, index) => action !== ([\"read\", \"list\", \"edit\"] as const).filter((candidate) => actions.includes(candidate))[index])) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"actions\"], message: \"actions must be unique and canonically ordered\" });\n }\n if (value.policyRoot.role !== \"policy-authority\" || value.enforcementRoot.role !== \"policy-enforcement\") {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"policyRoot\", \"role\"], message: \"root roles are fixed\" });\n }\n if (value.policyCid.length === 0 || value.policyCid === value.policyRoot.cid || value.policyCid === value.enforcementRoot.cid) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"policyCid\"], message: \"policy CID must be distinct from both roots\" });\n }\n if (value.contentSource.encryptionNetwork !== value.encryptionNetwork) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"encryptionNetwork\"], message: \"encryption network is not bound to the source\" });\n }\n if (value.attestedEnforcerBinding.nodeAudience !== value.target.nodeAudience || value.attestedEnforcerBinding.signature.signerDid !== value.attestedEnforcerBinding.nodeAudience || Date.parse(value.attestedEnforcerBinding.expiresAt) < Date.parse(value.expiry)) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"attestedEnforcerBinding\"], message: \"enforcer binding does not cover the target and share lifetime\" });\n }\n const encryptionKeyPath = value.contentSource.encryptionKeyPath;\n if (encryptionKeyPath !== undefined && encryptionKeyPath !== `share/${value.contentSource.shareId}`) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"contentSource\", \"encryptionKeyPath\"], message: \"share key path must name this share\" });\n }\n if (value.policy.contentSource.shareId !== value.contentSource.shareId || value.policy.contentSource.kvResource !== value.contentSource.kvResource || value.policy.contentSource.selector !== value.contentSource.selector || value.policy.contentSource.encryptionNetwork !== value.encryptionNetwork || value.policy.contentSource.encryptionKeyPath !== encryptionKeyPath || value.policy.contentSource.encryptedSymmetricKeyDigestHex !== value.contentSource.encryptedSymmetricKeyDigestHex || value.policy.contentSource.keyVersion !== value.contentSource.keyVersion || value.policy.contentSource.mode !== value.contentSource.mode || value.policy.contentSource.initialCiphertextDigestHex !== value.contentSource.initialCiphertextDigestHex) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"contentSource\"], message: \"content source is not bound to policy\" });\n }\n if (value.policy.signature.suite !== \"Ed25519\" || value.policy.signature.signerDid !== value.policy.ownerDid) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"policy\", \"signature\"], message: \"policy must be signed by its owner\" });\n }\n const kvCapabilities = value.policy.capabilityCeiling.filter((capability) => capability.kind === \"kv\");\n const expectedEncryptionResource = encryptionKeyPath === undefined\n ? value.encryptionNetwork\n : `${value.encryptionNetwork}/${encryptionKeyPath}`;\n const decryptCapabilities = value.policy.capabilityCeiling.filter((capability) => capability.kind === \"encryption\" && capability.resource === expectedEncryptionResource && capability.action === \"tinycloud.encryption/decrypt\");\n if (value.policy.capabilityCeiling.length !== 2 || kvCapabilities.length !== 1 || decryptCapabilities.length !== 1 || kvCapabilities[0]?.resource !== value.contentSource.kvResource || kvCapabilities[0]?.selector !== value.contentSource.selector) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"policy\", \"capabilityCeiling\"], message: \"policy ceiling must contain the exact decrypt resource\" });\n }\n}\n\nexport const unsignedShareEnvelopeV3Schema = unsignedShareEnvelopeV3BaseSchema.superRefine(validateV3Invariants);\nexport const shareEnvelopeV3Schema = unsignedShareEnvelopeV3BaseSchema.extend({ signature: signatureSchema }).strict().superRefine(validateV3Invariants);\nexport type UnifiedPolicyCapability = z.infer<typeof unifiedCapabilitySchema>;\nexport type UnifiedContentSource = z.infer<typeof unifiedContentSourceSchema>;\nexport type PolicyCredentialRequirementV1 = z.infer<typeof policyCredentialRequirementV1Schema>;\nexport type UnifiedPolicyV1 = z.infer<typeof unifiedPolicyV1Schema>;\nexport type UnifiedPolicyV2 = z.infer<typeof unifiedPolicyV2Schema>;\nexport type UnifiedPolicy = z.infer<typeof unifiedPolicySchema>;\nexport type UnifiedRoot = z.infer<typeof unifiedRootSchema>;\nexport type UnsignedShareEnvelopeV3 = z.infer<typeof unsignedShareEnvelopeV3Schema>;\nexport type ShareEnvelopeV3 = z.infer<typeof shareEnvelopeV3Schema>;\n","import { utf8Bytes } from \"./bytes.js\";\nimport { computeCid } from \"./cid.js\";\n\n/**\n * Fixed protocol-label AAD, authenticated on every envelope\n * (blueprint §2.1: \"versioned protocol label\").\n */\nexport const ENVELOPE_AAD_LABEL = \"tinycloud-share-envelope-v1\";\n\n/**\n * Version byte of the sealed-blob wire format (see `seal`). Bump only with a\n * new format; verifiers must reject unknown versions.\n */\nexport const SEALED_BLOB_VERSION = 0x01;\n\nconst AAD = utf8Bytes(ENVELOPE_AAD_LABEL);\nconst KEY_LENGTH = 32;\nconst NONCE_LENGTH = 12; // 96-bit nonce, the AES-GCM standard size.\nconst TAG_LENGTH = 16; // AES-GCM authentication tag appended to the ciphertext.\nconst HEADER_LENGTH = 1; // the version byte\n\nexport interface EncryptedEnvelope {\n nonce: Uint8Array;\n ciphertext: Uint8Array;\n}\n\nfunction assertKey(key32: Uint8Array): void {\n if (key32.length !== KEY_LENGTH) {\n throw new TypeError(`key must be ${KEY_LENGTH} bytes, got ${key32.length}`);\n }\n}\n\nasync function importAesKey(\n key32: Uint8Array,\n usage: KeyUsage,\n): Promise<CryptoKey> {\n assertKey(key32);\n return globalThis.crypto.subtle.importKey(\n \"raw\",\n key32 as BufferSource,\n \"AES-GCM\",\n false,\n [usage],\n );\n}\n\n/** Generate a fresh random 32-byte AES-256-GCM key. */\nexport function generateKey(): Uint8Array {\n return globalThis.crypto.getRandomValues(new Uint8Array(KEY_LENGTH));\n}\n\nexport interface SealedEnvelope {\n /** The canonical stored block: `version(0x01) || nonce(12) || ciphertext+tag`. */\n blob: Uint8Array;\n /** CIDv1/raw/sha2-256 of `blob` — the CID that goes in the share link. */\n cid: string;\n}\n\n/**\n * Seal envelope plaintext into the ONE canonical stored-block format:\n *\n * blob = version byte (0x01) || nonce (12 bytes) || AES-256-GCM ciphertext\n * (which includes the trailing 16-byte auth tag)\n *\n * The returned CID is computed over the WHOLE blob, so a recipient holding\n * only the link (CID + key) can fetch the blob, verify the CID, and recover\n * the nonce from the blob itself. This is the only format the public\n * packaging path (and the share link) addresses; `encryptEnvelope` /\n * `decryptEnvelope` are the low-level pieces.\n */\nexport async function seal(\n plaintextBytes: Uint8Array,\n key32: Uint8Array,\n): Promise<SealedEnvelope> {\n const { nonce, ciphertext } = await encryptEnvelope(plaintextBytes, key32);\n const blob = new Uint8Array(HEADER_LENGTH + nonce.length + ciphertext.length);\n blob[0] = SEALED_BLOB_VERSION;\n blob.set(nonce, HEADER_LENGTH);\n blob.set(ciphertext, HEADER_LENGTH + nonce.length);\n return { blob, cid: await computeCid(blob) };\n}\n\n/**\n * Open a sealed blob produced by `seal`: check the version byte, split\n * `nonce || ciphertext`, and decrypt. Throws on unknown version, truncated\n * blobs, and any AEAD failure (wrong key / tampering).\n */\nexport async function open(\n blob: Uint8Array,\n key32: Uint8Array,\n): Promise<Uint8Array> {\n if (blob.length < HEADER_LENGTH + NONCE_LENGTH + TAG_LENGTH) {\n throw new TypeError(`sealed blob too short: ${blob.length} bytes`);\n }\n if (blob[0] !== SEALED_BLOB_VERSION) {\n throw new TypeError(`unknown sealed blob version: ${blob[0]}`);\n }\n const nonce = blob.subarray(HEADER_LENGTH, HEADER_LENGTH + NONCE_LENGTH);\n const ciphertext = blob.subarray(HEADER_LENGTH + NONCE_LENGTH);\n return decryptEnvelope(nonce, ciphertext, key32);\n}\n\n/**\n * Encrypt envelope plaintext with AES-256-GCM under a fresh random 96-bit\n * nonce, authenticating the fixed protocol-label AAD.\n *\n * Low-level: the nonce is NOT carried by the share link. Public packaging\n * must go through `seal`, which binds `nonce || ciphertext` into one\n * CID-addressed blob.\n */\nexport async function encryptEnvelope(\n plaintextBytes: Uint8Array,\n key32: Uint8Array,\n): Promise<EncryptedEnvelope> {\n const key = await importAesKey(key32, \"encrypt\");\n const nonce = globalThis.crypto.getRandomValues(new Uint8Array(NONCE_LENGTH));\n const ciphertext = new Uint8Array(\n await globalThis.crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv: nonce as BufferSource, additionalData: AAD as BufferSource },\n key,\n plaintextBytes as BufferSource,\n ),\n );\n return { nonce, ciphertext };\n}\n\n/**\n * Decrypt an AES-256-GCM envelope. Throws (Web Crypto `OperationError`) if the\n * key is wrong, the AAD does not match, or the ciphertext was tampered with.\n */\nexport async function decryptEnvelope(\n nonce: Uint8Array,\n ciphertext: Uint8Array,\n key32: Uint8Array,\n): Promise<Uint8Array> {\n if (nonce.length !== NONCE_LENGTH) {\n throw new TypeError(`nonce must be ${NONCE_LENGTH} bytes, got ${nonce.length}`);\n }\n const key = await importAesKey(key32, \"decrypt\");\n return new Uint8Array(\n await globalThis.crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv: nonce as BufferSource, additionalData: AAD as BufferSource },\n key,\n ciphertext as BufferSource,\n ),\n );\n}\n","/**\n * RFC 8785 (JCS) canonical JSON serialization — in-house implementation.\n *\n * Why no dependency: on any ECMA-262 engine, `JSON.stringify` of a primitive\n * already matches JCS exactly — RFC 8785 §3.2.2.3 defines number\n * serialization as ECMAScript's Number::toString, and §3.2.2.2 defines string\n * escaping as ECMAScript's JSON quoting (short escapes \\b \\t \\n \\f \\r \\\" \\\\,\n * lowercase \\u00xx for remaining control chars). So canonicalization reduces\n * to recursive property sorting by UTF-16 code units (the default JS string\n * comparison) plus rejecting values JSON cannot represent.\n */\n\nfunction isPlainRecord(value: object): value is Record<string, unknown> {\n const proto: unknown = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * RFC 8785 §3.2.2.2 requires REJECTING strings that are not valid Unicode —\n * i.e. unpaired UTF-16 surrogates. `JSON.stringify` happily emits `\"\\ud800\"`\n * for a lone surrogate, but a conforming implementation in a language with\n * enforced-valid strings (Rust) errors instead, so we must too.\n */\nfunction assertNoLoneSurrogates(text: string): void {\n for (let i = 0; i < text.length; i++) {\n const unit = text.charCodeAt(i);\n if (unit >= 0xdc00 && unit <= 0xdfff) {\n throw new TypeError(\n `cannot canonicalize string with unpaired low surrogate at index ${i}`,\n );\n }\n if (unit >= 0xd800 && unit <= 0xdbff) {\n const next = text.charCodeAt(i + 1); // NaN when past the end\n if (!(next >= 0xdc00 && next <= 0xdfff)) {\n throw new TypeError(\n `cannot canonicalize string with unpaired high surrogate at index ${i}`,\n );\n }\n i++; // well-formed pair — skip the low surrogate\n }\n }\n}\n\nfunction serializeString(text: string): string {\n assertNoLoneSurrogates(text);\n return JSON.stringify(text);\n}\n\nfunction serialize(value: unknown): string {\n if (value === null) return \"null\";\n switch (typeof value) {\n case \"boolean\":\n return JSON.stringify(value);\n case \"string\":\n return serializeString(value);\n case \"number\":\n if (!Number.isFinite(value)) {\n throw new TypeError(`cannot canonicalize non-finite number: ${value}`);\n }\n return JSON.stringify(value);\n case \"object\":\n break;\n default:\n throw new TypeError(`cannot canonicalize value of type ${typeof value}`);\n }\n if (Array.isArray(value)) {\n return `[${value.map((item) => serialize(item)).join(\",\")}]`;\n }\n if (!isPlainRecord(value)) {\n throw new TypeError(\"cannot canonicalize non-plain object\");\n }\n const keys = Object.keys(value).sort(); // UTF-16 code unit order (RFC 8785 §3.2.3)\n const members: string[] = [];\n for (const key of keys) {\n const member = value[key];\n if (member === undefined) continue; // JSON.stringify drops undefined properties\n members.push(`${serializeString(key)}:${serialize(member)}`);\n }\n return `{${members.join(\",\")}}`;\n}\n\n/** Serialize a JSON-representable value to its RFC 8785 canonical form. */\nexport function canonicalize(value: unknown): string {\n return serialize(value);\n}\n","/**\n * Canonical email-domain rules shared by senders, receivers, and the\n * OpenCredentials `tinycloud.email-domain-proof/v1` issuer. A domain is\n * canonical only as lowercase ASCII LDH labels (two or more, no trailing dot,\n * not an IP literal). Unicode and IDNA U-labels have no canonical form here:\n * IDNA A-labels (`xn--…`) are accepted verbatim, so equality is always a\n * plain string comparison with no normalization ambiguity.\n *\n * These live at the envelope layer so the Share SDK (sender) and sdk-core\n * (receiver, which re-exports them) apply one rule without a package cycle.\n */\nconst LABEL = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;\n\nexport function isCanonicalEmailDomain(value: string): boolean {\n if (value.length === 0 || value.length > 253) return false;\n const labels = value.split(\".\");\n return labels.length >= 2 && labels.every((label) => LABEL.test(label)) && !/^[0-9]+$/.test(labels.at(-1)!);\n}\n\n/** Canonicalizes a sender-entered domain (`@Example.com` → `example.com`) or throws. */\nexport function canonicalEmailDomain(value: string): string {\n const domain = value.trim().replace(/^@/, \"\").toLowerCase();\n if (!/^[\\x21-\\x7e]+$/.test(domain) || !isCanonicalEmailDomain(domain)) throw new TypeError(\"email domain must be lowercase ASCII DNS labels (use the xn-- form for international domains)\");\n return domain;\n}\n\n/**\n * Canonical form of a recipient-entered mailbox (trimmed, lowercased), or\n * undefined when it has no canonical domain. The issuer accepts only this\n * form, so the local check agrees with what the credential will contain.\n */\nexport function canonicalMailbox(value: string): { readonly email: string; readonly domain: string } | undefined {\n const email = value.trim().toLowerCase();\n const at = email.indexOf(\"@\");\n if (at <= 0 || at !== email.lastIndexOf(\"@\")) return undefined;\n const local = email.slice(0, at);\n const domain = email.slice(at + 1);\n // Lowercase RFC 5322 dot-atom without `%` or `!`, matching the issuer:\n // legacy percent-hack or bang-path routing could deliver elsewhere.\n if (local.length > 64 || !/^[a-z0-9#$&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9#$&'*+/=?^_`{|}~-]+)*$/.test(local) || !isCanonicalEmailDomain(domain)) return undefined;\n return Object.freeze({ email, domain });\n}\n\n/** True only when the mailbox's canonical domain equals `domain` exactly (no suffix or subdomain match). */\nexport function mailboxBelongsToDomain(mailbox: string, domain: string): boolean {\n return canonicalMailbox(mailbox)?.domain === domain && isCanonicalEmailDomain(domain);\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { blake3 } from \"@noble/hashes/blake3\";\nimport { CID } from \"multiformats/cid\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\nimport { fromBase64Url, toBase64Url } from \"./bytes.js\";\nimport { canonicalize } from \"./jcs.js\";\nimport { ed25519PublicKeyFromDidKey } from \"./didkey.js\";\n\nexport interface CompactUcanAuthorization {\n readonly authorization: string;\n readonly cid: string;\n readonly header: Readonly<Record<string, unknown>>;\n readonly payload: {\n readonly att: Readonly<Record<string, unknown>>;\n readonly aud: string;\n readonly exp: number;\n readonly fct: readonly [Readonly<Record<string, unknown>>];\n readonly iss: string;\n readonly nbf: number;\n readonly nnc: string;\n readonly prf: readonly string[];\n };\n}\n\nexport interface SignCompactUcanInput {\n readonly issuerDid: string;\n readonly audienceDid: string;\n readonly attenuation: Readonly<Record<string, unknown>>;\n readonly facts: readonly [Readonly<Record<string, unknown>>];\n readonly proofs: readonly string[];\n readonly notBefore: number;\n readonly expiresAt: number;\n readonly nonce: string;\n readonly sign: (bytes: Uint8Array) => Promise<Uint8Array>;\n}\n\n/** Produce the exact JCS compact-UCAN representation accepted by the Node. */\nexport async function signCompactUcanAuthorization(\n input: SignCompactUcanInput,\n): Promise<CompactUcanAuthorization> {\n if (input.notBefore >= input.expiresAt || input.expiresAt - input.notBefore > 60) {\n throw new TypeError(\"compact invocation lifetime must be between one and 60 seconds\");\n }\n const principal = input.issuerDid.split(\"#\", 1)[0]!;\n const publicKey = ed25519PublicKeyFromDidKey(principal);\n const header = {\n alg: \"EdDSA\",\n jwk: { alg: \"EdDSA\", crv: \"Ed25519\", kty: \"OKP\", x: toBase64Url(publicKey) },\n typ: \"JWT\",\n ucv: \"0.10.0\",\n };\n const payload = {\n att: input.attenuation,\n aud: input.audienceDid,\n exp: input.expiresAt,\n fct: input.facts,\n iss: input.issuerDid.includes(\"#\")\n ? input.issuerDid\n : `${principal}#${principal.slice(\"did:key:\".length)}`,\n nbf: input.notBefore,\n nnc: input.nonce,\n prf: input.proofs,\n };\n const protectedSegment = toBase64Url(new TextEncoder().encode(canonicalize(header)));\n const payloadSegment = toBase64Url(new TextEncoder().encode(canonicalize(payload)));\n const signingInput = new TextEncoder().encode(`${protectedSegment}.${payloadSegment}`);\n const signature = await input.sign(signingInput);\n if (signature.length !== 64) throw new TypeError(\"compact Authorization signature must be Ed25519\");\n return verifyCompactUcanAuthorization(\n `${protectedSegment}.${payloadSegment}.${toBase64Url(signature)}`,\n );\n}\n\nexport function verifyCompactUcanAuthorization(\n authorization: string,\n expectedCid?: string,\n): CompactUcanAuthorization {\n if (/\\s/.test(authorization)) throw new TypeError(\"compact Authorization contains whitespace\");\n const segments = authorization.split(\".\");\n if (segments.length !== 3 || segments.some((segment) => segment.length === 0)) throw new TypeError(\"compact Authorization must contain three segments\");\n const [headerSegment, payloadSegment, signatureSegment] = segments as [string, string, string];\n const headerBytes = fromBase64Url(headerSegment);\n const payloadBytes = fromBase64Url(payloadSegment);\n const signature = fromBase64Url(signatureSegment);\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n const header = JSON.parse(decoder.decode(headerBytes)) as Record<string, unknown>;\n const payload = JSON.parse(decoder.decode(payloadBytes)) as Record<string, unknown>;\n if (canonicalize(header) !== decoder.decode(headerBytes) || canonicalize(payload) !== decoder.decode(payloadBytes)) throw new TypeError(\"compact Authorization JSON is not canonical\");\n assertExactKeys(header, [\"alg\", \"jwk\", \"typ\", \"ucv\"], \"protected header\");\n const jwk = object(header.jwk, \"protected JWK\");\n assertExactKeys(jwk, [\"alg\", \"crv\", \"kty\", \"x\"], \"protected JWK\");\n if (header.alg !== \"EdDSA\" || header.typ !== \"JWT\" || header.ucv !== \"0.10.0\" || jwk.alg !== \"EdDSA\" || jwk.crv !== \"Ed25519\" || jwk.kty !== \"OKP\" || typeof jwk.x !== \"string\") throw new TypeError(\"compact Authorization header is invalid\");\n assertExactKeys(payload, [\"att\", \"aud\", \"exp\", \"fct\", \"iss\", \"nbf\", \"nnc\", \"prf\"], \"UCAN payload\");\n if (typeof payload.iss !== \"string\" || typeof payload.aud !== \"string\" || typeof payload.nnc !== \"string\" || !Number.isInteger(payload.nbf) || !Number.isInteger(payload.exp) || (payload.nbf as number) >= (payload.exp as number) || !Array.isArray(payload.prf) || payload.prf.some((proof) => typeof proof !== \"string\") || !Array.isArray(payload.fct) || payload.fct.length !== 1) throw new TypeError(\"compact Authorization payload is invalid\");\n const principal = payload.iss.split(\"#\", 1)[0]!;\n const publicKey = ed25519PublicKeyFromDidKey(principal);\n if (!equal(publicKey, fromBase64Url(jwk.x))) throw new TypeError(\"compact Authorization JWK does not bind issuer\");\n if (!ed25519.verify(signature, new TextEncoder().encode(`${headerSegment}.${payloadSegment}`), publicKey, { zip215: false })) throw new TypeError(\"compact Authorization signature is invalid\");\n const cid = CID.createV1(0x55, createDigest(0x1e, blake3(new TextEncoder().encode(authorization)))).toString();\n if (expectedCid !== undefined && cid !== expectedCid) throw new TypeError(\"compact Authorization CID mismatch\");\n return { authorization, cid, header, payload: payload as CompactUcanAuthorization[\"payload\"] };\n}\n\nfunction object(value: unknown, label: string): Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) throw new TypeError(`${label} must be an object`);\n return value as Record<string, unknown>;\n}\n\nfunction assertExactKeys(value: Record<string, unknown>, keys: readonly string[], label: string): void {\n if (Object.keys(value).length !== keys.length || Object.keys(value).some((key) => !keys.includes(key))) throw new TypeError(`${label} has unknown or missing fields`);\n}\n\nfunction equal(left: Uint8Array, right: Uint8Array): boolean {\n return left.length === right.length && left.every((byte, index) => byte === right[index]);\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha256\";\n\nimport { fromBase64Url, toBase64Url, utf8Bytes } from \"./bytes.js\";\nimport { computeCid } from \"./cid.js\";\nimport { didKeyFromEd25519PublicKey, ed25519PublicKeyFromDidKey } from \"./didkey.js\";\nimport { canonicalize } from \"./jcs.js\";\nimport { verifyCompactUcanAuthorization } from \"./compact-ucan.js\";\nimport {\n shareEnvelopeSchema,\n shareEnvelopeV2Schema,\n shareEnvelopeV3Schema,\n unsignedShareEnvelopeSchema,\n unsignedShareEnvelopeV2Schema,\n unsignedShareEnvelopeV3Schema,\n type ShareEnvelope,\n type ShareEnvelopeV2,\n type UnsignedShareEnvelope,\n type UnsignedShareEnvelopeV2,\n type ShareEnvelopeV3,\n type UnsignedShareEnvelopeV3,\n} from \"./schema.js\";\n\n/**\n * Ed25519 verification mode: strict RFC 8032, NOT ZIP-215. `zip215: false`\n * makes @noble/curves reject non-canonical point encodings (y >= p) that the\n * looser ZIP-215 rules accept, so this JS verifier and a strict Rust verifier\n * (e.g. ed25519-dalek `verify_strict`) agree on exactly the same signature\n * set. Chosen deliberately: interop determinism over batch-verification\n * compatibility.\n */\nconst ED25519_VERIFY_OPTS = { zip215: false } as const;\n\n/** The one canonical envelope signing domain shared by runtime and vectors. */\nexport const ENVELOPE_SIGNATURE_DOMAIN = \"xyz.tinycloud.share/envelope/v1\\0\";\nexport const ENVELOPE_V2_SIGNATURE_DOMAIN = \"xyz.tinycloud.share/envelope/v2\\0\";\nexport const ENVELOPE_V3_SIGNATURE_DOMAIN = \"xyz.tinycloud.share/envelope/v3\\0\";\nconst POLICY_V1_SIGNATURE_DOMAIN = \"xyz.tinycloud.policy/policy/v1\\0\";\nconst POLICY_V2_SIGNATURE_DOMAIN = \"xyz.tinycloud.policy/policy/v2\\0\";\nconst CONTENT_SOURCE_V1_DOMAIN = \"xyz.tinycloud.policy/ContentSource/v1\\0\";\nconst POLICY_CAPABILITY_V1_DOMAIN = \"xyz.tinycloud.policy/PolicyCapability/v1\\0\";\nconst NATIVE_PROJECTION_V1_DOMAIN = \"xyz.tinycloud.policy/NativeProjection/v1\\0\";\nconst ATTESTED_ENFORCER_V2_DOMAIN = \"xyz.tinycloud.policy/AttestedEnforcerBinding/v2\\0\";\n\n/** Domain-separated JCS bytes of every envelope field except `signature`. */\nfunction signingBytes(unsigned: UnsignedShareEnvelope): Uint8Array {\n const domain = utf8Bytes(ENVELOPE_SIGNATURE_DOMAIN);\n const body = utf8Bytes(canonicalize(unsigned));\n const bytes = new Uint8Array(domain.length + body.length);\n bytes.set(domain);\n bytes.set(body, domain.length);\n return bytes;\n}\n\nfunction signingBytesV2(unsigned: UnsignedShareEnvelopeV2): Uint8Array {\n const domain = utf8Bytes(ENVELOPE_V2_SIGNATURE_DOMAIN);\n const body = utf8Bytes(canonicalize(unsigned));\n const bytes = new Uint8Array(domain.length + body.length);\n bytes.set(domain);\n bytes.set(body, domain.length);\n return bytes;\n}\n\nfunction signingBytesV3(unsigned: UnsignedShareEnvelopeV3): Uint8Array {\n const domain = utf8Bytes(ENVELOPE_V3_SIGNATURE_DOMAIN);\n const body = utf8Bytes(canonicalize(unsigned));\n const bytes = new Uint8Array(domain.length + body.length);\n bytes.set(domain);\n bytes.set(body, domain.length);\n return bytes;\n}\n\n/**\n * Sign an envelope body with an ed25519 private key (32-byte seed). The\n * signature covers the domain-separated RFC 8785 canonical JSON of all other fields —\n * including `authorizationTarget.kind` and `target.origin` (blueprint §2.1).\n * Throws if the body does not validate against the strict schema.\n */\nexport function signEnvelope(\n envelopeWithoutSig: UnsignedShareEnvelope,\n ed25519PrivKey: Uint8Array,\n): ShareEnvelope {\n const unsigned = unsignedShareEnvelopeSchema.parse(envelopeWithoutSig);\n const publicKey = ed25519.getPublicKey(ed25519PrivKey);\n const signature = ed25519.sign(signingBytes(unsigned), ed25519PrivKey);\n return {\n ...unsigned,\n signature: {\n signerDid: didKeyFromEd25519PublicKey(publicKey),\n algorithm: \"Ed25519\",\n value: toBase64Url(signature),\n },\n };\n}\n\nexport function signEnvelopeV2(envelopeWithoutSig: UnsignedShareEnvelopeV2, ed25519PrivKey: Uint8Array): ShareEnvelopeV2 {\n const unsigned = unsignedShareEnvelopeV2Schema.parse(envelopeWithoutSig);\n const publicKey = ed25519.getPublicKey(ed25519PrivKey);\n return {\n ...unsigned,\n signature: {\n signerDid: didKeyFromEd25519PublicKey(publicKey),\n algorithm: \"Ed25519\",\n value: toBase64Url(ed25519.sign(signingBytesV2(unsigned), ed25519PrivKey)),\n },\n };\n}\n\n/** Sign a strict v3 envelope. v3 is intentionally not accepted by v1/v2 helpers. */\nexport function signEnvelopeV3(envelopeWithoutSig: UnsignedShareEnvelopeV3, ed25519PrivKey: Uint8Array): ShareEnvelopeV3 {\n const unsigned = unsignedShareEnvelopeV3Schema.parse(envelopeWithoutSig);\n const publicKey = ed25519.getPublicKey(ed25519PrivKey);\n return {\n ...unsigned,\n signature: {\n signerDid: didKeyFromEd25519PublicKey(publicKey),\n algorithm: \"Ed25519\",\n value: toBase64Url(ed25519.sign(sha256(signingBytesV3(unsigned)), ed25519PrivKey)),\n },\n };\n}\n\nexport interface VerifyEnvelopeOptions {\n /**\n * The did:key the caller ALREADY trusts to be the sender. REQUIRED:\n * `signature.signerDid` is self-asserted by whoever built the envelope, so\n * verifying against it alone proves nothing — an attacker signs their own\n * \"Adam\" envelope with their own key and it self-verifies. In later stages\n * the expected signer is the delegation chain's issuer DID; for now the\n * caller supplies it out-of-band.\n */\n expectedSignerDid: string;\n}\n\n/**\n * Signature-only check: strict-parse, recompute the JCS signing bytes, and\n * check the ed25519 signature against the key in `signature.signerDid`.\n *\n * WARNING: this only proves the envelope is internally consistent with its\n * OWN self-asserted signer. It binds no trust — use `verifyEnvelope` with an\n * `expectedSignerDid` unless you are doing the binding yourself.\n */\nexport function verifyEnvelopeSignatureOnly(envelope: ShareEnvelope): boolean {\n const parsed = shareEnvelopeSchema.parse(envelope);\n const { signature, ...unsigned } = parsed;\n const publicKey = ed25519PublicKeyFromDidKey(signature.signerDid);\n return ed25519.verify(\n fromBase64Url(signature.value),\n signingBytes(unsigned),\n publicKey,\n ED25519_VERIFY_OPTS,\n );\n}\n\n/**\n * Verify a signed envelope against an EXPECTED signer:\n *\n * 1. strict schema parse (throws on malformed input),\n * 2. `signature.signerDid` must equal `options.expectedSignerDid`,\n * 3. the ed25519 signature must verify (strict RFC 8032) over the domain-separated JCS bytes,\n * 4. for `authorizationTarget.kind === \"policy\"`, the decoded `policyBytes`\n * must hash to `policyCid` (CIDv1/raw/sha2-256).\n *\n * Returns false for any trust or integrity failure.\n */\nexport async function verifyEnvelope(\n envelope: ShareEnvelope,\n options: VerifyEnvelopeOptions,\n): Promise<boolean> {\n const parsed = shareEnvelopeSchema.parse(envelope);\n if (parsed.signature.signerDid !== options.expectedSignerDid) return false;\n if (!verifyEnvelopeSignatureOnly(parsed)) return false;\n if (parsed.authorizationTarget.kind === \"policy\") {\n const policyBytes = fromBase64Url(parsed.authorizationTarget.policyBytes);\n if ((await computeCid(policyBytes)) !== parsed.authorizationTarget.policyCid) {\n return false;\n }\n }\n return true;\n}\n\nexport function verifyEnvelopeV2SignatureOnly(envelope: ShareEnvelopeV2): boolean {\n const parsed = shareEnvelopeV2Schema.parse(envelope);\n const { signature, ...unsigned } = parsed;\n return ed25519.verify(fromBase64Url(signature.value), signingBytesV2(unsigned), ed25519PublicKeyFromDidKey(signature.signerDid), ED25519_VERIFY_OPTS);\n}\n\nexport async function verifyEnvelopeV2(envelope: ShareEnvelopeV2, options: VerifyEnvelopeOptions): Promise<boolean> {\n const parsed = shareEnvelopeV2Schema.parse(envelope);\n if (parsed.signature.signerDid !== options.expectedSignerDid || !verifyEnvelopeV2SignatureOnly(parsed)) return false;\n if (parsed.authorizationTarget.kind === \"policy\") return (await computeCid(fromBase64Url(parsed.authorizationTarget.policyBytes))) === parsed.authorizationTarget.policyCid;\n return true;\n}\n\nexport function verifyEnvelopeV3SignatureOnly(envelope: ShareEnvelopeV3): boolean {\n const parsed = shareEnvelopeV3Schema.parse(envelope);\n const { signature, ...unsigned } = parsed;\n return ed25519.verify(fromBase64Url(signature.value), sha256(signingBytesV3(unsigned)), ed25519PublicKeyFromDidKey(signature.signerDid), ED25519_VERIFY_OPTS);\n}\n\nexport async function verifyEnvelopeV3(envelope: ShareEnvelopeV3, options: VerifyEnvelopeOptions): Promise<boolean> {\n const parsed = shareEnvelopeV3Schema.parse(envelope);\n if (parsed.signature.signerDid !== options.expectedSignerDid || parsed.signature.signerDid !== parsed.policy.ownerDid || !verifyEnvelopeV3SignatureOnly(parsed)) return false;\n const { policy } = parsed;\n const unsignedPolicy = { ...policy } as Record<string, unknown>;\n delete unsignedPolicy.policyId;\n delete unsignedPolicy.signature;\n const policySignatureDomain = policy.schema === \"xyz.tinycloud.policy/policy/v2\"\n ? POLICY_V2_SIGNATURE_DOMAIN\n : POLICY_V1_SIGNATURE_DOMAIN;\n const policyDigest = sha256(new TextEncoder().encode(`${policySignatureDomain}${canonicalize(unsignedPolicy)}`));\n const policySignature = policy.signature;\n if (policySignature.suite !== \"Ed25519\" || policySignature.signerDid !== policy.ownerDid) return false;\n let policyPublicKey: Uint8Array;\n let policySignatureBytes: Uint8Array;\n try {\n policyPublicKey = ed25519PublicKeyFromDidKey(policy.ownerDid);\n policySignatureBytes = fromBase64Url(policySignature.value);\n } catch {\n return false;\n }\n if (policySignatureBytes.length !== 64 || !ed25519.verify(policySignatureBytes, policyDigest, policyPublicKey, ED25519_VERIFY_OPTS)) return false;\n const policyIdDigest = policyDigest;\n if (policy.policyId !== `pol_${base32Lower(policyIdDigest)}`) return false;\n const policyBytes = new TextEncoder().encode(canonicalize(policy));\n if ((await computeCid(policyBytes)) !== parsed.policyCid) return false;\n const sourceDigest = sha256(new TextEncoder().encode(`${CONTENT_SOURCE_V1_DOMAIN}${canonicalize(policy.contentSource)}`));\n if (hex(sourceDigest) !== parsed.contentSourceDigestHex) return false;\n const sortedCapabilities = [...policy.capabilityCeiling].sort((left, right) => canonicalize(left).localeCompare(canonicalize(right)));\n const capabilityCeilingHashHex = hex(sha256(new TextEncoder().encode(`${POLICY_CAPABILITY_V1_DOMAIN}${canonicalize(sortedCapabilities)}`)));\n const nativeProjection = sortedCapabilities.map((capability) => capability.kind === \"encryption\"\n ? { service: \"tinycloud.encryption\", space: capability.resource, path: capability.resource, actions: [capability.action] }\n : { service: \"tinycloud.kv\", space: capability.resource.slice(0, capability.resource.indexOf(\"/kv/\")), path: capability.resource.split(\"/kv/\")[1], actions: [...capability.actions], caveat: { type: \"xyz.tinycloud.resource/selector\", kind: capability.selector, value: capability.resource } })\n .sort((left, right) => canonicalize(left).localeCompare(canonicalize(right)));\n const nativeProjectionHashHex = hex(sha256(new TextEncoder().encode(`${NATIVE_PROJECTION_V1_DOMAIN}${canonicalize(nativeProjection)}`)));\n const expectedAttenuation = Object.fromEntries(sortedCapabilities.map((capability) => capability.kind === \"encryption\"\n ? [capability.resource, { [capability.action]: [{}] }]\n : [capability.resource, Object.fromEntries(capability.actions.map((action) => [action, [{ kind: capability.selector, type: \"xyz.tinycloud.resource/selector\", value: capability.resource }]]))]));\n const kv = policy.capabilityCeiling.find((capability) => capability.kind === \"kv\");\n const expectedKvActions = parsed.actions.flatMap((action) => action === \"read\" ? [\"tinycloud.kv/get\", \"tinycloud.kv/metadata\"] : action === \"list\" ? [\"tinycloud.kv/list\"] : [\"tinycloud.kv/put\"]);\n const marker = parsed.contentSource.kvResource.indexOf(\"/kv/\");\n const resourceSpace = marker < 1 ? \"\" : parsed.contentSource.kvResource.slice(0, marker);\n const resourcePath = marker < 1 ? \"\" : parsed.contentSource.kvResource.slice(marker + 4);\n if (parsed.shareId !== parsed.contentSource.shareId || resourceSpace !== parsed.target.spaceId || resourcePath !== parsed.resource.path.replace(/\\/$/, \"\") || parsed.resource.kind !== parsed.contentSource.selector || kv?.kind !== \"kv\" || expectedKvActions.some((action) => !kv.actions.includes(action as never)) || parsed.encryptionNetwork !== parsed.contentSource.encryptionNetwork || parsed.contentSource.keyVersion <= 0 || (policy.expiresAt !== undefined && Date.parse(parsed.expiry) > Date.parse(policy.expiresAt))) return false;\n const binding = parsed.attestedEnforcerBinding;\n const { signature: bindingSignature, ...unsignedBinding } = binding;\n const expectedBindingDigestHex = hex(sha256(new TextEncoder().encode(canonicalize({ enforcerDid: binding.enforcerDid, nodeAudience: binding.nodeAudience }))));\n if (binding.nodeAudience !== parsed.target.nodeAudience || binding.attestationBindingDigestHex !== expectedBindingDigestHex || bindingSignature.signerDid !== binding.nodeAudience || bindingSignature.suite !== \"Ed25519\" || Date.parse(binding.issuedAt) > Date.now() || Date.parse(binding.expiresAt) <= Date.now() || Date.parse(binding.expiresAt) < Date.parse(parsed.expiry)) return false;\n try {\n const digest = sha256(new TextEncoder().encode(`${ATTESTED_ENFORCER_V2_DOMAIN}${canonicalize(unsignedBinding)}`));\n if (!ed25519.verify(fromBase64Url(bindingSignature.value), digest, ed25519PublicKeyFromDidKey(binding.nodeAudience), ED25519_VERIFY_OPTS)) return false;\n } catch {\n return false;\n }\n if (parsed.policyRoot.role !== \"policy-authority\" || parsed.enforcementRoot.role !== \"policy-enforcement\" || parsed.policyRoot.cid === parsed.enforcementRoot.cid) return false;\n try {\n const policyRoot = verifyCompactUcanAuthorization(parsed.policyRoot.authorization, parsed.policyRoot.cid);\n const enforcementRoot = verifyCompactUcanAuthorization(parsed.enforcementRoot.authorization, parsed.enforcementRoot.cid);\n const policyFact = policyRoot.payload.fct[0];\n const enforcementFact = enforcementRoot.payload.fct[0];\n const common = [\"ownerDid\", \"policyId\", \"policyDigestHex\", \"policyCid\", \"contentSourceDigestHex\", \"capabilityCeilingHashHex\", \"nativeProjectionHashHex\", \"nodeAudience\"];\n const policyKeys = [...common, \"role\", \"mode\"];\n const enforcementKeys = [...policyKeys, \"enforcerDid\"];\n if (Object.keys(policyFact).length !== policyKeys.length || policyKeys.some((key) => !(key in policyFact)) || Object.keys(enforcementFact).length !== enforcementKeys.length || enforcementKeys.some((key) => !(key in enforcementFact)) || policyRoot.payload.prf.length !== 0 || enforcementRoot.payload.prf.length !== 0 || policyRoot.payload.iss.split(\"#\", 1)[0] !== policy.ownerDid || enforcementRoot.payload.iss.split(\"#\", 1)[0] !== policy.ownerDid || policyRoot.payload.nbf !== enforcementRoot.payload.nbf || policyRoot.payload.exp !== enforcementRoot.payload.exp || canonicalize(policyRoot.payload.att) !== canonicalize(expectedAttenuation) || canonicalize(enforcementRoot.payload.att) !== canonicalize(expectedAttenuation) || policyFact.role !== \"policy-authority\" || policyFact.mode !== \"policy-source\" || \"enforcerDid\" in policyFact || enforcementFact.role !== \"policy-enforcement\" || enforcementFact.mode !== \"conditional-mint\" || policyRoot.payload.aud !== `did:tinycloud:policy:${hex(policyIdDigest)}` || enforcementRoot.payload.aud !== binding.enforcerDid || enforcementFact.enforcerDid !== binding.enforcerDid || common.some((key) => policyFact[key] !== enforcementFact[key]) || policyFact.ownerDid !== policy.ownerDid || policyFact.policyId !== policy.policyId || policyFact.policyDigestHex !== hex(policyIdDigest) || policyFact.policyCid !== parsed.policyCid || policyFact.contentSourceDigestHex !== parsed.contentSourceDigestHex || policyFact.capabilityCeilingHashHex !== capabilityCeilingHashHex || policyFact.nativeProjectionHashHex !== nativeProjectionHashHex || policyFact.nodeAudience !== binding.nodeAudience || policyRoot.payload.exp * 1000 < Date.parse(parsed.expiry)) return false;\n } catch {\n return false;\n }\n return true;\n}\n\nfunction hex(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction base32Lower(bytes: Uint8Array): string {\n const alphabet = \"abcdefghijklmnopqrstuvwxyz234567\";\n let output = \"\";\n let buffer = 0;\n let bits = 0;\n for (const byte of bytes) {\n buffer = (buffer << 8) | byte;\n bits += 8;\n while (bits >= 5) {\n output += alphabet[(buffer >>> (bits - 5)) & 31];\n bits -= 5;\n }\n }\n if (bits > 0) output += alphabet[(buffer << (5 - bits)) & 31];\n return output;\n}\n","import { CID } from \"multiformats/cid\";\nimport * as raw from \"multiformats/codecs/raw\";\n\nimport { fromBase64Url, toBase64Url } from \"./bytes.js\";\nimport { isCanonicalHttpsOrigin } from \"./schema.js\";\n\n/**\n * Share link codec (blueprint §2.1):\n *\n * ${origin}/s/${cid}#k=${base64url(key32)}\n *\n * The CID addresses the SEALED BLOB (`seal` in aead.ts: version byte ||\n * nonce || ciphertext+tag), so the link plus the fetched blob is everything a\n * recipient needs — the nonce rides inside the CID-verified blob.\n *\n * The AEAD key rides in the URL FRAGMENT only. Fragments are never sent in\n * HTTP requests, so the registry, CDNs, and any server that sees the URL\n * without its fragment learn nothing that decrypts the envelope. The fragment\n * must never leave the client (no logging, no postMessage to other origins).\n */\n\nexport const KEY_LENGTH = 32;\n\nexport interface ShareUrlParts {\n origin: string;\n /** CIDv1/raw/sha2-256 of the sealed blob. */\n ciphertextCid: string;\n key32: Uint8Array;\n}\n\nexport interface ParseShareUrlOptions {\n /** If given, the URL's origin must equal this canonical https origin exactly. */\n expectedOrigin?: string;\n}\n\nexport function assertCanonicalCid(cidString: string): void {\n const cid = CID.parse(cidString); // throws on garbage\n if (\n cid.version !== 1 ||\n cid.code !== raw.code ||\n cid.multihash.code !== 0x12 || // sha2-256 (0x12) only, at the link layer too\n cid.toString() !== cidString\n ) {\n throw new TypeError(`not a canonical CIDv1 raw sha2-256 base32 CID: ${cidString}`);\n }\n}\n\nexport function encodeShareUrl({ origin, ciphertextCid, key32 }: ShareUrlParts): string {\n if (key32.length !== KEY_LENGTH) {\n throw new TypeError(`key must be ${KEY_LENGTH} bytes, got ${key32.length}`);\n }\n assertCanonicalCid(ciphertextCid);\n if (!isCanonicalHttpsOrigin(origin)) {\n throw new TypeError(`origin must be a canonical https origin, got ${origin}`);\n }\n return `${origin}/s/${ciphertextCid}#k=${toBase64Url(key32)}`;\n}\n\nexport function parseShareUrl(\n url: string,\n options: ParseShareUrlOptions = {},\n): { ciphertextCid: string; key32: Uint8Array } {\n const parsed = new URL(url);\n if (parsed.protocol !== \"https:\") {\n throw new TypeError(`share URL must be https, got ${parsed.protocol}`);\n }\n if (parsed.username !== \"\" || parsed.password !== \"\") {\n throw new TypeError(\"share URL must not carry userinfo\");\n }\n // The key must never appear anywhere a server would see it — reject ANY\n // query string rather than guessing at intent.\n if (parsed.search !== \"\") {\n throw new TypeError(\"share URL must not have a query string\");\n }\n if (options.expectedOrigin !== undefined) {\n if (!isCanonicalHttpsOrigin(options.expectedOrigin)) {\n throw new TypeError(\n `expectedOrigin must be a canonical https origin, got ${options.expectedOrigin}`,\n );\n }\n if (parsed.origin !== options.expectedOrigin) {\n throw new TypeError(\n `share URL origin ${parsed.origin} does not match expected ${options.expectedOrigin}`,\n );\n }\n }\n const match = /^\\/s\\/([a-z2-7]+)$/.exec(parsed.pathname);\n if (!match || match[1] === undefined) {\n throw new TypeError(`not a share URL path: ${parsed.pathname}`);\n }\n const ciphertextCid = match[1];\n assertCanonicalCid(ciphertextCid);\n if (!parsed.hash.startsWith(\"#k=\")) {\n throw new TypeError(\"share URL is missing the #k= key fragment\");\n }\n // fromBase64Url is a STRICT decode: it throws on padding, characters\n // outside the base64url alphabet, impossible lengths, and non-zero\n // trailing bits — not just an alphabet regex.\n const key32 = fromBase64Url(parsed.hash.slice(\"#k=\".length));\n if (key32.length !== KEY_LENGTH) {\n throw new TypeError(`fragment key must be ${KEY_LENGTH} bytes, got ${key32.length}`);\n }\n return { ciphertextCid, key32 };\n}\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import { isCanonicalHttpsOrigin, parseShareUrl } from \"@tinycloud/share-envelope\";\nimport { MAX_LINK_REQUEST_BYTES, parseLink } from \"@tinycloud/share-envelope/links\";\nimport { parseNativeShareUrl } from \"../native.js\";\n\n/**\n * Share link validator (design C §5 check 6, §6 Open/Copy). A link is\n * accepted only when it is https on a configured share origin and has one of\n * the share link shapes:\n * - `/s/<cid>#k=<key>`: registry envelope link;\n * - `/s/<id>#v=4&k=<key>&c=<cid>` or `/s/full#v=4&k=<key>&r=<record>`: the\n * short or full link of a Policy/v3 share (what `publishAddressedShare`\n * emits and the links service stores);\n * - `/viewer#tc1=<token>`: native bearer link (`createNativeShare`).\n *\n * The result names the shape only; the link itself is never copied into it.\n */\nexport type ShareLinkShape = \"envelope\" | \"link\" | \"native\";\n\nexport type ShareLinkCheck = { readonly ok: true; readonly shape: ShareLinkShape } | { readonly ok: false };\n\nconst MAX_LINK_LENGTH = 12 * 1024;\n/** A full link carries a whole record (the create request's cap) in base64url, plus the origin and fragment names. */\nconst MAX_FULL_LINK_LENGTH = Math.ceil((MAX_LINK_REQUEST_BYTES * 4) / 3) + 512;\n/** A `/s/<id>` path (26 base32 characters) and `/s/full`: the paths the `v=4` grammar owns. */\nconst V4_SHARE_PATH = /^\\/s\\/([A-Za-z2-7]{26}|full)$/;\n\nexport function validateShareLink(link: unknown, shareOrigins: readonly string[]): ShareLinkCheck {\n if (typeof link !== \"string\" || link.length === 0 || link.length > MAX_FULL_LINK_LENGTH || /[\\s\\u0000-\\u001f\\u007f]/.test(link)) return { ok: false };\n let url: URL;\n try { url = new URL(link); } catch { return { ok: false }; }\n if (link.length > MAX_LINK_LENGTH && url.pathname !== \"/s/full\") return { ok: false };\n if (url.protocol !== \"https:\" || url.username !== \"\" || url.password !== \"\" || url.search !== \"\") return { ok: false };\n if (!isCanonicalHttpsOrigin(url.origin) || !shareOrigins.includes(url.origin)) return { ok: false };\n try {\n if (url.pathname === \"/viewer\") {\n parseNativeShareUrl(link);\n return link === `${url.origin}/viewer${url.hash}` ? { ok: true, shape: \"native\" } : { ok: false };\n }\n if (V4_SHARE_PATH.test(url.pathname)) {\n const parsed = parseLink(link, { trustedOrigins: shareOrigins });\n return parsed.form === \"full\" || parsed.pathType === \"share\" ? { ok: true, shape: \"link\" } : { ok: false };\n }\n parseShareUrl(link, { expectedOrigin: url.origin });\n return { ok: true, shape: \"envelope\" };\n } catch {\n return { ok: false };\n }\n}\n","/** Fragment-only adapter for TinyCloud's public SharingService. */\nexport const NATIVE_SHARE_FRAGMENT_PARAMETER = \"tc1\";\n\nexport interface NativeShareResult {\n readonly url: string;\n readonly delegationCid: string;\n readonly expiresAt: Date;\n readonly spaceId: string;\n}\n\nexport interface NativeSharingService {\n generate(params: { readonly path: string; readonly actions: string[]; readonly expiry: Date }): Promise<unknown>;\n receive(token: string, options: { readonly autoSubdelegate: false; readonly useSessionKey: false }): Promise<unknown>;\n decodeLink(token: string): { readonly spaceId: string; readonly path: string };\n}\n\n/** `https://<origin>/viewer` for a canonical HTTPS viewer origin. Also used by share-root bearer links. */\nexport function canonicalViewerUrl(viewerOrigin: string): URL {\n const url = new URL(viewerOrigin);\n if (url.protocol !== \"https:\" || url.origin !== viewerOrigin || url.pathname !== \"/\" || url.search || url.hash) throw new TypeError(\"viewer origin must be a canonical HTTPS origin\");\n url.pathname = \"/viewer\";\n return url;\n}\n\n/** Generate exactly one read-only TinyCloud delegation and put its tc1 token in the fragment. */\nexport async function createNativeShare(sharing: NativeSharingService, input: { readonly path: string; readonly expiresAt: Date; readonly viewerOrigin: string }): Promise<NativeShareResult> {\n if (!input.path || input.path.startsWith(\"/\") || input.path.endsWith(\"/\") || input.path.includes(\"..\") || input.path.includes(\"//\")) throw new TypeError(\"native share path must be one canonical TinyCloud KV key\");\n const generated = await sharing.generate({ path: input.path, actions: [\"tinycloud.kv/get\"], expiry: input.expiresAt }) as { readonly ok?: unknown; readonly data?: { readonly token?: unknown; readonly delegation?: { readonly cid?: unknown }; readonly expiresAt?: unknown }; readonly error?: { readonly code?: unknown; readonly message?: unknown } };\n if (generated.ok !== true) {\n const error = new Error(typeof generated.error?.message === \"string\" ? generated.error.message : \"TinyCloud sharing service rejected delegation generation\");\n if (typeof generated.error?.code === \"string\") Object.assign(error, { code: generated.error.code });\n throw error;\n }\n if (typeof generated.data?.token !== \"string\" || typeof generated.data.delegation?.cid !== \"string\" || !(generated.data.expiresAt instanceof Date)) throw new Error(\"TinyCloud sharing service returned incomplete delegation metadata\");\n const delegation = sharing.decodeLink(generated.data.token);\n if (typeof delegation.spaceId !== \"string\" || delegation.spaceId.length === 0 || typeof delegation.path !== \"string\" || delegation.path.length === 0) throw new Error(\"TinyCloud sharing service returned a non-canonical delegation authority\");\n const url = canonicalViewerUrl(input.viewerOrigin);\n url.hash = `${NATIVE_SHARE_FRAGMENT_PARAMETER}=${encodeURIComponent(generated.data.token)}`;\n return { url: url.toString(), delegationCid: generated.data.delegation.cid, expiresAt: generated.data.expiresAt, spaceId: delegation.spaceId };\n}\n\n/** Extract only a single tc1 fragment. Path/query/mixed legacy forms are refused. */\nexport function parseNativeShareUrl(value: string): string {\n const url = new URL(value);\n if (url.search || url.pathname !== \"/viewer\") throw new TypeError(\"native shares must carry tc1 only in the /viewer URL fragment\");\n const fragment = new URLSearchParams(url.hash.slice(1));\n const token = fragment.get(NATIVE_SHARE_FRAGMENT_PARAMETER);\n // `token` is opaque output from SharingService.generate(). `tc1` names this\n // fragment format; the opaque token may itself begin with `tc1:`.\n if (!token || fragment.size !== 1) throw new TypeError(\"missing native share fragment\");\n return token;\n}\n\n/** Receive through the public SDK without creating another transport protocol. */\nexport async function openNativeShare(sharing: NativeSharingService, link: string): Promise<unknown> {\n return sharing.receive(parseNativeShareUrl(link), { autoSubdelegate: false, useSessionKey: false });\n}\n","import { toBase64Url } from \"@tinycloud/share-envelope\";\n\n/**\n * The agent's key-encryption key (design C §3, V3-6). Security-sensitive:\n * keep this module small and free of logging.\n *\n * KEK_a = HKDF-SHA256(ikm = private key bytes,\n * salt = \"xyz.tinycloud.share/agent-kek/v1\",\n * info = agentDid)\n * kid = HKDF-SHA256(same ikm and salt, info = \"kid\")[0..8]\n *\n * The private key is the one the agent signs its invocations and delegations\n * with (the session key when it has a private part, otherwise the profile\n * key), and `agentDid` is that key's DID. KEK_a is imported non-extractable,\n * for AES-GCM wrapping only.\n */\nexport interface AgentKeyMaterial {\n readonly agentDid: string;\n /** base64url of the first 8 bytes of HKDF(…, info \"kid\"). */\n readonly kid: string;\n readonly kek: CryptoKey;\n}\n\nconst KEK_SALT = new TextEncoder().encode(\"xyz.tinycloud.share/agent-kek/v1\");\n\nfunction subtle(): SubtleCrypto {\n const value = globalThis.crypto?.subtle;\n if (value === undefined) throw new Error(\"WebCrypto is required for agent record keys\");\n return value;\n}\n\n/**\n * Derive KEK_a and kid. `privateKeyBytes` is read, never retained; the caller\n * owns (and should zero) it.\n */\nexport async function deriveAgentKeyMaterial(privateKeyBytes: Uint8Array, agentDid: string): Promise<AgentKeyMaterial> {\n if (!(privateKeyBytes instanceof Uint8Array) || privateKeyBytes.byteLength < 32) throw new TypeError(\"agent private key must be at least 32 bytes\");\n if (typeof agentDid !== \"string\" || !agentDid.startsWith(\"did:\")) throw new TypeError(\"agent DID is invalid\");\n const copy = new Uint8Array(privateKeyBytes);\n const ikm = await subtle().importKey(\"raw\", copy, \"HKDF\", false, [\"deriveBits\", \"deriveKey\"]);\n copy.fill(0);\n const kek = await subtle().deriveKey(\n { name: \"HKDF\", hash: \"SHA-256\", salt: KEK_SALT, info: new TextEncoder().encode(agentDid) },\n ikm,\n { name: \"AES-GCM\", length: 256 },\n false,\n [\"encrypt\", \"decrypt\"],\n );\n const kidBytes = new Uint8Array(await subtle().deriveBits({ name: \"HKDF\", hash: \"SHA-256\", salt: KEK_SALT, info: new TextEncoder().encode(\"kid\") }, ikm, 64));\n return { agentDid, kid: toBase64Url(kidBytes), kek };\n}\n","import { fromBase64Url, toBase64Url } from \"@tinycloud/share-envelope\";\nimport type { AgentKeyMaterial } from \"./agent-key.js\";\n\n/**\n * Agent record codec: the double-wrapped data key (design C §3, R1, V3-3..6).\n * Security-sensitive: keep this module small; nothing here logs, and no\n * error carries key bytes.\n *\n * One stored value per record, `vault/…/records/agents/<agentId>/<shareId>`:\n *\n * { hdr: { v: 1, agentDid, kid, alg: \"A256GCM\", ownerNetworkId, recordV },\n * ct: b64url(iv ‖ AES-256-GCM(encKey, record, aad = B)),\n * commit: b64url(HMAC-SHA256(commitKey, B)),\n * wrapAgent: b64url(iv ‖ AES-256-GCM(KEK_a, DEK, aad = B)) | null,\n * wrapOwner: owner-network envelope of DEK with aad = B }\n *\n * B = \"xyz.tinycloud.share/agent-record/v1|\" + spaceId + \"|\" + vaultKey\n * + \"|\" + agentDid + \"|\" + ownerNetworkId (EVM addresses lowercased)\n * encKey = HKDF-SHA256(DEK, info \"enc|\" + B)\n * commitKey = HKDF-SHA256(DEK, info \"commit|\" + B)\n *\n * Every seal takes a fresh random 32-byte DEK and fresh random 96-bit nonces.\n * The DEK itself is never used as a key. Opening requires the unwrapped DEK\n * to be exactly 32 bytes, checks `commit` in constant time, and zeroes the\n * DEK on every path.\n */\n\nexport const AGENT_RECORD_VERSION = 1;\n/** Record schema versions this build understands. */\nexport const SUPPORTED_AGENT_RECORD_V = 1;\n/**\n * Stored agent records larger than this are refused before any crypto.\n * Design C proposed 16 KiB (open decision 1); a real CLI bearer record that\n * carries its link and its full chain (C1: link UCAN + owner→session CACAO)\n * measured 16,918 B on a local node, so the cap is 32 KiB.\n */\nexport const MAX_AGENT_RECORD_BYTES = 32 * 1024;\n\nconst BINDING_DOMAIN = \"xyz.tinycloud.share/agent-record/v1|\";\nconst DEK_BYTES = 32;\nconst NONCE_BYTES = 12;\nconst encoder = new TextEncoder();\n\nexport type AgentRecordFailure = \"size\" | \"shape\" | \"header\" | \"newer\" | \"decrypt\" | \"commit\";\n\n/** A refused agent record. The message is fixed per reason. */\nexport class AgentRecordError extends Error {\n constructor(readonly reason: AgentRecordFailure) {\n super(`agent record refused: ${reason}`);\n this.name = \"AgentRecordError\";\n }\n}\n\n/** Thrown by an {@link OwnerNetworkUnwrap} when the decrypt service is unreachable (not a refusal). */\nexport class OwnerUnwrapUnavailableError extends Error {\n constructor() {\n super(\"owner-network decrypt is unavailable\");\n this.name = \"OwnerUnwrapUnavailableError\";\n }\n}\n\nexport interface AgentRecordHeader {\n readonly v: 1;\n readonly agentDid: string;\n readonly kid: string | null;\n readonly alg: \"A256GCM\";\n readonly ownerNetworkId: string;\n readonly recordV: number;\n}\n\nexport interface StoredAgentRecord {\n readonly hdr: AgentRecordHeader;\n readonly ct: string;\n readonly commit: string;\n readonly wrapAgent: string | null;\n readonly wrapOwner: Readonly<Record<string, unknown>>;\n}\n\n/** Encrypts the DEK to the owner network (needs no capability). */\nexport interface OwnerNetworkWrap {\n wrap(dek: Uint8Array, aad: Uint8Array): Promise<Readonly<Record<string, unknown>>>;\n}\n\n/**\n * Network-decrypts the owner wrap. Implementations must pass `aad` to the\n * decrypt call so the envelope's declared AAD is compared before any POST.\n */\nexport interface OwnerNetworkUnwrap {\n unwrap(envelope: Readonly<Record<string, unknown>>, aad: Uint8Array): Promise<Uint8Array>;\n}\n\nexport interface AgentRecordBindingInput {\n readonly spaceId: string;\n /** Full vault key: `sender-history/v2/records/agents/<agentId>/<shareId>`. */\n readonly vaultKey: string;\n readonly agentDid: string;\n readonly ownerNetworkId: string;\n}\n\n/** Space ids and network ids spell EVM addresses either way; B uses lowercase. */\nexport function canonicalAddressSpelling(value: string): string {\n // Only the address segment of an `eip155:<chain>:` principal, never a path or name that merely looks like one.\n return value.replace(/(?<=eip155:[1-9]\\d*:)0x[0-9a-fA-F]{40}(?![0-9a-fA-F])/g, (address) => address.toLowerCase());\n}\n\nexport function agentRecordBinding(input: AgentRecordBindingInput): Uint8Array {\n for (const part of [input.spaceId, input.vaultKey, input.agentDid, input.ownerNetworkId]) {\n if (typeof part !== \"string\" || part.length === 0 || part.includes(\"|\")) throw new TypeError(\"agent record binding input is invalid\");\n }\n return encoder.encode(`${BINDING_DOMAIN}${canonicalAddressSpelling(input.spaceId)}|${input.vaultKey}|${input.agentDid}|${canonicalAddressSpelling(input.ownerNetworkId)}`);\n}\n\nfunction subtle(): SubtleCrypto {\n const value = globalThis.crypto?.subtle;\n if (value === undefined) throw new Error(\"WebCrypto is required for agent records\");\n return value;\n}\n\nfunction concat(left: Uint8Array, right: Uint8Array): Uint8Array {\n const out = new Uint8Array(left.length + right.length);\n out.set(left);\n out.set(right, left.length);\n return out;\n}\n\n/** Constant-time equality for equal-length byte strings. */\nexport function constantTimeEqual(left: Uint8Array, right: Uint8Array): boolean {\n if (left.length !== right.length) return false;\n let diff = 0;\n for (let index = 0; index < left.length; index++) diff |= left[index]! ^ right[index]!;\n return diff === 0;\n}\n\ninterface Subkeys { readonly enc: CryptoKey; readonly commit: CryptoKey }\n\nasync function deriveSubkeys(dek: Uint8Array, binding: Uint8Array): Promise<Subkeys> {\n const base = await subtle().importKey(\"raw\", dek, \"HKDF\", false, [\"deriveBits\"]);\n const derive = async (label: string, usage: \"enc\" | \"commit\"): Promise<CryptoKey> => {\n const bits = new Uint8Array(await subtle().deriveBits({ name: \"HKDF\", hash: \"SHA-256\", salt: new Uint8Array(0), info: concat(encoder.encode(label), binding) }, base, 256));\n try {\n return usage === \"enc\"\n ? await subtle().importKey(\"raw\", bits, { name: \"AES-GCM\" }, false, [\"encrypt\", \"decrypt\"])\n : await subtle().importKey(\"raw\", bits, { name: \"HMAC\", hash: \"SHA-256\" }, false, [\"sign\"]);\n } finally {\n bits.fill(0);\n }\n };\n return { enc: await derive(\"enc|\", \"enc\"), commit: await derive(\"commit|\", \"commit\") };\n}\n\nasync function gcmSeal(key: CryptoKey, plaintext: Uint8Array, aad: Uint8Array): Promise<string> {\n const iv = crypto.getRandomValues(new Uint8Array(NONCE_BYTES));\n const sealed = new Uint8Array(await subtle().encrypt({ name: \"AES-GCM\", iv, additionalData: aad }, key, plaintext));\n return toBase64Url(concat(iv, sealed));\n}\n\nasync function gcmOpen(key: CryptoKey, encoded: string, aad: Uint8Array): Promise<Uint8Array> {\n const bytes = fromBase64Url(encoded);\n if (bytes.length < NONCE_BYTES + 16) throw new AgentRecordError(\"decrypt\");\n return new Uint8Array(await subtle().decrypt({ name: \"AES-GCM\", iv: bytes.subarray(0, NONCE_BYTES), additionalData: aad }, key, bytes.subarray(NONCE_BYTES)));\n}\n\nexport interface SealAgentRecordInput extends AgentRecordBindingInput {\n /** UTF-8 JSON of the full `SenderShareRecord` (link and `proofs` included). */\n readonly plaintext: Uint8Array;\n /** Absent for a remote-signer-only profile: the record is then owner-readable only (`kid: null`). */\n readonly agentKey?: AgentKeyMaterial;\n readonly ownerWrap: OwnerNetworkWrap;\n readonly recordV?: number;\n}\n\n/** Seal one agent record. Each call draws a fresh DEK and fresh nonces. */\nexport async function sealAgentRecord(input: SealAgentRecordInput): Promise<StoredAgentRecord> {\n if (input.agentKey !== undefined && input.agentKey.agentDid !== input.agentDid) throw new TypeError(\"agent key does not belong to the agent DID\");\n const binding = agentRecordBinding(input);\n const dek = crypto.getRandomValues(new Uint8Array(DEK_BYTES));\n try {\n const subkeys = await deriveSubkeys(dek, binding);\n const ct = await gcmSeal(subkeys.enc, input.plaintext, binding);\n const commit = toBase64Url(new Uint8Array(await subtle().sign(\"HMAC\", subkeys.commit, binding)));\n const wrapAgent = input.agentKey === undefined ? null : await gcmSeal(input.agentKey.kek, dek, binding);\n const wrapOwner = await input.ownerWrap.wrap(dek, binding);\n return {\n hdr: { v: AGENT_RECORD_VERSION, agentDid: input.agentDid, kid: input.agentKey?.kid ?? null, alg: \"A256GCM\", ownerNetworkId: input.ownerNetworkId, recordV: input.recordV ?? SUPPORTED_AGENT_RECORD_V },\n ct,\n commit,\n wrapAgent,\n wrapOwner,\n };\n } finally {\n dek.fill(0);\n }\n}\n\nfunction exactKeys(value: unknown, keys: readonly string[]): value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return false;\n const own = Object.keys(value);\n return own.length === keys.length && keys.every((key) => Object.prototype.hasOwnProperty.call(value, key));\n}\n\n/**\n * Parse the stored bytes and check the header against the path (§5 checks\n * 2–3), before any crypto. `newer` means a higher `recordV` than this build\n * knows: skip and re-check after an upgrade, do not reject.\n */\nexport function parseStoredAgentRecord(bytes: Uint8Array, expected: { readonly agentDid?: string; readonly ownerNetworkId: string }): StoredAgentRecord {\n if (bytes.byteLength > MAX_AGENT_RECORD_BYTES) throw new AgentRecordError(\"size\");\n let value: unknown;\n try { value = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes)); } catch { throw new AgentRecordError(\"shape\"); }\n if (!exactKeys(value, [\"hdr\", \"ct\", \"commit\", \"wrapAgent\", \"wrapOwner\"])) throw new AgentRecordError(\"shape\");\n const hdr = value.hdr;\n if (!exactKeys(hdr, [\"v\", \"agentDid\", \"kid\", \"alg\", \"ownerNetworkId\", \"recordV\"])) throw new AgentRecordError(\"header\");\n if (typeof value.ct !== \"string\" || typeof value.commit !== \"string\" || (value.wrapAgent !== null && typeof value.wrapAgent !== \"string\") || value.wrapOwner === null || typeof value.wrapOwner !== \"object\" || Array.isArray(value.wrapOwner)) throw new AgentRecordError(\"shape\");\n if (hdr.v !== AGENT_RECORD_VERSION || hdr.alg !== \"A256GCM\" || typeof hdr.agentDid !== \"string\" || (hdr.kid !== null && typeof hdr.kid !== \"string\") || typeof hdr.ownerNetworkId !== \"string\" || !Number.isSafeInteger(hdr.recordV) || (hdr.recordV as number) < 1) throw new AgentRecordError(\"header\");\n if (expected.agentDid !== undefined && hdr.agentDid !== expected.agentDid) throw new AgentRecordError(\"header\");\n if (canonicalAddressSpelling(hdr.ownerNetworkId) !== canonicalAddressSpelling(expected.ownerNetworkId)) throw new AgentRecordError(\"header\");\n if ((hdr.recordV as number) > SUPPORTED_AGENT_RECORD_V) throw new AgentRecordError(\"newer\");\n return value as unknown as StoredAgentRecord;\n}\n\nfunction bindingFor(record: StoredAgentRecord, location: { readonly spaceId: string; readonly vaultKey: string }): Uint8Array {\n return agentRecordBinding({ spaceId: location.spaceId, vaultKey: location.vaultKey, agentDid: record.hdr.agentDid, ownerNetworkId: record.hdr.ownerNetworkId });\n}\n\nfunction decodeStandardBase64(value: string): Uint8Array | undefined {\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(value) || value.length % 4 !== 0) return undefined;\n try { return fromBase64Url(value.replace(/=+$/, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\")); } catch { return undefined; }\n}\n\n/** DEK → subkeys → constant-time `commit` → open `ct`. Zeroes the DEK. */\nasync function openWithDek(record: StoredAgentRecord, binding: Uint8Array, dek: Uint8Array): Promise<Uint8Array> {\n try {\n if (dek.length !== DEK_BYTES) throw new AgentRecordError(\"decrypt\");\n const subkeys = await deriveSubkeys(dek, binding);\n let stored: Uint8Array;\n try { stored = fromBase64Url(record.commit); } catch { throw new AgentRecordError(\"commit\"); }\n const computed = new Uint8Array(await subtle().sign(\"HMAC\", subkeys.commit, binding));\n if (!constantTimeEqual(stored, computed)) throw new AgentRecordError(\"commit\");\n try { return await gcmOpen(subkeys.enc, record.ct, binding); } catch { throw new AgentRecordError(\"decrypt\"); }\n } finally {\n dek.fill(0);\n }\n}\n\n/**\n * Owner path (§3 steps 2–4): refuse locally, before any network call, an\n * owner wrap whose declared AAD is not exactly B or whose network is not the\n * owner's; then network-unwrap, and open.\n */\nexport async function openAgentRecordAsOwner(record: StoredAgentRecord, location: { readonly spaceId: string; readonly vaultKey: string }, unwrap: OwnerNetworkUnwrap): Promise<Uint8Array> {\n const binding = bindingFor(record, location);\n const declared = typeof record.wrapOwner.aad === \"string\" ? decodeStandardBase64(record.wrapOwner.aad) : undefined;\n if (declared === undefined || !constantTimeEqual(declared, binding)) throw new AgentRecordError(\"decrypt\");\n if (typeof record.wrapOwner.networkId !== \"string\" || canonicalAddressSpelling(record.wrapOwner.networkId) !== canonicalAddressSpelling(record.hdr.ownerNetworkId)) throw new AgentRecordError(\"decrypt\");\n let dek: Uint8Array;\n try { dek = await unwrap.unwrap(record.wrapOwner, binding); } catch (error) {\n // An outage is not a verdict on the record: let the reconciler retry it later.\n if (error instanceof OwnerUnwrapUnavailableError) throw error;\n throw new AgentRecordError(\"decrypt\");\n }\n return openWithDek(record, binding, dek);\n}\n\n/** Agent read-back: `wrapAgent` under KEK_a; no owner-network decrypt anywhere. */\nexport async function openAgentRecordAsAgent(record: StoredAgentRecord, location: { readonly spaceId: string; readonly vaultKey: string }, agentKey: AgentKeyMaterial): Promise<Uint8Array> {\n if (record.hdr.agentDid !== agentKey.agentDid || record.hdr.kid !== agentKey.kid || record.wrapAgent === null) throw new AgentRecordError(\"decrypt\");\n const binding = bindingFor(record, location);\n let dek: Uint8Array;\n try { dek = await gcmOpen(agentKey.kek, record.wrapAgent, binding); } catch { throw new AgentRecordError(\"decrypt\"); }\n return openWithDek(record, binding, dek);\n}\n","import { SHARE_RECORDS_VAULT_PREFIX } from \"./ids.js\";\nimport { OwnerUnwrapUnavailableError, type OwnerNetworkUnwrap, type OwnerNetworkWrap } from \"./agent-record.js\";\n\n/**\n * Storage port of the share index (design C §1, §4). Every key is relative to\n * `sender-history/v2/records/`. The port is structural so share-sdk does not\n * depend on the TinyCloud SDK packages; {@link createTinyCloudShareIndexBackend}\n * adapts a TinyCloud client (node or web SDK) to it.\n */\nexport type ShareDocumentRead =\n | { readonly status: \"ok\"; readonly value: unknown; readonly etag: string }\n | { readonly status: \"not_found\" }\n /** Deterministic corruption (bad envelope, AAD bound elsewhere, undecodable payload). */\n | { readonly status: \"corrupt\"; readonly etag?: string }\n /** Outage or transient failure: never a reason to rebuild. */\n | { readonly status: \"unavailable\" };\n\nexport type ShareRawRead =\n | { readonly status: \"ok\"; readonly bytes: Uint8Array; readonly etag: string }\n | { readonly status: \"not_found\" }\n /** Larger than the `maxBytes` the caller passed: the node refused to send the body, or its length was over. */\n | { readonly status: \"too_large\" }\n | { readonly status: \"unavailable\" };\n\nexport type ShareWriteCondition = { readonly ifMatch: string } | { readonly ifNoneMatch: \"*\" };\n\nexport type ShareWriteResult =\n | { readonly ok: true }\n | { readonly ok: false; readonly code: \"conflict\" | \"outcome_unknown\" | \"busy\" | \"unauthorized\" | \"failed\" }\n /** The etag was refused as malformed (for example weakened to `W/\"…\"` in transit). Never retried; `message` is the SDK's own. */\n | { readonly ok: false; readonly code: \"invalid_etag\"; readonly message: string };\n\nexport type ShareListResult =\n | { readonly status: \"ok\"; readonly keys: readonly string[]; readonly cursor?: string }\n | { readonly status: \"unavailable\" };\n\nexport interface ShareIndexBackend {\n readonly spaceId: string;\n readonly ownerNetworkId: string;\n /** Owner-network vault read with the slice-1 AAD check, from the network (never a replica). */\n readVault(key: string): Promise<ShareDocumentRead>;\n /** Owner-network vault write: a fresh envelope each time; conditional when `condition` is set. */\n writeVault(key: string, value: unknown, condition?: ShareWriteCondition): Promise<ShareWriteResult>;\n /** Delete a record; an absent key counts as success. */\n deleteRecord(key: string): Promise<ShareWriteResult>;\n /** One page of keys under `prefix` (relative, with its trailing slash, or \"\" for all records). */\n listKeys(prefix: string, cursor?: string): Promise<ShareListResult>;\n /**\n * Raw stored bytes and etag (agent records), from the network. With\n * `maxBytes`, a larger value is reported `too_large` and its body is not\n * downloaded (see {@link createTinyCloudShareIndexBackend}).\n */\n readRaw(key: string, maxBytes?: number): Promise<ShareRawRead>;\n writeRaw(key: string, value: Readonly<Record<string, unknown>>, condition: ShareWriteCondition): Promise<ShareWriteResult>;\n readonly ownerWrap: OwnerNetworkWrap;\n /** Owner-network decrypt; absent for Tier W agents, which have no decrypt grant. */\n readonly ownerUnwrap?: OwnerNetworkUnwrap;\n}\n\n/** The vault's classified network read (`readNetworkEncrypted`), as this adapter consumes it. */\nexport interface VaultNetworkRead {\n readonly status: string;\n readonly entry?: { readonly value: unknown; readonly etag?: string };\n}\n\ntype SdkResult<T> = { readonly ok: true; readonly data: T } | { readonly ok: false; readonly error: { readonly code: string; readonly message?: string; readonly meta?: Record<string, unknown> } };\n\n/** The subset of a TinyCloud client the adapter uses (node-sdk `TinyCloudNode` or the web SDK). */\nexport interface TinyCloudShareIndexClient {\n readonly vault: {\n readNetworkEncrypted(key: string, options: { readonly expectAad: true }): Promise<VaultNetworkRead>;\n put(key: string, value: unknown, options?: { readonly ifMatch?: string; readonly ifNoneMatch?: \"*\" }): Promise<SdkResult<unknown>>;\n delete(key: string): Promise<SdkResult<unknown>>;\n };\n readonly kv: {\n /** `maxResponseBytes`: the node refuses (413, `KV_RESPONSE_TOO_LARGE`) a larger value before sending its body. */\n get(key: string, options: { readonly prefix: \"\"; readonly raw: true; readonly source: \"network\"; readonly maxResponseBytes?: number }): Promise<SdkResult<{ readonly data: unknown; readonly headers: { readonly etag?: string } }>>;\n put(key: string, value: unknown, options: { readonly prefix: \"\"; readonly ifMatch?: string; readonly ifNoneMatch?: \"*\" }): Promise<SdkResult<unknown>>;\n list(options: { readonly prefix: string; readonly removePrefix: true; readonly limit: number; readonly cursor?: string; readonly source: \"network\" }): Promise<SdkResult<{ readonly keys: readonly string[]; readonly nextCursor?: string; readonly truncated?: boolean }>>;\n };\n readonly encryption: {\n encryptToNetwork(networkId: string, plaintext: Uint8Array, options: { readonly aad: Uint8Array }): Promise<SdkResult<object>>;\n decryptEnvelope?(envelope: never, proof: { readonly proofs: readonly string[] }, options: { readonly aad: Uint8Array }): Promise<SdkResult<Uint8Array>>;\n };\n}\n\n/** Shown when the SDK reports `INVALID_ETAG` without a message of its own. */\nexport const INVALID_ETAG_MESSAGE = \"etag was weakened in transit; compare-and-swap unavailable through this path\";\n\n/** Map an SDK write error. `invalid_etag` only applies to an `ifMatch` write: another 400 is a plain failure. */\nfunction writeFailure(error: { readonly code: string; readonly message?: string; readonly meta?: Record<string, unknown> }, condition: ShareWriteCondition | undefined): ShareWriteResult {\n const status = typeof error.meta?.status === \"number\" ? error.meta.status : undefined;\n if (error.code === \"KV_PRECONDITION_FAILED\" || error.code === \"ETAG_MISMATCH\" || error.code === \"ALREADY_EXISTS\") return { ok: false, code: \"conflict\" };\n if (condition !== undefined && \"ifMatch\" in condition && (error.code === \"INVALID_ETAG\" || (error.code === \"KV_WRITE_FAILED\" && status === 400))) return { ok: false, code: \"invalid_etag\", message: error.message ?? INVALID_ETAG_MESSAGE };\n if (error.code === \"OUTCOME_UNKNOWN\" || ((error.code === \"NETWORK_ERROR\" || error.code === \"TIMEOUT\") && status === undefined)) return { ok: false, code: \"outcome_unknown\" };\n if (error.code === \"NODE_BUSY\" || error.code === \"REQUEST_TIMEOUT\") return { ok: false, code: \"busy\" };\n if (error.code === \"AUTH_UNAUTHORIZED\" || error.code === \"PERMISSION_DENIED\") return { ok: false, code: \"unauthorized\" };\n return { ok: false, code: \"failed\" };\n}\n\n/** Keys per list page: the node's maximum. */\nconst LIST_PAGE_SIZE = 1000;\n\nfunction bytesOf(data: unknown): Uint8Array | undefined {\n if (data instanceof Uint8Array) return data;\n if (typeof data === \"string\") return new TextEncoder().encode(data);\n if (data !== null && typeof data === \"object\") return new TextEncoder().encode(JSON.stringify(data));\n return undefined;\n}\n\nexport interface TinyCloudShareIndexBackendOptions {\n readonly client: TinyCloudShareIndexClient;\n readonly spaceId: string;\n readonly ownerNetworkId: string;\n /** The decrypt capability proof of the owner session (`{ proofs: [session.delegationCid] }`). Omit for Tier W agents. */\n readonly decryptProof?: () => { readonly proofs: readonly string[] };\n /**\n * The KV prefix every key here sits under: `vault/sender-history/v2/records/`\n * for a client whose KV service has no prefix of its own.\n */\n readonly kvRecordsPrefix?: string;\n}\n\n/** Adapt a TinyCloud client (owner web, owner-key CLI, Tier 2 or Tier W agent) to {@link ShareIndexBackend}. */\nexport function createTinyCloudShareIndexBackend(options: TinyCloudShareIndexBackendOptions): ShareIndexBackend {\n const { client } = options;\n const kvPrefix = options.kvRecordsPrefix ?? `vault/${SHARE_RECORDS_VAULT_PREFIX}`;\n const rawEtag = async (key: string): Promise<string | undefined> => {\n try {\n const raw = await client.kv.get(`${kvPrefix}${key}`, { prefix: \"\", raw: true, source: \"network\" });\n return raw.ok ? raw.data.headers.etag : undefined;\n } catch {\n return undefined;\n }\n };\n const decryptProof = options.decryptProof;\n const decryptEnvelope = client.encryption.decryptEnvelope;\n return {\n spaceId: options.spaceId,\n ownerNetworkId: options.ownerNetworkId,\n async readVault(key) {\n let result: VaultNetworkRead;\n try { result = await client.vault.readNetworkEncrypted(`${SHARE_RECORDS_VAULT_PREFIX}${key}`, { expectAad: true }); } catch { return { status: \"unavailable\" }; }\n if (result.status === \"ok\" && result.entry !== undefined && typeof result.entry.etag === \"string\") return { status: \"ok\", value: result.entry.value, etag: result.entry.etag };\n if (result.status === \"not_found\") return { status: \"not_found\" };\n if (result.status === \"corrupt_envelope\" || result.status === \"invalid_payload\" || result.status === \"aad_mismatch\") {\n const etag = await rawEtag(key);\n return etag === undefined ? { status: \"corrupt\" } : { status: \"corrupt\", etag };\n }\n return { status: \"unavailable\" };\n },\n async writeVault(key, value, condition) {\n try {\n const result = await client.vault.put(`${SHARE_RECORDS_VAULT_PREFIX}${key}`, value, condition ?? {});\n return result.ok ? { ok: true } : writeFailure(result.error, condition);\n } catch {\n return { ok: false, code: \"outcome_unknown\" };\n }\n },\n async deleteRecord(key) {\n try {\n const result = await client.vault.delete(`${SHARE_RECORDS_VAULT_PREFIX}${key}`);\n if (result.ok || result.error.code === \"KEY_NOT_FOUND\" || result.error.code === \"KV_NOT_FOUND\" || result.error.code === \"NOT_FOUND\") return { ok: true };\n return writeFailure(result.error, undefined);\n } catch {\n return { ok: false, code: \"outcome_unknown\" };\n }\n },\n async listKeys(prefix, cursor) {\n try {\n // The node pages only when a limit is sent, and refuses a cursor without one.\n const result = await client.kv.list({ prefix: `${kvPrefix}${prefix}`, removePrefix: true, limit: LIST_PAGE_SIZE, source: \"network\", ...(cursor === undefined ? {} : { cursor }) });\n if (!result.ok) return { status: \"unavailable\" };\n // Keys come back relative to the listed prefix; re-anchor them on `records/`.\n const keys = result.data.keys.map((key) => `${prefix}${key}`);\n return result.data.nextCursor === undefined ? { status: \"ok\", keys } : { status: \"ok\", keys, cursor: result.data.nextCursor };\n } catch {\n return { status: \"unavailable\" };\n }\n },\n async readRaw(key, maxBytes) {\n try {\n // The node accepts values far larger than any record cap, and the SDK's get buffers the whole body. With a cap,\n // the node is asked to refuse a larger value before it sends the body (`x-tinycloud-max-response-bytes`); the\n // body length is checked again here.\n const result = await client.kv.get(`${kvPrefix}${key}`, { prefix: \"\", raw: true, source: \"network\", ...(maxBytes === undefined ? {} : { maxResponseBytes: maxBytes }) });\n if (!result.ok) {\n if (result.error.code === \"KV_NOT_FOUND\" || result.error.code === \"NOT_FOUND\") return { status: \"not_found\" };\n return maxBytes !== undefined && result.error.code === \"KV_RESPONSE_TOO_LARGE\" ? { status: \"too_large\" } : { status: \"unavailable\" };\n }\n const bytes = bytesOf(result.data.data);\n const etag = result.data.headers.etag;\n if (bytes !== undefined && maxBytes !== undefined && bytes.byteLength > maxBytes) return { status: \"too_large\" };\n return bytes === undefined || etag === undefined ? { status: \"unavailable\" } : { status: \"ok\", bytes, etag };\n } catch {\n return { status: \"unavailable\" };\n }\n },\n async writeRaw(key, value, condition) {\n try {\n const result = await client.kv.put(`${kvPrefix}${key}`, value, { prefix: \"\", ...condition });\n return result.ok ? { ok: true } : writeFailure(result.error, condition);\n } catch {\n return { ok: false, code: \"outcome_unknown\" };\n }\n },\n ownerWrap: {\n async wrap(dek, aad) {\n const result = await client.encryption.encryptToNetwork(options.ownerNetworkId, dek, { aad });\n if (!result.ok) throw new Error(\"owner-network wrap failed\");\n return Object.fromEntries(Object.entries(result.data));\n },\n },\n ...(decryptProof === undefined || decryptEnvelope === undefined ? {} : {\n ownerUnwrap: {\n async unwrap(envelope, aad) {\n // `aad` makes the SDK compare the envelope's declared AAD before any decrypt request.\n let result: SdkResult<Uint8Array>;\n try {\n result = await decryptEnvelope.call(client.encryption, envelope as never, decryptProof(), { aad });\n } catch {\n throw new OwnerUnwrapUnavailableError();\n }\n // TRANSPORT_ERROR is an outage; DECRYPT_DENIED, INVALID_INPUT and INVALID_RESPONSE are refusals.\n if (!result.ok) throw result.error.code === \"TRANSPORT_ERROR\" ? new OwnerUnwrapUnavailableError() : new Error(\"owner-network unwrap was refused\");\n return result.data;\n },\n },\n }),\n };\n}\n","import { INVALID_ETAG_MESSAGE, type ShareWriteResult } from \"./backend.js\";\n\n/**\n * The compare-and-swap loop policy shared by the index and the record stores\n * (design C §4, plus the lead's rule for slice 2):\n * - every attempt starts with a fresh network read and re-applies the change,\n * so a lost race (`ETAG_MISMATCH`) and an unknown outcome (`OUTCOME_UNKNOWN`)\n * are both decided from what the node now holds, never by a blind re-put;\n * - `ETAG_MISMATCH` and `NODE_BUSY` back off 50 ms·2ⁿ with jitter, capped at\n * 1 s, for at most 6 attempts;\n * - `INVALID_ETAG` is never retried: the first one throws\n * {@link ShareIndexCasError} with the SDK's own message (an ETag weakened\n * in transit, for example by a CDN, cannot be used for compare-and-swap).\n */\nexport interface CasPolicy {\n readonly maxAttempts: number;\n readonly backoffBaseMs: number;\n readonly backoffCapMs: number;\n readonly sleep: (ms: number) => Promise<void>;\n readonly random: () => number;\n}\n\nexport const DEFAULT_CAS_POLICY: CasPolicy = {\n maxAttempts: 6,\n backoffBaseMs: 50,\n backoffCapMs: 1000,\n sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),\n random: Math.random,\n};\n\nexport type ShareIndexCasErrorCode =\n /** The etag was refused as malformed; compare-and-swap is unavailable through this path. Never retried. */\n | \"INVALID_ETAG\"\n /** Every attempt lost a race or found the node busy. */\n | \"EXHAUSTED\"\n /** The write was refused (authorization, storage) or the read failed. */\n | \"FAILED\";\n\nexport class ShareIndexCasError extends Error {\n constructor(readonly code: ShareIndexCasErrorCode, message: string, readonly key: string, readonly attempts: number) {\n super(message);\n this.name = \"ShareIndexCasError\";\n }\n}\n\n/** One attempt: read, decide, and either finish or report a write result. */\nexport type CasAttempt<T> = { readonly done: T } | { readonly write: ShareWriteResult; readonly onSuccess: () => T };\n\nexport async function runCas<T>(key: string, policy: CasPolicy, attempt: () => Promise<CasAttempt<T>>): Promise<T> {\n for (let attemptNumber = 1; attemptNumber <= policy.maxAttempts; attemptNumber++) {\n const step = await attempt();\n if (\"done\" in step) return step.done;\n const result = step.write;\n if (result.ok) return step.onSuccess();\n if (result.code === \"invalid_etag\") throw new ShareIndexCasError(\"INVALID_ETAG\", result.message || INVALID_ETAG_MESSAGE, key, attemptNumber);\n if (result.code === \"unauthorized\" || result.code === \"failed\") throw new ShareIndexCasError(\"FAILED\", `write of ${key} was refused (${result.code})`, key, attemptNumber);\n // conflict and busy back off; outcome_unknown re-reads at once and decides from the node's state.\n if (result.code !== \"outcome_unknown\" && attemptNumber < policy.maxAttempts) {\n const ceiling = Math.min(policy.backoffCapMs, policy.backoffBaseMs * 2 ** (attemptNumber - 1));\n await policy.sleep(Math.floor(ceiling / 2 + policy.random() * (ceiling / 2)));\n }\n }\n throw new ShareIndexCasError(\"EXHAUSTED\", `compare-and-swap of ${key} did not converge in ${policy.maxAttempts} attempts`, key, policy.maxAttempts);\n}\n","import { canonicalize, computeCid, fromBase64Url, open, toBase64Url } from \"@tinycloud/share-envelope\";\nimport { parseLink, type ParsedLink } from \"@tinycloud/share-envelope/links\";\nimport type { SenderShareRecord } from \"../history.js\";\nimport type { PublishedShareDeliveryMaterial } from \"../publish.js\";\n\n/**\n * The stored form of a share record in the space (TC-1432 slice 2, cap\n * ruling): each blob is stored once.\n *\n * A Policy/v3 record's `deliveryMaterial.envelope` is exactly what\n * `sealedEnvelope` decrypts to under `envelopeKey` (`publishAddressedShare`\n * seals `canonicalize(envelope)`). It is omitted before an agent record is\n * sealed and rebuilt when needed by {@link openDeliveryEnvelope}, for the\n * verifier and a delivery retry. `sealedEnvelope` stays (the node reopens that\n * exact value and its nonce is random) and so does the session CACAO (it\n * proves the chain). A short `v=4` link the sender printed is kept (it is not\n * derivable: it carries an id only the links service knows) and must be the\n * link of this material; a full link is not kept (see {@link compactShareRecord}).\n *\n * Security-sensitive: the sealed bytes are checked against `shareCid` before\n * they are opened, and the plaintext must be the canonical JSON of the\n * envelope, so a record cannot carry one envelope for display and another for\n * the node.\n */\nexport type StoredDeliveryMaterial = Omit<PublishedShareDeliveryMaterial, \"envelope\">;\n\n/** A share record as stored at an agent (or migrated) key: {@link SenderShareRecord} without derivable blobs. */\nexport type StoredShareRecord = Omit<SenderShareRecord, \"deliveryMaterial\"> & { readonly deliveryMaterial?: StoredDeliveryMaterial };\n\n/** Keys of a stored `deliveryMaterial`, exactly. */\nexport const STORED_DELIVERY_MATERIAL_KEYS: readonly string[] = [\"shareCid\", \"sealedEnvelope\", \"envelopeKey\"];\n\nexport class DeliveryMaterialError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"DeliveryMaterialError\";\n }\n}\n\nfunction sealedParts(material: StoredDeliveryMaterial): { readonly sealed: Uint8Array; readonly key: Uint8Array } {\n let sealed: Uint8Array;\n let key: Uint8Array;\n try {\n sealed = fromBase64Url(material.sealedEnvelope);\n key = fromBase64Url(material.envelopeKey);\n } catch {\n throw new DeliveryMaterialError(\"delivery material is not canonical base64url\");\n }\n if (key.byteLength !== 32) throw new DeliveryMaterialError(\"envelope key must be 32 bytes\");\n return { sealed, key };\n}\n\n/** The signed envelope inside `sealedEnvelope`; throws {@link DeliveryMaterialError} unless it is exactly that. */\nexport async function openDeliveryEnvelope(material: StoredDeliveryMaterial): Promise<Record<string, unknown>> {\n const { sealed, key } = sealedParts(material);\n if (await computeCid(sealed) !== material.shareCid) throw new DeliveryMaterialError(\"sealed envelope does not match shareCid\");\n let text: string;\n try {\n text = new TextDecoder(\"utf-8\", { fatal: true }).decode(await open(sealed, key));\n } catch {\n throw new DeliveryMaterialError(\"sealed envelope does not open under its key\");\n }\n let value: unknown;\n try { value = JSON.parse(text); } catch { throw new DeliveryMaterialError(\"sealed envelope is not JSON\"); }\n if (value === null || typeof value !== \"object\" || Array.isArray(value) || canonicalize(value) !== text) throw new DeliveryMaterialError(\"sealed envelope is not canonical JSON\");\n return value as Record<string, unknown>;\n}\n\n/**\n * A `v=4` link names its content key and body: a short link by the key `k` and\n * the body CID `c`, a full link by `k` and the record whose body it carries.\n * Either must be exactly this delivery material's key and sealed envelope.\n * Returns the link's form.\n */\nexport function assertLinkBoundToMaterial(link: string, material: StoredDeliveryMaterial): \"short\" | \"full\" {\n const { sealed, key } = sealedParts(material);\n let parsed: ParsedLink;\n try {\n parsed = parseLink(link, { trustedOrigins: [new URL(link).origin] });\n } catch {\n throw new DeliveryMaterialError(\"link is not a v=4 share link\");\n }\n const sameBody = parsed.form === \"short\"\n ? parsed.c === material.shareCid\n : typeof parsed.record === \"object\" && parsed.record !== null && \"body\" in parsed.record && parsed.record.body === toBase64Url(sealed);\n if (!sameBody || !equalBytes(parsed.key, key)) throw new DeliveryMaterialError(\"link is not the link of this delivery material\");\n return parsed.form;\n}\n\n/**\n * The stored form of `record`. For a Policy/v3 record (one with\n * `deliveryMaterial`), omits `deliveryMaterial.envelope` after checking it is\n * exactly what the sealed material opens to, and checks that a `link` is the\n * link of that material. A short link is kept. A full link is not: it embeds\n * the sealed envelope a second time, which the record size cap does not leave\n * room for, so the sender's own history holds it. Throws\n * {@link DeliveryMaterialError} otherwise.\n */\nexport async function compactShareRecord(record: SenderShareRecord | StoredShareRecord): Promise<StoredShareRecord> {\n const material = record.deliveryMaterial as Partial<PublishedShareDeliveryMaterial> | undefined;\n if (material === undefined) return record as StoredShareRecord;\n if (typeof material.shareCid !== \"string\" || typeof material.sealedEnvelope !== \"string\" || typeof material.envelopeKey !== \"string\") throw new DeliveryMaterialError(\"delivery material is incomplete\");\n const stored: StoredDeliveryMaterial = { shareCid: material.shareCid, sealedEnvelope: material.sealedEnvelope, envelopeKey: material.envelopeKey };\n const opened = await openDeliveryEnvelope(stored);\n if (material.envelope !== undefined && canonicalize(opened) !== canonicalize(material.envelope)) throw new DeliveryMaterialError(\"envelope is not the sealed envelope\");\n const { link, deliveryMaterial: _material, ...rest } = record;\n const keptLink = link !== undefined && assertLinkBoundToMaterial(link, stored) === \"short\" ? link : undefined;\n return { ...rest, ...(keptLink === undefined ? {} : { link: keptLink }), deliveryMaterial: stored };\n}\n\nfunction equalBytes(left: Uint8Array, right: Uint8Array): boolean {\n return left.length === right.length && left.every((byte, index) => byte === right[index]);\n}\n\n/**\n * The full record again (for a delivery retry or a caller that wants the\n * {@link SenderShareRecord} shape): the envelope reopened from the sealed\n * material. The stored `link` is returned as it was stored.\n */\nexport async function expandShareRecord(record: StoredShareRecord): Promise<SenderShareRecord> {\n const material = record.deliveryMaterial;\n if (material === undefined) return record as SenderShareRecord;\n const envelope = await openDeliveryEnvelope(material);\n return { ...record, deliveryMaterial: { ...material, envelope } };\n}\n","import type { SenderShareRecord, SenderShareRecordStorage } from \"../history.js\";\nimport type { AgentKeyMaterial } from \"./agent-key.js\";\nimport { AgentRecordError, MAX_AGENT_RECORD_BYTES, openAgentRecordAsAgent, parseStoredAgentRecord, sealAgentRecord } from \"./agent-record.js\";\nimport type { ShareIndexBackend } from \"./backend.js\";\nimport { DEFAULT_CAS_POLICY, runCas, ShareIndexCasError, type CasPolicy } from \"./cas.js\";\nimport { compactShareRecord, DeliveryMaterialError, expandShareRecord, type StoredShareRecord } from \"./delivery.js\";\nimport { agentIdFromDid, agentRecordKey, agentRecordPrefix, classifyRecordKey, isShareId, SHARE_RECORDS_VAULT_PREFIX } from \"./ids.js\";\n\n/**\n * The space record store (design C §1, §3): canonical share records in the\n * owner's `applications` space. Two layouts behind the same\n * {@link SenderShareRecordStorage} interface:\n * - {@link WebShareRecordStore}: `records/<shareId>`, owner-network vault\n * envelopes (web, owner-key CLI, Tier 2);\n * - {@link AgentShareRecordStore}: `records/agents/<agentId>/<shareId>`,\n * double-wrapped agent records (Tier W). Lists use the explicit prefix with\n * its trailing slash (V3-7).\n * `isShareId` is enforced on every put/get/update/delete. Updates are CAS\n * writes; every write of an agent record draws a fresh DEK and nonces.\n */\n\nfunction assertShareId(shareId: string): void {\n if (!isShareId(shareId)) throw new TypeError(\"share id is invalid\");\n}\n\nfunction isRecordShape(value: unknown): value is SenderShareRecord {\n return value !== null && typeof value === \"object\" && !Array.isArray(value) && \"shareId\" in value && isShareId(value.shareId);\n}\n\nexport class WebShareRecordStore implements SenderShareRecordStorage {\n constructor(private readonly backend: ShareIndexBackend, private readonly cas: CasPolicy = DEFAULT_CAS_POLICY) {}\n\n async put(record: SenderShareRecord): Promise<void> {\n assertShareId(record.shareId);\n const result = await this.backend.writeVault(record.shareId, record);\n if (!result.ok) throw new ShareIndexCasError(result.code === \"invalid_etag\" ? \"INVALID_ETAG\" : \"FAILED\", `record write was refused (${result.code})`, record.shareId, 1);\n }\n\n async update(shareId: string, change: (record: SenderShareRecord) => SenderShareRecord | Promise<SenderShareRecord>): Promise<SenderShareRecord | undefined> {\n assertShareId(shareId);\n return runCas(shareId, this.cas, async () => {\n const read = await this.backend.readVault(shareId);\n if (read.status === \"not_found\") return { done: undefined };\n if (read.status !== \"ok\" || !isRecordShape(read.value)) throw new ShareIndexCasError(\"FAILED\", \"record read failed\", shareId, 1);\n const next = await change(read.value);\n if (next.shareId !== shareId) throw new TypeError(\"a record update cannot change its share id\");\n return { write: await this.backend.writeVault(shareId, next, { ifMatch: read.etag }), onSuccess: () => next };\n });\n }\n\n async get(shareId: string): Promise<SenderShareRecord | undefined> {\n assertShareId(shareId);\n const read = await this.backend.readVault(shareId);\n return read.status === \"ok\" && isRecordShape(read.value) && read.value.shareId === shareId ? read.value : undefined;\n }\n\n async list(): Promise<readonly SenderShareRecord[]> {\n const records: SenderShareRecord[] = [];\n let cursor: string | undefined;\n do {\n const page = await this.backend.listKeys(\"\", cursor);\n if (page.status !== \"ok\") throw new Error(\"record list is unavailable\");\n for (const key of page.keys) {\n const classified = classifyRecordKey(key);\n if (classified.kind !== \"web\") continue;\n const record = await this.get(classified.shareId);\n if (record !== undefined) records.push(record);\n }\n cursor = page.cursor;\n } while (cursor !== undefined);\n return records;\n }\n\n async delete(shareId: string): Promise<void> {\n assertShareId(shareId);\n const result = await this.backend.deleteRecord(shareId);\n if (!result.ok) throw new ShareIndexCasError(\"FAILED\", `record delete was refused (${result.code})`, shareId, 1);\n }\n}\n\nexport interface AgentShareRecordStoreOptions {\n readonly backend: ShareIndexBackend;\n /** DID of the key that signs the agent's invocations and delegations. */\n readonly agentDid: string;\n /** KEK_a from the same key; absent for a remote-signer-only profile (records are then owner-readable only). */\n readonly agentKey?: AgentKeyMaterial;\n readonly cas?: CasPolicy;\n}\n\nexport class AgentShareRecordStore implements SenderShareRecordStorage {\n readonly agentId: string;\n private readonly cas: CasPolicy;\n\n constructor(private readonly options: AgentShareRecordStoreOptions) {\n if (options.agentKey !== undefined && options.agentKey.agentDid !== options.agentDid) throw new TypeError(\"agent key does not belong to the agent DID\");\n this.agentId = agentIdFromDid(options.agentDid);\n this.cas = options.cas ?? DEFAULT_CAS_POLICY;\n }\n\n /** Whether this profile can read its own records back (`kid` is set). */\n get canReadBack(): boolean {\n return this.options.agentKey !== undefined;\n }\n\n private location(shareId: string): { readonly key: string; readonly spaceId: string; readonly vaultKey: string } {\n const key = agentRecordKey(this.agentId, shareId);\n return { key, spaceId: this.options.backend.spaceId, vaultKey: `${SHARE_RECORDS_VAULT_PREFIX}${key}` };\n }\n\n private async seal(record: SenderShareRecord, location: { readonly spaceId: string; readonly vaultKey: string }): Promise<Readonly<Record<string, unknown>>> {\n // Each blob once: a v3 record drops its envelope and inline link (checked to be rebuildable) before sealing.\n let stored: StoredShareRecord;\n try { stored = await compactShareRecord(record); } catch (error) { throw error instanceof DeliveryMaterialError ? new AgentRecordError(\"shape\") : error; }\n const sealed = await sealAgentRecord({\n plaintext: new TextEncoder().encode(JSON.stringify(stored)),\n spaceId: location.spaceId,\n vaultKey: location.vaultKey,\n agentDid: this.options.agentDid,\n ownerNetworkId: this.options.backend.ownerNetworkId,\n ownerWrap: this.options.backend.ownerWrap,\n ...(this.options.agentKey === undefined ? {} : { agentKey: this.options.agentKey }),\n });\n // The owner's reconciler refuses anything over the cap; refuse it here, before it is written.\n if (new TextEncoder().encode(JSON.stringify(sealed)).byteLength > MAX_AGENT_RECORD_BYTES) throw new AgentRecordError(\"size\");\n return sealed as unknown as Readonly<Record<string, unknown>>;\n }\n\n private async open(bytes: Uint8Array, location: { readonly spaceId: string; readonly vaultKey: string }, shareId: string): Promise<SenderShareRecord> {\n const agentKey = this.options.agentKey;\n if (agentKey === undefined) throw new Error(\"this profile cannot read its share records back\");\n const stored = parseStoredAgentRecord(bytes, { agentDid: this.options.agentDid, ownerNetworkId: this.options.backend.ownerNetworkId });\n const plaintext = await openAgentRecordAsAgent(stored, location, agentKey);\n let value: unknown;\n try { value = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(plaintext)); } catch { throw new AgentRecordError(\"shape\"); }\n if (!isRecordShape(value) || value.shareId !== shareId) throw new AgentRecordError(\"shape\");\n // The stored form back to the full record: the envelope reopened from the sealed material.\n try { return await expandShareRecord(value as StoredShareRecord); } catch { throw new AgentRecordError(\"shape\"); }\n }\n\n /** Create or replace; each write is a fresh seal under CAS (If-None-Match `*` for a new key). */\n async put(record: SenderShareRecord): Promise<void> {\n assertShareId(record.shareId);\n const location = this.location(record.shareId);\n await runCas(location.key, this.cas, async () => {\n const read = await this.options.backend.readRaw(location.key);\n if (read.status === \"unavailable\") throw new ShareIndexCasError(\"FAILED\", \"record read failed\", location.key, 1);\n const condition = read.status === \"ok\" ? { ifMatch: read.etag } : { ifNoneMatch: \"*\" as const };\n return { write: await this.options.backend.writeRaw(location.key, await this.seal(record, location), condition), onSuccess: () => undefined };\n });\n }\n\n /** CAS update with the etag from the agent's own read (for example its own `revokedAt`). */\n async update(shareId: string, change: (record: SenderShareRecord) => SenderShareRecord | Promise<SenderShareRecord>): Promise<SenderShareRecord | undefined> {\n assertShareId(shareId);\n const location = this.location(shareId);\n return runCas(location.key, this.cas, async () => {\n const read = await this.options.backend.readRaw(location.key);\n if (read.status === \"not_found\") return { done: undefined };\n if (read.status !== \"ok\") throw new ShareIndexCasError(\"FAILED\", \"record read failed\", location.key, 1);\n const next = await change(await this.open(read.bytes, location, shareId));\n if (next.shareId !== shareId) throw new TypeError(\"a record update cannot change its share id\");\n return { write: await this.options.backend.writeRaw(location.key, await this.seal(next, location), { ifMatch: read.etag }), onSuccess: () => next };\n });\n }\n\n async get(shareId: string): Promise<SenderShareRecord | undefined> {\n assertShareId(shareId);\n const location = this.location(shareId);\n const read = await this.options.backend.readRaw(location.key);\n if (read.status === \"not_found\") return undefined;\n if (read.status !== \"ok\") throw new Error(\"record read failed\");\n return this.open(read.bytes, location, shareId);\n }\n\n /** Lists the explicit `agents/<agentId>/` prefix (trailing slash: `list({})` would be refused). */\n async list(): Promise<readonly SenderShareRecord[]> {\n const prefix = agentRecordPrefix(this.agentId);\n const records: SenderShareRecord[] = [];\n let cursor: string | undefined;\n do {\n const page = await this.options.backend.listKeys(prefix, cursor);\n if (page.status !== \"ok\") throw new Error(\"record list is unavailable\");\n for (const key of page.keys) {\n const classified = classifyRecordKey(key);\n if (classified.kind !== \"agent\" || classified.agentId !== this.agentId) continue;\n try {\n const record = await this.get(classified.shareId);\n if (record !== undefined) records.push(record);\n } catch (error) {\n if (!(error instanceof AgentRecordError)) throw error;\n }\n }\n cursor = page.cursor;\n } while (cursor !== undefined);\n return records;\n }\n\n /** Tier W has no delete grant on its prefix; the owner deletes agent records. */\n async delete(_shareId: string): Promise<void> {\n throw new Error(\"agent share records are deleted by the owner, not the agent\");\n }\n}\n","import type { SenderShareRecord } from \"../history.js\";\nimport { canonicalAddressSpelling } from \"./agent-record.js\";\nimport { STORED_DELIVERY_MATERIAL_KEYS, type StoredShareRecord } from \"./delivery.js\";\n\n/**\n * Index document schema v1, rows, `project()`, and the versioned agent-record\n * schema (design C §2, §5 check 5). The index holds display fields only:\n * never `link`, `deliveryMaterial`, share keys, unmasked emails or `#k=`.\n * Unknown fields on the header, on agent entries and on rows are kept.\n */\n\nexport const INDEX_SCHEMA_VERSION = 1;\n\nexport type ShareProofState = \"proven\" | \"chained\" | \"unproven\";\n\nexport interface ShareIndexRow {\n /** Display name: ≤120 characters, bidi and control characters stripped. */\n readonly n: string;\n readonly k: \"file\" | \"folder\";\n /** Content kind: the lowercase file extension, when there is a short one. */\n readonly ck?: string;\n readonly ak: \"bearer\" | \"recipientDid\" | \"exactEmail\" | \"emailDomain\";\n /** Masked audience label. */\n readonly al: string;\n readonly a: readonly string[];\n /** Created (`registeredAt`) and expires, ISO 8601. */\n readonly c: string;\n readonly x: string;\n /** Revocation; only `confirmed` (node-confirmed) is sticky. */\n readonly r?: { readonly at: string; readonly confirmed: boolean };\n /**\n * Revoke kind. For agent rows the revoke action is decided at click time\n * from the freshly verified record (§6). Observed on a local node (C5,\n * TC-1432 slice 2):\n * - per share: the owner wallet can revoke an agent's v3 root (`policyRoot`,\n * `enforcementRoot` CIDs from the signed envelope) through the generic\n * `/revoke` route: 200, and an open recipient session's next read gets 403\n * `root-revoked`. Only the JSON root-revocation route answers 403\n * `root-revocation-issuer-invalid` to the owner.\n * - session-wide: revoking the agent's owner→session delegation kills its\n * bearer links and fails new v3 claims at once, but an already-open v3\n * recipient session keeps reading for its lifetime (3,598 s observed).\n * The node liveness check (N3, test B-1) closes that.\n */\n readonly rk: \"policy-v3\" | \"delegation\" | \"none\";\n /** The share's revoke CID; unique across rows. */\n readonly cid?: string;\n /** Every CID this row claims (one row per CID, §5 check 7). */\n readonly cc?: readonly string[];\n /** Provenance, derived from the key path: `web` or `agent:<agentId>`. */\n readonly src: string;\n /** Agent and migrated rows: the proof state of the verified chain. */\n readonly ps?: ShareProofState;\n /** `migrated`: a one-time owner import (shown as \"imported\"); ranks by `ps`, never as a web row. */\n readonly pv?: \"migrated\";\n /** The verified chain has expired (shown as Expired, not rejected). */\n readonly pe?: true;\n /** Needs attention: unreadable record, or `shareId` ≠ key basename. */\n readonly na?: true;\n readonly [unknown: string]: unknown;\n}\n\nexport interface ShareIndexAgentEntry {\n /** The agent DID, once a record with a valid header was seen. */\n readonly did: string | null;\n readonly rows: number;\n readonly rejected: Readonly<Record<string, number>>;\n /** Raw key suffixes (≤64 chars) refused on first sight: never refetched. At most 100. */\n readonly rejectedKeys: readonly string[];\n /** Keys whose `recordV` is newer than this build: skipped until an upgrade. At most 100. */\n readonly newerKeys?: readonly string[];\n readonly newerV?: number;\n readonly paused: false | { readonly reason: \"rejections\" | \"row-cap\" | \"newer\"; readonly at: string };\n readonly firstSeen: string;\n readonly [unknown: string]: unknown;\n}\n\nexport interface ShareIndexDocument {\n readonly v: number;\n readonly ownerDid: string;\n readonly spaceId: string;\n readonly updatedAt: string;\n readonly updatedBy: string;\n readonly archives: readonly { readonly name: string; readonly ids: readonly string[] }[];\n readonly tombstones: readonly { readonly key: string; readonly at: string }[];\n readonly reconcile: { readonly cursor?: string };\n readonly agents: Readonly<Record<string, ShareIndexAgentEntry>>;\n readonly rows: Readonly<Record<string, ShareIndexRow>>;\n readonly [unknown: string]: unknown;\n}\n\nexport interface ShareIndexArchiveDocument {\n readonly v: number;\n readonly rows: Readonly<Record<string, ShareIndexRow>>;\n readonly [unknown: string]: unknown;\n}\n\nexport function emptyIndexDocument(input: { readonly ownerDid: string; readonly spaceId: string; readonly writer: string; readonly now: Date }): ShareIndexDocument {\n return {\n v: INDEX_SCHEMA_VERSION,\n ownerDid: input.ownerDid,\n spaceId: input.spaceId,\n updatedAt: input.now.toISOString(),\n updatedBy: input.writer,\n archives: [],\n tombstones: [],\n reconcile: {},\n agents: {},\n rows: {},\n };\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/**\n * An RFC 3339 UTC time as the SDK and node write it: whole seconds or a fraction (`publishAddressedShare` omits it).\n * It must round-trip: `Date.parse` rolls `2026-02-30`, a non-leap Feb 29 or `24:00:00` over to another instant.\n */\nfunction isIsoTime(value: unknown): value is string {\n const match = typeof value === \"string\" ? /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2})(?:\\.(\\d{1,9}))?Z$/.exec(value) : null;\n const parsed = match === null ? NaN : Date.parse(value as string);\n return Number.isFinite(parsed) && new Date(parsed).toISOString() === `${match![1]}.${(match![2] ?? \"\").padEnd(3, \"0\").slice(0, 3)}Z`;\n}\n\nfunction isRow(value: unknown): value is ShareIndexRow {\n if (!isObject(value)) return false;\n return typeof value.n === \"string\" && (value.k === \"file\" || value.k === \"folder\")\n && typeof value.ak === \"string\" && typeof value.al === \"string\"\n && Array.isArray(value.a) && value.a.every((item) => typeof item === \"string\")\n && typeof value.c === \"string\" && typeof value.x === \"string\"\n && (value.r === undefined || (isObject(value.r) && typeof value.r.at === \"string\" && typeof value.r.confirmed === \"boolean\"))\n && typeof value.rk === \"string\" && (value.cid === undefined || typeof value.cid === \"string\")\n && (value.cc === undefined || (Array.isArray(value.cc) && value.cc.every((item) => typeof item === \"string\")))\n && typeof value.src === \"string\";\n}\n\nfunction isAgentEntry(value: unknown): value is ShareIndexAgentEntry {\n return isObject(value) && (value.did === null || typeof value.did === \"string\") && Number.isSafeInteger(value.rows)\n && isObject(value.rejected) && Object.values(value.rejected).every((count) => Number.isSafeInteger(count))\n && Array.isArray(value.rejectedKeys) && value.rejectedKeys.every((item) => typeof item === \"string\")\n && (value.newerKeys === undefined || (Array.isArray(value.newerKeys) && value.newerKeys.every((item) => typeof item === \"string\")))\n && (value.paused === false || (isObject(value.paused) && typeof value.paused.reason === \"string\" && typeof value.paused.at === \"string\"))\n && typeof value.firstSeen === \"string\";\n}\n\nexport type ParsedIndexDocument =\n | { readonly status: \"ok\"; readonly doc: ShareIndexDocument }\n /** A higher `v`: render read-only, never write. */\n | { readonly status: \"newer\"; readonly v: number }\n /** Decrypted, but not a valid document: deterministic corruption. */\n | { readonly status: \"invalid\" };\n\nexport function parseIndexDocument(value: unknown): ParsedIndexDocument {\n if (!isObject(value) || !Number.isSafeInteger(value.v)) return { status: \"invalid\" };\n if ((value.v as number) > INDEX_SCHEMA_VERSION) return { status: \"newer\", v: value.v as number };\n if (value.v !== INDEX_SCHEMA_VERSION || typeof value.ownerDid !== \"string\" || typeof value.spaceId !== \"string\" || typeof value.updatedAt !== \"string\" || typeof value.updatedBy !== \"string\") return { status: \"invalid\" };\n if (!Array.isArray(value.archives) || !value.archives.every((item) => isObject(item) && typeof item.name === \"string\" && Array.isArray(item.ids) && item.ids.every((id) => typeof id === \"string\"))) return { status: \"invalid\" };\n if (!Array.isArray(value.tombstones) || !value.tombstones.every((item) => isObject(item) && typeof item.key === \"string\" && typeof item.at === \"string\")) return { status: \"invalid\" };\n if (!isObject(value.reconcile) || (value.reconcile.cursor !== undefined && typeof value.reconcile.cursor !== \"string\")) return { status: \"invalid\" };\n if (!isObject(value.agents) || !Object.values(value.agents).every(isAgentEntry)) return { status: \"invalid\" };\n if (!isObject(value.rows) || !Object.values(value.rows).every(isRow)) return { status: \"invalid\" };\n return { status: \"ok\", doc: value as unknown as ShareIndexDocument };\n}\n\nexport function parseArchiveDocument(value: unknown): ShareIndexArchiveDocument | undefined {\n if (!isObject(value) || value.v !== INDEX_SCHEMA_VERSION || !isObject(value.rows) || !Object.values(value.rows).every(isRow)) return undefined;\n return value as unknown as ShareIndexArchiveDocument;\n}\n\n// ---------------------------------------------------------------------------\n// project(): the display-only row of a record.\n\nconst UNSAFE_TEXT = /[\\u0000-\\u001f\\u007f-\\u009f\\u061c\\u200b-\\u200f\\u2028-\\u202e\\u2060-\\u206f\\ufeff\\ufff9-\\ufffb]/g;\nexport const MAX_ROW_NAME = 120;\n\n/** Strip bidi/control/format characters and cap at 120 code points. */\nexport function displayName(value: unknown, fallback: string): string {\n const cleaned = typeof value === \"string\" ? [...value.replace(UNSAFE_TEXT, \"\").trim()].slice(0, MAX_ROW_NAME).join(\"\") : \"\";\n return cleaned.length > 0 ? cleaned : fallback;\n}\n\nfunction maskedAudience(matcher: SenderShareRecord[\"recipientMatcher\"]): Pick<ShareIndexRow, \"ak\" | \"al\"> {\n if (matcher.kind === \"exactEmail\") {\n const at = matcher.value.lastIndexOf(\"@\");\n const domain = at < 0 ? \"\" : matcher.value.slice(at + 1);\n return { ak: \"exactEmail\", al: `${displayName(matcher.value.slice(0, 1), \"?\")}…@${displayName(domain, \"?\")}` };\n }\n if (matcher.kind === \"emailDomain\") return { ak: \"emailDomain\", al: `@${displayName(matcher.value, \"?\")}` };\n if (matcher.kind === \"recipientDid\") {\n const did = displayName(matcher.value, \"did\");\n return { ak: \"recipientDid\", al: did.length > 24 ? `${did.slice(0, 16)}…${did.slice(-4)}` : did };\n }\n return { ak: \"bearer\", al: \"Anyone with the link\" };\n}\n\n/** The CIDs a record names: one row per CID across all of them. */\nexport function recordCids(record: Pick<SenderShareRecord, \"registrationCid\" | \"policyCid\" | \"ownerDelegationCid\" | \"enforcementDelegationCid\">): string[] {\n return [record.registrationCid, record.policyCid, record.ownerDelegationCid, record.enforcementDelegationCid]\n .filter((value, index, all): value is string => typeof value === \"string\" && value.length > 0 && all.indexOf(value) === index);\n}\n\nexport function revokeKind(record: StoredShareRecord): ShareIndexRow[\"rk\"] {\n if (record.targetKind !== undefined && record.targetKind !== \"bearer\" && record.policyCid !== undefined && record.enforcementDelegationCid !== undefined) return \"policy-v3\";\n return record.enforcementDelegationCid === undefined ? \"none\" : \"delegation\";\n}\n\n/**\n * The display-only projection of a record. `claims` overrides the CIDs the\n * row may claim (agent rows claim only what their chain verified).\n */\nexport function project(record: StoredShareRecord, input: { readonly key: string; readonly src: string; readonly claims?: readonly string[]; readonly proof?: { readonly state: ShareProofState; readonly expired: boolean } }): ShareIndexRow {\n const basename = input.key.slice(input.key.lastIndexOf(\"/\") + 1);\n const extension = /\\.([a-z0-9]{1,10})$/i.exec(typeof record.filename === \"string\" ? record.filename : \"\")?.[1]?.toLowerCase();\n const claims = input.claims ?? recordCids(record);\n return {\n n: displayName(record.filename, \"Untitled share\"),\n k: record.resource.kind === \"prefix\" ? \"folder\" : \"file\",\n ...(extension === undefined ? {} : { ck: extension }),\n ...maskedAudience(record.recipientMatcher),\n a: [...record.actions],\n c: record.registeredAt,\n x: record.expiresAt,\n ...(record.revokedAt === undefined ? {} : { r: { at: record.revokedAt, confirmed: false } }),\n rk: revokeKind(record),\n ...(record.enforcementDelegationCid !== undefined && claims.includes(record.enforcementDelegationCid) ? { cid: record.enforcementDelegationCid } : {}),\n ...(claims.length === 0 ? {} : { cc: [...claims] }),\n src: input.src,\n ...(input.proof === undefined ? {} : { ps: input.proof.state, ...(input.proof.expired ? { pe: true as const } : {}) }),\n ...(record.provenance === \"migrated\" ? { pv: \"migrated\" as const } : {}),\n ...(record.shareId === basename ? {} : { na: true as const }),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Agent record schema, versioned by `recordV` (§5 check 5).\n\nexport const SHARE_ACTIONS: readonly string[] = [\"tinycloud.kv/get\", \"tinycloud.kv/list\", \"tinycloud.kv/metadata\", \"tinycloud.kv/put\"];\n/** Share resource prefixes: native bearer sources and Policy/v3 addressed sources. */\nexport const SHARE_RESOURCE_PREFIXES: readonly string[] = [\"xyz.tinycloud.share/shares/\", \"shares/\"];\n\nconst REQUIRED_V1 = [\"shareId\", \"target\", \"resource\", \"actions\", \"recipientMatcher\", \"registeredAt\", \"expiresAt\"];\nconst OPTIONAL_V1 = [\"registrationCid\", \"policyCid\", \"ownerDelegationCid\", \"enforcementDelegationCid\", \"shareKeyDid\", \"ownerDid\", \"enforcerDid\", \"targetKind\", \"revokedAt\", \"envelopeCid\", \"shareCid\", \"link\", \"filename\", \"deliveryMaterial\", \"deliveredRecipients\", \"proofs\", \"provenance\"];\nconst PROOF_STRING_FIELDS = [\"session\", \"link\", \"ownerPolicy\", \"ownerDelegation\"];\nconst PROOF_OBJECT_FIELDS = [\"enforcementDelegation\", \"registration\"];\n/** Allowed fields per `recordV`: an unknown field at a known `recordV` is rejected. */\nconst FIELDS_BY_RECORD_V: Readonly<Record<number, { readonly required: readonly string[]; readonly optional: readonly string[] }>> = {\n 1: { required: REQUIRED_V1, optional: OPTIONAL_V1 },\n};\n\n/** Whether `path` is a canonical KV path under a share prefix. */\nexport function isShareResourcePath(path: unknown): path is string {\n if (typeof path !== \"string\" || path.length === 0 || path.length > 1024 || /[\\\\%\\u0000-\\u001f]/.test(path)) return false;\n if (!SHARE_RESOURCE_PREFIXES.some((prefix) => path.startsWith(prefix) && path.length > prefix.length)) return false;\n return path.split(\"/\").every((segment, index, all) => (segment !== \"\" || index === all.length - 1) && segment !== \".\" && segment !== \"..\");\n}\n\nexport interface AgentRecordSchemaContext {\n readonly recordV: number;\n readonly shareId: string;\n readonly accountOwnerDid: string;\n /** `hdr.agentDid` for agent records; \"\" for migrated records, which have no agent binding. */\n readonly agentDid: string;\n /**\n * `agent`: a record in `records/agents/<id>/`, which may never claim a\n * provenance. `migrated`: an owner-layout record that must claim\n * `provenance: \"migrated\"` (one-time owner import).\n */\n readonly source: \"agent\" | \"migrated\";\n}\n\n/**\n * Whether `spaceId` (`tinycloud:pkh:eip155:<chain>:<address>:<name>`) is a\n * space of the account `ownerDid` (`did:pkh:eip155:<chain>:<address>`),\n * whatever its name: the CLI keeps share content in `default` while the\n * records live in `applications`. Address spelling is ignored.\n */\nexport function isSpaceOwnedBy(spaceId: string, ownerDid: string): boolean {\n const space = /^tinycloud:pkh:eip155:([1-9]\\d*):(0x[0-9a-fA-F]{40}):[A-Za-z0-9_.-]+$/.exec(spaceId);\n const owner = /^did:pkh:eip155:([1-9]\\d*):(0x[0-9a-fA-F]{40})$/.exec(ownerDid);\n return space !== null && owner !== null && space[1] === owner[1] && space[2]!.toLowerCase() === owner[2]!.toLowerCase();\n}\n\n/** `registeredAt` may sit at most this far from the chain's signed issuance time (M2). */\nexport const REGISTERED_AT_SKEW_MS = 24 * 60 * 60 * 1000;\n/** Clock skew tolerated for a `registeredAt` slightly in the future. */\nexport const FUTURE_SKEW_MS = 5 * 60 * 1000;\n\n/**\n * `registeredAt` against signed times from the verified chain, never against\n * when the owner happens to look: inside `[earliest, latest]` (already\n * widened by {@link REGISTERED_AT_SKEW_MS} where the bound is an issuance\n * time) and not in the future.\n */\nexport function registeredAtFits(registeredAt: string, window: { readonly earliest?: number; readonly latest?: number }, now: Date): boolean {\n const at = Date.parse(registeredAt);\n return Number.isFinite(at) && at <= now.getTime() + FUTURE_SKEW_MS && (window.earliest === undefined || at >= window.earliest) && (window.latest === undefined || at <= window.latest);\n}\n\n/** A record refused by the schema. `provenance`: an agent-subtree record claiming `migrated`. */\nexport class ShareRecordSchemaError extends Error {\n constructor(readonly reason: \"schema\" | \"provenance\") {\n super(`share record schema: ${reason}`);\n this.name = \"ShareRecordSchemaError\";\n }\n}\n\n/** Whether a link embeds the sealed record: the full form (`/s/full#v=4&k=…&r=…`) or an inline payload (`p=`). */\nfunction carriesSealedRecord(link: string): boolean {\n try {\n const url = new URL(link);\n const fragment = new URLSearchParams(url.hash.slice(1));\n return url.pathname === \"/s/full\" || fragment.has(\"r\") || fragment.has(\"p\");\n } catch {\n return false;\n }\n}\n\n/** Throws {@link ShareRecordSchemaError} when the decrypted value fails the schema. */\nexport function checkAgentRecordSchema(value: unknown, context: AgentRecordSchemaContext): StoredShareRecord {\n const fail = (): never => { throw new ShareRecordSchemaError(\"schema\"); };\n const fields = FIELDS_BY_RECORD_V[context.recordV];\n if (fields === undefined || !isObject(value)) return fail();\n const keys = Object.keys(value);\n if (!fields.required.every((key) => keys.includes(key)) || !keys.every((key) => fields.required.includes(key) || fields.optional.includes(key))) return fail();\n const record = value as Record<string, unknown>;\n if (context.source === \"agent\" && record.provenance === \"migrated\") throw new ShareRecordSchemaError(\"provenance\");\n if (context.source === \"agent\" ? record.provenance !== undefined : record.provenance !== \"migrated\") return fail();\n if (record.shareId !== context.shareId) return fail();\n const target = record.target;\n // `historyRecordForPublishedShare` keeps the publication's `target.kind`.\n const targetKeys = Object.keys(target ?? {});\n if (!isObject(target) || !targetKeys.every((key) => [\"origin\", \"nodeAudience\", \"spaceId\", \"kind\"].includes(key)) || typeof target.origin !== \"string\" || typeof target.nodeAudience !== \"string\" || typeof target.spaceId !== \"string\"\n || (target.kind !== undefined && (typeof target.kind !== \"string\" || ![\"bearer\", \"recipientDid\", \"email\", \"emailDomain\"].includes(target.kind)))) return fail();\n // Content may sit in any space of the account owner (the CLI uses `default`, records live in `applications`).\n if (!isSpaceOwnedBy(target.spaceId as string, context.accountOwnerDid)) return fail();\n const resource = record.resource;\n if (!isObject(resource) || Object.keys(resource).length !== 2 || (resource.kind !== \"exact\" && resource.kind !== \"prefix\") || !isShareResourcePath(resource.path)) return fail();\n if (!Array.isArray(record.actions) || record.actions.length === 0 || new Set(record.actions).size !== record.actions.length || !record.actions.every((action) => typeof action === \"string\" && SHARE_ACTIONS.includes(action))) return fail();\n const matcher = record.recipientMatcher;\n if (!isObject(matcher) || !(matcher.kind === \"bearer\" ? Object.keys(matcher).length === 1 : [\"exactEmail\", \"emailDomain\", \"recipientDid\"].includes(matcher.kind as string) && Object.keys(matcher).length === 2 && typeof matcher.value === \"string\")) return fail();\n if (!isIsoTime(record.registeredAt) || !isIsoTime(record.expiresAt) || Date.parse(record.registeredAt) >= Date.parse(record.expiresAt)) return fail();\n for (const key of [\"registrationCid\", \"policyCid\", \"ownerDelegationCid\", \"enforcementDelegationCid\", \"envelopeCid\", \"shareCid\"]) {\n if (record[key] !== undefined && (typeof record[key] !== \"string\" || !/^[a-z0-9]{8,128}$/.test(record[key] as string))) return fail();\n }\n for (const key of [\"shareKeyDid\", \"enforcerDid\", \"ownerDid\"]) {\n if (record[key] !== undefined && (typeof record[key] !== \"string\" || !(record[key] as string).startsWith(\"did:\"))) return fail();\n }\n // CLI Policy/v3 records name the policy owner, which is the agent session key. A\n // migrated record's earlier session key is bound by its chain (the v3 verifier\n // requires ownerDid == the signed policy owner).\n if (record.ownerDid !== undefined && canonicalAddressSpelling(record.ownerDid as string) !== canonicalAddressSpelling(context.accountOwnerDid) && record.ownerDid !== context.agentDid\n && !(context.source === \"migrated\" && (record.ownerDid as string).startsWith(\"did:key:\"))) return fail();\n if (record.targetKind !== undefined && ![\"bearer\", \"recipientDid\", \"email\", \"emailDomain\"].includes(record.targetKind as string)) return fail();\n if (record.revokedAt !== undefined && !isIsoTime(record.revokedAt)) return fail();\n if (record.link !== undefined && typeof record.link !== \"string\") return fail();\n if (record.filename !== undefined && (typeof record.filename !== \"string\" || record.filename.length > 512)) return fail();\n // Each blob once (stored form, `delivery.ts`): a Policy/v3 record keeps the sealed envelope and its key, never\n // the envelope it decrypts to. Its `link` is the short link the sender printed, checked against the sealed\n // material when the record is accepted. A full link carries the sealed record and the key in its fragment, so a\n // record that stores one beside its delivery material is refused.\n if (record.deliveryMaterial !== undefined) {\n const material = record.deliveryMaterial;\n if (!isObject(material) || Object.keys(material).length !== STORED_DELIVERY_MATERIAL_KEYS.length || !STORED_DELIVERY_MATERIAL_KEYS.every((key) => typeof material[key] === \"string\")) return fail();\n if (typeof record.link === \"string\" && carriesSealedRecord(record.link)) return fail();\n }\n if (record.deliveredRecipients !== undefined && (!Array.isArray(record.deliveredRecipients) || !record.deliveredRecipients.every((item) => typeof item === \"string\"))) return fail();\n if (record.proofs !== undefined) {\n const proofs = record.proofs;\n if (!isObject(proofs) || !Object.keys(proofs).every((key) => PROOF_STRING_FIELDS.includes(key) ? typeof proofs[key] === \"string\" : PROOF_OBJECT_FIELDS.includes(key) && isObject(proofs[key]))) return fail();\n }\n return record as unknown as StoredShareRecord;\n}\n","import type { ShareIndexRow } from \"./schema.js\";\n\n/**\n * Who owns a CID (design C §5 check 7, C2/C3): web > proven > chained >\n * unproven, whatever the arrival order. A later higher claim displaces every\n * admitted lower row it collides with, in the same CAS; a lower or equal\n * claim never displaces anything, and `unproven` never displaces anything.\n *\n * A `migrated` row (one-time owner import) sits at an owner-layout key but\n * ranks by its verified proof state, never as a web row, and a migrated claim\n * never displaces a row whose revocation the node confirmed.\n */\nconst RANK: Readonly<Record<string, number>> = { unproven: 0, chained: 1, proven: 2, web: 3 };\n\nfunction isWebRow(row: Pick<ShareIndexRow, \"src\" | \"pv\">): boolean {\n return row.src === \"web\" && row.pv !== \"migrated\";\n}\n\nexport function claimRank(row: Pick<ShareIndexRow, \"src\" | \"ps\" | \"pv\">): number {\n if (isWebRow(row)) return RANK.web!;\n return RANK[row.ps ?? \"unproven\"] ?? 0;\n}\n\nexport type ClaimDecision =\n | { readonly admit: true; readonly displaced: readonly string[] }\n | { readonly admit: false; readonly heldBy: string };\n\n/**\n * Decide a new claim `row` at `key` against the rows already in `rows`.\n * Collisions are rows (other than `key` itself) that claim any CID in common.\n * Web rows never displace other web rows (both are owner-written).\n */\nexport function decideClaim(rows: Readonly<Record<string, ShareIndexRow>>, key: string, row: ShareIndexRow): ClaimDecision {\n const claims = row.cc ?? [];\n if (claims.length === 0) return { admit: true, displaced: [] };\n const rank = claimRank(row);\n const displaced: string[] = [];\n for (const [otherKey, other] of Object.entries(rows)) {\n if (otherKey === key || other.cc === undefined || !other.cc.some((cid) => claims.includes(cid))) continue;\n if (isWebRow(row) && isWebRow(other)) continue;\n if (rank <= claimRank(other) || (row.pv === \"migrated\" && other.r?.confirmed === true)) return { admit: false, heldBy: otherKey };\n displaced.push(otherKey);\n }\n return { admit: true, displaced };\n}\n","import { blake3 } from \"@noble/hashes/blake3\";\nimport { computeCid, fromBase64Url, shareEnvelopeV3Schema } from \"@tinycloud/share-envelope\";\nimport { verifyEnvelopeV3At } from \"./policy-v3.js\";\nimport { CID } from \"multiformats/cid\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\nimport { openDeliveryEnvelope, type StoredShareRecord } from \"../delivery.js\";\nimport { checkRegistrationReceipt, type CheckedRegistration } from \"./registration.js\";\nimport { canonicalAddressSpelling } from \"../agent-record.js\";\nimport { REGISTERED_AT_SKEW_MS, type ShareProofState } from \"../schema.js\";\nimport type { Attenuation } from \"./attenuation.js\";\nimport { verifyPolicyEnforcementDelegation } from \"./enforcement-delegation.js\";\nimport { NOT_BEFORE_SKEW_MS, verifyOwnerSessionDelegation, type SiweCacaoParser } from \"./session.js\";\nimport { parseSignedUcan, principalOf } from \"./ucan.js\";\n\n/**\n * CID ownership by proof (design C §5 check 7, C1–C4). Everything is checked\n * from the signed bytes the record carries; nothing is fetched.\n *\n * - `proven`: the full chain verifies to the account owner and the leaf\n * issuer (the policy owner for Policy/v3) is `hdr.agentDid`.\n * - `chained`: the full chain verifies to the account owner through another key.\n * - `unproven`: the leaf verifies but the owner→session CACAO is absent.\n * - `expired` is reported next to the state: a chain that verifies but has\n * expired is admitted as Expired, not rejected.\n * - anything else: `{ ok: false }` (reason `proof`).\n *\n * Supported chains: native bearer links (`proofs.link` + `proofs.session`),\n * Policy/v3 addressed shares (the envelope opened from\n * `deliveryMaterial.sealedEnvelope`, bound to `shareCid`, + `proofs.session`)\n * and Policy/v2 owner-policy shares (`proofs.ownerPolicy`, `ownerDelegation`,\n * `enforcementDelegation`, optional `registration`).\n *\n * What revocation achieves today (local node, C5): the owner wallet's generic\n * `/revoke` of a verified v3 root CID ends that share at once, open recipient\n * sessions included (403 `root-revoked`); only the JSON root-revocation route\n * refuses the owner (403 `root-revocation-issuer-invalid`). Revoking the\n * verified session CACAO kills the session's bearer links and new v3 claims\n * at once, but an already-open v3 recipient session keeps reading for its\n * lifetime (3,598 s observed) until the node liveness check (N3, test B-1).\n * Migrated records are verified with no agent binding, so they are never\n * `proven`.\n */\nexport type ChainVerdict =\n | {\n readonly ok: true;\n readonly state: ShareProofState;\n readonly expired: boolean;\n readonly claims: readonly string[];\n /**\n * Where `registeredAt` may lie, from signed times in the chain (epoch ms):\n * a signed issuance time ± {@link REGISTERED_AT_SKEW_MS} when the chain\n * has one (link `nbf`, the v3 binding's `issuedAt`, the node's v2\n * `registeredAt`); otherwise the session's signed `Issued At` as the\n * earliest and the leaf's expiry as the latest.\n */\n readonly issued: { readonly earliest?: number; readonly latest?: number };\n }\n | { readonly ok: false; readonly detail: string };\n\n/** The node registration key for a node audience, from the share public config. */\nexport interface ShareRegistrationKey {\n readonly kid: string;\n /** Raw 32-byte Ed25519 key, or its 34-byte did:key multicodec form. */\n readonly publicKey: Uint8Array;\n}\n\nexport interface ChainContext {\n readonly accountOwnerDid: string;\n /** `hdr.agentDid`, already bound to the path by `derive(agentDid) == agentId`. */\n readonly agentDid: string;\n readonly now: Date;\n readonly parseSiweCacao: SiweCacaoParser;\n /** Registration key by `target.nodeAudience`; absent ⇒ `registrationCid` is not claimed. */\n readonly registrationKey?: (nodeAudience: string) => ShareRegistrationKey | undefined;\n}\n\nclass ProofFailure extends Error {}\n\nfunction fail(detail: string): never {\n throw new ProofFailure(detail);\n}\n\n/** CID (raw, blake3) of a base64url DAG-CBOR CACAO's exact bytes. */\nfunction cacaoCid(authorization: string): string {\n return CID.createV1(0x55, createDigest(0x1e, blake3(fromBase64Url(authorization.replace(/=+$/, \"\"))))).toString();\n}\n\nfunction kvResource(record: StoredShareRecord): string {\n return `${record.target.spaceId}/kv/${record.resource.path}`;\n}\n\nfunction sameAttenuationResources(attenuation: Attenuation, resources: readonly string[]): boolean {\n const keys = Object.keys(attenuation).map(canonicalAddressSpelling).sort();\n const expected = resources.map(canonicalAddressSpelling).sort();\n return keys.length === expected.length && keys.every((key, index) => key === expected[index]);\n}\n\nfunction around(signedMs: number): { readonly earliest: number; readonly latest: number } {\n return { earliest: signedMs - REGISTERED_AT_SKEW_MS, latest: signedMs + REGISTERED_AT_SKEW_MS };\n}\n\nasync function bearerChain(record: StoredShareRecord, link: string, context: ChainContext): Promise<ChainVerdict> {\n if (record.enforcementDelegationCid === undefined) fail(\"bearer record names no link delegation\");\n const leaf = parseSignedUcan(link, record.enforcementDelegationCid);\n const resource = kvResource(record);\n if (!sameAttenuationResources(leaf.attenuation, [resource]) || !Object.keys(Object.values(leaf.attenuation)[0]!).every((ability) => record.actions.includes(ability as never))) fail(\"link delegation is not for the record's resource\");\n if (leaf.notBefore !== undefined && leaf.notBefore * 1000 > context.now.getTime() + NOT_BEFORE_SKEW_MS) fail(\"link delegation is not yet valid\");\n if (leaf.proofs.length !== 1) fail(\"link delegation must have exactly one parent\");\n const leafExpired = leaf.expiresAt * 1000 <= context.now.getTime();\n const claims = [leaf.cid];\n // WASM-issued link delegations carry no `nbf`; then the session's signed `Issued At` and the link's expiry bound it.\n const signedIssue = leaf.notBefore === undefined ? undefined : around(leaf.notBefore * 1000);\n const session = record.proofs?.session;\n if (session === undefined) return { ok: true, state: \"unproven\", expired: leafExpired, claims, issued: signedIssue ?? { latest: leaf.expiresAt * 1000 } };\n // prf ∋ parent CID: the CACAO must be exactly the leaf's parent.\n const parent = await verifyOwnerSessionDelegation({ authorization: session, expectedCid: leaf.proofs[0]!, accountOwnerDid: context.accountOwnerDid, childIssuer: leaf.issuer, childAttenuation: leaf.attenuation, now: context.now, parse: context.parseSiweCacao });\n const issued = signedIssue ?? { ...(parent.issuedAt === undefined ? {} : { earliest: parent.issuedAt - REGISTERED_AT_SKEW_MS }), latest: leaf.expiresAt * 1000 };\n return { ok: true, state: leaf.issuer === principalOf(context.agentDid) ? \"proven\" : \"chained\", expired: leafExpired || parent.time === \"expired\", claims, issued };\n}\n\nasync function policyV3Chain(record: StoredShareRecord, envelopeValue: unknown, context: ChainContext): Promise<ChainVerdict> {\n const parsed = shareEnvelopeV3Schema.safeParse(envelopeValue);\n if (!parsed.success) fail(\"Policy/v3 envelope is malformed\");\n const envelope = parsed.data;\n const ownerDid = envelope.policy.ownerDid;\n const binding = envelope.attestedEnforcerBinding;\n // Validity apart from time, judged inside the binding's own window; expiry is reported below.\n if (!await verifyEnvelopeV3At(envelope, ownerDid, Date.parse(binding.issuedAt))) fail(\"Policy/v3 chain does not verify\");\n if (envelope.policyCid !== record.policyCid || envelope.policyRoot.cid !== record.ownerDelegationCid || envelope.enforcementRoot.cid !== record.enforcementDelegationCid || envelope.shareId !== record.shareId\n || canonicalAddressSpelling(envelope.target.spaceId) !== canonicalAddressSpelling(record.target.spaceId) || envelope.resource.kind !== record.resource.kind || envelope.resource.path !== record.resource.path\n || (record.ownerDid !== undefined && record.ownerDid !== ownerDid)) fail(\"Policy/v3 chain is not this record's\");\n const root = parseSignedUcan(envelope.policyRoot.authorization, envelope.policyRoot.cid);\n const expiry = Math.min(Date.parse(binding.expiresAt), root.expiresAt * 1000, Date.parse(envelope.expiry));\n const expired = expiry <= context.now.getTime();\n const claims = [envelope.policyCid, envelope.policyRoot.cid, envelope.enforcementRoot.cid];\n const session = record.proofs?.session;\n const issued = around(Date.parse(binding.issuedAt));\n if (session === undefined) return { ok: true, state: \"unproven\", expired, claims, issued };\n // Roots are proofless (the node checks owner authority itself), so the CACAO is bound by audience, issuer and attenuation.\n const parent = await verifyOwnerSessionDelegation({ authorization: session, expectedCid: cacaoCid(session), accountOwnerDid: context.accountOwnerDid, childIssuer: root.issuer, childAttenuation: root.attenuation, now: context.now, parse: context.parseSiweCacao });\n return { ok: true, state: principalOf(ownerDid) === principalOf(context.agentDid) ? \"proven\" : \"chained\", expired: expired || parent.time === \"expired\", claims, issued };\n}\n\nasync function ownerPolicyV2Chain(record: StoredShareRecord, context: ChainContext): Promise<ChainVerdict> {\n const proofs = record.proofs!;\n if (proofs.ownerDelegation === undefined || proofs.enforcementDelegation === undefined || record.policyCid === undefined || record.ownerDelegationCid === undefined || record.enforcementDelegationCid === undefined) fail(\"Policy/v2 chain is incomplete\");\n const policyBytes = fromBase64Url(proofs.ownerPolicy!);\n if (await computeCid(policyBytes) !== record.policyCid) fail(\"Policy/v2 policy bytes do not match policyCid\");\n let envelope: { readonly domain?: unknown; readonly policy?: Record<string, unknown> };\n try { envelope = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(policyBytes)) as typeof envelope; } catch { fail(\"Policy/v2 policy is not JSON\"); }\n const policy = envelope.policy;\n const target = policy?.target as Record<string, unknown> | undefined;\n const resource = policy?.resource as Record<string, unknown> | undefined;\n if (envelope.domain !== \"xyz.tinycloud.share/policy/v2\\0\" || policy === undefined || typeof policy.shareKeyDid !== \"string\" || typeof policy.ownerDid !== \"string\" || typeof policy.contentSourceDigest !== \"string\"\n || policy.shareId !== record.shareId || typeof target?.spaceId !== \"string\" || canonicalAddressSpelling(target.spaceId) !== canonicalAddressSpelling(record.target.spaceId)\n || resource?.kind !== record.resource.kind || resource?.path !== record.resource.path\n || canonicalAddressSpelling(policy.ownerDid) !== canonicalAddressSpelling(context.accountOwnerDid)) fail(\"Policy/v2 policy is not this record's\");\n const shareKeyDid = policy.shareKeyDid;\n const enforcement = await verifyPolicyEnforcementDelegation(proofs.enforcementDelegation, record.enforcementDelegationCid);\n const facts = enforcement.facts;\n if (enforcement.issuerDid !== shareKeyDid || facts.policyCid !== record.policyCid || facts.ownerDelegationCid !== record.ownerDelegationCid || facts.shareId !== record.shareId\n || typeof facts.spaceId !== \"string\" || canonicalAddressSpelling(facts.spaceId) !== canonicalAddressSpelling(record.target.spaceId) || facts.path !== record.resource.path || typeof facts.expiresAt !== \"string\") fail(\"enforcement delegation is not this record's\");\n const owner = await verifyOwnerSessionDelegation({\n authorization: proofs.ownerDelegation, expectedCid: record.ownerDelegationCid, accountOwnerDid: context.accountOwnerDid, childIssuer: shareKeyDid,\n childAttenuation: { [kvResource(record)]: Object.fromEntries(record.actions.map((action) => [action, [{}]])) }, now: context.now, parse: context.parseSiweCacao,\n });\n let expired = owner.time === \"expired\" || Date.parse(facts.expiresAt as string) <= context.now.getTime();\n const claims = [record.policyCid, record.ownerDelegationCid, record.enforcementDelegationCid];\n let issued: { readonly earliest?: number; readonly latest?: number } = { latest: Date.parse(facts.expiresAt as string) };\n const key = context.registrationKey?.(record.target.nodeAudience);\n if (record.registrationCid !== undefined && proofs.registration !== undefined && key !== undefined) {\n let checked: CheckedRegistration;\n try {\n checked = checkRegistrationReceipt(proofs.registration, { policyCid: record.policyCid, ownerDelegationCid: record.ownerDelegationCid, enforcementDelegationCid: record.enforcementDelegationCid, policy, enforcementFacts: facts }, key, context.now);\n } catch {\n fail(\"registration receipt is invalid\");\n }\n const registration = checked.registration;\n if (registration.registrationCid !== record.registrationCid || registration.shareId !== record.shareId || registration.ownerDid !== policy.ownerDid || registration.shareKeyDid !== shareKeyDid || registration.enforcerDid !== enforcement.audienceDid) fail(\"registration receipt is not this record's\");\n expired ||= checked.status === \"expired\";\n claims.push(record.registrationCid);\n issued = around(Date.parse(registration.registeredAt));\n }\n return { ok: true, state: \"chained\", expired, claims, issued };\n}\n\n/** Verify the chain behind every CID a stored agent (or migrated) record claims. Never throws. */\nexport async function verifyAgentRecordChain(record: StoredShareRecord, context: ChainContext): Promise<ChainVerdict> {\n try {\n const proofs = record.proofs;\n if (proofs?.ownerPolicy !== undefined) return await ownerPolicyV2Chain(record, context);\n if (record.targetKind !== undefined && record.targetKind !== \"bearer\") {\n const material = record.deliveryMaterial;\n if (material === undefined) fail(\"Policy/v3 record carries no delivery material\");\n // The CIDs the record names for its sealed envelope are that envelope's.\n if ((record.shareCid !== undefined && record.shareCid !== material.shareCid) || (record.envelopeCid !== undefined && record.envelopeCid !== material.shareCid)) fail(\"Policy/v3 record names another sealed envelope\");\n let envelope: unknown;\n try { envelope = await openDeliveryEnvelope(material); } catch { fail(\"Policy/v3 delivery material does not open to its envelope\"); }\n return await policyV3Chain(record, envelope, context);\n }\n if (proofs?.link !== undefined) return await bearerChain(record, proofs.link, context);\n return { ok: false, detail: \"record carries no proof\" };\n } catch (error) {\n return { ok: false, detail: error instanceof ProofFailure ? error.message : \"proof does not verify\" };\n }\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport {\n canonicalize, computeCid, ed25519PublicKeyFromDidKey, fromBase64Url, shareEnvelopeV3Schema, verifyCompactUcanAuthorization, verifyEnvelopeV3SignatureOnly,\n type ShareEnvelopeV3,\n} from \"@tinycloud/share-envelope\";\n\n/**\n * Policy/v3 envelope verification at an explicit time. Security-sensitive.\n *\n * A line-for-line port of share-envelope `verifyEnvelopeV3` (`sign.ts`) whose\n * only change is that the enforcer-binding window is judged at `now` instead\n * of `Date.now()`, so a genuine but expired share can be reported as Expired\n * rather than invalid (design C4). It lives here, in the share-index entry,\n * so the package root (and the web-sdk bundle) does not change; keep it in\n * step with `verifyEnvelopeV3`. `test/share-index/policy-v3-parity.test.ts`\n * runs both on a frozen clock over a genuine envelope and single-field\n * tampers. Delete this copy once share-envelope's `verifyEnvelopeV3` takes a\n * `now` option.\n */\n\nconst ED25519_VERIFY_OPTS = { zip215: false } as const;\nconst POLICY_V1_SIGNATURE_DOMAIN = \"xyz.tinycloud.policy/policy/v1\\0\";\nconst POLICY_V2_SIGNATURE_DOMAIN = \"xyz.tinycloud.policy/policy/v2\\0\";\nconst CONTENT_SOURCE_V1_DOMAIN = \"xyz.tinycloud.policy/ContentSource/v1\\0\";\nconst POLICY_CAPABILITY_V1_DOMAIN = \"xyz.tinycloud.policy/PolicyCapability/v1\\0\";\nconst NATIVE_PROJECTION_V1_DOMAIN = \"xyz.tinycloud.policy/NativeProjection/v1\\0\";\nconst ATTESTED_ENFORCER_V2_DOMAIN = \"xyz.tinycloud.policy/AttestedEnforcerBinding/v2\\0\";\n\nfunction hex(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction base32Lower(bytes: Uint8Array): string {\n const alphabet = \"abcdefghijklmnopqrstuvwxyz234567\";\n let output = \"\";\n let buffer = 0;\n let bits = 0;\n for (const byte of bytes) {\n buffer = (buffer << 8) | byte;\n bits += 8;\n while (bits >= 5) {\n output += alphabet[(buffer >>> (bits - 5)) & 31];\n bits -= 5;\n }\n }\n if (bits > 0) output += alphabet[(buffer << (5 - bits)) & 31];\n return output;\n}\n\nexport async function verifyEnvelopeV3At(envelope: ShareEnvelopeV3, expectedSignerDid: string, now: number): Promise<boolean> {\n const parsed = shareEnvelopeV3Schema.parse(envelope);\n if (parsed.signature.signerDid !== expectedSignerDid || parsed.signature.signerDid !== parsed.policy.ownerDid || !verifyEnvelopeV3SignatureOnly(parsed)) return false;\n const { policy } = parsed;\n const unsignedPolicy = { ...policy } as Record<string, unknown>;\n delete unsignedPolicy.policyId;\n delete unsignedPolicy.signature;\n const policySignatureDomain = policy.schema === \"xyz.tinycloud.policy/policy/v2\"\n ? POLICY_V2_SIGNATURE_DOMAIN\n : POLICY_V1_SIGNATURE_DOMAIN;\n const policyDigest = sha256(new TextEncoder().encode(`${policySignatureDomain}${canonicalize(unsignedPolicy)}`));\n const policySignature = policy.signature;\n if (policySignature.suite !== \"Ed25519\" || policySignature.signerDid !== policy.ownerDid) return false;\n let policyPublicKey: Uint8Array;\n let policySignatureBytes: Uint8Array;\n try {\n policyPublicKey = ed25519PublicKeyFromDidKey(policy.ownerDid);\n policySignatureBytes = fromBase64Url(policySignature.value);\n } catch {\n return false;\n }\n if (policySignatureBytes.length !== 64 || !ed25519.verify(policySignatureBytes, policyDigest, policyPublicKey, ED25519_VERIFY_OPTS)) return false;\n const policyIdDigest = policyDigest;\n if (policy.policyId !== `pol_${base32Lower(policyIdDigest)}`) return false;\n const policyBytes = new TextEncoder().encode(canonicalize(policy));\n if ((await computeCid(policyBytes)) !== parsed.policyCid) return false;\n const sourceDigest = sha256(new TextEncoder().encode(`${CONTENT_SOURCE_V1_DOMAIN}${canonicalize(policy.contentSource)}`));\n if (hex(sourceDigest) !== parsed.contentSourceDigestHex) return false;\n const sortedCapabilities = [...policy.capabilityCeiling].sort((left, right) => canonicalize(left).localeCompare(canonicalize(right)));\n const capabilityCeilingHashHex = hex(sha256(new TextEncoder().encode(`${POLICY_CAPABILITY_V1_DOMAIN}${canonicalize(sortedCapabilities)}`)));\n const nativeProjection = sortedCapabilities.map((capability) => capability.kind === \"encryption\"\n ? { service: \"tinycloud.encryption\", space: capability.resource, path: capability.resource, actions: [capability.action] }\n : { service: \"tinycloud.kv\", space: capability.resource.slice(0, capability.resource.indexOf(\"/kv/\")), path: capability.resource.split(\"/kv/\")[1], actions: [...capability.actions], caveat: { type: \"xyz.tinycloud.resource/selector\", kind: capability.selector, value: capability.resource } })\n .sort((left, right) => canonicalize(left).localeCompare(canonicalize(right)));\n const nativeProjectionHashHex = hex(sha256(new TextEncoder().encode(`${NATIVE_PROJECTION_V1_DOMAIN}${canonicalize(nativeProjection)}`)));\n const expectedAttenuation = Object.fromEntries(sortedCapabilities.map((capability) => capability.kind === \"encryption\"\n ? [capability.resource, { [capability.action]: [{}] }]\n : [capability.resource, Object.fromEntries(capability.actions.map((action) => [action, [{ kind: capability.selector, type: \"xyz.tinycloud.resource/selector\", value: capability.resource }]]))]));\n const kv = policy.capabilityCeiling.find((capability) => capability.kind === \"kv\");\n const expectedKvActions = parsed.actions.flatMap((action) => action === \"read\" ? [\"tinycloud.kv/get\", \"tinycloud.kv/metadata\"] : action === \"list\" ? [\"tinycloud.kv/list\"] : [\"tinycloud.kv/put\"]);\n const marker = parsed.contentSource.kvResource.indexOf(\"/kv/\");\n const resourceSpace = marker < 1 ? \"\" : parsed.contentSource.kvResource.slice(0, marker);\n const resourcePath = marker < 1 ? \"\" : parsed.contentSource.kvResource.slice(marker + 4);\n if (parsed.shareId !== parsed.contentSource.shareId || resourceSpace !== parsed.target.spaceId || resourcePath !== parsed.resource.path.replace(/\\/$/, \"\") || parsed.resource.kind !== parsed.contentSource.selector || kv?.kind !== \"kv\" || expectedKvActions.some((action) => !kv.actions.includes(action as never)) || parsed.encryptionNetwork !== parsed.contentSource.encryptionNetwork || parsed.contentSource.keyVersion <= 0 || (policy.expiresAt !== undefined && Date.parse(parsed.expiry) > Date.parse(policy.expiresAt))) return false;\n const binding = parsed.attestedEnforcerBinding;\n const { signature: bindingSignature, ...unsignedBinding } = binding;\n const expectedBindingDigestHex = hex(sha256(new TextEncoder().encode(canonicalize({ enforcerDid: binding.enforcerDid, nodeAudience: binding.nodeAudience }))));\n if (binding.nodeAudience !== parsed.target.nodeAudience || binding.attestationBindingDigestHex !== expectedBindingDigestHex || bindingSignature.signerDid !== binding.nodeAudience || bindingSignature.suite !== \"Ed25519\" || Date.parse(binding.issuedAt) > now || Date.parse(binding.expiresAt) <= now || Date.parse(binding.expiresAt) < Date.parse(parsed.expiry)) return false;\n try {\n const digest = sha256(new TextEncoder().encode(`${ATTESTED_ENFORCER_V2_DOMAIN}${canonicalize(unsignedBinding)}`));\n if (!ed25519.verify(fromBase64Url(bindingSignature.value), digest, ed25519PublicKeyFromDidKey(binding.nodeAudience), ED25519_VERIFY_OPTS)) return false;\n } catch {\n return false;\n }\n if (parsed.policyRoot.role !== \"policy-authority\" || parsed.enforcementRoot.role !== \"policy-enforcement\" || parsed.policyRoot.cid === parsed.enforcementRoot.cid) return false;\n try {\n const policyRoot = verifyCompactUcanAuthorization(parsed.policyRoot.authorization, parsed.policyRoot.cid);\n const enforcementRoot = verifyCompactUcanAuthorization(parsed.enforcementRoot.authorization, parsed.enforcementRoot.cid);\n const policyFact = policyRoot.payload.fct[0];\n const enforcementFact = enforcementRoot.payload.fct[0];\n const common = [\"ownerDid\", \"policyId\", \"policyDigestHex\", \"policyCid\", \"contentSourceDigestHex\", \"capabilityCeilingHashHex\", \"nativeProjectionHashHex\", \"nodeAudience\"];\n const policyKeys = [...common, \"role\", \"mode\"];\n const enforcementKeys = [...policyKeys, \"enforcerDid\"];\n if (Object.keys(policyFact).length !== policyKeys.length || policyKeys.some((key) => !(key in policyFact)) || Object.keys(enforcementFact).length !== enforcementKeys.length || enforcementKeys.some((key) => !(key in enforcementFact)) || policyRoot.payload.prf.length !== 0 || enforcementRoot.payload.prf.length !== 0 || policyRoot.payload.iss.split(\"#\", 1)[0] !== policy.ownerDid || enforcementRoot.payload.iss.split(\"#\", 1)[0] !== policy.ownerDid || policyRoot.payload.nbf !== enforcementRoot.payload.nbf || policyRoot.payload.exp !== enforcementRoot.payload.exp || canonicalize(policyRoot.payload.att) !== canonicalize(expectedAttenuation) || canonicalize(enforcementRoot.payload.att) !== canonicalize(expectedAttenuation) || policyFact.role !== \"policy-authority\" || policyFact.mode !== \"policy-source\" || \"enforcerDid\" in policyFact || enforcementFact.role !== \"policy-enforcement\" || enforcementFact.mode !== \"conditional-mint\" || policyRoot.payload.aud !== `did:tinycloud:policy:${hex(policyIdDigest)}` || enforcementRoot.payload.aud !== binding.enforcerDid || enforcementFact.enforcerDid !== binding.enforcerDid || common.some((key) => policyFact[key] !== enforcementFact[key]) || policyFact.ownerDid !== policy.ownerDid || policyFact.policyId !== policy.policyId || policyFact.policyDigestHex !== hex(policyIdDigest) || policyFact.policyCid !== parsed.policyCid || policyFact.contentSourceDigestHex !== parsed.contentSourceDigestHex || policyFact.capabilityCeilingHashHex !== capabilityCeilingHashHex || policyFact.nativeProjectionHashHex !== nativeProjectionHashHex || policyFact.nodeAudience !== binding.nodeAudience || policyRoot.payload.exp * 1000 < Date.parse(parsed.expiry)) return false;\n } catch {\n return false;\n }\n return true;\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 { 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 const prefixCodePoint = prefix.codePointAt(0)\n /* c8 ignore next 3 */\n if (prefixCodePoint === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefixCodePoint\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 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, alphabetIdx: Record<string, number>, bitsPerChar: number, name: string): Uint8Array {\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 = alphabetIdx[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\nfunction createAlphabetIdx (alphabet: string): Record<string, number> {\n // Build the character lookup table:\n const alphabetIdx: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n alphabetIdx[alphabet[i]] = i\n }\n return alphabetIdx\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 const alphabetIdx = createAlphabetIdx(alphabet)\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, alphabetIdx, bitsPerChar, name)\n }\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","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","/* 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","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","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\n/**\n * Used to check that the passed multihash has the passed code\n */\nexport function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {\n return digest.code === code\n}\n","import { base32 } from './bases/base32.js'\nimport { base36 } from './bases/base36.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 case base36.prefix: {\n const decoder = base ?? base36\n return [base36.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32, base36 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 { ed25519 } from \"@noble/curves/ed25519\";\nimport { canonicalize, fromBase64Url } from \"@tinycloud/share-envelope\";\nimport { computeOwnerShareRegistrationCid, OWNER_SHARE_REGISTRATION_DOMAIN, type OwnerSharePolicyRegistration } from \"../../owner-policy.js\";\n\n/**\n * Policy/v2 node registration receipt, with expiry reported apart from\n * invalidity (design C4). Security-sensitive.\n *\n * The package's `validateOwnerSharePolicyRegistration` refuses an expired\n * receipt before checking anything else, so an expired-but-genuine receipt\n * cannot be told from a forged one. This verifier makes the same checks\n * (exact shape; binding to the chain's CIDs; every field the original compares\n * against the canonical policy and the enforcement facts; canonical times;\n * the CID over the canonical core; the node's Ed25519 signature against the\n * registration key from the share public config) and then reports `expired`\n * separately. `registrationCid` is not inside the node-signed core, so the\n * CID-over-core check is what binds it.\n */\nexport interface RegistrationKey {\n readonly kid: string;\n /** Raw 32-byte Ed25519 key, or its 34-byte did:key multicodec form. */\n readonly publicKey: Uint8Array;\n}\n\nexport interface CheckedRegistration {\n readonly status: \"valid\" | \"expired\";\n readonly registration: OwnerSharePolicyRegistration;\n}\n\nconst REGISTRATION_KEYS = [\"registrationCid\", \"policyCid\", \"ownerDelegationCid\", \"enforcementDelegationCid\", \"ownerDid\", \"shareKeyDid\", \"enforcerDid\", \"shareId\", \"recipientMatcher\", \"target\", \"resource\", \"actions\", \"contentSource\", \"contentSourceDigest\", \"registeredAt\", \"expiresAt\"];\n\nfunction exactObject(value: unknown, keys: readonly string[]): Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) throw new Error(\"registration receipt is malformed\");\n const own = Object.keys(value);\n if (own.length !== keys.length || !keys.every((key) => own.includes(key))) throw new Error(\"registration receipt has unknown or missing fields\");\n return value as Record<string, unknown>;\n}\n\nfunction canonicalTime(value: unknown): number {\n if (typeof value !== \"string\") throw new Error(\"registration time is invalid\");\n const parsed = Date.parse(value);\n if (!Number.isFinite(parsed) || new Date(parsed).toISOString() !== value) throw new Error(\"registration time is not canonical\");\n return parsed;\n}\n\nfunction matches(left: unknown, right: unknown): boolean {\n return left !== undefined && right !== undefined && canonicalize(left) === canonicalize(right);\n}\n\n/** Throws when the receipt does not verify; reports a verified receipt past its `expiresAt` as `expired`. */\nexport function checkRegistrationReceipt(\n value: unknown,\n expected: {\n readonly policyCid: string; readonly ownerDelegationCid: string; readonly enforcementDelegationCid: string;\n /** The `policy` object of the canonical Policy/v2 envelope whose bytes hash to `policyCid`. */\n readonly policy: Readonly<Record<string, unknown>>;\n /** The verified enforcement delegation's facts. */\n readonly enforcementFacts: Readonly<Record<string, unknown>>;\n },\n key: RegistrationKey,\n now: Date,\n): CheckedRegistration {\n const root = exactObject(value, [\"registration\", \"proof\"]);\n const registration = exactObject(root.registration, REGISTRATION_KEYS);\n const proof = exactObject(root.proof, [\"alg\", \"kid\", \"signature\"]);\n const { policy, enforcementFacts: facts } = expected;\n if (registration.policyCid !== expected.policyCid || registration.ownerDelegationCid !== expected.ownerDelegationCid || registration.enforcementDelegationCid !== expected.enforcementDelegationCid || registration.contentSourceDigest !== policy.contentSourceDigest) {\n throw new Error(\"registration is not bound to the record's chain\");\n }\n // The same comparisons as validateOwnerSharePolicyRegistration: the receipt restates the policy and the facts exactly.\n const target = policy.target as Record<string, unknown> | undefined;\n const resource = policy.resource as Record<string, unknown> | undefined;\n const registrationTarget = registration.target as Record<string, unknown> | undefined;\n const registrationResource = registration.resource as Record<string, unknown> | undefined;\n if (typeof target?.origin !== \"string\" || typeof target.nodeAudience !== \"string\" || typeof target.enforcerDid !== \"string\" || typeof target.spaceId !== \"string\"\n || typeof resource?.kind !== \"string\" || ![\"exact\", \"prefix\"].includes(resource.kind) || typeof resource.path !== \"string\" || !Array.isArray(policy.actions)\n || registrationTarget === undefined || registrationResource === undefined\n || policy.ownerDid !== registration.ownerDid || policy.shareKeyDid !== registration.shareKeyDid || policy.shareId !== registration.shareId\n || !matches(policy.recipientMatcher, registration.recipientMatcher)\n || target.origin !== registrationTarget.origin || target.nodeAudience !== registrationTarget.nodeAudience || target.enforcerDid !== registration.enforcerDid || target.spaceId !== registrationTarget.spaceId\n || resource.kind !== registrationResource.kind || resource.path !== registrationResource.path\n || !matches(policy.actions, registration.actions) || !matches(policy.contentSource, registration.contentSource) || policy.expiresAt !== registration.expiresAt\n || facts.ownerDelegationCid !== registration.ownerDelegationCid || facts.policyCid !== registration.policyCid || facts.shareKeyDid !== registration.shareKeyDid || facts.enforcerDid !== registration.enforcerDid\n || facts.nodeAudience !== registrationTarget.nodeAudience || facts.spaceId !== registrationTarget.spaceId || facts.path !== registrationResource.path\n || !matches(facts.actions, registration.actions) || facts.expiresAt !== registration.expiresAt) {\n throw new Error(\"registration is not bound to the canonical policy\");\n }\n canonicalTime(registration.registeredAt);\n const expiresAt = canonicalTime(registration.expiresAt);\n const { registrationCid, ...core } = registration;\n if (typeof registrationCid !== \"string\" || computeOwnerShareRegistrationCid(core as unknown as Omit<OwnerSharePolicyRegistration, \"registrationCid\">) !== registrationCid) throw new Error(\"registration CID does not match its canonical core\");\n if (proof.alg !== \"EdDSA\" || proof.kid !== key.kid || typeof proof.signature !== \"string\") throw new Error(\"registration proof key is not trusted\");\n const publicKey = key.publicKey.length === 34 && key.publicKey[0] === 0xed && key.publicKey[1] === 0x01 ? key.publicKey.slice(2) : key.publicKey;\n if (publicKey.length !== 32) throw new Error(\"registration key is invalid\");\n const signature = fromBase64Url(proof.signature);\n const signed = new TextEncoder().encode(`${OWNER_SHARE_REGISTRATION_DOMAIN}${canonicalize(core)}`);\n if (signature.length !== 64 || !ed25519.verify(signature, signed, publicKey, { zip215: false })) throw new Error(\"registration proof signature is invalid\");\n return { status: expiresAt <= now.getTime() ? \"expired\" : \"valid\", registration: registration as unknown as OwnerSharePolicyRegistration };\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { base32 } from \"multiformats/bases/base32\";\nimport { CID } from \"multiformats/cid\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\nconst SHA256_CODE = 0x12;\nimport * as raw from \"multiformats/codecs/raw\";\nimport { base58btc } from \"multiformats/bases/base58\";\nimport { canonicalize } from \"@tinycloud/share-envelope\";\n\nexport interface OwnerDelegationReceipt {\n readonly delegationCid: string;\n readonly signedDagCbor: Uint8Array;\n readonly delegation: { readonly delegateDID: string; readonly spaceId: string; readonly path: string; readonly actions: readonly string[]; readonly expiry: Date };\n /** Exact service-scoped capabilities encoded in the signed owner delegation. */\n readonly permissions?: readonly OwnerDelegationPermission[];\n}\n\nexport interface OwnerDelegationPermission {\n readonly service: string;\n readonly path: string;\n readonly actions: readonly string[];\n}\n\ninterface CreateOwnerDelegationBase {\n readonly delegateDid: string;\n readonly spaceId: string;\n readonly expiresAt: Date;\n}\n\nexport type CreateOwnerDelegationParams = CreateOwnerDelegationBase & (\n | {\n readonly path: string;\n readonly actions: readonly string[];\n readonly permissions?: never;\n }\n | {\n readonly permissions: readonly OwnerDelegationPermission[];\n readonly path?: never;\n readonly actions?: never;\n }\n);\n\nconst MAX_CONTENT_BYTES = 100 * 1024 * 1024;\nexport const POLICY_ENFORCEMENT_DOMAIN = \"xyz.tinycloud.share/policy-enforcement/v2\\0\";\nconst POLICY_DOMAIN = \"xyz.tinycloud.share/policy/v2\\0\";\nexport const OWNER_SHARE_REGISTRATION_DOMAIN = \"xyz.tinycloud.share/policy-registration/v2\\0\";\n\nexport type OwnerShareAction = \"tinycloud.kv/get\" | \"tinycloud.kv/list\" | \"tinycloud.kv/metadata\" | \"tinycloud.kv/put\";\nexport interface OwnerShareDecryption {\n readonly networkId: string;\n readonly action: \"tinycloud.encryption/decrypt\";\n}\nexport type OwnerShareMatcher =\n | { readonly kind: \"exactEmail\"; readonly value: string }\n | { readonly kind: \"emailDomain\"; readonly value: string }\n | { readonly kind: \"recipientDid\"; readonly value: string }\n | { readonly kind: \"bearer\" };\n\nexport interface OwnerSharePolicyV2 {\n readonly type: \"TinyCloudSharePolicy\";\n readonly version: 2;\n readonly shareId: string;\n readonly ownerDid: string;\n readonly shareKeyDid: string;\n readonly recipientMatcher: OwnerShareMatcher;\n readonly target: { readonly origin: string; readonly nodeAudience: string; readonly enforcerDid: string; readonly spaceId: string };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly OwnerShareAction[];\n readonly decryption?: OwnerShareDecryption;\n readonly contentSource: { readonly kind: \"kv\"; readonly space: string; readonly path: string; readonly action: \"tinycloud.kv/get\" };\n readonly contentSourceDigest: string;\n readonly ownerDelegationCid: string;\n readonly expiresAt: string;\n}\n\nexport interface DelegatedShareKey {\n readonly did: string;\n readonly publicKey: Uint8Array;\n readonly extractable: boolean;\n /** The underlying WebCrypto private key handle; private JWK material is never returned. */\n readonly cryptoKey: CryptoKey;\n sign(bytes: Uint8Array): Promise<Uint8Array>;\n clear(): void;\n}\n\nexport interface SignedDelegation {\n readonly cid: string;\n readonly dagCbor: string;\n readonly issuerDid: string;\n readonly audienceDid: string;\n readonly facts: Record<string, string | readonly string[]>;\n readonly signature: string;\n}\n\nexport interface RegisterOwnerSharePolicyParams {\n readonly policy: { readonly bytes: Uint8Array; readonly cid: string; readonly proof: string };\n readonly ownerDelegation: OwnerDelegationReceipt;\n readonly enforcementDelegation: SignedDelegation;\n readonly contentSourceDigest: string;\n /** The enrolled receipt key from the node trust bundle. */\n readonly nodeProof?: { readonly kid: string; readonly publicKey: Uint8Array };\n}\n\nexport interface OwnerSharePolicyRegistration {\n readonly registrationCid: string;\n readonly policyCid: string;\n readonly ownerDelegationCid: string;\n readonly enforcementDelegationCid: string;\n readonly ownerDid: string;\n readonly shareKeyDid: string;\n readonly enforcerDid: string;\n readonly shareId: string;\n readonly recipientMatcher: OwnerShareMatcher;\n readonly target: { readonly origin: string; readonly nodeAudience: string; readonly spaceId: string };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly OwnerShareAction[];\n readonly contentSource: { readonly kind: \"kv\"; readonly space: string; readonly path: string; readonly action: \"tinycloud.kv/get\" };\n readonly contentSourceDigest: string;\n readonly registeredAt: string;\n readonly expiresAt: string;\n}\n\nexport interface OwnerSharePolicyRegistrationReceipt {\n readonly registration: OwnerSharePolicyRegistration;\n readonly proof: { readonly alg: \"EdDSA\"; readonly kid: string; readonly signature: string };\n}\n\nfunction bytes(value: Uint8Array): Uint8Array { return new Uint8Array(value); }\n\nfunction b64(value: Uint8Array): string {\n if (typeof btoa === \"function\") {\n let binary = \"\";\n for (const byte of value) binary += String.fromCharCode(byte);\n return btoa(binary).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/g, \"\");\n }\n if (typeof Buffer !== \"undefined\") return Buffer.from(value).toString(\"base64url\");\n throw new Error(\"base64url encoding is unavailable\");\n}\n\nfunction fromB64(value: string): Uint8Array {\n if (!/^[A-Za-z0-9_-]+$/.test(value)) throw new Error(\"owner-share value is not canonical base64url\");\n if (typeof atob === \"function\") {\n const padded = value.replace(/-/g, \"+\").replace(/_/g, \"/\") + \"=\".repeat((4 - value.length % 4) % 4);\n return Uint8Array.from(atob(padded), (character) => character.charCodeAt(0));\n }\n if (typeof Buffer !== \"undefined\") return new Uint8Array(Buffer.from(value, \"base64url\"));\n throw new Error(\"base64url decoding is unavailable\");\n}\n\nfunction cid(bytesValue: Uint8Array): string {\n return CID.createV1(raw.code, createDigest(SHA256_CODE, sha256(bytesValue))).toString(base32.encoder);\n}\n\nfunction digest(bytesValue: Uint8Array): string { return b64(sha256(bytesValue)); }\n\nfunction didKeyFromEd25519PublicKey(publicKey: Uint8Array): string {\n if (publicKey.length !== 32) throw new Error(\"share key public key must be 32 bytes\");\n const prefixed = new Uint8Array(34);\n prefixed.set([0xed, 0x01]);\n prefixed.set(publicKey, 2);\n return `did:key:${base58btc.encode(prefixed)}`;\n}\n\nfunction assertCanonical(value: string, label: string): void {\n if (value !== canonicalize(JSON.parse(value))) throw new Error(`${label} is not canonical JSON`);\n}\n\nexport function dagCborEncode(value: unknown): Uint8Array {\n const output: number[] = [];\n const writeHeader = (major: number, length: number): void => {\n if (!Number.isSafeInteger(length) || length < 0) throw new Error(\"DAG-CBOR value is too large\");\n if (length < 24) output.push((major << 5) | length);\n else if (length < 0x100) output.push((major << 5) | 24, length);\n else if (length < 0x10000) output.push((major << 5) | 25, length >> 8, length & 0xff);\n else throw new Error(\"DAG-CBOR value is too large\");\n };\n const write = (item: unknown): void => {\n if (item === null) { output.push(0xf6); return; }\n if (item === false) { output.push(0xf4); return; }\n if (item === true) { output.push(0xf5); return; }\n if (typeof item === \"string\") {\n const encoded = new TextEncoder().encode(item);\n writeHeader(3, encoded.length); output.push(...encoded); return;\n }\n if (typeof item === \"number\" && Number.isSafeInteger(item)) {\n if (item >= 0) writeHeader(0, item);\n else writeHeader(1, -1 - item);\n return;\n }\n if (Array.isArray(item)) {\n writeHeader(4, item.length); item.forEach(write); return;\n }\n if (typeof item === \"object\" && item !== null) {\n const entries = Object.entries(item as Record<string, unknown>).map(([key, value]) => {\n const keyBytes = dagCborEncode(key);\n return { key, value, keyBytes };\n }).sort((left, right) => {\n if (left.keyBytes.length !== right.keyBytes.length) return left.keyBytes.length - right.keyBytes.length;\n for (let index = 0; index < left.keyBytes.length; index += 1) {\n const leftByte = left.keyBytes[index] ?? 0;\n const rightByte = right.keyBytes[index] ?? 0;\n if (leftByte !== rightByte) return leftByte - rightByte;\n }\n return 0;\n });\n writeHeader(5, entries.length);\n entries.forEach(({ key, value }) => { write(key); write(value); });\n return;\n }\n throw new Error(\"Unsupported DAG-CBOR value\");\n };\n write(value);\n return Uint8Array.from(output);\n}\n\nfunction assertObject(value: unknown, keys: readonly string[], label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(`${label} is invalid`);\n const record = value as Record<string, unknown>;\n if (Object.keys(record).length !== keys.length || keys.some((key) => !Object.prototype.hasOwnProperty.call(record, key))) throw new Error(`${label} has unknown or missing fields`);\n return record;\n}\n\nexport async function createDelegatedShareKey(options: { readonly extractable: boolean }): Promise<DelegatedShareKey> {\n if (!globalThis.crypto?.subtle) throw new Error(\"WebCrypto Ed25519 is required for delegated share keys\");\n const generated = await crypto.subtle.generateKey({ name: \"Ed25519\" }, options.extractable, [\"sign\", \"verify\"]) as CryptoKeyPair;\n const privateKey = generated.privateKey;\n const publicKey = new Uint8Array(await crypto.subtle.exportKey(\"raw\", generated.publicKey));\n let cleared = false;\n const key: DelegatedShareKey = {\n did: didKeyFromEd25519PublicKey(publicKey),\n publicKey: bytes(publicKey),\n extractable: options.extractable,\n cryptoKey: privateKey,\n async sign(input) {\n if (cleared) throw new Error(\"share key has been cleared\");\n return new Uint8Array(await crypto.subtle.sign({ name: \"Ed25519\" }, privateKey, input));\n },\n clear() { cleared = true; },\n };\n return key;\n}\n\n/**\n * Rehydrate a signer wrapper around a `DelegatedShareKey`'s private\n * `CryptoKey` handle that was persisted (e.g. via IndexedDB structured\n * clone) and recovered after a reload. `privateKey` must be the same\n * non-extractable Ed25519 `CryptoKey` originally produced by\n * {@link createDelegatedShareKey}.\n */\nexport function restoreDelegatedShareKey(input: { readonly privateKey: CryptoKey; readonly publicKey: Uint8Array; readonly extractable: boolean }): DelegatedShareKey {\n let cleared = false;\n return {\n did: didKeyFromEd25519PublicKey(input.publicKey),\n publicKey: bytes(input.publicKey),\n extractable: input.extractable,\n cryptoKey: input.privateKey,\n async sign(signBytes) {\n if (cleared) throw new Error(\"share key has been cleared\");\n if (!globalThis.crypto?.subtle) throw new Error(\"WebCrypto Ed25519 is required for delegated share keys\");\n return new Uint8Array(await crypto.subtle.sign({ name: \"Ed25519\" }, input.privateKey, signBytes));\n },\n clear() { cleared = true; },\n };\n}\n\nexport async function createPolicyEnforcementDelegation(input: {\n readonly ownerDelegation: OwnerDelegationReceipt;\n readonly shareKey: DelegatedShareKey;\n readonly enforcerDid: string;\n readonly policyCid: string;\n readonly shareId: string;\n readonly spaceId: string;\n readonly nodeAudience: string;\n readonly path: string;\n readonly actions: readonly OwnerShareAction[];\n readonly contentSourceDigest: string;\n readonly expiresAt: string;\n}): Promise<SignedDelegation> {\n if (input.shareKey.did.length === 0 || input.ownerDelegation.delegationCid.length === 0) throw new Error(\"owner delegation and share key are required\");\n const facts = {\n ownerDelegationCid: input.ownerDelegation.delegationCid,\n policyCid: input.policyCid,\n shareId: input.shareId,\n shareKeyDid: input.shareKey.did,\n enforcerDid: input.enforcerDid,\n nodeAudience: input.nodeAudience,\n spaceId: input.spaceId,\n path: input.path,\n actions: [...input.actions],\n contentSourceDigest: input.contentSourceDigest,\n expiresAt: input.expiresAt,\n } satisfies Record<string, string | readonly string[]>;\n const unsigned = { type: \"TinyCloudSharePolicyEnforcement\", version: 2, issuerDid: input.shareKey.did, audienceDid: input.enforcerDid, facts };\n const dagCborBytes = dagCborEncode({ domain: POLICY_ENFORCEMENT_DOMAIN, unsigned });\n const signature = b64(await input.shareKey.sign(dagCborBytes));\n return { cid: cid(dagCborBytes), dagCbor: b64(dagCborBytes), issuerDid: input.shareKey.did, audienceDid: input.enforcerDid, facts, signature };\n}\n\nexport async function canonicalOwnerSharePolicy(policy: OwnerSharePolicyV2): Promise<{ readonly bytes: Uint8Array; readonly cid: string; readonly digest: string }> {\n const text = canonicalize({ domain: POLICY_DOMAIN, policy });\n const policyBytes = new TextEncoder().encode(text);\n return { bytes: policyBytes, cid: cid(policyBytes), digest: digest(policyBytes) };\n}\n\nexport function computeOwnerShareRegistrationCid(registration: Omit<OwnerSharePolicyRegistration, \"registrationCid\">): string {\n return cid(new TextEncoder().encode(canonicalize(registration)));\n}\n\nexport function validateOwnerSharePolicyRegistration(value: unknown, expected: RegisterOwnerSharePolicyParams): OwnerSharePolicyRegistrationReceipt {\n if (cid(expected.policy.bytes) !== expected.policy.cid) throw new Error(\"submitted owner-share policy bytes do not match its CID\");\n const root = assertObject(value, [\"registration\", \"proof\"], \"owner-share registration response\");\n const registration = assertObject(root.registration, [\"registrationCid\", \"policyCid\", \"ownerDelegationCid\", \"enforcementDelegationCid\", \"ownerDid\", \"shareKeyDid\", \"enforcerDid\", \"shareId\", \"recipientMatcher\", \"target\", \"resource\", \"actions\", \"contentSource\", \"contentSourceDigest\", \"registeredAt\", \"expiresAt\"], \"owner-share registration\");\n const proof = assertObject(root.proof, [\"alg\", \"kid\", \"signature\"], \"owner-share registration proof\");\n if (registration.policyCid !== expected.policy.cid || registration.ownerDelegationCid !== expected.ownerDelegation.delegationCid || registration.enforcementDelegationCid !== expected.enforcementDelegation.cid || registration.contentSourceDigest !== expected.contentSourceDigest) throw new Error(\"owner-share registration is not bound to the submitted chain\");\n let policyValue: Record<string, unknown>;\n try { policyValue = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(expected.policy.bytes)) as Record<string, unknown>; } catch { throw new Error(\"owner-share policy is not valid JSON\"); }\n const policy = policyValue.policy as Record<string, unknown> | undefined;\n if (policyValue.domain !== \"xyz.tinycloud.share/policy/v2\\0\" || policy === undefined || Array.isArray(policy)) throw new Error(\"owner-share policy envelope is invalid\");\n const target = policy.target as Record<string, unknown> | undefined;\n const resource = policy.resource as Record<string, unknown> | undefined;\n const registrationTarget = registration.target as Record<string, unknown>;\n const registrationResource = registration.resource as Record<string, unknown>;\n const enforcementFacts = expected.enforcementDelegation.facts;\n if (typeof target?.origin !== \"string\" || typeof target.nodeAudience !== \"string\" || typeof target.enforcerDid !== \"string\" || typeof target.spaceId !== \"string\" || typeof resource?.kind !== \"string\" || ![\"exact\", \"prefix\"].includes(resource.kind) || typeof resource?.path !== \"string\" || !Array.isArray(policy.actions) || policy.ownerDid !== registration.ownerDid || policy.shareKeyDid !== registration.shareKeyDid || policy.shareId !== registration.shareId || canonicalize(policy.recipientMatcher) !== canonicalize(registration.recipientMatcher) || target.origin !== registrationTarget.origin || target.nodeAudience !== registrationTarget.nodeAudience || target.enforcerDid !== registration.enforcerDid || target.spaceId !== registrationTarget.spaceId || resource.kind !== registrationResource.kind || resource.path !== registrationResource.path || canonicalize(policy.actions) !== canonicalize(registration.actions) || canonicalize(policy.contentSource) !== canonicalize(registration.contentSource) || policy.expiresAt !== registration.expiresAt || policy.contentSourceDigest !== registration.contentSourceDigest || enforcementFacts.ownerDelegationCid !== registration.ownerDelegationCid || enforcementFacts.policyCid !== registration.policyCid || enforcementFacts.shareKeyDid !== registration.shareKeyDid || enforcementFacts.enforcerDid !== registration.enforcerDid || enforcementFacts.nodeAudience !== registrationTarget.nodeAudience || enforcementFacts.spaceId !== registrationTarget.spaceId || enforcementFacts.path !== registrationResource.path || canonicalize(enforcementFacts.actions) !== canonicalize(registration.actions) || enforcementFacts.expiresAt !== registration.expiresAt) throw new Error(\"owner-share registration is not bound to the canonical policy\");\n if (typeof registration.registrationCid !== \"string\" || typeof registration.expiresAt !== \"string\" || typeof registration.registeredAt !== \"string\") throw new Error(\"owner-share registration timestamps are invalid\");\n if (new Date(registration.expiresAt).toISOString() !== registration.expiresAt || Date.parse(registration.expiresAt) <= Date.now()) throw new Error(\"owner-share registration is expired or non-canonical\");\n const { registrationCid: _registrationCid, ...registrationCore } = registration;\n if (computeOwnerShareRegistrationCid(registrationCore as unknown as Omit<OwnerSharePolicyRegistration, \"registrationCid\">) !== registration.registrationCid) throw new Error(\"owner-share registration CID does not match its canonical core\");\n if (proof.alg !== \"EdDSA\" || typeof proof.kid !== \"string\" || typeof proof.signature !== \"string\") throw new Error(\"owner-share registration proof is invalid\");\n const proofKey = expected.nodeProof;\n if (proofKey === undefined) throw new Error(\"owner-share registration proof trust material is required\");\n if (proof.kid !== proofKey.kid) throw new Error(\"owner-share registration proof key is not trusted\");\n const encodedKid = proofKey.publicKey;\n if (encodedKid.length === 34 && encodedKid[0] === 0xed && encodedKid[1] === 0x01) {\n // did:key multicodec prefix is removed below.\n } else if (encodedKid.length !== 32) throw new Error(\"owner-share registration proof key is invalid\");\n const publicKey = encodedKid.length === 34 ? encodedKid.slice(2) : encodedKid;\n const signatureBytes = fromB64(proof.signature);\n const signedBytes = new TextEncoder().encode(`${OWNER_SHARE_REGISTRATION_DOMAIN}${canonicalize(registrationCore)}`);\n if (signatureBytes.length !== 64 || !ed25519.verify(signatureBytes, signedBytes, publicKey)) throw new Error(\"owner-share registration proof signature is invalid\");\n return { registration: registration as unknown as OwnerSharePolicyRegistration, proof: proof as unknown as OwnerSharePolicyRegistrationReceipt[\"proof\"] };\n}\n\n/** Validate the exact UTF-8 response bytes emitted by the registration route. */\nexport function validateOwnerSharePolicyRegistrationBytes(bytesValue: Uint8Array, expected: RegisterOwnerSharePolicyParams): OwnerSharePolicyRegistrationReceipt {\n let value: unknown;\n try {\n value = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytesValue));\n } catch {\n throw new Error(\"owner-share registration response is not valid UTF-8 JSON\");\n }\n return validateOwnerSharePolicyRegistration(value, expected);\n}\n\nexport { MAX_CONTENT_BYTES };\n","import { coerce } from '../bytes.js'\nimport type { ArrayBufferView, 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> | ArrayBufferView<Uint8Array>): Uint8Array {\n return coerce(data)\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { computeCid, ed25519PublicKeyFromDidKey, fromBase64Url } from \"@tinycloud/share-envelope\";\nimport { POLICY_ENFORCEMENT_DOMAIN, dagCborEncode, type SignedDelegation } from \"../../owner-policy.js\";\n\n/**\n * Verifier for a Policy/v2 enforcement delegation\n * (`TinyCloudSharePolicyEnforcement`, signed by the share key;\n * `createPolicyEnforcementDelegation`). No verifier existed before\n * (design C §5 check 7, C4).\n *\n * Checks, all fail-closed:\n * - the DAG-CBOR bytes are exactly the canonical encoding of\n * `{ domain, unsigned: { type, version: 2, issuerDid, audienceDid, facts } }`\n * built from the delegation's own fields (so every reported field is signed);\n * - the Ed25519 signature over those bytes verifies against `issuerDid`\n * (a did:key), strict RFC 8032;\n * - the CID recomputed from the exact bytes equals `cid` (and `expectedCid`);\n * - `facts.shareKeyDid` equals the issuer.\n */\nexport async function verifyPolicyEnforcementDelegation(delegation: SignedDelegation, expectedCid?: string): Promise<SignedDelegation> {\n if (delegation === null || typeof delegation !== \"object\" || typeof delegation.dagCbor !== \"string\" || typeof delegation.signature !== \"string\" || typeof delegation.cid !== \"string\" || typeof delegation.issuerDid !== \"string\" || typeof delegation.audienceDid !== \"string\" || delegation.facts === null || typeof delegation.facts !== \"object\") {\n throw new Error(\"enforcement delegation is malformed\");\n }\n const bytes = fromBase64Url(delegation.dagCbor);\n const unsigned = { type: \"TinyCloudSharePolicyEnforcement\", version: 2, issuerDid: delegation.issuerDid, audienceDid: delegation.audienceDid, facts: delegation.facts };\n const expected = dagCborEncode({ domain: POLICY_ENFORCEMENT_DOMAIN, unsigned });\n if (expected.length !== bytes.length || expected.some((byte, index) => byte !== bytes[index])) throw new Error(\"enforcement delegation fields are not the signed bytes\");\n const signature = fromBase64Url(delegation.signature);\n const publicKey = ed25519PublicKeyFromDidKey(delegation.issuerDid);\n if (signature.length !== 64 || !ed25519.verify(signature, bytes, publicKey, { zip215: false })) throw new Error(\"enforcement delegation signature is invalid\");\n const cid = await computeCid(bytes);\n if (cid !== delegation.cid || (expectedCid !== undefined && cid !== expectedCid)) throw new Error(\"enforcement delegation CID does not match its bytes\");\n if (delegation.facts.shareKeyDid !== delegation.issuerDid) throw new Error(\"enforcement delegation is not issued by its share key\");\n return delegation;\n}\n","import { fromBase64Url } from \"@tinycloud/share-envelope\";\n\n/**\n * The signed `Issued At` and `Not Before` of a SIWE CACAO, read from its\n * DAG-CBOR bytes. Security-sensitive, but narrow: call it only on bytes the\n * injected parser (sdk-core `parseSignedSiweCacao`) has already verified\n * (canonical encoding, exact-bytes CID, EIP-191 signature), which reports the\n * expiry but not these two times. Reading them here keeps sdk-core, and the\n * bundles built on it, unchanged.\n *\n * Supports the DAG-CBOR subset a CACAO uses: unsigned/negative integers, byte\n * and text strings, arrays, text-keyed maps, false/true/null; definite\n * lengths only, bounded depth. Anything else throws.\n */\nexport interface CacaoTimes {\n readonly issuedAt?: string;\n readonly notBefore?: string;\n}\n\nconst MAX_DEPTH = 32;\n\nfunction decode(bytes: Uint8Array): unknown {\n let offset = 0;\n const take = (length: number): Uint8Array => {\n if (length > bytes.length - offset) throw new Error(\"CACAO ended early\");\n const out = bytes.subarray(offset, offset + length);\n offset += length;\n return out;\n };\n const read = (depth: number): unknown => {\n if (depth > MAX_DEPTH) throw new Error(\"CACAO nesting is too deep\");\n const initial = take(1)[0]!;\n const major = initial >> 5;\n const info = initial & 0x1f;\n if (major === 7) {\n if (info === 20) return false;\n if (info === 21) return true;\n if (info === 22) return null;\n throw new Error(\"unsupported CBOR simple value\");\n }\n let argument: number;\n if (info < 24) argument = info;\n else if (info === 24) argument = take(1)[0]!;\n else if (info === 25) { const b = take(2); argument = (b[0]! << 8) | b[1]!; }\n else if (info === 26) { const b = take(4); argument = ((b[0]! << 24) >>> 0) + (b[1]! << 16) + (b[2]! << 8) + b[3]!; }\n else throw new Error(\"unsupported CBOR length\");\n switch (major) {\n case 0: return argument;\n case 1: return -1 - argument;\n case 2: return take(argument);\n case 3: return new TextDecoder(\"utf-8\", { fatal: true }).decode(take(argument));\n case 4: return Array.from({ length: argument }, () => read(depth + 1));\n case 5: {\n const map = new Map<string, unknown>();\n for (let index = 0; index < argument; index++) {\n const key = read(depth + 1);\n if (typeof key !== \"string\" || map.has(key)) throw new Error(\"CBOR map key is invalid\");\n map.set(key, read(depth + 1));\n }\n return map;\n }\n default: throw new Error(\"unsupported CBOR type\");\n }\n };\n const value = read(0);\n if (offset !== bytes.length) throw new Error(\"CACAO has trailing bytes\");\n return value;\n}\n\nexport function cacaoTimes(authorization: string): CacaoTimes {\n const root = decode(fromBase64Url(authorization.replace(/=+$/, \"\")));\n const payload = root instanceof Map ? root.get(\"p\") : undefined;\n if (!(payload instanceof Map)) throw new Error(\"CACAO payload is missing\");\n const text = (key: string): string | undefined => {\n const value = payload.get(key);\n if (value === undefined) return undefined;\n if (typeof value !== \"string\") throw new Error(`CACAO ${key} is not text`);\n return value;\n };\n const issuedAt = text(\"iat\");\n const notBefore = text(\"nbf\");\n return { ...(issuedAt === undefined ? {} : { issuedAt }), ...(notBefore === undefined ? {} : { notBefore }) };\n}\n","import { canonicalize } from \"@tinycloud/share-envelope\";\nimport { canonicalAddressSpelling } from \"../agent-record.js\";\n\n/**\n * Attenuation containment (design C4): every (resource, ability) of the child\n * must be granted by the parent on the same resource or on a parent resource\n * under the segment-prefix rule `child == parent || child.startsWith(parent\n * + \"/\")` (a parent already ending in `/` is a prefix itself), as\n * `unified.ts:1225-1233` applies it. EVM address spelling is ignored. A\n * parent ability whose caveats are all empty objects is unrestricted;\n * otherwise the child's caveats must be identical. Fail-closed.\n */\nexport type Attenuation = Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>>;\n\nfunction resourceCovers(parent: string, child: string): boolean {\n const p = canonicalAddressSpelling(parent);\n const c = canonicalAddressSpelling(child);\n if (c === p) return true;\n return c.startsWith(p.endsWith(\"/\") ? p : `${p}/`);\n}\n\nfunction unrestricted(caveats: readonly unknown[]): boolean {\n return caveats.every((caveat) => caveat !== null && typeof caveat === \"object\" && !Array.isArray(caveat) && Object.keys(caveat).length === 0);\n}\n\nexport function attenuationCovers(parent: Attenuation, child: Attenuation): boolean {\n const childEntries = Object.entries(child);\n if (childEntries.length === 0) return false;\n return childEntries.every(([childResource, abilities]) =>\n Object.entries(abilities).every(([ability, childCaveats]) =>\n Object.entries(parent).some(([parentResource, parentAbilities]) => {\n const parentCaveats = Object.prototype.hasOwnProperty.call(parentAbilities, ability) ? parentAbilities[ability] : undefined;\n if (parentCaveats === undefined || !resourceCovers(parentResource, childResource)) return false;\n return unrestricted(parentCaveats) || canonicalize(parentCaveats) === canonicalize(childCaveats);\n })));\n}\n\n/** Whether the attenuation grants `ability` on exactly `resource` (spelling-insensitive). */\nexport function grantsExactly(attenuation: Attenuation, resource: string, ability: string): boolean {\n const target = canonicalAddressSpelling(resource);\n return Object.entries(attenuation).some(([key, abilities]) => canonicalAddressSpelling(key) === target && Object.prototype.hasOwnProperty.call(abilities, ability));\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { blake3 } from \"@noble/hashes/blake3\";\nimport { ed25519PublicKeyFromDidKey, fromBase64Url } from \"@tinycloud/share-envelope\";\nimport { CID } from \"multiformats/cid\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\n\n/**\n * Signed UCAN verifier for issued delegations (native bearer link\n * delegations and Policy/v3 owner roots). Security-sensitive.\n *\n * Same acceptance as sdk-core `parseSignedCompactUcanAttenuation`\n * (`unified.ts:1281-1314`): EdDSA/JWT/ucv 0.10.0 header whose JWK binds the\n * did:key issuer, strict Ed25519 signature, CID = CIDv1(raw, blake3) of the\n * exact Authorization bytes. It additionally returns the verified `prf`,\n * `nbf` and `exp` (design C4), and requires `exp`: an expiry-less delegation\n * is refused. Payload JSON need not be JCS: WASM-issued link delegations are\n * not.\n */\nexport interface SignedUcanDelegation {\n readonly cid: string;\n /** Issuer principal without any `#fragment`. */\n readonly issuer: string;\n /** Audience principal without any `#fragment`. */\n readonly audience: string;\n readonly attenuation: Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>>;\n readonly proofs: readonly string[];\n readonly notBefore?: number;\n readonly expiresAt: number;\n readonly facts?: readonly unknown[];\n}\n\nconst MAX_UCAN_LENGTH = 32 * 1024;\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/** `did:key:z…#z…` and `did:key:z…` name the same principal. */\nexport function principalOf(did: string): string {\n return did.split(\"#\", 1)[0]!;\n}\n\nexport function ucanCid(authorization: string): string {\n return CID.createV1(0x55, createDigest(0x1e, blake3(new TextEncoder().encode(authorization)))).toString();\n}\n\nexport function parseSignedUcan(authorization: string, expectedCid?: string): SignedUcanDelegation {\n if (typeof authorization !== \"string\" || authorization.length > MAX_UCAN_LENGTH || /\\s/.test(authorization)) throw new Error(\"UCAN must be compact bytes\");\n const segments = authorization.split(\".\");\n if (segments.length !== 3 || segments.some((segment) => segment.length === 0)) throw new Error(\"UCAN must have three segments\");\n const [headerSegment, payloadSegment, signatureSegment] = segments as [string, string, string];\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n let header: unknown;\n let payload: unknown;\n try {\n header = JSON.parse(decoder.decode(fromBase64Url(headerSegment)));\n payload = JSON.parse(decoder.decode(fromBase64Url(payloadSegment)));\n } catch {\n throw new Error(\"UCAN segments are not JSON\");\n }\n if (!record(header) || !record(header.jwk) || header.alg !== \"EdDSA\" || header.typ !== \"JWT\" || header.ucv !== \"0.10.0\" || header.jwk.kty !== \"OKP\" || header.jwk.crv !== \"Ed25519\" || typeof header.jwk.x !== \"string\") throw new Error(\"UCAN header is invalid\");\n if (!record(payload) || typeof payload.iss !== \"string\" || typeof payload.aud !== \"string\" || payload.aud.length === 0) throw new Error(\"UCAN issuer or audience is invalid\");\n const issuer = principalOf(payload.iss);\n const publicKey = ed25519PublicKeyFromDidKey(issuer);\n const jwkKey = fromBase64Url(header.jwk.x);\n if (jwkKey.length !== publicKey.length || jwkKey.some((byte, index) => byte !== publicKey[index])) throw new Error(\"UCAN JWK does not bind the issuer\");\n const signature = fromBase64Url(signatureSegment);\n if (signature.length !== 64 || !ed25519.verify(signature, new TextEncoder().encode(`${headerSegment}.${payloadSegment}`), publicKey, { zip215: false })) throw new Error(\"UCAN signature is invalid\");\n const cid = ucanCid(authorization);\n if (expectedCid !== undefined && cid !== expectedCid) throw new Error(\"UCAN CID does not match its exact bytes\");\n const att = payload.att;\n if (!record(att) || Object.keys(att).length === 0 || !Object.values(att).every((abilities) => record(abilities) && Object.keys(abilities).length > 0 && Object.values(abilities).every((caveats) => Array.isArray(caveats) && caveats.length > 0))) throw new Error(\"UCAN attenuation is invalid\");\n const prf = payload.prf ?? [];\n if (!Array.isArray(prf) || !prf.every((item) => typeof item === \"string\")) throw new Error(\"UCAN proofs are invalid\");\n if (!Number.isSafeInteger(payload.exp) || (payload.nbf !== undefined && (!Number.isSafeInteger(payload.nbf) || (payload.nbf as number) >= (payload.exp as number)))) throw new Error(\"UCAN validity window is invalid\");\n if (payload.fct !== undefined && !Array.isArray(payload.fct)) throw new Error(\"UCAN facts are invalid\");\n return {\n cid,\n issuer,\n audience: principalOf(payload.aud),\n attenuation: att as SignedUcanDelegation[\"attenuation\"],\n proofs: prf as string[],\n ...(payload.nbf === undefined ? {} : { notBefore: payload.nbf as number }),\n expiresAt: payload.exp as number,\n ...(payload.fct === undefined ? {} : { facts: payload.fct as unknown[] }),\n };\n}\n","import { canonicalAddressSpelling } from \"../agent-record.js\";\nimport { cacaoTimes } from \"./cacao-times.js\";\nimport { attenuationCovers, type Attenuation } from \"./attenuation.js\";\nimport { principalOf } from \"./ucan.js\";\n\n/**\n * Owner→session SIWE CACAO checks (design C4). Security-sensitive.\n *\n * Signature, canonical DAG-CBOR, exact-bytes CID and the ReCap statement are\n * verified by the injected parser: sdk-core `parseSignedSiweCacao`\n * (`cacao.ts:205-276`; share-sdk cannot depend on sdk-core, which depends on\n * share-sdk). That parser does not check validity times, so this module adds:\n * `Not Before`/`Expiration Time` against `now`, issuer == the account owner,\n * audience == the child's issuer, and child attenuation ⊆ the CACAO's. `Not\n * Before` and `Issued At` are read from the verified bytes ({@link cacaoTimes}).\n */\nexport interface ParsedSiweCacao {\n readonly cid: string;\n /** `did:pkh:eip155:<chain>:<address>`. */\n readonly issuer: string;\n /** SIWE `uri`: the delegate DID. */\n readonly audience: string;\n readonly attenuation: Attenuation;\n readonly expiresAt?: string;\n}\n\n/** Verifies signature, encoding and the exact-bytes CID; throws otherwise. */\nexport type SiweCacaoParser = (authorization: string, expectedCid: string) => Promise<ParsedSiweCacao>;\n\nexport type DelegationTime = \"current\" | \"expired\";\n\n/** Clock skew tolerated for a `Not Before` slightly in the future. */\nexport const NOT_BEFORE_SKEW_MS = 5 * 60 * 1000;\n\nexport interface OwnerSessionCheck {\n readonly authorization: string;\n readonly expectedCid: string;\n readonly accountOwnerDid: string;\n /** The issuer of the delegation this CACAO must authorize (the leaf or root issuer). */\n readonly childIssuer: string;\n readonly childAttenuation: Attenuation;\n readonly now: Date;\n readonly parse: SiweCacaoParser;\n}\n\nexport interface VerifiedOwnerSession {\n readonly cid: string;\n /** The session principal (audience without fragment). */\n readonly sessionDid: string;\n readonly time: DelegationTime;\n /** The signed `Issued At` (epoch ms), when the parser reports it. */\n readonly issuedAt?: number;\n}\n\nfunction timeOf(value: string | undefined, label: string): number | undefined {\n if (value === undefined) return undefined;\n const parsed = Date.parse(value);\n if (!Number.isFinite(parsed)) throw new Error(`SIWE ${label} is not a timestamp`);\n return parsed;\n}\n\n/** Throws when the CACAO does not prove the owner→session hop; reports expiry separately. */\nexport async function verifyOwnerSessionDelegation(input: OwnerSessionCheck): Promise<VerifiedOwnerSession> {\n const cacao = await input.parse(input.authorization, input.expectedCid);\n if (cacao.cid !== input.expectedCid) throw new Error(\"SIWE CID does not match\");\n if (canonicalAddressSpelling(cacao.issuer) !== canonicalAddressSpelling(input.accountOwnerDid)) throw new Error(\"SIWE issuer is not the account owner\");\n if (principalOf(cacao.audience) !== principalOf(input.childIssuer)) throw new Error(\"SIWE audience is not the delegation issuer\");\n if (!attenuationCovers(cacao.attenuation, input.childAttenuation)) throw new Error(\"delegation widens the SIWE attenuation\");\n const times = cacaoTimes(input.authorization);\n const notBefore = timeOf(times.notBefore, \"Not Before\");\n const expiresAt = timeOf(cacao.expiresAt, \"Expiration Time\");\n if (notBefore !== undefined && expiresAt !== undefined && notBefore >= expiresAt) throw new Error(\"SIWE validity window is empty\");\n if (notBefore !== undefined && notBefore > input.now.getTime() + NOT_BEFORE_SKEW_MS) throw new Error(\"SIWE is not yet valid\");\n const issuedAt = timeOf(times.issuedAt, \"Issued At\");\n return {\n cid: cacao.cid, sessionDid: principalOf(cacao.audience), time: expiresAt !== undefined && expiresAt <= input.now.getTime() ? \"expired\" : \"current\",\n ...(issuedAt === undefined ? {} : { issuedAt }),\n };\n}\n","import { canonicalize } from \"@tinycloud/share-envelope\";\nimport type { SenderShareRecord } from \"../history.js\";\nimport { AgentRecordError, OwnerUnwrapUnavailableError, openAgentRecordAsOwner, parseStoredAgentRecord, SUPPORTED_AGENT_RECORD_V, MAX_AGENT_RECORD_BYTES } from \"./agent-record.js\";\nimport type { ShareIndexBackend } from \"./backend.js\";\nimport { DEFAULT_CAS_POLICY, runCas, type CasPolicy } from \"./cas.js\";\nimport { agentIdFromDid, agentRecordPrefix, classifyRecordKey, INDEX_MAIN_KEY, rejectedKeyEntry, SHARE_RECORDS_VAULT_PREFIX } from \"./ids.js\";\nimport { assertLinkBoundToMaterial, type StoredShareRecord } from \"./delivery.js\";\nimport { validateShareLink } from \"./link.js\";\nimport { claimRank, decideClaim } from \"./precedence.js\";\nimport {\n ShareRecordSchemaError, checkAgentRecordSchema, emptyIndexDocument, parseArchiveDocument, parseIndexDocument, project, registeredAtFits,\n type ShareIndexAgentEntry, type ShareIndexDocument, type ShareIndexRow,\n} from \"./schema.js\";\nimport { verifyAgentRecordChain, type ShareRegistrationKey } from \"./verify/chain.js\";\nimport type { SiweCacaoParser } from \"./verify/session.js\";\n\n/**\n * `SenderShareIndex`: the encrypted, display-only share index at\n * `records/_index/main` (design C §2, §4, §5, §7). Records stay canonical;\n * the index is a projection that is only ever written with compare-and-swap.\n */\n\nexport interface ShareIndexLimits {\n readonly listPagesPerPass: number;\n readonly fetchesPerPass: number;\n readonly newRowsPerAgentPerPass: number;\n readonly liveRowsPerAgent: number;\n readonly rejectionsBeforePause: number;\n /** Agent rows together may use at most this share of `mainRowBytes`. */\n readonly agentRowShare: number;\n readonly mainRowBytes: number;\n readonly headerBytes: number;\n readonly maxAgentRecordBytes: number;\n readonly tombstoneTtlMs: number;\n readonly archiveAgeMs: number;\n readonly statusChecksPerSync: number;\n}\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\n\nexport const DEFAULT_SHARE_INDEX_LIMITS: ShareIndexLimits = {\n listPagesPerPass: 10,\n fetchesPerPass: 200,\n newRowsPerAgentPerPass: 50,\n liveRowsPerAgent: 500,\n rejectionsBeforePause: 100,\n agentRowShare: 0.5,\n mainRowBytes: 1024 * 1024,\n headerBytes: 64 * 1024,\n maxAgentRecordBytes: MAX_AGENT_RECORD_BYTES,\n tombstoneTtlMs: 30 * DAY_MS,\n archiveAgeMs: 90 * DAY_MS,\n statusChecksPerSync: 200,\n};\n\n/** Outbox ops carry rows and CIDs, never records. */\nexport type ShareIndexOp =\n | { readonly id: string; readonly type: \"upsert\"; readonly key: string; readonly row: ShareIndexRow }\n | { readonly id: string; readonly type: \"revoke\"; readonly key: string; readonly at: string; readonly confirmed: boolean }\n /** Only for revoked, expired or unreadable rows: tombstone first, then the caller deletes the record. */\n | { readonly id: string; readonly type: \"delete\"; readonly key: string }\n /** Owner agent controls: `resume` clears a pause; `recheck` also clears the agent's rejected lists. */\n | { readonly id: string; readonly type: \"agent\"; readonly agentId: string; readonly action: \"resume\" | \"recheck\" };\n\n/** Durable op queue: IndexedDB on the web, the profile cache for Tier 2. */\nexport interface ShareIndexOutbox {\n list(): Promise<readonly ShareIndexOp[]>;\n put(op: ShareIndexOp): Promise<void>;\n remove(ids: readonly string[]): Promise<void>;\n}\n\nexport class MemoryShareIndexOutbox implements ShareIndexOutbox {\n private readonly ops = new Map<string, ShareIndexOp>();\n async list(): Promise<readonly ShareIndexOp[]> { return [...this.ops.values()]; }\n async put(op: ShareIndexOp): Promise<void> { this.ops.set(op.id, op); }\n async remove(ids: readonly string[]): Promise<void> { for (const id of ids) this.ops.delete(id); }\n}\n\n/** Node-side status of a row's share, for status sync. `unknown` (e.g. agent-issued CIDs, TC-1419) changes nothing. */\nexport interface ShareStatusPort {\n status(key: string, row: ShareIndexRow): Promise<\"revoked\" | \"active\" | \"unknown\">;\n}\n\nexport interface SenderShareIndexOptions {\n readonly backend: ShareIndexBackend;\n readonly outbox: ShareIndexOutbox;\n /** The account owner (`did:pkh:…`). */\n readonly ownerDid: string;\n /** `updatedBy` label of this writer. */\n readonly writer: string;\n /** Configured share origins, for the link check. */\n readonly shareOrigins: readonly string[];\n /** sdk-core `parseSignedSiweCacao`. */\n readonly parseSiweCacao: SiweCacaoParser;\n /** Node registration keys by `nodeAudience`, from the share public config. */\n readonly registrationKey?: (nodeAudience: string) => ShareRegistrationKey | undefined;\n readonly limits?: Partial<ShareIndexLimits>;\n readonly cas?: Partial<CasPolicy>;\n readonly now?: () => Date;\n}\n\nexport type ShareIndexLoad =\n | { readonly status: \"ok\"; readonly doc: ShareIndexDocument }\n /** A higher schema version: render read-only (option A path), never write. */\n | { readonly status: \"read_only\"; readonly v: number }\n | { readonly status: \"not_found\" }\n /** Deterministic corruption: the next write rebuilds. */\n | { readonly status: \"corrupt\" }\n /** Outage: never a reason to rebuild. */\n | { readonly status: \"unavailable\" };\n\nexport type ShareIndexWriteStatus = \"written\" | \"unchanged\" | \"read_only\" | \"unavailable\";\n\nexport interface ShareIndexWriteOutcome {\n readonly status: ShareIndexWriteStatus;\n /** The document as written, or as found when the change was already present. */\n readonly doc?: ShareIndexDocument;\n}\n\nexport interface ShareIndexFlushResult {\n readonly status: ShareIndexWriteStatus | \"empty\";\n /** Op ids that can never apply (tombstoned upsert, delete of a live row, unknown row). They are dropped. */\n readonly refused: readonly string[];\n}\n\n/**\n * §5 rejection reasons; every check-4 failure (unwrap, DEK length, commit, GCM) is `decrypt`.\n * `provenance`: an agent-subtree record claiming `migrated`, which only owner imports may carry.\n */\nexport type AgentRejectReason = \"size\" | \"shape\" | \"header\" | \"decrypt\" | \"schema\" | \"provenance\" | \"link\" | \"proof\";\n\nexport interface ShareIndexReconcileReport {\n readonly status: ShareIndexWriteStatus;\n readonly pages: number;\n readonly fetches: number;\n readonly admitted: number;\n readonly rejected: Readonly<Record<string, number>>;\n readonly deferred: number;\n /** True when this pass reached the end of the key listing. */\n readonly cycleComplete: boolean;\n /** The header reached its cap: new agent header state (entries, rejections) was not added. Show an alert; no row was evicted. */\n readonly headerFull: boolean;\n}\n\ntype Finding =\n | { readonly kind: \"web\"; readonly key: string; readonly row: ShareIndexRow }\n | { readonly kind: \"agent\"; readonly key: string; readonly agentId: string; readonly did: string; readonly row: ShareIndexRow }\n | { readonly kind: \"reject\"; readonly agentId: string; readonly suffix: string; readonly reason: AgentRejectReason }\n | { readonly kind: \"newer\"; readonly agentId: string; readonly suffix: string; readonly recordV: number }\n | { readonly kind: \"gc\"; readonly agentId: string }\n | { readonly kind: \"clear-newer\"; readonly agentId: string };\n\ntype Examined =\n | { readonly kind: \"admit\"; readonly did: string; readonly row: ShareIndexRow }\n | { readonly kind: \"reject\"; readonly reason: AgentRejectReason }\n | { readonly kind: \"newer\"; readonly recordV: number }\n | { readonly kind: \"skip\" };\n\n/** Mutable working copies used inside one CAS mutation. */\ninterface WorkingAgent {\n did: string | null;\n rows: number;\n rejected: Record<string, number>;\n rejectedKeys: string[];\n newerKeys?: string[];\n newerV?: number;\n paused: false | { reason: \"rejections\" | \"row-cap\" | \"newer\"; at: string };\n firstSeen: string;\n [unknown: string]: unknown;\n}\ninterface WorkingDoc {\n v: number;\n ownerDid: string;\n spaceId: string;\n updatedAt: string;\n updatedBy: string;\n archives: { name: string; ids: string[] }[];\n tombstones: { key: string; at: string }[];\n reconcile: { cursor?: string };\n agents: Record<string, WorkingAgent>;\n rows: Record<string, ShareIndexRow>;\n [unknown: string]: unknown;\n}\n\nfunction bytesOf(value: unknown): number {\n return new TextEncoder().encode(JSON.stringify(value)).length;\n}\n\n/** Encoded size of everything except the rows. */\nexport function headerBytes(doc: ShareIndexDocument): number {\n const { rows: _rows, ...header } = doc;\n return bytesOf(header);\n}\n\nfunction sameContent(left: ShareIndexDocument, right: ShareIndexDocument): boolean {\n const strip = ({ updatedAt: _a, updatedBy: _b, ...rest }: ShareIndexDocument) => rest;\n return canonicalize(strip(left)) === canonicalize(strip(right));\n}\n\nfunction basename(key: string): string {\n return key.slice(key.lastIndexOf(\"/\") + 1);\n}\n\nfunction agentOf(row: ShareIndexRow): string | undefined {\n return row.src.startsWith(\"agent:\") ? row.src.slice(\"agent:\".length) : undefined;\n}\n\nfunction isObject(item: unknown): item is Record<string, unknown> {\n return item !== null && typeof item === \"object\" && !Array.isArray(item);\n}\n\n/** Enough of a web record to project a row; anything less is shown as unreadable. */\nfunction isWebRecord(value: unknown): value is SenderShareRecord {\n if (!isObject(value)) return false;\n const { shareId, target, resource, actions, recipientMatcher, registeredAt, expiresAt } = value;\n return typeof shareId === \"string\" && isObject(target) && typeof target.spaceId === \"string\"\n && isObject(resource) && typeof resource.path === \"string\" && Array.isArray(actions) && actions.every((item) => typeof item === \"string\")\n && isObject(recipientMatcher) && typeof recipientMatcher.kind === \"string\"\n && typeof registeredAt === \"string\" && typeof expiresAt === \"string\";\n}\n\nfunction unreadableRow(now: Date): ShareIndexRow {\n const at = now.toISOString();\n return { n: \"Unreadable share\", k: \"file\", ak: \"bearer\", al: \"\", a: [], c: at, x: at, rk: \"none\", src: \"web\", na: true };\n}\n\nexport class SenderShareIndex {\n private readonly backend: ShareIndexBackend;\n private readonly limits: ShareIndexLimits;\n private readonly cas: CasPolicy;\n private readonly now: () => Date;\n\n constructor(private readonly options: SenderShareIndexOptions) {\n this.backend = options.backend;\n this.limits = { ...DEFAULT_SHARE_INDEX_LIMITS, ...options.limits };\n this.cas = { ...DEFAULT_CAS_POLICY, ...options.cas };\n this.now = options.now ?? (() => new Date());\n }\n\n /** Library open: one GET + one decrypt. */\n async load(): Promise<ShareIndexLoad> {\n const read = await this.backend.readVault(INDEX_MAIN_KEY);\n if (read.status === \"not_found\" || read.status === \"unavailable\") return { status: read.status };\n if (read.status === \"corrupt\") return { status: \"corrupt\" };\n const parsed = parseIndexDocument(read.value);\n if (parsed.status === \"newer\") return { status: \"read_only\", v: parsed.v };\n return parsed.status === \"ok\" ? { status: \"ok\", doc: parsed.doc } : { status: \"corrupt\" };\n }\n\n async enqueue(op: ShareIndexOp): Promise<void> {\n await this.options.outbox.put(op);\n }\n\n // -------------------------------------------------------------------------\n // CAS\n\n /** Rebuild base after deterministic corruption: an empty document plus the archives found under `_index/`. */\n private async rebuildBase(): Promise<WorkingDoc> {\n const doc = this.emptyDoc();\n const page = await this.backend.listKeys(\"_index/\");\n if (page.status !== \"ok\") return doc;\n for (const key of page.keys) {\n const classified = classifyRecordKey(key);\n if (classified.kind !== \"index\" || classified.name === \"main\") continue;\n const read = await this.backend.readVault(key);\n const archive = read.status === \"ok\" ? parseArchiveDocument(read.value) : undefined;\n if (archive !== undefined) doc.archives.push({ name: classified.name, ids: Object.keys(archive.rows) });\n }\n return doc;\n }\n\n private emptyDoc(): WorkingDoc {\n return emptyIndexDocument({ ownerDid: this.options.ownerDid, spaceId: this.backend.spaceId, writer: this.options.writer, now: this.now() }) as unknown as WorkingDoc;\n }\n\n /**\n * Read → mutate → If-Match write, per {@link runCas}. A no-op change is never\n * written. The header cap is enforced by the reconciler on agent-derived\n * state only (see {@link reconcile}); the owner's own writes are never blocked by it.\n */\n private async update(mutate: (doc: WorkingDoc) => void | Promise<void>): Promise<ShareIndexWriteOutcome> {\n return runCas<ShareIndexWriteOutcome>(INDEX_MAIN_KEY, this.cas, async () => {\n const read = await this.backend.readVault(INDEX_MAIN_KEY);\n let base: WorkingDoc;\n let condition: { ifMatch: string } | { ifNoneMatch: \"*\" };\n let existed = true;\n if (read.status === \"unavailable\") return { done: { status: \"unavailable\" as const } };\n if (read.status === \"not_found\") {\n base = this.emptyDoc();\n condition = { ifNoneMatch: \"*\" };\n existed = false;\n } else if (read.status === \"corrupt\") {\n if (read.etag === undefined) return { done: { status: \"unavailable\" as const } };\n base = await this.rebuildBase();\n condition = { ifMatch: read.etag };\n existed = false;\n } else {\n const parsed = parseIndexDocument(read.value);\n if (parsed.status === \"newer\") return { done: { status: \"read_only\" as const } };\n base = parsed.status === \"ok\" ? structuredClone(parsed.doc) as unknown as WorkingDoc : await this.rebuildBase();\n existed = parsed.status === \"ok\";\n condition = { ifMatch: read.etag };\n }\n const before = structuredClone(base) as unknown as ShareIndexDocument;\n await mutate(base);\n const next = base as unknown as ShareIndexDocument;\n if (existed && sameContent(before, next)) return { done: { status: \"unchanged\" as const, doc: before } };\n base.updatedAt = this.now().toISOString();\n base.updatedBy = this.options.writer;\n return { write: await this.backend.writeVault(INDEX_MAIN_KEY, next, condition), onSuccess: () => ({ status: \"written\" as const, doc: next }) };\n });\n }\n\n // -------------------------------------------------------------------------\n // Shared mutation helpers\n\n /** When false (header at its cap), no new agent header state is added: no new entries, rejections or newer keys. */\n private growHeader = true;\n\n private ensureAgent(doc: WorkingDoc, agentId: string): WorkingAgent | undefined {\n const existing = doc.agents[agentId];\n if (existing !== undefined || !this.growHeader) return existing;\n const created: WorkingAgent = { did: null, rows: 0, rejected: {}, rejectedKeys: [], paused: false, firstSeen: this.now().toISOString() };\n doc.agents[agentId] = created;\n return created;\n }\n\n /** Count a rejection once per key: a key already in `rejectedKeys` changes nothing. */\n private recordRejection(doc: WorkingDoc, agentId: string, suffix: string, reason: string): void {\n const entry = this.ensureAgent(doc, agentId);\n const entryKey = rejectedKeyEntry(suffix);\n if (entry === undefined || !this.growHeader || entry.rejectedKeys.includes(entryKey)) return;\n entry.rejected[reason] = (entry.rejected[reason] ?? 0) + 1;\n if (entry.rejectedKeys.length < this.limits.rejectionsBeforePause) entry.rejectedKeys.push(entryKey);\n const total = Object.values(entry.rejected).reduce((sum, count) => sum + count, 0);\n if (entry.paused === false && total >= this.limits.rejectionsBeforePause) entry.paused = { reason: \"rejections\", at: this.now().toISOString() };\n }\n\n /** Remove a displaced row; a displaced agent claim counts as `proof` and is not refetched. */\n private displace(doc: WorkingDoc, key: string): void {\n const row = doc.rows[key];\n if (row === undefined) return;\n delete doc.rows[key];\n const agentId = agentOf(row);\n if (agentId === undefined) return;\n const entry = this.ensureAgent(doc, agentId);\n if (entry !== undefined) entry.rows = Math.max(0, entry.rows - 1);\n this.recordRejection(doc, agentId, basename(key), \"proof\");\n }\n\n private isRetired(doc: WorkingDoc, key: string): boolean {\n return doc.tombstones.some((tombstone) => tombstone.key === key) || doc.archives.some((archive) => archive.ids.includes(key));\n }\n\n // -------------------------------------------------------------------------\n // Ops\n\n private applyOp(doc: WorkingDoc, op: ShareIndexOp): \"applied\" | \"refused\" {\n const now = this.now();\n if (op.type === \"agent\") {\n const entry = doc.agents[op.agentId];\n if (entry === undefined) return \"refused\";\n entry.paused = false;\n if (op.action === \"recheck\") {\n entry.rejected = {};\n entry.rejectedKeys = [];\n delete entry.newerKeys;\n delete entry.newerV;\n }\n return \"applied\";\n }\n const existing = doc.rows[op.key];\n if (op.type === \"upsert\") {\n if (this.isRetired(doc, op.key)) return \"refused\";\n if (existing !== undefined) return \"applied\"; // display fields are immutable\n const decision = decideClaim(doc.rows, op.key, op.row);\n if (!decision.admit) return \"refused\";\n for (const key of decision.displaced) this.displace(doc, key);\n doc.rows[op.key] = op.row;\n return \"applied\";\n }\n if (op.type === \"revoke\") {\n if (existing === undefined) return this.isRetired(doc, op.key) ? \"applied\" : \"refused\";\n const at = existing.r === undefined || Date.parse(op.at) < Date.parse(existing.r.at) ? op.at : existing.r.at;\n doc.rows[op.key] = { ...existing, r: { at, confirmed: existing.r?.confirmed === true || op.confirmed } };\n return \"applied\";\n }\n if (existing === undefined) return doc.tombstones.some((tombstone) => tombstone.key === op.key) ? \"applied\" : \"refused\";\n if (existing.r === undefined && Date.parse(existing.x) > now.getTime() && existing.na !== true) return \"refused\";\n this.displaceForDelete(doc, op.key, existing);\n doc.tombstones.push({ key: op.key, at: now.toISOString() });\n return \"applied\";\n }\n\n private displaceForDelete(doc: WorkingDoc, key: string, row: ShareIndexRow): void {\n delete doc.rows[key];\n const agentId = agentOf(row);\n const entry = agentId === undefined ? undefined : doc.agents[agentId];\n if (entry !== undefined) entry.rows = Math.max(0, entry.rows - 1);\n }\n\n /**\n * Apply every pending outbox op in one CAS. Ops leave the outbox only after\n * the write is confirmed (or the change was already present). Any CAS error,\n * including `INVALID_ETAG`, propagates with the ops still pending.\n */\n async flush(): Promise<ShareIndexFlushResult> {\n const ops = await this.options.outbox.list();\n if (ops.length === 0) return { status: \"empty\", refused: [] };\n let refused: string[] = [];\n const result = await this.update((doc) => {\n refused = [];\n for (const op of ops) if (this.applyOp(doc, op) === \"refused\") refused.push(op.id);\n });\n if (result.status === \"written\" || result.status === \"unchanged\") await this.options.outbox.remove(ops.map((op) => op.id));\n return { status: result.status, refused };\n }\n\n // -------------------------------------------------------------------------\n // Reconciler (§4, §5)\n\n private async examineAgentRecord(key: string, agentId: string, shareId: string, archived: () => Promise<ReadonlyMap<string, number>>): Promise<Examined> {\n const unwrap = this.backend.ownerUnwrap;\n if (unwrap === undefined) return { kind: \"skip\" };\n // 2. size: refused before the body is fetched when the adapter can learn it first, and from the body length otherwise.\n const raw = await this.backend.readRaw(key, this.limits.maxAgentRecordBytes);\n if (raw.status === \"too_large\") return { kind: \"reject\", reason: \"size\" };\n if (raw.status !== \"ok\") return { kind: \"skip\" };\n if (raw.bytes.byteLength > this.limits.maxAgentRecordBytes) return { kind: \"reject\", reason: \"size\" };\n // 3. header bound to the path.\n let stored;\n try {\n stored = parseStoredAgentRecord(raw.bytes, { ownerNetworkId: this.backend.ownerNetworkId });\n } catch (error) {\n if (error instanceof AgentRecordError && error.reason === \"newer\") return { kind: \"newer\", recordV: this.peekRecordV(raw.bytes) };\n return { kind: \"reject\", reason: error instanceof AgentRecordError && error.reason === \"header\" ? \"header\" : \"shape\" };\n }\n let derived: string;\n try { derived = agentIdFromDid(stored.hdr.agentDid); } catch { return { kind: \"reject\", reason: \"header\" }; }\n if (derived !== agentId) return { kind: \"reject\", reason: \"header\" };\n // 4. unwrap, commit, open.\n let plaintext: Uint8Array;\n try {\n plaintext = await openAgentRecordAsOwner(stored, { spaceId: this.backend.spaceId, vaultKey: `${SHARE_RECORDS_VAULT_PREFIX}${key}` }, unwrap);\n } catch (error) {\n if (error instanceof OwnerUnwrapUnavailableError) return { kind: \"skip\" };\n return { kind: \"reject\", reason: \"decrypt\" };\n }\n let value: unknown;\n try { value = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(plaintext)); } catch { return { kind: \"reject\", reason: \"schema\" }; }\n const checked = await this.checkRecord(value, { key, shareId, src: `agent:${agentId}`, source: \"agent\", agentDid: stored.hdr.agentDid, recordV: stored.hdr.recordV }, archived);\n return checked.kind === \"admit\" ? { kind: \"admit\", did: stored.hdr.agentDid, row: checked.row } : checked;\n }\n\n /** §5 checks 5–7 for a decrypted record, shared by agent records and one-time owner imports. */\n private async checkRecord(\n value: unknown,\n input: { readonly key: string; readonly shareId: string; readonly src: string; readonly source: \"agent\" | \"migrated\"; readonly agentDid: string; readonly recordV: number },\n archived: () => Promise<ReadonlyMap<string, number>>,\n ): Promise<{ readonly kind: \"admit\"; readonly row: ShareIndexRow } | { readonly kind: \"reject\"; readonly reason: AgentRejectReason }> {\n // 5. schema, versioned.\n let record: StoredShareRecord;\n try {\n record = checkAgentRecordSchema(value, {\n recordV: input.recordV, shareId: input.shareId, accountOwnerDid: this.options.ownerDid, agentDid: input.agentDid, source: input.source,\n });\n } catch (error) {\n return { kind: \"reject\", reason: error instanceof ShareRecordSchemaError && error.reason === \"provenance\" ? \"provenance\" : \"schema\" };\n }\n // 6. link. The stored link must be a share link on a configured origin; a Policy/v3 record's link must also be the\n // link of its sealed material (its key and body), which its chain check opens and binds to shareCid below.\n if (record.link !== undefined && !validateShareLink(record.link, this.options.shareOrigins).ok) return { kind: \"reject\", reason: \"link\" };\n if (record.link !== undefined && record.deliveryMaterial !== undefined) {\n try { assertLinkBoundToMaterial(record.link, record.deliveryMaterial); } catch { return { kind: \"reject\", reason: \"link\" }; }\n }\n // 7. CID ownership by proof. A migrated record has no agent binding, so it is never `proven`.\n const verdict = await verifyAgentRecordChain(record, {\n accountOwnerDid: this.options.ownerDid, agentDid: input.agentDid, now: this.now(), parseSiweCacao: this.options.parseSiweCacao,\n ...(this.options.registrationKey === undefined ? {} : { registrationKey: this.options.registrationKey }),\n });\n if (!verdict.ok) return { kind: \"reject\", reason: \"proof\" };\n // registeredAt against signed times in the chain, never against when the owner happens to look. A one-time\n // owner import keeps the ruled exemption from the ±1-day anchor; it still may not postdate the chain or the clock.\n const window = input.source === \"migrated\" ? { ...(verdict.issued.latest === undefined ? {} : { latest: verdict.issued.latest }) } : verdict.issued;\n if (!registeredAtFits(record.registeredAt, window, this.now())) return { kind: \"reject\", reason: \"schema\" };\n const row = project(record, { key: input.key, src: input.src, claims: verdict.claims, proof: { state: verdict.state, expired: verdict.expired } });\n if (verdict.state !== \"proven\") {\n const archivedClaims = await archived();\n if (verdict.claims.some((cid) => (archivedClaims.get(cid) ?? -1) >= claimRank(row))) return { kind: \"reject\", reason: \"proof\" };\n }\n return { kind: \"admit\", row };\n }\n\n private peekRecordV(bytes: Uint8Array): number {\n try {\n const value: unknown = JSON.parse(new TextDecoder().decode(bytes));\n const recordV = isObject(value) && isObject(value.hdr) ? value.hdr.recordV : undefined;\n return typeof recordV === \"number\" && Number.isSafeInteger(recordV) ? recordV : SUPPORTED_AGENT_RECORD_V + 1;\n } catch {\n return SUPPORTED_AGENT_RECORD_V + 1;\n }\n }\n\n private async archivedClaims(doc: ShareIndexDocument): Promise<Map<string, number>> {\n const claims = new Map<string, number>();\n for (const archive of doc.archives) {\n const read = await this.backend.readVault(`_index/${archive.name}`);\n const parsed = read.status === \"ok\" ? parseArchiveDocument(read.value) : undefined;\n for (const row of Object.values(parsed?.rows ?? {})) for (const cid of row.cc ?? []) claims.set(cid, Math.max(claims.get(cid) ?? -1, claimRank(row)));\n }\n return claims;\n }\n\n /**\n * One budgeted pass: list keys from `reconcile.cursor`, fetch and check what\n * the index does not know, then apply the findings in one CAS. Never\n * deletes rows; tombstoned, archived and rejected keys are never refetched.\n */\n async reconcile(): Promise<ShareIndexReconcileReport> {\n const loaded = await this.load();\n if (loaded.status === \"read_only\" || loaded.status === \"unavailable\") return { status: loaded.status, pages: 0, fetches: 0, admitted: 0, rejected: {}, deferred: 0, cycleComplete: false, headerFull: false };\n const doc = loaded.status === \"ok\" ? loaded.doc : (this.emptyDoc() as unknown as ShareIndexDocument);\n const known = new Set<string>([...Object.keys(doc.rows), ...doc.tombstones.map((tombstone) => tombstone.key), ...doc.archives.flatMap((archive) => archive.ids)]);\n const findings: Finding[] = [];\n const agentStates = new Map<string, { known: Set<string>; attempted: number; rejections: number; paused: boolean; rows: number }>();\n const agentState = (agentId: string): { known: Set<string>; attempted: number; rejections: number; paused: boolean; rows: number } => {\n const entry: ShareIndexAgentEntry | undefined = doc.agents[agentId];\n let state = agentStates.get(agentId);\n if (state === undefined) {\n state = {\n known: new Set([...(entry?.rejectedKeys ?? []), ...(entry?.newerKeys ?? [])]),\n attempted: 0,\n rejections: Object.values(entry?.rejected ?? {}).reduce((sum, count) => sum + count, 0),\n paused: entry !== undefined && entry.paused !== false,\n rows: entry?.rows ?? 0,\n };\n agentStates.set(agentId, state);\n }\n return state;\n };\n let archived: Promise<Map<string, number>> | undefined;\n const archivedOnce = () => (archived ??= this.archivedClaims(doc));\n let pages = 0;\n let fetches = 0;\n let deferred = 0;\n const rejectedCounts: Record<string, number> = {};\n const reject = (agentId: string, suffix: string, reason: AgentRejectReason): void => {\n const state = agentState(agentId);\n state.known.add(rejectedKeyEntry(suffix));\n state.rejections++;\n if (state.rejections >= this.limits.rejectionsBeforePause) state.paused = true;\n rejectedCounts[reason] = (rejectedCounts[reason] ?? 0) + 1;\n findings.push({ kind: \"reject\", agentId, suffix, reason });\n };\n\n let cursor = doc.reconcile.cursor;\n let cycleComplete = false;\n let budgetHit = false;\n pageLoop: while (pages < this.limits.listPagesPerPass) {\n let page = await this.backend.listKeys(\"\", cursor);\n pages++;\n // A stored cursor can go stale (it is bound to the listing session): restart from the top once.\n if (page.status !== \"ok\" && cursor !== undefined && pages === 1) {\n cursor = undefined;\n page = await this.backend.listKeys(\"\");\n pages++;\n }\n if (page.status !== \"ok\") break;\n for (const key of page.keys) {\n const classified = classifyRecordKey(key);\n if (classified.kind === \"index\") continue;\n if (classified.kind === \"rejected\") {\n if (classified.agentId === undefined || classified.suffix === undefined) continue; // owner-written: skip uncounted\n const state = agentState(classified.agentId);\n if (state.paused || state.known.has(rejectedKeyEntry(classified.suffix))) continue;\n reject(classified.agentId, classified.suffix, \"shape\");\n continue;\n }\n if (known.has(key)) continue;\n if (fetches >= this.limits.fetchesPerPass) { budgetHit = true; break pageLoop; }\n if (classified.kind === \"web\") {\n fetches++;\n const read = await this.backend.readVault(key);\n if (read.status === \"ok\" && isObject(read.value) && read.value.provenance === \"migrated\") {\n // One-time owner import: verified like an agent record; a failure needs attention.\n const checked = await this.checkRecord(read.value, { key, shareId: classified.shareId, src: \"web\", source: \"migrated\", agentDid: \"\", recordV: SUPPORTED_AGENT_RECORD_V }, archivedOnce);\n findings.push({ kind: \"web\", key, row: checked.kind === \"admit\" ? checked.row : { ...unreadableRow(this.now()), pv: \"migrated\" } });\n } else if (read.status === \"ok\") {\n let row: ShareIndexRow;\n try { row = isWebRecord(read.value) ? project(read.value, { key, src: \"web\" }) : unreadableRow(this.now()); } catch { row = unreadableRow(this.now()); }\n findings.push({ kind: \"web\", key, row });\n } else if (read.status === \"corrupt\") {\n findings.push({ kind: \"web\", key, row: unreadableRow(this.now()) });\n }\n continue;\n }\n // Agent record.\n const state = agentState(classified.agentId);\n if (state.paused || state.known.has(rejectedKeyEntry(classified.shareId))) continue;\n // Every fetch, whatever its verdict, spends the agent's per-pass allowance (≤50 GETs and decrypts per agent per pass).\n if (state.attempted >= this.limits.newRowsPerAgentPerPass || state.rows + state.attempted >= this.limits.liveRowsPerAgent) { deferred++; continue; }\n fetches++;\n state.attempted++;\n const examined = await this.examineAgentRecord(key, classified.agentId, classified.shareId, archivedOnce);\n if (examined.kind === \"admit\") {\n findings.push({ kind: \"agent\", key, agentId: classified.agentId, did: examined.did, row: examined.row });\n } else if (examined.kind === \"reject\") {\n reject(classified.agentId, classified.shareId, examined.reason);\n } else if (examined.kind === \"newer\") {\n state.known.add(rejectedKeyEntry(classified.shareId));\n findings.push({ kind: \"newer\", agentId: classified.agentId, suffix: classified.shareId, recordV: examined.recordV });\n }\n }\n cursor = page.cursor;\n if (cursor === undefined) { cycleComplete = true; break; }\n }\n const nextCursor = budgetHit ? doc.reconcile.cursor : cursor;\n\n // Header GC (V3-8) and newer re-check.\n for (const [agentId, entry] of Object.entries(doc.agents)) {\n if (entry.newerKeys !== undefined && entry.newerV !== undefined && entry.newerV <= SUPPORTED_AGENT_RECORD_V) findings.push({ kind: \"clear-newer\", agentId });\n if (entry.rows !== 0 || agentStates.get(agentId)?.attempted || pages >= this.limits.listPagesPerPass) continue;\n const prefixPage = await this.backend.listKeys(agentRecordPrefix(agentId));\n pages++;\n if (prefixPage.status === \"ok\" && prefixPage.keys.length === 0) findings.push({ kind: \"gc\", agentId });\n }\n\n let admitted = 0;\n let headerFull = false;\n const result = await this.update((working) => {\n // Header cap (§5, never evicts rows): if the findings would grow the header past its cap, apply them\n // again without new agent header state. Rows still land; the caller shows `headerFull` as an alert.\n const trial = structuredClone(working);\n this.applyFindings(trial, findings, () => {});\n headerFull = headerBytes(trial as unknown as ShareIndexDocument) > this.limits.headerBytes && headerBytes(trial as unknown as ShareIndexDocument) > headerBytes(working as unknown as ShareIndexDocument);\n admitted = 0;\n this.growHeader = !headerFull;\n try {\n this.applyFindings(working, findings, () => { admitted++; });\n } finally {\n this.growHeader = true;\n }\n if (nextCursor === undefined) delete working.reconcile.cursor;\n else working.reconcile.cursor = nextCursor;\n });\n return { status: result.status, pages, fetches, admitted, rejected: rejectedCounts, deferred, cycleComplete, headerFull };\n }\n\n private applyFindings(doc: WorkingDoc, findings: readonly Finding[], onAdmit: () => void): void {\n const agentBudget = this.limits.mainRowBytes * this.limits.agentRowShare;\n let agentBytes = Object.values(doc.rows).filter((row) => agentOf(row) !== undefined).reduce((sum, row) => sum + bytesOf(row), 0);\n for (const finding of findings) {\n if (finding.kind === \"reject\") { this.recordRejection(doc, finding.agentId, finding.suffix, finding.reason); continue; }\n if (finding.kind === \"gc\") {\n const entry = doc.agents[finding.agentId];\n if (entry !== undefined && entry.rows === 0) delete doc.agents[finding.agentId];\n continue;\n }\n if (finding.kind === \"clear-newer\") {\n const entry = doc.agents[finding.agentId];\n if (entry !== undefined) { delete entry.newerKeys; delete entry.newerV; if (entry.paused !== false && entry.paused.reason === \"newer\") entry.paused = false; }\n continue;\n }\n if (finding.kind === \"newer\") {\n const entry = this.ensureAgent(doc, finding.agentId);\n if (entry === undefined || !this.growHeader) continue;\n const keys = entry.newerKeys ?? (entry.newerKeys = []);\n const suffix = rejectedKeyEntry(finding.suffix);\n if (keys.includes(suffix)) continue;\n if (keys.length >= this.limits.rejectionsBeforePause) { if (entry.paused === false) entry.paused = { reason: \"newer\", at: this.now().toISOString() }; continue; }\n keys.push(suffix);\n entry.newerV = Math.max(entry.newerV ?? 0, finding.recordV);\n continue;\n }\n if (doc.rows[finding.key] !== undefined || this.isRetired(doc, finding.key)) continue;\n if (finding.kind === \"agent\") {\n const entry = this.ensureAgent(doc, finding.agentId);\n if (entry === undefined || entry.paused !== false || entry.rejectedKeys.includes(rejectedKeyEntry(basename(finding.key)))) continue;\n if (entry.rows >= this.limits.liveRowsPerAgent) { entry.paused = { reason: \"row-cap\", at: this.now().toISOString() }; continue; }\n const size = bytesOf(finding.row);\n if (agentBytes + size > agentBudget) continue; // deferred: agent rows may not crowd out web rows\n const decision = decideClaim(doc.rows, finding.key, finding.row);\n if (!decision.admit) { this.recordRejection(doc, finding.agentId, basename(finding.key), \"proof\"); continue; }\n for (const key of decision.displaced) { agentBytes -= bytesOf(doc.rows[key]); this.displace(doc, key); }\n doc.rows[finding.key] = finding.row;\n entry.rows++;\n entry.did ??= finding.did;\n agentBytes += size;\n if (entry.rows >= this.limits.liveRowsPerAgent && entry.paused === false) entry.paused = { reason: \"row-cap\", at: this.now().toISOString() };\n onAdmit();\n continue;\n }\n const decision = decideClaim(doc.rows, finding.key, finding.row);\n if (!decision.admit) {\n // A migrated import that loses precedence stays visible as needs-attention with no claim, so it is not refetched.\n if (finding.row.pv === \"migrated\") {\n const { cid: _cid, cc: _cc, ...claimless } = finding.row;\n doc.rows[finding.key] = { ...claimless, na: true };\n }\n continue;\n }\n for (const key of decision.displaced) { agentBytes -= bytesOf(doc.rows[key]); this.displace(doc, key); }\n doc.rows[finding.key] = finding.row;\n onAdmit();\n }\n }\n\n // -------------------------------------------------------------------------\n // Status sync (§4): only node-confirmed revocation is sticky.\n\n async syncStatus(port: ShareStatusPort): Promise<{ readonly status: ShareIndexWriteStatus; readonly checked: number }> {\n const loaded = await this.load();\n if (loaded.status !== \"ok\") return { status: loaded.status === \"read_only\" ? \"read_only\" : \"unavailable\", checked: 0 };\n const results = new Map<string, \"revoked\" | \"active\">();\n let checked = 0;\n for (const [key, row] of Object.entries(loaded.doc.rows)) {\n if (checked >= this.limits.statusChecksPerSync) break;\n if (row.rk === \"none\" || row.r?.confirmed === true) continue;\n checked++;\n const status = await port.status(key, row);\n if (status !== \"unknown\") results.set(key, status);\n }\n const result = await this.update((doc) => {\n for (const [key, status] of results) {\n const row = doc.rows[key];\n if (row === undefined || row.r?.confirmed === true) continue;\n if (status === \"revoked\") doc.rows[key] = { ...row, r: { at: row.r?.at ?? this.now().toISOString(), confirmed: true } };\n else if (row.r !== undefined) { const { r: _r, ...rest } = row; doc.rows[key] = rest as ShareIndexRow; }\n }\n });\n return { status: result.status, checked };\n }\n\n // -------------------------------------------------------------------------\n // Compaction (§7): rows over their byte budget move to archives; the header never evicts rows.\n\n async compact(): Promise<{ readonly status: ShareIndexWriteStatus; readonly archived: number }> {\n const loaded = await this.load();\n if (loaded.status !== \"ok\") return { status: loaded.status === \"read_only\" ? \"read_only\" : \"unavailable\", archived: 0 };\n const doc = loaded.doc;\n const now = this.now().getTime();\n const sizes = new Map(Object.entries(doc.rows).map(([key, row]) => [key, bytesOf(row)] as const));\n let total = [...sizes.values()].reduce((sum, size) => sum + size, 0);\n let agentTotal = Object.entries(doc.rows).filter(([, row]) => agentOf(row) !== undefined).reduce((sum, [key]) => sum + sizes.get(key)!, 0);\n const byAge = Object.entries(doc.rows).sort(([, left], [, right]) => Date.parse(left.c) - Date.parse(right.c));\n const chosen = new Set<string>();\n const take = (key: string): void => {\n if (chosen.has(key)) return;\n chosen.add(key);\n total -= sizes.get(key)!;\n if (agentOf(doc.rows[key]!) !== undefined) agentTotal -= sizes.get(key)!;\n };\n if (total > this.limits.mainRowBytes) {\n for (const [key, row] of byAge) {\n if (total <= this.limits.mainRowBytes) break;\n const done = row.r !== undefined || Date.parse(row.x) <= now;\n if (done && now - Date.parse(row.c) > this.limits.archiveAgeMs) take(key);\n }\n for (const [key, row] of byAge) {\n if (total <= this.limits.mainRowBytes || agentTotal <= this.limits.mainRowBytes * this.limits.agentRowShare) break;\n if (agentOf(row) !== undefined) take(key);\n }\n for (const [key] of byAge) {\n if (total <= this.limits.mainRowBytes) break;\n take(key);\n }\n }\n // Archive documents first, so a crash leaves rows in both places, never in neither.\n const groups = new Map<string, Record<string, ShareIndexRow>>();\n for (const key of chosen) {\n const row = doc.rows[key]!;\n const name = `archive-${new Date(Date.parse(row.c) || now).getUTCFullYear()}`;\n const group = groups.get(name) ?? {};\n group[key] = row;\n groups.set(name, group);\n }\n for (const [name, rows] of groups) {\n await runCas(`_index/${name}`, this.cas, async () => {\n const read = await this.backend.readVault(`_index/${name}`);\n if (read.status === \"unavailable\" || (read.status === \"corrupt\" && read.etag === undefined)) throw new Error(\"archive document is unavailable\");\n const existing = read.status === \"ok\" ? parseArchiveDocument(read.value) : undefined;\n const merged = { ...(existing ?? { v: 1 }), rows: { ...(existing?.rows ?? {}), ...rows } };\n const condition = read.status === \"ok\" || read.status === \"corrupt\" ? { ifMatch: read.etag! } : { ifNoneMatch: \"*\" as const };\n return { write: await this.backend.writeVault(`_index/${name}`, merged, condition), onSuccess: () => undefined };\n });\n }\n // Tombstones past their TTL are dropped once the record is gone.\n const expiredTombstones: string[] = [];\n for (const tombstone of doc.tombstones) {\n if (now - Date.parse(tombstone.at) <= this.limits.tombstoneTtlMs) continue;\n const classified = classifyRecordKey(tombstone.key);\n const gone = classified.kind === \"agent\" ? (await this.backend.readRaw(tombstone.key)).status === \"not_found\" : (await this.backend.readVault(tombstone.key)).status === \"not_found\";\n if (gone) expiredTombstones.push(tombstone.key);\n }\n const result = await this.update((working) => {\n for (const [name, rows] of groups) {\n let archive = working.archives.find((item) => item.name === name);\n if (archive === undefined) working.archives.push(archive = { name, ids: [] });\n for (const key of Object.keys(rows)) {\n const row = working.rows[key];\n if (row !== undefined) this.displaceForDelete(working, key, row);\n if (!archive.ids.includes(key)) archive.ids.push(key);\n }\n }\n working.tombstones = working.tombstones.filter((tombstone) => !expiredTombstones.includes(tombstone.key));\n });\n return { status: result.status, archived: chosen.size };\n }\n}\n"],"mappings":"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","names":["import_sha256","util","object","objectUtil","errorUtil","errorMap","base64","ctx","result","issues","elements","processed","base","result","r","ZodFirstPartyTypeKind","import_ed25519","coerce","encode","length","i","j","decode","code","equals","base","cid","baseCache","cache","headerBytes","ed25519","cid","ED25519_VERIFY_OPTS","ed25519","sha256","ED25519_VERIFY_OPTS","KEY_LENGTH","cid","KEY_LENGTH","subtle","base","record","decryptEnvelope","code","import_links","record","record","read","record","basename","fail","cid","import_blake3","import_ed25519","import_sha256","empty","equals","coerce","base","encode","length","i","j","decode","src","_brrp__multiformats_scope_baseX","base_x_default","Encoder","Decoder","or","ComposedDecoder","Codec","from","encode","decode","baseX","base_x_default","coerce","createAlphabetIdx","rfc4648","base32","rfc4648","base32upper","base32pad","base32padupper","base32hex","base32hexupper","base32hexpad","base32hexpadupper","base32z","base36","baseX","base36upper","base58btc","baseX","base58flickr","encode_1","encode","MSB","REST","MSBALL","INT","decode","read","MSB$1","REST$1","N1","N2","N3","N4","N5","N6","N7","N8","N9","length","varint","_brrp_varint","varint_default","decode","code","varint_default","encodeTo","encodingLength","create","code","encodingLength","encodeTo","Digest","decode","coerce","equals","format","base","toStringV0","baseCache","base58btc","toStringV1","base32","cache","baseCache","cid","CID","_CID","code","DAG_PB_CODE","SHA_256_CODE","create","equals","base","format","encodeCID","cidSymbol","decode","coerce","Digest","length","parseCIDtoBytes","base58btc","base32","base36","toStringV0","toStringV1","encodingLength","encodeTo","import_ed25519","import_ed25519","import_sha256","code","SHA256_CODE","CID","code","create","SHA256_CODE","base32","length","value","import_ed25519","cid","decode","length","read","import_ed25519","import_blake3","CID","create","cid","CID","create","record","bytesOf","isObject","read","base","record","cid","state","decision"]}
|
|
1
|
+
{"version":3,"sources":["../src/share-index/index.ts","../src/share-index/ids.ts","../../../node_modules/multiformats/src/bytes.ts","../../../node_modules/multiformats/src/vendor/base-x.js","../../../node_modules/multiformats/src/bases/base.ts","../../../node_modules/multiformats/src/bases/base32.ts","../../../node_modules/multiformats/src/bases/base36.ts","../../../node_modules/multiformats/src/bases/base58.ts","../../../node_modules/multiformats/src/vendor/varint.js","../../../node_modules/multiformats/src/varint.ts","../../../node_modules/multiformats/src/hashes/digest.ts","../../../node_modules/multiformats/src/cid.ts","../../../node_modules/multiformats/src/codecs/raw.ts","../../share-envelope/src/cid.ts","../../share-envelope/src/bearer-delegation.ts","../../../node_modules/multiformats/src/bases/base64.ts","../../share-envelope/src/bytes.ts","../../share-envelope/src/didkey.ts","../../share-envelope/src/bearer.ts","../../share-envelope/src/schema.ts","../../share-envelope/src/aead.ts","../../share-envelope/src/jcs.ts","../../share-envelope/src/email.ts","../../share-envelope/src/compact-ucan.ts","../../share-envelope/src/sign.ts","../../share-envelope/src/link.ts","../../../node_modules/zod/v3/external.js","../../../node_modules/zod/v3/helpers/util.js","../../../node_modules/zod/v3/ZodError.js","../../../node_modules/zod/v3/locales/en.js","../../../node_modules/zod/v3/errors.js","../../../node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/zod/v3/types.js","../src/share-index/link.ts","../src/native.ts","../src/share-index/agent-key.ts","../src/share-index/agent-record.ts","../src/share-index/backend.ts","../src/share-index/cas.ts","../src/share-index/delivery.ts","../src/share-index/record-store.ts","../src/artifact-core.ts","../src/share-index/schema.ts","../src/share-index/precedence.ts","../src/share-index/verify/chain.ts","../src/share-index/verify/policy-v3.ts","../../../node_modules/multiformats/src/bytes.ts","../../../node_modules/multiformats/src/vendor/base-x.js","../../../node_modules/multiformats/src/bases/base.ts","../../../node_modules/multiformats/src/bases/base32.ts","../../../node_modules/multiformats/src/bases/base36.ts","../../../node_modules/multiformats/src/bases/base58.ts","../../../node_modules/multiformats/src/vendor/varint.js","../../../node_modules/multiformats/src/varint.ts","../../../node_modules/multiformats/src/hashes/digest.ts","../../../node_modules/multiformats/src/cid.ts","../src/share-index/verify/registration.ts","../src/owner-policy.ts","../../../node_modules/multiformats/src/codecs/raw.ts","../src/share-index/verify/enforcement-delegation.ts","../src/share-index/verify/cacao-times.ts","../src/share-index/verify/attenuation.ts","../src/share-index/verify/ucan.ts","../src/share-index/verify/session.ts","../src/artifact-pin.ts","../src/share-index/sender-share-index.ts"],"sourcesContent":["/**\n * `@tinycloud/share-sdk/share-index`: the shared share index (TC-1432 design C).\n * Published as its own entry so browser bundles that import the package root\n * (web-sdk) do not carry it. Reference: `docs/share-index.md`.\n */\nexport { AGENT_ID_LENGTH, INDEX_MAIN_KEY, SHARE_RECORDS_VAULT_PREFIX, agentIdFromDid, agentRecordKey, agentRecordPrefix, classifyRecordKey, isAgentId, isShareId, type ClassifiedRecordKey } from \"./ids.js\";\nexport { validateShareLink, type ShareLinkCheck, type ShareLinkShape } from \"./link.js\";\nexport { deriveAgentKeyMaterial, type AgentKeyMaterial } from \"./agent-key.js\";\nexport { AGENT_RECORD_VERSION, MAX_AGENT_RECORD_BYTES, SUPPORTED_AGENT_RECORD_V, AgentRecordError, OwnerUnwrapUnavailableError, agentRecordBinding, openAgentRecordAsAgent, openAgentRecordAsOwner, parseStoredAgentRecord, sealAgentRecord, type AgentRecordFailure, type AgentRecordHeader, type OwnerNetworkUnwrap, type OwnerNetworkWrap, type StoredAgentRecord } from \"./agent-record.js\";\nexport { INVALID_ETAG_MESSAGE, createTinyCloudShareIndexBackend, type ShareDocumentRead, type ShareIndexBackend, type ShareListResult, type ShareRawRead, type ShareWriteCondition, type ShareWriteResult, type TinyCloudShareIndexBackendOptions, type TinyCloudShareIndexClient, type VaultNetworkRead } from \"./backend.js\";\nexport { DEFAULT_CAS_POLICY, ShareIndexCasError, type CasPolicy, type ShareIndexCasErrorCode } from \"./cas.js\";\nexport { AgentShareRecordStore, WebShareRecordStore, type AgentShareRecordStoreOptions } from \"./record-store.js\";\nexport { INDEX_SCHEMA_VERSION, ShareRecordSchemaError, checkAgentRecordSchema, displayName, isSpaceOwnedBy, parseIndexDocument, project, registeredAtFits, type AgentRecordSchemaContext, type ShareIndexAgentEntry, type ShareIndexArchiveDocument, type ShareIndexDocument, type ShareIndexRow, type ShareProofState } from \"./schema.js\";\nexport { claimRank, decideClaim, type ClaimDecision } from \"./precedence.js\";\nexport { verifyAgentRecordChain, type ChainContext, type ChainVerdict, type ShareRegistrationKey } from \"./verify/chain.js\";\nexport { parseSignedUcan, type SignedUcanDelegation } from \"./verify/ucan.js\";\nexport { verifyOwnerSessionDelegation, type ParsedSiweCacao, type SiweCacaoParser } from \"./verify/session.js\";\nexport { verifyPolicyEnforcementDelegation } from \"./verify/enforcement-delegation.js\";\nexport { attenuationCovers, type Attenuation } from \"./verify/attenuation.js\";\nexport { DEFAULT_SHARE_INDEX_LIMITS, MemoryShareIndexOutbox, SenderShareIndex, headerBytes, type AgentRejectReason, type SenderShareIndexOptions, type ShareIndexFlushResult, type ShareIndexLimits, type ShareIndexLoad, type ShareIndexOp, type ShareIndexOutbox, type ShareIndexReconcileReport, type ShareIndexWriteOutcome, type ShareIndexWriteStatus, type ShareStatusPort } from \"./sender-share-index.js\";\nexport type { SenderShareRecord, SenderShareRecordProofs } from \"../history.js\";\nexport { checkRegistrationReceipt, type CheckedRegistration, type RegistrationKey } from \"./verify/registration.js\";\nexport { verifyEnvelopeV3At } from \"./verify/policy-v3.js\";\nexport { DeliveryMaterialError, STORED_DELIVERY_MATERIAL_KEYS, assertLinkBoundToMaterial, compactShareRecord, expandShareRecord, openDeliveryEnvelope, restoreShareRecordLink, type StoredDeliveryMaterial, type StoredFullShareLink, type StoredShareRecord } from \"./delivery.js\";\n","import { sha256 } from \"@noble/hashes/sha256\";\nimport { toBase64Url } from \"@tinycloud/share-envelope\";\n\n/**\n * Identifiers and the key classifier for the shared share index\n * (TC-1432 design C §1). All keys here are relative to the vault prefix\n * `sender-history/v2/records/`.\n */\n\n/** Vault key prefix of every share record and of the index documents. */\nexport const SHARE_RECORDS_VAULT_PREFIX = \"sender-history/v2/records/\";\n/** The main index document key. */\nexport const INDEX_MAIN_KEY = \"_index/main\";\n/** Length of a DID-derived agent id (132 bits of base64url). */\nexport const AGENT_ID_LENGTH = 22;\n/** Length of a `rejectedKeys`/`newerKeys` entry: base64url of SHA-256 of the key suffix, truncated (96 bits). */\nexport const REJECTED_KEY_ENTRY_LENGTH = 16;\n\nconst AGENT_ID_DOMAIN = \"xyz.tinycloud.share/agent-id/v1|\";\nconst SHARE_ID = /^[A-Za-z0-9_-]{1,512}$/;\nconst AGENT_ID = /^[A-Za-z0-9_-]{22}$/;\nconst ARCHIVE_NAME = /^archive-\\d{4}$/;\n\n/** `^[A-Za-z0-9_-]{1,512}$`, excluding the reserved first segments `_index` and `agents`. */\nexport function isShareId(value: unknown): value is string {\n return typeof value === \"string\" && SHARE_ID.test(value) && value !== \"_index\" && value !== \"agents\";\n}\n\nexport function isAgentId(value: unknown): value is string {\n return typeof value === \"string\" && AGENT_ID.test(value);\n}\n\n/** Index document names under `_index/`: `main` and `archive-<yyyy>`. */\nexport function isIndexDocumentName(value: unknown): value is string {\n return typeof value === \"string\" && (value === \"main\" || ARCHIVE_NAME.test(value));\n}\n\n/**\n * The first 22 base64url characters of\n * `sha256(\"xyz.tinycloud.share/agent-id/v1|\" + agentDid)`. `agentDid` is the\n * DID of the key that signs the agent's invocations and delegations, so a new\n * key gets a new prefix.\n */\nexport function agentIdFromDid(agentDid: string): string {\n if (typeof agentDid !== \"string\" || !agentDid.startsWith(\"did:\") || /[\\s#]/.test(agentDid)) throw new TypeError(\"agent DID is invalid\");\n return toBase64Url(sha256(new TextEncoder().encode(AGENT_ID_DOMAIN + agentDid))).slice(0, AGENT_ID_LENGTH);\n}\n\nexport function agentRecordKey(agentId: string, shareId: string): string {\n if (!isAgentId(agentId) || !isShareId(shareId)) throw new TypeError(\"agent record key is invalid\");\n return `agents/${agentId}/${shareId}`;\n}\n\n/** Explicit list prefix (with the trailing slash) of one agent's records, relative to `records/`. */\nexport function agentRecordPrefix(agentId: string): string {\n if (!isAgentId(agentId)) throw new TypeError(\"agent id is invalid\");\n return `agents/${agentId}/`;\n}\n\nexport type ClassifiedRecordKey =\n | { readonly kind: \"index\"; readonly name: string }\n | { readonly kind: \"web\"; readonly shareId: string }\n | { readonly kind: \"agent\"; readonly agentId: string; readonly shareId: string }\n /**\n * Never fetched, never rendered. `agentId`/`suffix` are set when the key\n * lies inside an agent prefix (`agents/<valid id>/…`), so it is counted\n * once against that agent; any other key can only be written by owner\n * clients and is skipped without counting.\n */\n | { readonly kind: \"rejected\"; readonly agentId?: string; readonly suffix?: string };\n\n/**\n * The `rejectedKeys`/`newerKeys` entry for a key suffix: a short hash, so an\n * agent-chosen string never reaches the index and every entry is 16\n * characters (≤100 per list keeps an agent's header state small).\n */\nexport function rejectedKeyEntry(suffix: string): string {\n return toBase64Url(sha256(new TextEncoder().encode(suffix))).slice(0, REJECTED_KEY_ENTRY_LENGTH);\n}\n\nfunction hasUnsafeShape(key: string): boolean {\n if (key.length === 0 || key.startsWith(\"/\") || key.includes(\"%\") || key.includes(\"\\\\\")) return true;\n return key.split(\"/\").some((segment) => segment === \"\" || segment === \".\" || segment === \"..\");\n}\n\n/**\n * Classify one raw listed key (relative to `records/`), before any\n * needs-attention logic. A key containing `%`, `\\`, a `.`/`..` segment, an\n * empty segment or a leading `/` is rejected first.\n */\nexport function classifyRecordKey(key: string): ClassifiedRecordKey {\n if (typeof key !== \"string\") return { kind: \"rejected\" };\n const agentPrefix = /^agents\\/([A-Za-z0-9_-]{22})\\//.exec(key);\n const owner = agentPrefix === null ? {} : { agentId: agentPrefix[1]!, suffix: key.slice(agentPrefix[0].length) };\n if (hasUnsafeShape(key)) return { kind: \"rejected\", ...owner };\n const segments = key.split(\"/\");\n if (segments.length === 1) return isShareId(key) ? { kind: \"web\", shareId: key } : { kind: \"rejected\" };\n if (segments[0] === \"_index\") return segments.length === 2 && isIndexDocumentName(segments[1]) ? { kind: \"index\", name: segments[1]! } : { kind: \"rejected\" };\n if (segments[0] === \"agents\" && segments.length === 3 && isAgentId(segments[1]) && isShareId(segments[2])) {\n return { kind: \"agent\", agentId: segments[1]!, shareId: segments[2]! };\n }\n return { kind: \"rejected\", ...owner };\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 { 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 const prefixCodePoint = prefix.codePointAt(0)\n /* c8 ignore next 3 */\n if (prefixCodePoint === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefixCodePoint\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 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, alphabetIdx: Record<string, number>, bitsPerChar: number, name: string): Uint8Array {\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 = alphabetIdx[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\nfunction createAlphabetIdx (alphabet: string): Record<string, number> {\n // Build the character lookup table:\n const alphabetIdx: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n alphabetIdx[alphabet[i]] = i\n }\n return alphabetIdx\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 const alphabetIdx = createAlphabetIdx(alphabet)\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, alphabetIdx, bitsPerChar, name)\n }\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","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","/* 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","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","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\n/**\n * Used to check that the passed multihash has the passed code\n */\nexport function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {\n return digest.code === code\n}\n","import { base32 } from './bases/base32.js'\nimport { base36 } from './bases/base36.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 case base36.prefix: {\n const decoder = base ?? base36\n return [base36.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32, base36 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 { coerce } from '../bytes.js'\nimport type { ArrayBufferView, 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> | ArrayBufferView<Uint8Array>): Uint8Array {\n return coerce(data)\n}\n","import { CID } from \"multiformats/cid\";\nimport * as raw from \"multiformats/codecs/raw\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\nimport { sha256 } from \"@noble/hashes/sha2\";\n\nconst SHA256_CODE = 0x12;\n\n/**\n * Compute the CID of a single raw block, per sharing-viewer-and-registry.md §6.3:\n * CIDv1, codec raw (0x55), sha2-256, canonical lowercase base32 (\"bafkr…\").\n * Hashes the exact bytes given — no chunking, no UnixFS/dag-pb wrapping.\n */\nexport async function computeCid(bytes: Uint8Array): Promise<string> {\n // Normalize cross-realm typed arrays (notably jsdom's TextEncoder output)\n // before multiformats performs its instanceof check.\n const digest = createDigest(SHA256_CODE, sha256(new Uint8Array(bytes)));\n return CID.create(1, raw.code, digest).toString();\n}\n\n/**\n * Is `cidString` a canonical CIDv1/raw/sha2-256 lowercase-base32 CID *string*\n * (no bytes check — see `verifyCid` for that)? Used by the envelope schema's\n * `content.cid` pointer so a non-canonical or non-raw CID never gets signed.\n */\nexport function isCanonicalRawCid(cidString: string): boolean {\n let cid: CID;\n try {\n cid = CID.parse(cidString);\n } catch {\n return false;\n }\n return (\n cid.version === 1 &&\n cid.code === raw.code &&\n cid.multihash.code === SHA256_CODE &&\n // `toString` of a parsed CID gives back the string it was parsed from; a fresh CID is encoded again.\n CID.createV1(cid.code, cid.multihash).toString() === cidString\n );\n}\n\n/**\n * Verify that `cidString` is the canonical CIDv1/raw/sha2-256 base32 CID of `bytes`.\n * Returns false for any mismatch: wrong hash, wrong version/codec, or a\n * non-canonical string form of the right CID.\n */\nexport async function verifyCid(\n bytes: Uint8Array,\n cidString: string,\n): Promise<boolean> {\n let cid: CID;\n try {\n cid = CID.parse(cidString);\n } catch {\n return false;\n }\n if (cid.version !== 1 || cid.code !== raw.code) return false;\n // Require the canonical lowercase base32 string form.\n if (cid.toString() !== cidString) return false;\n return (await computeCid(bytes)) === cidString;\n}\n","/**\n * Bearer-slice delegation: ONE module for both sides so create and verify\n * cannot drift — the CLI mints with `mintBearerDelegation`, the viewer checks\n * with `checkBearerDelegation`, and both share `bearerResourceUri` and\n * `READ_ABILITIES` (this module began life as the stage-3 viewer's\n * delegation.ts and moved here when the stage-4 create flow needed the same\n * conventions from node).\n *\n * --- The check (viewer spec §1 \"Mode detection\") -------------------------\n *\n * The UI must derive its mode from EFFECTIVE CAPABILITIES, never from the\n * envelope's unsigned hints — and never from the mere fact that the envelope\n * decrypted. `checkBearerDelegation` decodes AND cryptographically verifies\n * the envelope's embedded delegation (a UCAN/JWT-shaped token: three\n * base64url segments, header.payload.signature, capabilities in the\n * payload's `att` array) and fails closed unless ALL of the following hold:\n *\n * 1. the token parses (three non-empty base64url segments; header and\n * payload are JSON objects; the signature segment decodes),\n * 2. the header's `alg` is EdDSA and the signature VERIFIES (strict\n * RFC 8032 ed25519) over the JWS signing input against the key the\n * token's own `iss` did:key names — the token is internally\n * consistent: `iss` really signed exactly these claims,\n * 3. the token carries a REQUIRED integer `exp` (UCAN epoch-seconds\n * convention) that has not passed, and — if present — an `nbf` that\n * has (expiry-less tokens are rejected outright),\n * 4. the delegatee (`aud`) DID EQUALS the did:key derived from the\n * envelope's embedded bearer sessionJwk — otherwise the key the link\n * carries cannot use this delegation at all,\n * 5. some capability grants the read ability (`BEARER_READ_ABILITY`,\n * the SAME single constant the mint emits) on a CANONICAL resource\n * URI that covers the envelope's signed target\n * (origin + spaceId + resource.path) exactly or via a `/*` prefix on\n * a segment boundary — see `resourceUriCovers`.\n *\n * WHAT THE CHECK DOES **NOT** DO — and must never be presented as doing:\n * verification of a delegation CHAIN against an out-of-band trust root\n * (proof/`prf` chains, issuer authority over the resource, revocation).\n * In the bearer slice the delegation is SELF-ISSUED — internal consistency\n * is everything there is to verify. In the policy / recipient-DID slices\n * this becomes full chain verification against the owner/issuer roots, and\n * the NODE repeats it at read time as the real enforcement boundary. This\n * check makes the viewer honest — a link whose delegation is unsigned,\n * expired, or cannot authorize its own embedded key is rejected before any\n * \"read access\" claim is shown — it does not make the link authorized.\n *\n * --- The mint (bearer slice ONLY) ----------------------------------------\n *\n * In the bearer slice there is no owner node: possession of the link IS the\n * authority, so `mintBearerDelegation` self-issues a minimal, internally\n * consistent token — a fresh ed25519 issuer signs (real EdDSA over the JWS\n * signing input) a delegation whose `aud` is the link's embedded session\n * did:key and whose single capability grants read over the bearer resource\n * URI. It satisfies exactly the structure `checkBearerDelegation` validates.\n * In the policy / recipient-DID slices this mint is REPLACED by a real\n * owner-signed delegation chain that the node verifies at read time; nothing\n * about the check side changes.\n */\nimport { ed25519 } from \"@noble/curves/ed25519\";\n\nimport { fromBase64Url, toBase64Url, utf8Bytes } from \"./bytes.js\";\nimport {\n didKeyFromEd25519PublicKey,\n ed25519PublicKeyFromDidKey,\n} from \"./didkey.js\";\nimport { getBearerSessionJwk } from \"./bearer.js\";\nimport {\n isCanonicalHttpsOrigin,\n isCanonicalResourcePath,\n type ShareEnvelope,\n} from \"./schema.js\";\n\n/** The ONE read ability of the bearer slice — minted AND checked (no drift). */\nexport const BEARER_READ_ABILITY = \"kv/get\";\n\n/**\n * Read abilities accepted for the single-file bearer viewer (spec §1 table).\n * Derived from — never listed separately from — the single mint constant, so\n * the set the checker accepts is PROVABLY identical to what the mint emits.\n */\nexport const READ_ABILITIES: ReadonlySet<string> = new Set([BEARER_READ_ABILITY]);\n\n/**\n * Strict ed25519 verification (RFC 8032, not ZIP-215) — same interop\n * rationale as sign.ts: agree byte-for-byte with a strict Rust verifier.\n */\nconst ED25519_VERIFY_OPTS = { zip215: false } as const;\n\nexport type DelegationCheckResult =\n | { ok: true; delegateeDid: string }\n | { ok: false; detail: string };\n\ninterface UcanCapability {\n readonly with: string;\n readonly can: string;\n}\n\n/** Strict base64url segment → JSON value, or null on ANY failure. */\nfunction decodeJsonSegment(segment: string): unknown {\n try {\n const bytes = fromBase64Url(segment);\n return JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes));\n } catch {\n return null;\n }\n}\n\nfunction isJsonObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseCapability(value: unknown): UcanCapability | null {\n if (!isJsonObject(value)) return null;\n const withUri = value[\"with\"];\n const can = value[\"can\"];\n if (typeof withUri !== \"string\" || withUri.length === 0) return null;\n if (typeof can !== \"string\" || can.length === 0) return null;\n return { with: withUri, can };\n}\n\n/**\n * Parse a resource URI into a canonical https origin plus CANONICAL path\n * segments (schema.ts grammar: no `.`/`..` segments, no `//`, no backslash,\n * no percent-encoded separator aliases, no control chars). Returns null —\n * fail closed — for anything else, so a URI carrying a traversal alias can\n * never even reach the comparison below.\n */\nfunction parseCanonicalResourceUri(\n uri: string,\n): { origin: string; segments: readonly string[] } | null {\n const match = /^(https:\\/\\/[^/\\\\]+)\\/(.*)$/.exec(uri);\n if (match === null) return null;\n const [, origin, path] = match as unknown as [string, string, string];\n if (!isCanonicalHttpsOrigin(origin)) return null;\n if (!isCanonicalResourcePath(path)) return null;\n return { origin, segments: path.split(\"/\") };\n}\n\n/**\n * Does a granted resource URI cover the target resource URI? BOTH sides must\n * parse under the canonical grammar (anything non-canonical — `..` segments,\n * `//`, encoded separators — is rejected outright, never normalized-and-\n * accepted). Coverage is exact segment-wise equality, or a `<prefix>/*`\n * grant whose segments are a strict prefix of the target's segments — i.e.\n * only on canonical segment boundaries: `foo/*` covers `foo/bar`, never\n * `foobar` and never `foo/../bar`. Nothing looser (no mid-segment globs,\n * no scheme-relative tricks) — fail closed.\n */\nexport function resourceUriCovers(granted: string, target: string): boolean {\n const targetParsed = parseCanonicalResourceUri(target);\n if (targetParsed === null) return false;\n const wildcard = granted.endsWith(\"/*\");\n const grantedParsed = parseCanonicalResourceUri(\n wildcard ? granted.slice(0, -2) : granted,\n );\n if (grantedParsed === null) return false;\n if (grantedParsed.origin !== targetParsed.origin) return false;\n const grantedSegments = grantedParsed.segments;\n const targetSegments = targetParsed.segments;\n const prefixMatches = grantedSegments.every(\n (segment, index) => segment === targetSegments[index],\n );\n if (!prefixMatches) return false;\n return wildcard\n ? targetSegments.length > grantedSegments.length\n : targetSegments.length === grantedSegments.length;\n}\n\n/**\n * The canonical bearer-slice resource URI: `<origin>/<spaceId>/<path>`.\n * THE single convention shared by mint (CLI) and check (viewer) — it must be\n * aligned with the node's authoritative resource grammar before real\n * node-gated reads ship in the policy/recipient-DID slices.\n */\nexport function bearerResourceUri(\n origin: string,\n spaceId: string,\n path: string,\n): string {\n return `${origin}/${spaceId}/${path}`;\n}\n\n/** The resource URI a delegation must cover for this envelope's signed target. */\nexport function requiredResourceUri(envelope: ShareEnvelope): string {\n const { origin, spaceId, resource } = envelope.target;\n return bearerResourceUri(origin, spaceId, resource.path);\n}\n\nexport interface CheckBearerDelegationOptions {\n /** Clock override (epoch MILLISECONDS) for exp/nbf; defaults to Date.now(). */\n now?: () => number;\n}\n\n/**\n * Bearer-binding check described in the module header: structural decode +\n * cryptographic verification of the token's own EdDSA signature, expiry, and\n * not-before. Returns a failure `detail` suitable for logging/diagnostics —\n * NOT for claiming more than internal consistency (see module header for\n * what chain verification is deferred to the node in later slices).\n */\nexport function checkBearerDelegation(\n envelope: ShareEnvelope,\n options: CheckBearerDelegationOptions = {},\n): DelegationCheckResult {\n // 1. Derive the did:key the embedded bearer key actually is. Only Ed25519\n // OKP session keys are supported in this slice (the did:key helper is\n // ed25519-only); anything else fails closed rather than guessing.\n let sessionDid: string;\n try {\n const jwk = getBearerSessionJwk(envelope);\n if (jwk.kty !== \"OKP\" || jwk.crv !== \"Ed25519\") {\n return {\n ok: false,\n detail: `unsupported bearer session key family ${jwk.kty}/${jwk.crv}; this build binds Ed25519 keys only`,\n };\n }\n const publicKey = fromBase64Url(jwk.x);\n const privateKey = fromBase64Url(jwk.d);\n if (publicKey.length !== 32 || privateKey.length !== 32) {\n return { ok: false, detail: \"bearer session key must contain 32-byte Ed25519 coordinates\" };\n }\n const derivedPublicKey = ed25519.getPublicKey(privateKey);\n if (!derivedPublicKey.every((byte, index) => byte === publicKey[index])) {\n return { ok: false, detail: \"bearer session private and public keys do not match\" };\n }\n sessionDid = didKeyFromEd25519PublicKey(publicKey);\n } catch (error) {\n return {\n ok: false,\n detail: `could not derive did:key from embedded session key: ${\n error instanceof Error ? error.message : String(error)\n }`,\n };\n }\n\n // 2. Structural token decode: header.payload.signature.\n const segments = envelope.delegation.split(\".\");\n if (segments.length !== 3 || segments.some((segment) => segment.length === 0)) {\n return { ok: false, detail: \"delegation is not a three-segment JWT-shaped token\" };\n }\n const [headerSegment, payloadSegment, signatureSegment] = segments as [\n string,\n string,\n string,\n ];\n const header = decodeJsonSegment(headerSegment);\n if (!isJsonObject(header)) {\n return { ok: false, detail: \"delegation header is not a base64url JSON object\" };\n }\n const payload = decodeJsonSegment(payloadSegment);\n if (!isJsonObject(payload)) {\n return { ok: false, detail: \"delegation payload is not a base64url JSON object\" };\n }\n let signatureBytes: Uint8Array;\n try {\n signatureBytes = fromBase64Url(signatureSegment);\n if (signatureBytes.length === 0) {\n return { ok: false, detail: \"delegation signature segment is empty\" };\n }\n } catch {\n return { ok: false, detail: \"delegation signature segment is not base64url\" };\n }\n\n // 3. Cryptographic verification: the token must be EdDSA-signed by the key\n // its own `iss` did:key names (the mint signs for real — an unsigned or\n // tampered token is rejected, never waved through on shape alone).\n if (header[\"alg\"] !== \"EdDSA\") {\n return {\n ok: false,\n detail: `delegation alg must be EdDSA, got ${JSON.stringify(header[\"alg\"])}`,\n };\n }\n const issuer = payload[\"iss\"];\n if (typeof issuer !== \"string\" || issuer.length === 0) {\n return { ok: false, detail: \"delegation payload has no issuer (iss) DID\" };\n }\n let issuerPublicKey: Uint8Array;\n try {\n issuerPublicKey = ed25519PublicKeyFromDidKey(issuer);\n } catch (error) {\n return {\n ok: false,\n detail: `delegation issuer is not an ed25519 did:key: ${\n error instanceof Error ? error.message : String(error)\n }`,\n };\n }\n let signatureValid: boolean;\n try {\n signatureValid = ed25519.verify(\n signatureBytes,\n utf8Bytes(`${headerSegment}.${payloadSegment}`),\n issuerPublicKey,\n ED25519_VERIFY_OPTS,\n );\n } catch {\n signatureValid = false;\n }\n if (!signatureValid) {\n return { ok: false, detail: \"delegation signature does not verify against iss\" };\n }\n\n // 4. Time bounds, fail closed: `exp` is REQUIRED (UCAN epoch seconds — an\n // expiry-less delegation is rejected outright) and `nbf` is enforced\n // when present.\n const nowMs = options.now?.() ?? Date.now();\n const exp = payload[\"exp\"];\n if (typeof exp !== \"number\" || !Number.isSafeInteger(exp) || exp <= 0) {\n return { ok: false, detail: \"delegation has no valid expiry (exp) claim\" };\n }\n if (nowMs >= exp * 1000) {\n return { ok: false, detail: \"delegation is expired\" };\n }\n const nbf = payload[\"nbf\"];\n if (nbf !== undefined) {\n if (typeof nbf !== \"number\" || !Number.isSafeInteger(nbf)) {\n return { ok: false, detail: \"delegation nbf claim is not a valid time\" };\n }\n if (nowMs < nbf * 1000) {\n return { ok: false, detail: \"delegation is not yet valid (nbf)\" };\n }\n }\n\n // 5. Delegatee binding: aud must BE the embedded key's did:key.\n const audience = payload[\"aud\"];\n if (typeof audience !== \"string\" || audience.length === 0) {\n return { ok: false, detail: \"delegation payload has no audience (aud) DID\" };\n }\n if (audience !== sessionDid) {\n return {\n ok: false,\n detail: \"delegation audience is not the link's embedded session key\",\n };\n }\n\n // 6. Capability coverage: some `att` entry must grant read on a CANONICAL\n // resource URI covering the envelope's signed target.\n const att = payload[\"att\"];\n if (!Array.isArray(att) || att.length === 0) {\n return { ok: false, detail: \"delegation payload has no capabilities (att)\" };\n }\n const required = requiredResourceUri(envelope);\n const granted = att\n .map(parseCapability)\n .some(\n (capability) =>\n capability !== null &&\n READ_ABILITIES.has(capability.can) &&\n resourceUriCovers(capability.with, required),\n );\n if (!granted) {\n return {\n ok: false,\n detail: `delegation grants no read capability covering ${required}`,\n };\n }\n\n return { ok: true, delegateeDid: audience };\n}\n\nexport interface MintBearerDelegationOptions {\n /** ed25519 private key (32-byte seed) of the self-issued bearer issuer. */\n issuerPrivateKey: Uint8Array;\n /** The link's embedded session did:key — the delegatee (`aud`). */\n audienceDid: string;\n /** Resource the capability covers — build it with `bearerResourceUri`. */\n resourceUri: string;\n /** Delegation expiry, epoch SECONDS (UCAN `exp` convention). */\n expiresAtSeconds: number;\n}\n\n/**\n * Mint the bearer slice's self-issued delegation token (see module header:\n * a stand-in for a real owner-signed chain, replaced in later slices).\n * JWT-shaped: base64url(header) \".\" base64url(payload) \".\" base64url(sig),\n * signed EdDSA (ed25519) over the UTF-8 signing input `header.payload` by\n * the issuer key, so the token is internally consistent — `iss` really did\n * sign it — even though no node verifies the chain in this slice.\n */\nexport function mintBearerDelegation(options: MintBearerDelegationOptions): string {\n const { issuerPrivateKey, audienceDid, resourceUri, expiresAtSeconds } = options;\n if (!audienceDid.startsWith(\"did:\")) {\n throw new TypeError(`audienceDid must be a DID, got ${audienceDid}`);\n }\n if (resourceUri.length === 0) {\n throw new TypeError(\"resourceUri must be non-empty\");\n }\n if (!Number.isSafeInteger(expiresAtSeconds) || expiresAtSeconds <= 0) {\n throw new TypeError(\n `expiresAtSeconds must be a positive integer (epoch seconds), got ${expiresAtSeconds}`,\n );\n }\n const issuerDid = didKeyFromEd25519PublicKey(\n ed25519.getPublicKey(issuerPrivateKey),\n );\n const header = { alg: \"EdDSA\", typ: \"JWT\", ucv: \"0.9.1\" };\n const payload = {\n iss: issuerDid,\n aud: audienceDid,\n att: [{ with: resourceUri, can: BEARER_READ_ABILITY }],\n prf: [],\n exp: expiresAtSeconds,\n };\n const signingInput = `${toBase64Url(utf8Bytes(JSON.stringify(header)))}.${toBase64Url(\n utf8Bytes(JSON.stringify(payload)),\n )}`;\n const signature = ed25519.sign(utf8Bytes(signingInput), issuerPrivateKey);\n return `${signingInput}.${toBase64Url(signature)}`;\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 { base64url as mfBase64url } from \"multiformats/bases/base64\";\n\n/** Encode bytes as unpadded base64url (RFC 4648 §5, no multibase prefix). */\nexport function toBase64Url(bytes: Uint8Array): string {\n return mfBase64url.baseEncode(bytes);\n}\n\n/**\n * STRICT decode of unpadded base64url into bytes. Throws on characters\n * outside the alphabet, impossible lengths, non-zero trailing bits, and any\n * padded or otherwise non-canonical form: the input must re-encode to itself\n * byte-for-byte. (multiformats' baseDecode alone tolerates trailing `=`.)\n */\nexport function fromBase64Url(text: string): Uint8Array {\n const bytes = mfBase64url.baseDecode(text);\n if (mfBase64url.baseEncode(bytes) !== text) {\n // Deliberately does not echo the input — it may be key material.\n throw new TypeError(\"non-canonical base64url input\");\n }\n return bytes;\n}\n\nexport function utf8Bytes(text: string): Uint8Array {\n return new TextEncoder().encode(text);\n}\n","import { base58btc } from \"multiformats/bases/base58\";\n\n/** Multicodec varint prefix for an ed25519 public key (0xed → varint ed 01). */\nconst ED25519_MULTICODEC_PREFIX = Uint8Array.of(0xed, 0x01);\nconst PUBLIC_KEY_LENGTH = 32;\n\n/** Encode a 32-byte ed25519 public key as a did:key (multibase base58btc). */\nexport function didKeyFromEd25519PublicKey(publicKey: Uint8Array): string {\n if (publicKey.length !== PUBLIC_KEY_LENGTH) {\n throw new TypeError(\n `ed25519 public key must be ${PUBLIC_KEY_LENGTH} bytes, got ${publicKey.length}`,\n );\n }\n const prefixed = new Uint8Array(ED25519_MULTICODEC_PREFIX.length + publicKey.length);\n prefixed.set(ED25519_MULTICODEC_PREFIX, 0);\n prefixed.set(publicKey, ED25519_MULTICODEC_PREFIX.length);\n return `did:key:${base58btc.encode(prefixed)}`;\n}\n\n/** Decode a did:key back to the raw 32-byte ed25519 public key. Throws on any other DID. */\nexport function ed25519PublicKeyFromDidKey(did: string): Uint8Array {\n if (!did.startsWith(\"did:key:\")) {\n throw new TypeError(`not a did:key: ${did}`);\n }\n const multibase = did.slice(\"did:key:\".length);\n const prefixed = base58btc.decode(multibase);\n if (\n prefixed.length !== ED25519_MULTICODEC_PREFIX.length + PUBLIC_KEY_LENGTH ||\n prefixed[0] !== ED25519_MULTICODEC_PREFIX[0] ||\n prefixed[1] !== ED25519_MULTICODEC_PREFIX[1]\n ) {\n throw new TypeError(\"did:key does not encode an ed25519 public key\");\n }\n return prefixed.slice(ED25519_MULTICODEC_PREFIX.length);\n}\n","import type { SessionJwk, ShareEnvelope } from \"./schema.js\";\n\n/**\n * Extract the embedded session JWK from a bearer-target envelope\n * (blueprint §2.1 \"Embedded key\" row). Node invocation with this key is\n * stage 3/4 — this is only the envelope side.\n *\n * Throws if the envelope's authorizationTarget is not `bearerKey`; callers\n * must switch on the discriminated union first (viewer spec §1).\n */\nexport function getBearerSessionJwk(envelope: ShareEnvelope): SessionJwk {\n const target = envelope.authorizationTarget;\n if (target.kind !== \"bearerKey\") {\n throw new TypeError(\n `envelope authorizationTarget is \"${target.kind}\", not \"bearerKey\"`,\n );\n }\n return target.sessionJwk;\n}\n","import { z } from \"zod\";\n\nimport { fromBase64Url } from \"./bytes.js\";\nimport { isCanonicalRawCid } from \"./cid.js\";\n\n/**\n * ShareEnvelope schema per sharing-ux-blueprint.md §2.1, with the signed\n * typed resource selector and optional display.mode presentation hint from\n * sharing-viewer-and-registry.md §1. All objects are strict — unknown fields\n * are rejected everywhere.\n */\n\n/** Strictly-decodable unpadded base64url: alphabet, length, AND zero trailing bits. */\nfunction decodeBase64UrlOrNull(value: string): Uint8Array | null {\n try {\n return fromBase64Url(value);\n } catch {\n return null;\n }\n}\n\nconst base64UrlString = () =>\n z.string().refine((value) => decodeBase64UrlOrNull(value) !== null, {\n message: \"expected strictly-decodable unpadded base64url\",\n });\n\n/**\n * A canonical HTTPS web origin: `https://host[:non-default-port]` and nothing\n * else. No path, query, fragment, userinfo, trailing slash, default-port\n * alias (`:443`), or non-lowercase host — the string must round-trip exactly\n * through URL origin serialization. Rejects every non-https scheme\n * (http:, ftp:, file:, javascript:, …). This must byte-match what a Rust\n * verifier would accept, so it is exact-string, not \"URL-ish\".\n */\nexport function isCanonicalHttpsOrigin(value: string): boolean {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n return false;\n }\n return url.protocol === \"https:\" && url.origin === value;\n}\n\n/**\n * Session JWK carried by bearer-target envelopes. Strict discriminated union\n * over the asymmetric private-key families a session key can be (OKP / EC).\n * The private component (`d`) is REQUIRED — a bearer envelope without it is\n * useless — and cross-family members (`y` on OKP, `k` anywhere) are rejected,\n * as are unknown JWK members, rather than silently signed over.\n */\nconst sessionJwkCommonFields = {\n alg: z.string().min(1).optional(),\n use: z.string().min(1).optional(),\n key_ops: z.array(z.string().min(1)).optional(),\n kid: z.string().min(1).optional(),\n ext: z.boolean().optional(),\n};\n\nconst okpPrivateJwkSchema = z\n .object({\n kty: z.literal(\"OKP\"),\n crv: z.string().min(1),\n x: base64UrlString(),\n d: base64UrlString(),\n ...sessionJwkCommonFields,\n })\n .strict();\n\nconst ecPrivateJwkSchema = z\n .object({\n kty: z.literal(\"EC\"),\n crv: z.string().min(1),\n x: base64UrlString(),\n y: base64UrlString(),\n d: base64UrlString(),\n ...sessionJwkCommonFields,\n })\n .strict();\n\nexport const sessionJwkSchema = z.discriminatedUnion(\"kty\", [\n okpPrivateJwkSchema,\n ecPrivateJwkSchema,\n]);\n\nexport const policyTargetSchema = z\n .object({\n kind: z.literal(\"policy\"),\n policyCid: z.string().min(1),\n /** Canonical policy bytes, base64url-encoded (bytes are not JSON). */\n policyBytes: base64UrlString(),\n })\n .strict();\n\nexport const bearerKeyTargetSchema = z\n .object({\n kind: z.literal(\"bearerKey\"),\n sessionJwk: sessionJwkSchema,\n })\n .strict();\n\nexport const recipientDidTargetSchema = z\n .object({\n kind: z.literal(\"recipientDid\"),\n did: z.string().regex(/^did:[a-z0-9]+:.+$/, \"expected a DID\"),\n })\n .strict();\n\n/** Signed discriminated union — the target kind itself is signature-covered. */\nexport const authorizationTargetSchema = z.discriminatedUnion(\"kind\", [\n policyTargetSchema,\n bearerKeyTargetSchema,\n recipientDidTargetSchema,\n]);\n\n/**\n * THE canonical resource-path grammar — the ONE grammar shared by schema\n * validation here and capability coverage in bearer-delegation.ts (which\n * previously compared raw concatenated strings, so `shares/s/../victim.md`\n * aliased into a `shares/s/*` grant). A canonical path is \"/\"-joined\n * segments where every segment is non-empty (no `//`, no leading/trailing\n * slash) and none is `.` or `..`, and the whole string contains no\n * backslash, no ASCII control characters, and no percent-encoded\n * separator/dot aliases (%2f, %5c, %2e in any casing). Fail closed: anything\n * outside this grammar is rejected before any comparison happens.\n */\nexport function isCanonicalResourcePath(value: string): boolean {\n if (value.length === 0) return false;\n // eslint-disable-next-line no-control-regex\n if (/[\\u0000-\\u001f\\u007f\\\\]/.test(value)) return false;\n if (/%2f|%5c|%2e/i.test(value)) return false;\n return value\n .split(\"/\")\n .every((segment) => segment.length > 0 && segment !== \".\" && segment !== \"..\");\n}\n\n/** ONE canonical path segment: canonical-path rules, and no separator at all. */\nexport function isCanonicalPathSegment(value: string): boolean {\n return isCanonicalResourcePath(value) && !value.includes(\"/\");\n}\n\nexport const resourceSelectorSchema = z\n .object({\n kind: z.union([z.literal(\"exact\"), z.literal(\"prefix\")]),\n path: z.string().min(1),\n })\n .strict()\n .superRefine((selector, ctx) => {\n // Prefix selectors may carry ONE trailing \"/\" (folder convention);\n // the body must be canonical either way.\n const body =\n selector.kind === \"prefix\" && selector.path.endsWith(\"/\")\n ? selector.path.slice(0, -1)\n : selector.path;\n if (!isCanonicalResourcePath(body)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"path\"],\n message:\n \"expected a canonical resource path (non-empty segments, no . or .. segments, no //, no backslash, no %2f/%5c/%2e, no control chars)\",\n });\n }\n });\n\nexport const targetSchema = z\n .object({\n origin: z.string().refine(isCanonicalHttpsOrigin, {\n message: \"expected a canonical https origin (https://host[:port], nothing else)\",\n }),\n nodeAudience: z.string().min(1),\n spaceId: z.string().refine(isCanonicalPathSegment, {\n message:\n \"expected a single canonical path segment (spaceId joins the resource URI; separators/traversal would alias grants)\",\n }),\n resource: resourceSelectorSchema,\n })\n .strict();\n\nexport const displaySchema = z\n .object({\n senderName: z.string().optional(),\n filename: z.string().optional(),\n recipientHint: z.string().optional(),\n /**\n * Presentation preference only (viewer spec §1): may narrow, never widen;\n * capabilities always win.\n */\n mode: z.union([z.literal(\"document\"), z.literal(\"source\"), z.literal(\"folder\")]).optional(),\n })\n .strict();\n\n/**\n * BEARER-SLICE content pointer (stage 4). The shared file's bytes are sealed\n * as their OWN AEAD blob (same `seal` machinery as the envelope) and put in\n * the registry; this field points at it:\n *\n * - `cid` — CIDv1/raw/sha2-256 of the sealed content blob. The viewer\n * re-verifies fetched bytes against it (trustless), so a lying registry\n * cannot substitute content.\n * - `key` — the content blob's own 32-byte AES-256-GCM key, base64url. It\n * rides INSIDE the sealed envelope (confidential to link holders) and is\n * signature-covered like every other field (a tampered pointer fails the\n * envelope signature before any fetch). Carrying a distinct key — rather\n * than reusing the fragment key — preserves the viewer's key-hygiene\n * contract: the fragment key is still dead (zeroed) the moment the\n * envelope is decrypted.\n *\n * This is a bearer-slice mechanism: possession of the link IS the read\n * authority, so the content is fetched straight from the registry. In the\n * policy / recipient-DID slices this field is absent and the viewer instead\n * performs a capability-gated read from the node named in `target` — the\n * node, not the registry, is the enforcement boundary there.\n */\nexport const contentPointerSchema = z\n .object({\n cid: z.string().refine(isCanonicalRawCid, {\n message: \"expected a canonical CIDv1 raw sha2-256 base32 CID\",\n }),\n key: z.string().refine((value) => decodeBase64UrlOrNull(value)?.length === 32, {\n message: \"expected base64url decoding to exactly 32 bytes\",\n }),\n })\n .strict();\n\nexport const signatureSchema = z\n .object({\n /** did:key of the sender's ed25519 signing key. */\n signerDid: z.string().regex(/^did:key:z[1-9A-HJ-NP-Za-km-z]+$/, \"expected a did:key\"),\n algorithm: z.literal(\"Ed25519\"),\n /** base64url-encoded ed25519 signature over the JCS bytes of all other fields. */\n value: z.string().refine((value) => decodeBase64UrlOrNull(value)?.length === 64, {\n message: \"expected base64url decoding to exactly 64 bytes\",\n }),\n })\n .strict();\n\n/** Envelope body — every signature-covered field. */\nexport const unsignedShareEnvelopeSchema = z\n .object({\n version: z.literal(1),\n shareId: z.string().min(1),\n /** Full signed delegation chain, opaque serialized form. */\n delegation: z.string().min(1),\n authorizationTarget: authorizationTargetSchema,\n target: targetSchema,\n display: displaySchema,\n /** ISO 8601 UTC datetime. Advisory here; enforcement is the delegation's. */\n expiry: z.string().datetime(),\n /** Bearer-slice sealed-content pointer (see contentPointerSchema). */\n content: contentPointerSchema.optional(),\n })\n .strict();\n\nexport const shareEnvelopeSchema = unsignedShareEnvelopeSchema\n .extend({ signature: signatureSchema })\n .strict();\n\nexport type SessionJwk = z.infer<typeof sessionJwkSchema>;\nexport type ContentPointer = z.infer<typeof contentPointerSchema>;\nexport type PolicyTarget = z.infer<typeof policyTargetSchema>;\nexport type BearerKeyTarget = z.infer<typeof bearerKeyTargetSchema>;\nexport type RecipientDidTarget = z.infer<typeof recipientDidTargetSchema>;\nexport type AuthorizationTarget = z.infer<typeof authorizationTargetSchema>;\nexport type ResourceSelector = z.infer<typeof resourceSelectorSchema>;\nexport type ShareTarget = z.infer<typeof targetSchema>;\nexport type ShareDisplay = z.infer<typeof displaySchema>;\nexport type EnvelopeSignature = z.infer<typeof signatureSchema>;\nexport type UnsignedShareEnvelope = z.infer<typeof unsignedShareEnvelopeSchema>;\nexport type ShareEnvelope = z.infer<typeof shareEnvelopeSchema>;\n\n/** Version 2 additions shared by the browser composer and recipient SDK. */\nexport const recipientMatcherSchema = z.discriminatedUnion(\"kind\", [\n z.object({ kind: z.literal(\"exactEmail\"), value: z.string().min(3).regex(/^[^@\\s]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/) }).strict(),\n z.object({ kind: z.literal(\"emailDomain\"), value: z.string().regex(/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/) }).strict(),\n z.object({ kind: z.literal(\"recipientDid\"), value: z.string().regex(/^did:[a-z0-9]+:.+$/) }).strict(),\n z.object({ kind: z.literal(\"policyDigest\"), value: z.string().regex(/^[A-Za-z0-9_-]{43}$/) }).strict(),\n z.object({ kind: z.literal(\"bearer\") }).strict(),\n]);\n\nexport const shareActionSchema = z.union([z.literal(\"read\"), z.literal(\"list\"), z.literal(\"edit\")]);\n\n/** The source selector is shared byte-for-byte by the envelope, policy, and\n * native Node request. It deliberately describes a named operation, never\n * executable SQL or a browser-controlled URL. */\nconst kvContentSourceSchema = z.object({\n kind: z.literal(\"kv\"),\n space: z.string().min(1),\n path: z.string().min(1),\n action: z.literal(\"tinycloud.kv/get\"),\n}).strict();\nconst sqlContentSourceSchema = z.object({\n kind: z.literal(\"sql\"),\n space: z.string().min(1),\n database: z.string().min(1),\n path: z.string().min(1),\n statement: z.string().min(1),\n arguments: z.record(z.string(), z.number().int()),\n argumentsDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n action: z.literal(\"tinycloud.sql/read\"),\n}).strict();\nexport const contentSourceSchema = z.discriminatedUnion(\"kind\", [kvContentSourceSchema, sqlContentSourceSchema]);\n\nexport const v2TargetSchema = z.object({\n origin: z.string().refine(isCanonicalHttpsOrigin, { message: \"expected a canonical https origin\" }),\n nodeAudience: z.string().min(1),\n spaceId: z.string().refine(isCanonicalPathSegment, { message: \"expected a canonical space id\" }),\n}).strict();\n\nconst shareDecryptionSchema = z.object({\n networkId: z.string().min(1),\n action: z.literal(\"tinycloud.encryption/decrypt\"),\n}).strict();\n\nconst ownerAuthoritySchema = z.object({\n registrationCid: z.string().min(1),\n shareCid: z.string().min(1),\n envelopeCid: z.string().min(1),\n enforcementDelegation: z.record(z.string(), z.unknown()),\n outerEnvelope: z.record(z.string(), z.unknown()),\n /** Node-signed registration evidence; required by trusted policy adapters. */\n registrationReceipt: z.object({\n registration: z.record(z.string(), z.unknown()),\n proof: z.record(z.string(), z.unknown()),\n }).strict().optional(),\n}).strict();\n\nexport const contentMetadataSchema = z.object({\n mediaType: z.string().min(1).max(128).optional(),\n byteLength: z.number().int().nonnegative().max(100 * 1024 * 1024).optional(),\n filename: z.string().min(1).max(255).optional(),\n encoding: z.literal(\"utf-8\").optional(),\n /** Encrypted presentation discriminator. The fixed entry point is index.html. */\n artifact: z.literal(\"html\").optional(),\n}).strict();\n\n/**\n * The rule every v2/v3 envelope applies to `deliveryEmail`. Deployed viewers\n * validate with it, so senders must not sign an address it rejects; it is\n * stricter than `canonicalMailbox` (for example `a/b@example.com`).\n */\nconst deliveryEmailSchema = z.string().email();\n\n/** Whether `value` may be signed as an envelope's `deliveryEmail`. */\nexport function isEnvelopeDeliveryEmail(value: string): boolean {\n return deliveryEmailSchema.safeParse(value).success;\n}\n\nconst unsignedShareEnvelopeV2BaseSchema = z.object({\n version: z.literal(2),\n shareId: z.string().min(1),\n recipientMatcher: recipientMatcherSchema,\n deliveryEmail: deliveryEmailSchema.optional(),\n actions: z.array(shareActionSchema).min(1).max(3),\n resource: resourceSelectorSchema,\n target: v2TargetSchema,\n delegationCid: z.string().min(1),\n authorityMaterialHandle: z.string().min(1),\n authorityMaterialDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n decryption: shareDecryptionSchema.optional(),\n contentSource: contentSourceSchema,\n contentSourceDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n authorizationTarget: authorizationTargetSchema,\n display: displaySchema,\n expiry: z.string().datetime(),\n encrypted: z.boolean(),\n content: contentPointerSchema.optional(),\n metadata: contentMetadataSchema,\n ownerAuthority: ownerAuthoritySchema.optional(),\n}).strict();\n\nfunction validateV2Invariants(value: z.infer<typeof unsignedShareEnvelopeV2BaseSchema>, ctx: z.RefinementCtx): void {\n const actions = [...value.actions];\n if (new Set(actions).size !== actions.length) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"actions\"], message: \"actions must be unique\" });\n if (actions.some((action, index) => action !== ([\"read\", \"list\", \"edit\"] as const).filter((candidate) => actions.includes(candidate))[index])) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"actions\"], message: \"actions must be canonically ordered\" });\n if (!value.encrypted && value.recipientMatcher.kind !== \"policyDigest\") ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"recipientMatcher\"], message: \"safe plaintext must carry only a matcher digest\" });\n if (!value.encrypted && value.authorizationTarget.kind !== \"policy\") ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"encrypted\"], message: \"unencrypted content requires a policy target\" });\n if (!value.encrypted && value.content !== undefined) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"content\"], message: \"policy-only plaintext cannot carry content\" });\n if (value.encrypted && (value.metadata.mediaType === undefined || value.metadata.filename === undefined || value.metadata.byteLength === undefined)) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"metadata\"], message: \"encrypted shares must describe their content\" });\n if (!value.encrypted && Object.keys(value.metadata).length !== 0) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"metadata\"], message: \"policy-only plaintext cannot describe content\" });\n if (!value.encrypted && value.metadata.encoding !== undefined) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"metadata\", \"encoding\"], message: \"policy-only plaintext cannot carry content encoding\" });\n if (value.metadata.artifact === \"html\" && (!value.encrypted || value.resource.kind !== \"prefix\" || !value.actions.includes(\"read\") || !value.actions.includes(\"list\"))) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"metadata\", \"artifact\"], message: \"html artifacts require an encrypted readable prefix\" });\n if (!value.encrypted && (value.display.senderName !== undefined || value.display.filename !== undefined || value.display.recipientHint !== undefined)) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"display\"], message: \"policy-only plaintext cannot carry display metadata\" });\n if (!value.encrypted && value.deliveryEmail !== undefined) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"deliveryEmail\"], message: \"policy-only plaintext cannot carry delivery metadata\" });\n if (value.recipientMatcher.kind === \"exactEmail\" && value.deliveryEmail !== undefined && value.deliveryEmail !== value.recipientMatcher.value) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"deliveryEmail\"], message: \"delivery email must match the exact matcher\" });\n if (value.recipientMatcher.kind === \"emailDomain\" && value.deliveryEmail !== undefined && value.deliveryEmail.toLowerCase().endsWith(`@${value.recipientMatcher.value}`) === false) ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"deliveryEmail\"], message: \"delivery email must belong to the matcher domain\" });\n if (value.contentSource.kind === \"kv\" && value.contentSource.action !== \"tinycloud.kv/get\") ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"contentSource\"], message: \"source action mismatch\" });\n if (value.contentSource.kind === \"sql\" && value.contentSource.action !== \"tinycloud.sql/read\") ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"contentSource\"], message: \"source action mismatch\" });\n}\n\nexport const unsignedShareEnvelopeV2Schema = unsignedShareEnvelopeV2BaseSchema.superRefine(validateV2Invariants);\n\n// Extend the unsigned object instead of intersecting two strict objects. A\n// strict intersection rejects every valid signed envelope because each side\n// treats the other side's fields as unknown.\nexport const shareEnvelopeV2Schema = unsignedShareEnvelopeV2BaseSchema.extend({ signature: signatureSchema }).strict().superRefine(validateV2Invariants);\nexport type RecipientMatcher = z.infer<typeof recipientMatcherSchema>;\nexport type ShareAction = z.infer<typeof shareActionSchema>;\nexport type ContentSource = z.infer<typeof contentSourceSchema>;\nexport type ContentMetadata = z.infer<typeof contentMetadataSchema>;\nexport type UnsignedShareEnvelopeV2 = z.infer<typeof unsignedShareEnvelopeV2Schema>;\nexport type ShareEnvelopeV2 = z.infer<typeof shareEnvelopeV2Schema>;\n\n/**\n * TC-405 addressed-share envelope. This is intentionally a separate\n * contract from v2: a v3 reader must never reinterpret a v2 policy/session\n * artifact as an ordinary delegation claim.\n */\nconst unifiedResourceSchema = z.string().refine((value) => {\n const marker = value.indexOf(\"/kv/\");\n if (marker < 1) return false;\n const space = value.slice(0, marker);\n const legacy = space.startsWith(\"tinycloud://\");\n if (legacy ? /[:/?#%]/.test(space.slice(\"tinycloud://\".length)) : !space.startsWith(\"tinycloud:\") || /[/?#%]/.test(space)) return false;\n const path = value.slice(marker + 4);\n return !path.startsWith(\"/\") && !path.endsWith(\"/\") && !path.includes(\"//\") && path.split(\"/\").every((segment) => segment.length > 0 && segment !== \".\" && segment !== \"..\");\n}, { message: \"expected canonical TinyCloud KV resource\" });\nconst unifiedEncryptionNetworkSchema = z.string().refine((value) => {\n if (!value.startsWith(\"urn:tinycloud:encryption:\")) return false;\n const rest = value.slice(\"urn:tinycloud:encryption:\".length);\n const separator = rest.lastIndexOf(\":\");\n const owner = separator < 0 ? \"\" : rest.slice(0, separator);\n const network = separator < 0 ? \"\" : rest.slice(separator + 1);\n return owner.startsWith(\"did:\") && owner.length > 4 && network.length > 0 && !/[:/%?#\\s]/.test(network);\n}, { message: \"expected canonical TinyCloud encryption network\" });\nconst unifiedEncryptionResourceSchema = z.string().refine((value) => {\n const prefix = \"urn:tinycloud:encryption:\";\n if (!value.startsWith(prefix)) return false;\n const match = /^(did:.+):([^/:?#\\s]+)(?:\\/(.+))?$/.exec(value.slice(prefix.length));\n if (match === null) return false;\n const path = match[3];\n return path === undefined || path.split(\"/\").every((segment) =>\n segment.length > 0 && segment !== \".\" && segment !== \"..\" && !/[\\\\:%?#\\s]/.test(segment)\n );\n}, { message: \"expected a canonical TinyCloud encryption resource\" });\nconst unifiedEncryptionKeyPathSchema = z.string().regex(/^share\\/[^/]+$/).refine(\n (value) => {\n const segment = value.slice(\"share/\".length);\n return segment !== \".\" && segment !== \"..\" && !/[\\\\:%?#\\s]/.test(segment);\n },\n { message: \"expected an exact share key path\" },\n);\nconst unifiedKvCapabilitySchema = z.object({\n kind: z.literal(\"kv\"),\n resource: unifiedResourceSchema,\n selector: z.union([z.literal(\"exact\"), z.literal(\"prefix\")]),\n actions: z.array(z.union([\n z.literal(\"tinycloud.kv/get\"),\n z.literal(\"tinycloud.kv/list\"),\n z.literal(\"tinycloud.kv/metadata\"),\n z.literal(\"tinycloud.kv/put\"),\n ])).min(1),\n}).strict();\nconst unifiedEncryptionCapabilitySchema = z.object({\n kind: z.literal(\"encryption\"),\n resource: unifiedEncryptionResourceSchema,\n action: z.literal(\"tinycloud.encryption/decrypt\"),\n}).strict();\nconst unifiedCapabilitySchema = z.union([unifiedKvCapabilitySchema, unifiedEncryptionCapabilitySchema]);\nconst unifiedContentSourceSchema = z.object({\n shareId: z.string().min(1),\n kvResource: unifiedResourceSchema,\n selector: z.union([z.literal(\"exact\"), z.literal(\"prefix\")]),\n encryptionNetwork: unifiedEncryptionNetworkSchema,\n encryptionKeyPath: unifiedEncryptionKeyPathSchema.optional(),\n encryptedSymmetricKeyDigestHex: z.string().regex(/^[0-9a-f]{64}$/),\n keyVersion: z.number().int().positive(),\n mode: z.union([z.literal(\"mutable\"), z.literal(\"immutable\")]),\n initialCiphertextDigestHex: z.string().regex(/^[0-9a-f]{64}$/).optional(),\n}).strict();\nexport const unifiedPolicyV1Schema = z.object({\n schema: z.literal(\"xyz.tinycloud.policy/policy/v1\"),\n policyId: z.string().regex(/^pol_[a-z2-7]+$/),\n ownerDid: z.string().min(1),\n createdAt: z.string().datetime({ offset: true }),\n expiresAt: z.string().datetime({ offset: true }).optional(),\n contentSource: unifiedContentSourceSchema,\n capabilityCeiling: z.array(unifiedCapabilitySchema).min(2),\n signature: z.object({ suite: z.string().min(1), signerDid: z.string().min(1), value: z.string().min(1) }).strict(),\n}).strict();\nexport const policyCredentialRequirementV1Schema = z.object({\n type: z.literal(\"TinyCloudPolicyCredentialRequirement\"),\n version: z.literal(1),\n requirementDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n descriptorDigest: z.string().regex(/^[A-Za-z0-9_-]{43}$/),\n issuerDid: z.string().min(1),\n issuerKid: z.string().min(1),\n profile: z.object({ id: z.string().min(1), version: z.literal(1) }).strict(),\n credentialType: z.object({ id: z.string().min(1), version: z.literal(1) }).strict(),\n}).strict();\nexport const unifiedPolicyV2Schema = z.object({\n schema: z.literal(\"xyz.tinycloud.policy/policy/v2\"),\n policyId: z.string().regex(/^pol_[a-z2-7]+$/),\n ownerDid: z.string().min(1),\n createdAt: z.string().datetime({ offset: true }),\n expiresAt: z.string().datetime({ offset: true }).optional(),\n contentSource: unifiedContentSourceSchema,\n capabilityCeiling: z.array(unifiedCapabilitySchema).min(2),\n credentialRequirement: policyCredentialRequirementV1Schema,\n signature: z.object({ suite: z.literal(\"Ed25519\"), signerDid: z.string().min(1), value: z.string().min(1) }).strict(),\n}).strict();\nexport const unifiedPolicySchema = z.discriminatedUnion(\"schema\", [\n unifiedPolicyV1Schema,\n unifiedPolicyV2Schema,\n]);\nconst unifiedRootSchema = z.object({\n cid: z.string().min(1),\n authorization: z.string().regex(/^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$/),\n role: z.union([z.literal(\"policy-authority\"), z.literal(\"policy-enforcement\")]),\n}).strict();\nconst attestedEnforcerBindingV2Schema = z.object({\n schema: z.literal(\"xyz.tinycloud.policy/attested-enforcer/v2\"),\n enforcerDid: z.string().regex(/^did:key:z[1-9A-HJ-NP-Za-km-z]+$/),\n nodeAudience: z.string().min(1),\n attestationBindingDigestHex: z.string().regex(/^[0-9a-f]{64}$/),\n issuedAt: z.string().datetime({ offset: true }),\n expiresAt: z.string().datetime({ offset: true }),\n signature: z.object({ suite: z.literal(\"Ed25519\"), signerDid: z.string().min(1), value: base64UrlString() }).strict(),\n}).strict();\nconst v3TargetSchema = z.object({\n origin: z.string().refine(isCanonicalHttpsOrigin, { message: \"expected a canonical https origin\" }),\n nodeAudience: z.string().min(1),\n spaceId: z.string().refine(isCanonicalPathSegment, { message: \"expected a canonical space id\" }),\n}).strict();\n/** Artifact id as `share-sdk` mints and parses it (`assertArtifactId`); `artifact-pin.test.ts` keeps the two in step. */\nconst ARTIFACT_ID_PATTERN = /^[a-z0-9][a-z0-9_-]{2,62}$/;\nexport const artifactPinSchema = z.object({\n v: z.literal(1),\n artifactId: z.string().regex(ARTIFACT_ID_PATTERN),\n version: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER),\n /** SHA-256 (lowercase hex) of the exact `manifest.json` bytes. The manifest itself stays an owner-side record. */\n manifestSha256: z.string().regex(/^[0-9a-f]{64}$/),\n /** An addressed share reads one exact file, so exactly one entry: the stored bytes (ciphertext) it will fetch. */\n files: z.array(z.object({\n path: z.string().min(1).max(255),\n sha256: z.string().regex(/^[0-9a-f]{64}$/),\n bytes: z.number().int().nonnegative(),\n }).strict()).length(1),\n}).strict();\nexport type ArtifactPin = z.infer<typeof artifactPinSchema>;\nconst unsignedShareEnvelopeV3BaseSchema = z.object({\n version: z.literal(3),\n shareId: z.string().min(1),\n recipientMatcher: recipientMatcherSchema,\n deliveryEmail: deliveryEmailSchema.optional(),\n actions: z.array(shareActionSchema).min(1).max(3),\n resource: resourceSelectorSchema,\n target: v3TargetSchema,\n policy: unifiedPolicySchema,\n policyCid: z.string().min(1),\n policyRoot: unifiedRootSchema,\n enforcementRoot: unifiedRootSchema,\n attestedEnforcerBinding: attestedEnforcerBindingV2Schema,\n contentSource: unifiedContentSourceSchema,\n contentSourceDigestHex: z.string().regex(/^[0-9a-f]{64}$/),\n encryptionNetwork: unifiedEncryptionNetworkSchema,\n expiry: z.string().datetime({ offset: true }),\n display: displaySchema,\n encrypted: z.literal(true),\n metadata: contentMetadataSchema,\n /**\n * TC-1428: an owner-signed statement that this share reads one write-once artifact version. Additive: absent on\n * every other share, and covered by the envelope signature because the signature spans the whole unsigned object.\n * The shape is checked here; its binding to the content source is `verifyArtifactShare` in share-sdk.\n */\n artifactPin: artifactPinSchema.optional(),\n}).strict();\n\nfunction validateV3Invariants(value: z.infer<typeof unsignedShareEnvelopeV3BaseSchema>, ctx: z.RefinementCtx): void {\n const actions = [...value.actions];\n if (new Set(actions).size !== actions.length || actions.some((action, index) => action !== ([\"read\", \"list\", \"edit\"] as const).filter((candidate) => actions.includes(candidate))[index])) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"actions\"], message: \"actions must be unique and canonically ordered\" });\n }\n if (value.policyRoot.role !== \"policy-authority\" || value.enforcementRoot.role !== \"policy-enforcement\") {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"policyRoot\", \"role\"], message: \"root roles are fixed\" });\n }\n if (value.policyCid.length === 0 || value.policyCid === value.policyRoot.cid || value.policyCid === value.enforcementRoot.cid) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"policyCid\"], message: \"policy CID must be distinct from both roots\" });\n }\n if (value.contentSource.encryptionNetwork !== value.encryptionNetwork) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"encryptionNetwork\"], message: \"encryption network is not bound to the source\" });\n }\n if (value.attestedEnforcerBinding.nodeAudience !== value.target.nodeAudience || value.attestedEnforcerBinding.signature.signerDid !== value.attestedEnforcerBinding.nodeAudience || Date.parse(value.attestedEnforcerBinding.expiresAt) < Date.parse(value.expiry)) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"attestedEnforcerBinding\"], message: \"enforcer binding does not cover the target and share lifetime\" });\n }\n const encryptionKeyPath = value.contentSource.encryptionKeyPath;\n if (encryptionKeyPath !== undefined && encryptionKeyPath !== `share/${value.contentSource.shareId}`) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"contentSource\", \"encryptionKeyPath\"], message: \"share key path must name this share\" });\n }\n if (value.policy.contentSource.shareId !== value.contentSource.shareId || value.policy.contentSource.kvResource !== value.contentSource.kvResource || value.policy.contentSource.selector !== value.contentSource.selector || value.policy.contentSource.encryptionNetwork !== value.encryptionNetwork || value.policy.contentSource.encryptionKeyPath !== encryptionKeyPath || value.policy.contentSource.encryptedSymmetricKeyDigestHex !== value.contentSource.encryptedSymmetricKeyDigestHex || value.policy.contentSource.keyVersion !== value.contentSource.keyVersion || value.policy.contentSource.mode !== value.contentSource.mode || value.policy.contentSource.initialCiphertextDigestHex !== value.contentSource.initialCiphertextDigestHex) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"contentSource\"], message: \"content source is not bound to policy\" });\n }\n if (value.policy.signature.suite !== \"Ed25519\" || value.policy.signature.signerDid !== value.policy.ownerDid) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"policy\", \"signature\"], message: \"policy must be signed by its owner\" });\n }\n const kvCapabilities = value.policy.capabilityCeiling.filter((capability) => capability.kind === \"kv\");\n const expectedEncryptionResource = encryptionKeyPath === undefined\n ? value.encryptionNetwork\n : `${value.encryptionNetwork}/${encryptionKeyPath}`;\n const decryptCapabilities = value.policy.capabilityCeiling.filter((capability) => capability.kind === \"encryption\" && capability.resource === expectedEncryptionResource && capability.action === \"tinycloud.encryption/decrypt\");\n if (value.policy.capabilityCeiling.length !== 2 || kvCapabilities.length !== 1 || decryptCapabilities.length !== 1 || kvCapabilities[0]?.resource !== value.contentSource.kvResource || kvCapabilities[0]?.selector !== value.contentSource.selector) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"policy\", \"capabilityCeiling\"], message: \"policy ceiling must contain the exact decrypt resource\" });\n }\n}\n\nexport const unsignedShareEnvelopeV3Schema = unsignedShareEnvelopeV3BaseSchema.superRefine(validateV3Invariants);\nexport const shareEnvelopeV3Schema = unsignedShareEnvelopeV3BaseSchema.extend({ signature: signatureSchema }).strict().superRefine(validateV3Invariants);\nexport type UnifiedPolicyCapability = z.infer<typeof unifiedCapabilitySchema>;\nexport type UnifiedContentSource = z.infer<typeof unifiedContentSourceSchema>;\nexport type PolicyCredentialRequirementV1 = z.infer<typeof policyCredentialRequirementV1Schema>;\nexport type UnifiedPolicyV1 = z.infer<typeof unifiedPolicyV1Schema>;\nexport type UnifiedPolicyV2 = z.infer<typeof unifiedPolicyV2Schema>;\nexport type UnifiedPolicy = z.infer<typeof unifiedPolicySchema>;\nexport type UnifiedRoot = z.infer<typeof unifiedRootSchema>;\nexport type UnsignedShareEnvelopeV3 = z.infer<typeof unsignedShareEnvelopeV3Schema>;\nexport type ShareEnvelopeV3 = z.infer<typeof shareEnvelopeV3Schema>;\n","import { utf8Bytes } from \"./bytes.js\";\nimport { computeCid } from \"./cid.js\";\n\n/**\n * Fixed protocol-label AAD, authenticated on every envelope\n * (blueprint §2.1: \"versioned protocol label\").\n */\nexport const ENVELOPE_AAD_LABEL = \"tinycloud-share-envelope-v1\";\n\n/**\n * Version byte of the sealed-blob wire format (see `seal`). Bump only with a\n * new format; verifiers must reject unknown versions.\n */\nexport const SEALED_BLOB_VERSION = 0x01;\n\nconst AAD = utf8Bytes(ENVELOPE_AAD_LABEL);\nconst KEY_LENGTH = 32;\nconst NONCE_LENGTH = 12; // 96-bit nonce, the AES-GCM standard size.\nconst TAG_LENGTH = 16; // AES-GCM authentication tag appended to the ciphertext.\nconst HEADER_LENGTH = 1; // the version byte\n\nexport interface EncryptedEnvelope {\n nonce: Uint8Array;\n ciphertext: Uint8Array;\n}\n\nfunction assertKey(key32: Uint8Array): void {\n if (key32.length !== KEY_LENGTH) {\n throw new TypeError(`key must be ${KEY_LENGTH} bytes, got ${key32.length}`);\n }\n}\n\nasync function importAesKey(\n key32: Uint8Array,\n usage: KeyUsage,\n): Promise<CryptoKey> {\n assertKey(key32);\n return globalThis.crypto.subtle.importKey(\n \"raw\",\n key32 as BufferSource,\n \"AES-GCM\",\n false,\n [usage],\n );\n}\n\n/** Generate a fresh random 32-byte AES-256-GCM key. */\nexport function generateKey(): Uint8Array {\n return globalThis.crypto.getRandomValues(new Uint8Array(KEY_LENGTH));\n}\n\nexport interface SealedEnvelope {\n /** The canonical stored block: `version(0x01) || nonce(12) || ciphertext+tag`. */\n blob: Uint8Array;\n /** CIDv1/raw/sha2-256 of `blob` — the CID that goes in the share link. */\n cid: string;\n}\n\n/**\n * Seal envelope plaintext into the ONE canonical stored-block format:\n *\n * blob = version byte (0x01) || nonce (12 bytes) || AES-256-GCM ciphertext\n * (which includes the trailing 16-byte auth tag)\n *\n * The returned CID is computed over the WHOLE blob, so a recipient holding\n * only the link (CID + key) can fetch the blob, verify the CID, and recover\n * the nonce from the blob itself. This is the only format the public\n * packaging path (and the share link) addresses; `encryptEnvelope` /\n * `decryptEnvelope` are the low-level pieces.\n */\nexport async function seal(\n plaintextBytes: Uint8Array,\n key32: Uint8Array,\n): Promise<SealedEnvelope> {\n const { nonce, ciphertext } = await encryptEnvelope(plaintextBytes, key32);\n const blob = new Uint8Array(HEADER_LENGTH + nonce.length + ciphertext.length);\n blob[0] = SEALED_BLOB_VERSION;\n blob.set(nonce, HEADER_LENGTH);\n blob.set(ciphertext, HEADER_LENGTH + nonce.length);\n return { blob, cid: await computeCid(blob) };\n}\n\n/**\n * Open a sealed blob produced by `seal`: check the version byte, split\n * `nonce || ciphertext`, and decrypt. Throws on unknown version, truncated\n * blobs, and any AEAD failure (wrong key / tampering).\n */\nexport async function open(\n blob: Uint8Array,\n key32: Uint8Array,\n): Promise<Uint8Array> {\n if (blob.length < HEADER_LENGTH + NONCE_LENGTH + TAG_LENGTH) {\n throw new TypeError(`sealed blob too short: ${blob.length} bytes`);\n }\n if (blob[0] !== SEALED_BLOB_VERSION) {\n throw new TypeError(`unknown sealed blob version: ${blob[0]}`);\n }\n const nonce = blob.subarray(HEADER_LENGTH, HEADER_LENGTH + NONCE_LENGTH);\n const ciphertext = blob.subarray(HEADER_LENGTH + NONCE_LENGTH);\n return decryptEnvelope(nonce, ciphertext, key32);\n}\n\n/**\n * Encrypt envelope plaintext with AES-256-GCM under a fresh random 96-bit\n * nonce, authenticating the fixed protocol-label AAD.\n *\n * Low-level: the nonce is NOT carried by the share link. Public packaging\n * must go through `seal`, which binds `nonce || ciphertext` into one\n * CID-addressed blob.\n */\nexport async function encryptEnvelope(\n plaintextBytes: Uint8Array,\n key32: Uint8Array,\n): Promise<EncryptedEnvelope> {\n const key = await importAesKey(key32, \"encrypt\");\n const nonce = globalThis.crypto.getRandomValues(new Uint8Array(NONCE_LENGTH));\n const ciphertext = new Uint8Array(\n await globalThis.crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv: nonce as BufferSource, additionalData: AAD as BufferSource },\n key,\n plaintextBytes as BufferSource,\n ),\n );\n return { nonce, ciphertext };\n}\n\n/**\n * Decrypt an AES-256-GCM envelope. Throws (Web Crypto `OperationError`) if the\n * key is wrong, the AAD does not match, or the ciphertext was tampered with.\n */\nexport async function decryptEnvelope(\n nonce: Uint8Array,\n ciphertext: Uint8Array,\n key32: Uint8Array,\n): Promise<Uint8Array> {\n if (nonce.length !== NONCE_LENGTH) {\n throw new TypeError(`nonce must be ${NONCE_LENGTH} bytes, got ${nonce.length}`);\n }\n const key = await importAesKey(key32, \"decrypt\");\n return new Uint8Array(\n await globalThis.crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv: nonce as BufferSource, additionalData: AAD as BufferSource },\n key,\n ciphertext as BufferSource,\n ),\n );\n}\n","/**\n * RFC 8785 (JCS) canonical JSON serialization — in-house implementation.\n *\n * Why no dependency: on any ECMA-262 engine, `JSON.stringify` of a primitive\n * already matches JCS exactly — RFC 8785 §3.2.2.3 defines number\n * serialization as ECMAScript's Number::toString, and §3.2.2.2 defines string\n * escaping as ECMAScript's JSON quoting (short escapes \\b \\t \\n \\f \\r \\\" \\\\,\n * lowercase \\u00xx for remaining control chars). So canonicalization reduces\n * to recursive property sorting by UTF-16 code units (the default JS string\n * comparison) plus rejecting values JSON cannot represent.\n */\n\nfunction isPlainRecord(value: object): value is Record<string, unknown> {\n const proto: unknown = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * RFC 8785 §3.2.2.2 requires REJECTING strings that are not valid Unicode —\n * i.e. unpaired UTF-16 surrogates. `JSON.stringify` happily emits `\"\\ud800\"`\n * for a lone surrogate, but a conforming implementation in a language with\n * enforced-valid strings (Rust) errors instead, so we must too.\n */\nfunction assertNoLoneSurrogates(text: string): void {\n for (let i = 0; i < text.length; i++) {\n const unit = text.charCodeAt(i);\n if (unit >= 0xdc00 && unit <= 0xdfff) {\n throw new TypeError(\n `cannot canonicalize string with unpaired low surrogate at index ${i}`,\n );\n }\n if (unit >= 0xd800 && unit <= 0xdbff) {\n const next = text.charCodeAt(i + 1); // NaN when past the end\n if (!(next >= 0xdc00 && next <= 0xdfff)) {\n throw new TypeError(\n `cannot canonicalize string with unpaired high surrogate at index ${i}`,\n );\n }\n i++; // well-formed pair — skip the low surrogate\n }\n }\n}\n\nfunction serializeString(text: string): string {\n assertNoLoneSurrogates(text);\n return JSON.stringify(text);\n}\n\nfunction serialize(value: unknown): string {\n if (value === null) return \"null\";\n switch (typeof value) {\n case \"boolean\":\n return JSON.stringify(value);\n case \"string\":\n return serializeString(value);\n case \"number\":\n if (!Number.isFinite(value)) {\n throw new TypeError(`cannot canonicalize non-finite number: ${value}`);\n }\n return JSON.stringify(value);\n case \"object\":\n break;\n default:\n throw new TypeError(`cannot canonicalize value of type ${typeof value}`);\n }\n if (Array.isArray(value)) {\n return `[${value.map((item) => serialize(item)).join(\",\")}]`;\n }\n if (!isPlainRecord(value)) {\n throw new TypeError(\"cannot canonicalize non-plain object\");\n }\n const keys = Object.keys(value).sort(); // UTF-16 code unit order (RFC 8785 §3.2.3)\n const members: string[] = [];\n for (const key of keys) {\n const member = value[key];\n if (member === undefined) continue; // JSON.stringify drops undefined properties\n members.push(`${serializeString(key)}:${serialize(member)}`);\n }\n return `{${members.join(\",\")}}`;\n}\n\n/** Serialize a JSON-representable value to its RFC 8785 canonical form. */\nexport function canonicalize(value: unknown): string {\n return serialize(value);\n}\n","/**\n * Canonical email-domain rules shared by senders, receivers, and the\n * OpenCredentials `tinycloud.email-domain-proof/v1` issuer. A domain is\n * canonical only as lowercase ASCII LDH labels (two or more, no trailing dot,\n * not an IP literal). Unicode and IDNA U-labels have no canonical form here:\n * IDNA A-labels (`xn--…`) are accepted verbatim, so equality is always a\n * plain string comparison with no normalization ambiguity.\n *\n * These live at the envelope layer so the Share SDK (sender) and sdk-core\n * (receiver, which re-exports them) apply one rule without a package cycle.\n */\nconst LABEL = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;\n\nexport function isCanonicalEmailDomain(value: string): boolean {\n if (value.length === 0 || value.length > 253) return false;\n const labels = value.split(\".\");\n return labels.length >= 2 && labels.every((label) => LABEL.test(label)) && !/^[0-9]+$/.test(labels.at(-1)!);\n}\n\n/** Canonicalizes a sender-entered domain (`@Example.com` → `example.com`) or throws. */\nexport function canonicalEmailDomain(value: string): string {\n const domain = value.trim().replace(/^@/, \"\").toLowerCase();\n if (!/^[\\x21-\\x7e]+$/.test(domain) || !isCanonicalEmailDomain(domain)) throw new TypeError(\"email domain must be lowercase ASCII DNS labels (use the xn-- form for international domains)\");\n return domain;\n}\n\n/**\n * Canonical form of a recipient-entered mailbox (trimmed, lowercased), or\n * undefined when it has no canonical domain. The issuer accepts only this\n * form, so the local check agrees with what the credential will contain.\n */\nexport function canonicalMailbox(value: string): { readonly email: string; readonly domain: string } | undefined {\n const email = value.trim().toLowerCase();\n const at = email.indexOf(\"@\");\n if (at <= 0 || at !== email.lastIndexOf(\"@\")) return undefined;\n const local = email.slice(0, at);\n const domain = email.slice(at + 1);\n // Lowercase RFC 5322 dot-atom without `%` or `!`, matching the issuer:\n // legacy percent-hack or bang-path routing could deliver elsewhere.\n if (local.length > 64 || !/^[a-z0-9#$&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9#$&'*+/=?^_`{|}~-]+)*$/.test(local) || !isCanonicalEmailDomain(domain)) return undefined;\n return Object.freeze({ email, domain });\n}\n\n/** True only when the mailbox's canonical domain equals `domain` exactly (no suffix or subdomain match). */\nexport function mailboxBelongsToDomain(mailbox: string, domain: string): boolean {\n return canonicalMailbox(mailbox)?.domain === domain && isCanonicalEmailDomain(domain);\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { blake3 } from \"@noble/hashes/blake3\";\nimport { CID } from \"multiformats/cid\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\nimport { fromBase64Url, toBase64Url } from \"./bytes.js\";\nimport { canonicalize } from \"./jcs.js\";\nimport { ed25519PublicKeyFromDidKey } from \"./didkey.js\";\n\nexport interface CompactUcanAuthorization {\n readonly authorization: string;\n readonly cid: string;\n readonly header: Readonly<Record<string, unknown>>;\n readonly payload: {\n readonly att: Readonly<Record<string, unknown>>;\n readonly aud: string;\n readonly exp: number;\n readonly fct: readonly [Readonly<Record<string, unknown>>];\n readonly iss: string;\n readonly nbf: number;\n readonly nnc: string;\n readonly prf: readonly string[];\n };\n}\n\nexport interface SignCompactUcanInput {\n readonly issuerDid: string;\n readonly audienceDid: string;\n readonly attenuation: Readonly<Record<string, unknown>>;\n readonly facts: readonly [Readonly<Record<string, unknown>>];\n readonly proofs: readonly string[];\n readonly notBefore: number;\n readonly expiresAt: number;\n readonly nonce: string;\n readonly sign: (bytes: Uint8Array) => Promise<Uint8Array>;\n}\n\n/** Produce the exact JCS compact-UCAN representation accepted by the Node. */\nexport async function signCompactUcanAuthorization(\n input: SignCompactUcanInput,\n): Promise<CompactUcanAuthorization> {\n if (input.notBefore >= input.expiresAt || input.expiresAt - input.notBefore > 60) {\n throw new TypeError(\"compact invocation lifetime must be between one and 60 seconds\");\n }\n const principal = input.issuerDid.split(\"#\", 1)[0]!;\n const publicKey = ed25519PublicKeyFromDidKey(principal);\n const header = {\n alg: \"EdDSA\",\n jwk: { alg: \"EdDSA\", crv: \"Ed25519\", kty: \"OKP\", x: toBase64Url(publicKey) },\n typ: \"JWT\",\n ucv: \"0.10.0\",\n };\n const payload = {\n att: input.attenuation,\n aud: input.audienceDid,\n exp: input.expiresAt,\n fct: input.facts,\n iss: input.issuerDid.includes(\"#\")\n ? input.issuerDid\n : `${principal}#${principal.slice(\"did:key:\".length)}`,\n nbf: input.notBefore,\n nnc: input.nonce,\n prf: input.proofs,\n };\n const protectedSegment = toBase64Url(new TextEncoder().encode(canonicalize(header)));\n const payloadSegment = toBase64Url(new TextEncoder().encode(canonicalize(payload)));\n const signingInput = new TextEncoder().encode(`${protectedSegment}.${payloadSegment}`);\n const signature = await input.sign(signingInput);\n if (signature.length !== 64) throw new TypeError(\"compact Authorization signature must be Ed25519\");\n return verifyCompactUcanAuthorization(\n `${protectedSegment}.${payloadSegment}.${toBase64Url(signature)}`,\n );\n}\n\nexport function verifyCompactUcanAuthorization(\n authorization: string,\n expectedCid?: string,\n): CompactUcanAuthorization {\n if (/\\s/.test(authorization)) throw new TypeError(\"compact Authorization contains whitespace\");\n const segments = authorization.split(\".\");\n if (segments.length !== 3 || segments.some((segment) => segment.length === 0)) throw new TypeError(\"compact Authorization must contain three segments\");\n const [headerSegment, payloadSegment, signatureSegment] = segments as [string, string, string];\n const headerBytes = fromBase64Url(headerSegment);\n const payloadBytes = fromBase64Url(payloadSegment);\n const signature = fromBase64Url(signatureSegment);\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n const header = JSON.parse(decoder.decode(headerBytes)) as Record<string, unknown>;\n const payload = JSON.parse(decoder.decode(payloadBytes)) as Record<string, unknown>;\n if (canonicalize(header) !== decoder.decode(headerBytes) || canonicalize(payload) !== decoder.decode(payloadBytes)) throw new TypeError(\"compact Authorization JSON is not canonical\");\n assertExactKeys(header, [\"alg\", \"jwk\", \"typ\", \"ucv\"], \"protected header\");\n const jwk = object(header.jwk, \"protected JWK\");\n assertExactKeys(jwk, [\"alg\", \"crv\", \"kty\", \"x\"], \"protected JWK\");\n if (header.alg !== \"EdDSA\" || header.typ !== \"JWT\" || header.ucv !== \"0.10.0\" || jwk.alg !== \"EdDSA\" || jwk.crv !== \"Ed25519\" || jwk.kty !== \"OKP\" || typeof jwk.x !== \"string\") throw new TypeError(\"compact Authorization header is invalid\");\n assertExactKeys(payload, [\"att\", \"aud\", \"exp\", \"fct\", \"iss\", \"nbf\", \"nnc\", \"prf\"], \"UCAN payload\");\n if (typeof payload.iss !== \"string\" || typeof payload.aud !== \"string\" || typeof payload.nnc !== \"string\" || !Number.isInteger(payload.nbf) || !Number.isInteger(payload.exp) || (payload.nbf as number) >= (payload.exp as number) || !Array.isArray(payload.prf) || payload.prf.some((proof) => typeof proof !== \"string\") || !Array.isArray(payload.fct) || payload.fct.length !== 1) throw new TypeError(\"compact Authorization payload is invalid\");\n const principal = payload.iss.split(\"#\", 1)[0]!;\n const publicKey = ed25519PublicKeyFromDidKey(principal);\n if (!equal(publicKey, fromBase64Url(jwk.x))) throw new TypeError(\"compact Authorization JWK does not bind issuer\");\n if (!ed25519.verify(signature, new TextEncoder().encode(`${headerSegment}.${payloadSegment}`), publicKey, { zip215: false })) throw new TypeError(\"compact Authorization signature is invalid\");\n const cid = CID.createV1(0x55, createDigest(0x1e, blake3(new TextEncoder().encode(authorization)))).toString();\n if (expectedCid !== undefined && cid !== expectedCid) throw new TypeError(\"compact Authorization CID mismatch\");\n return { authorization, cid, header, payload: payload as CompactUcanAuthorization[\"payload\"] };\n}\n\nfunction object(value: unknown, label: string): Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) throw new TypeError(`${label} must be an object`);\n return value as Record<string, unknown>;\n}\n\nfunction assertExactKeys(value: Record<string, unknown>, keys: readonly string[], label: string): void {\n if (Object.keys(value).length !== keys.length || Object.keys(value).some((key) => !keys.includes(key))) throw new TypeError(`${label} has unknown or missing fields`);\n}\n\nfunction equal(left: Uint8Array, right: Uint8Array): boolean {\n return left.length === right.length && left.every((byte, index) => byte === right[index]);\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha256\";\n\nimport { fromBase64Url, toBase64Url, utf8Bytes } from \"./bytes.js\";\nimport { computeCid } from \"./cid.js\";\nimport { didKeyFromEd25519PublicKey, ed25519PublicKeyFromDidKey } from \"./didkey.js\";\nimport { canonicalize } from \"./jcs.js\";\nimport { verifyCompactUcanAuthorization } from \"./compact-ucan.js\";\nimport {\n shareEnvelopeSchema,\n shareEnvelopeV2Schema,\n shareEnvelopeV3Schema,\n unsignedShareEnvelopeSchema,\n unsignedShareEnvelopeV2Schema,\n unsignedShareEnvelopeV3Schema,\n type ShareEnvelope,\n type ShareEnvelopeV2,\n type UnsignedShareEnvelope,\n type UnsignedShareEnvelopeV2,\n type ShareEnvelopeV3,\n type UnsignedShareEnvelopeV3,\n} from \"./schema.js\";\n\n/**\n * Ed25519 verification mode: strict RFC 8032, NOT ZIP-215. `zip215: false`\n * makes @noble/curves reject non-canonical point encodings (y >= p) that the\n * looser ZIP-215 rules accept, so this JS verifier and a strict Rust verifier\n * (e.g. ed25519-dalek `verify_strict`) agree on exactly the same signature\n * set. Chosen deliberately: interop determinism over batch-verification\n * compatibility.\n */\nconst ED25519_VERIFY_OPTS = { zip215: false } as const;\n\n/** The one canonical envelope signing domain shared by runtime and vectors. */\nexport const ENVELOPE_SIGNATURE_DOMAIN = \"xyz.tinycloud.share/envelope/v1\\0\";\nexport const ENVELOPE_V2_SIGNATURE_DOMAIN = \"xyz.tinycloud.share/envelope/v2\\0\";\nexport const ENVELOPE_V3_SIGNATURE_DOMAIN = \"xyz.tinycloud.share/envelope/v3\\0\";\nconst POLICY_V1_SIGNATURE_DOMAIN = \"xyz.tinycloud.policy/policy/v1\\0\";\nconst POLICY_V2_SIGNATURE_DOMAIN = \"xyz.tinycloud.policy/policy/v2\\0\";\nconst CONTENT_SOURCE_V1_DOMAIN = \"xyz.tinycloud.policy/ContentSource/v1\\0\";\nconst POLICY_CAPABILITY_V1_DOMAIN = \"xyz.tinycloud.policy/PolicyCapability/v1\\0\";\nconst NATIVE_PROJECTION_V1_DOMAIN = \"xyz.tinycloud.policy/NativeProjection/v1\\0\";\nconst ATTESTED_ENFORCER_V2_DOMAIN = \"xyz.tinycloud.policy/AttestedEnforcerBinding/v2\\0\";\n\n/** Domain-separated JCS bytes of every envelope field except `signature`. */\nfunction signingBytes(unsigned: UnsignedShareEnvelope): Uint8Array {\n const domain = utf8Bytes(ENVELOPE_SIGNATURE_DOMAIN);\n const body = utf8Bytes(canonicalize(unsigned));\n const bytes = new Uint8Array(domain.length + body.length);\n bytes.set(domain);\n bytes.set(body, domain.length);\n return bytes;\n}\n\nfunction signingBytesV2(unsigned: UnsignedShareEnvelopeV2): Uint8Array {\n const domain = utf8Bytes(ENVELOPE_V2_SIGNATURE_DOMAIN);\n const body = utf8Bytes(canonicalize(unsigned));\n const bytes = new Uint8Array(domain.length + body.length);\n bytes.set(domain);\n bytes.set(body, domain.length);\n return bytes;\n}\n\nfunction signingBytesV3(unsigned: UnsignedShareEnvelopeV3): Uint8Array {\n const domain = utf8Bytes(ENVELOPE_V3_SIGNATURE_DOMAIN);\n const body = utf8Bytes(canonicalize(unsigned));\n const bytes = new Uint8Array(domain.length + body.length);\n bytes.set(domain);\n bytes.set(body, domain.length);\n return bytes;\n}\n\n/**\n * Sign an envelope body with an ed25519 private key (32-byte seed). The\n * signature covers the domain-separated RFC 8785 canonical JSON of all other fields —\n * including `authorizationTarget.kind` and `target.origin` (blueprint §2.1).\n * Throws if the body does not validate against the strict schema.\n */\nexport function signEnvelope(\n envelopeWithoutSig: UnsignedShareEnvelope,\n ed25519PrivKey: Uint8Array,\n): ShareEnvelope {\n const unsigned = unsignedShareEnvelopeSchema.parse(envelopeWithoutSig);\n const publicKey = ed25519.getPublicKey(ed25519PrivKey);\n const signature = ed25519.sign(signingBytes(unsigned), ed25519PrivKey);\n return {\n ...unsigned,\n signature: {\n signerDid: didKeyFromEd25519PublicKey(publicKey),\n algorithm: \"Ed25519\",\n value: toBase64Url(signature),\n },\n };\n}\n\nexport function signEnvelopeV2(envelopeWithoutSig: UnsignedShareEnvelopeV2, ed25519PrivKey: Uint8Array): ShareEnvelopeV2 {\n const unsigned = unsignedShareEnvelopeV2Schema.parse(envelopeWithoutSig);\n const publicKey = ed25519.getPublicKey(ed25519PrivKey);\n return {\n ...unsigned,\n signature: {\n signerDid: didKeyFromEd25519PublicKey(publicKey),\n algorithm: \"Ed25519\",\n value: toBase64Url(ed25519.sign(signingBytesV2(unsigned), ed25519PrivKey)),\n },\n };\n}\n\n/** Sign a strict v3 envelope. v3 is intentionally not accepted by v1/v2 helpers. */\nexport function signEnvelopeV3(envelopeWithoutSig: UnsignedShareEnvelopeV3, ed25519PrivKey: Uint8Array): ShareEnvelopeV3 {\n const unsigned = unsignedShareEnvelopeV3Schema.parse(envelopeWithoutSig);\n const publicKey = ed25519.getPublicKey(ed25519PrivKey);\n return {\n ...unsigned,\n signature: {\n signerDid: didKeyFromEd25519PublicKey(publicKey),\n algorithm: \"Ed25519\",\n value: toBase64Url(ed25519.sign(sha256(signingBytesV3(unsigned)), ed25519PrivKey)),\n },\n };\n}\n\nexport interface VerifyEnvelopeOptions {\n /**\n * The did:key the caller ALREADY trusts to be the sender. REQUIRED:\n * `signature.signerDid` is self-asserted by whoever built the envelope, so\n * verifying against it alone proves nothing — an attacker signs their own\n * \"Adam\" envelope with their own key and it self-verifies. In later stages\n * the expected signer is the delegation chain's issuer DID; for now the\n * caller supplies it out-of-band.\n */\n expectedSignerDid: string;\n}\n\n/**\n * Signature-only check: strict-parse, recompute the JCS signing bytes, and\n * check the ed25519 signature against the key in `signature.signerDid`.\n *\n * WARNING: this only proves the envelope is internally consistent with its\n * OWN self-asserted signer. It binds no trust — use `verifyEnvelope` with an\n * `expectedSignerDid` unless you are doing the binding yourself.\n */\nexport function verifyEnvelopeSignatureOnly(envelope: ShareEnvelope): boolean {\n const parsed = shareEnvelopeSchema.parse(envelope);\n const { signature, ...unsigned } = parsed;\n const publicKey = ed25519PublicKeyFromDidKey(signature.signerDid);\n return ed25519.verify(\n fromBase64Url(signature.value),\n signingBytes(unsigned),\n publicKey,\n ED25519_VERIFY_OPTS,\n );\n}\n\n/**\n * Verify a signed envelope against an EXPECTED signer:\n *\n * 1. strict schema parse (throws on malformed input),\n * 2. `signature.signerDid` must equal `options.expectedSignerDid`,\n * 3. the ed25519 signature must verify (strict RFC 8032) over the domain-separated JCS bytes,\n * 4. for `authorizationTarget.kind === \"policy\"`, the decoded `policyBytes`\n * must hash to `policyCid` (CIDv1/raw/sha2-256).\n *\n * Returns false for any trust or integrity failure.\n */\nexport async function verifyEnvelope(\n envelope: ShareEnvelope,\n options: VerifyEnvelopeOptions,\n): Promise<boolean> {\n const parsed = shareEnvelopeSchema.parse(envelope);\n if (parsed.signature.signerDid !== options.expectedSignerDid) return false;\n if (!verifyEnvelopeSignatureOnly(parsed)) return false;\n if (parsed.authorizationTarget.kind === \"policy\") {\n const policyBytes = fromBase64Url(parsed.authorizationTarget.policyBytes);\n if ((await computeCid(policyBytes)) !== parsed.authorizationTarget.policyCid) {\n return false;\n }\n }\n return true;\n}\n\nexport function verifyEnvelopeV2SignatureOnly(envelope: ShareEnvelopeV2): boolean {\n const parsed = shareEnvelopeV2Schema.parse(envelope);\n const { signature, ...unsigned } = parsed;\n return ed25519.verify(fromBase64Url(signature.value), signingBytesV2(unsigned), ed25519PublicKeyFromDidKey(signature.signerDid), ED25519_VERIFY_OPTS);\n}\n\nexport async function verifyEnvelopeV2(envelope: ShareEnvelopeV2, options: VerifyEnvelopeOptions): Promise<boolean> {\n const parsed = shareEnvelopeV2Schema.parse(envelope);\n if (parsed.signature.signerDid !== options.expectedSignerDid || !verifyEnvelopeV2SignatureOnly(parsed)) return false;\n if (parsed.authorizationTarget.kind === \"policy\") return (await computeCid(fromBase64Url(parsed.authorizationTarget.policyBytes))) === parsed.authorizationTarget.policyCid;\n return true;\n}\n\nexport function verifyEnvelopeV3SignatureOnly(envelope: ShareEnvelopeV3): boolean {\n const parsed = shareEnvelopeV3Schema.parse(envelope);\n const { signature, ...unsigned } = parsed;\n return ed25519.verify(fromBase64Url(signature.value), sha256(signingBytesV3(unsigned)), ed25519PublicKeyFromDidKey(signature.signerDid), ED25519_VERIFY_OPTS);\n}\n\nexport async function verifyEnvelopeV3(envelope: ShareEnvelopeV3, options: VerifyEnvelopeOptions): Promise<boolean> {\n const parsed = shareEnvelopeV3Schema.parse(envelope);\n if (parsed.signature.signerDid !== options.expectedSignerDid || parsed.signature.signerDid !== parsed.policy.ownerDid || !verifyEnvelopeV3SignatureOnly(parsed)) return false;\n const { policy } = parsed;\n const unsignedPolicy = { ...policy } as Record<string, unknown>;\n delete unsignedPolicy.policyId;\n delete unsignedPolicy.signature;\n const policySignatureDomain = policy.schema === \"xyz.tinycloud.policy/policy/v2\"\n ? POLICY_V2_SIGNATURE_DOMAIN\n : POLICY_V1_SIGNATURE_DOMAIN;\n const policyDigest = sha256(new TextEncoder().encode(`${policySignatureDomain}${canonicalize(unsignedPolicy)}`));\n const policySignature = policy.signature;\n if (policySignature.suite !== \"Ed25519\" || policySignature.signerDid !== policy.ownerDid) return false;\n let policyPublicKey: Uint8Array;\n let policySignatureBytes: Uint8Array;\n try {\n policyPublicKey = ed25519PublicKeyFromDidKey(policy.ownerDid);\n policySignatureBytes = fromBase64Url(policySignature.value);\n } catch {\n return false;\n }\n if (policySignatureBytes.length !== 64 || !ed25519.verify(policySignatureBytes, policyDigest, policyPublicKey, ED25519_VERIFY_OPTS)) return false;\n const policyIdDigest = policyDigest;\n if (policy.policyId !== `pol_${base32Lower(policyIdDigest)}`) return false;\n const policyBytes = new TextEncoder().encode(canonicalize(policy));\n if ((await computeCid(policyBytes)) !== parsed.policyCid) return false;\n const sourceDigest = sha256(new TextEncoder().encode(`${CONTENT_SOURCE_V1_DOMAIN}${canonicalize(policy.contentSource)}`));\n if (hex(sourceDigest) !== parsed.contentSourceDigestHex) return false;\n const sortedCapabilities = [...policy.capabilityCeiling].sort((left, right) => canonicalize(left).localeCompare(canonicalize(right)));\n const capabilityCeilingHashHex = hex(sha256(new TextEncoder().encode(`${POLICY_CAPABILITY_V1_DOMAIN}${canonicalize(sortedCapabilities)}`)));\n const nativeProjection = sortedCapabilities.map((capability) => capability.kind === \"encryption\"\n ? { service: \"tinycloud.encryption\", space: capability.resource, path: capability.resource, actions: [capability.action] }\n : { service: \"tinycloud.kv\", space: capability.resource.slice(0, capability.resource.indexOf(\"/kv/\")), path: capability.resource.split(\"/kv/\")[1], actions: [...capability.actions], caveat: { type: \"xyz.tinycloud.resource/selector\", kind: capability.selector, value: capability.resource } })\n .sort((left, right) => canonicalize(left).localeCompare(canonicalize(right)));\n const nativeProjectionHashHex = hex(sha256(new TextEncoder().encode(`${NATIVE_PROJECTION_V1_DOMAIN}${canonicalize(nativeProjection)}`)));\n const expectedAttenuation = Object.fromEntries(sortedCapabilities.map((capability) => capability.kind === \"encryption\"\n ? [capability.resource, { [capability.action]: [{}] }]\n : [capability.resource, Object.fromEntries(capability.actions.map((action) => [action, [{ kind: capability.selector, type: \"xyz.tinycloud.resource/selector\", value: capability.resource }]]))]));\n const kv = policy.capabilityCeiling.find((capability) => capability.kind === \"kv\");\n const expectedKvActions = parsed.actions.flatMap((action) => action === \"read\" ? [\"tinycloud.kv/get\", \"tinycloud.kv/metadata\"] : action === \"list\" ? [\"tinycloud.kv/list\"] : [\"tinycloud.kv/put\"]);\n const marker = parsed.contentSource.kvResource.indexOf(\"/kv/\");\n const resourceSpace = marker < 1 ? \"\" : parsed.contentSource.kvResource.slice(0, marker);\n const resourcePath = marker < 1 ? \"\" : parsed.contentSource.kvResource.slice(marker + 4);\n if (parsed.shareId !== parsed.contentSource.shareId || resourceSpace !== parsed.target.spaceId || resourcePath !== parsed.resource.path.replace(/\\/$/, \"\") || parsed.resource.kind !== parsed.contentSource.selector || kv?.kind !== \"kv\" || expectedKvActions.some((action) => !kv.actions.includes(action as never)) || parsed.encryptionNetwork !== parsed.contentSource.encryptionNetwork || parsed.contentSource.keyVersion <= 0 || (policy.expiresAt !== undefined && Date.parse(parsed.expiry) > Date.parse(policy.expiresAt))) return false;\n const binding = parsed.attestedEnforcerBinding;\n const { signature: bindingSignature, ...unsignedBinding } = binding;\n const expectedBindingDigestHex = hex(sha256(new TextEncoder().encode(canonicalize({ enforcerDid: binding.enforcerDid, nodeAudience: binding.nodeAudience }))));\n if (binding.nodeAudience !== parsed.target.nodeAudience || binding.attestationBindingDigestHex !== expectedBindingDigestHex || bindingSignature.signerDid !== binding.nodeAudience || bindingSignature.suite !== \"Ed25519\" || Date.parse(binding.issuedAt) > Date.now() || Date.parse(binding.expiresAt) <= Date.now() || Date.parse(binding.expiresAt) < Date.parse(parsed.expiry)) return false;\n try {\n const digest = sha256(new TextEncoder().encode(`${ATTESTED_ENFORCER_V2_DOMAIN}${canonicalize(unsignedBinding)}`));\n if (!ed25519.verify(fromBase64Url(bindingSignature.value), digest, ed25519PublicKeyFromDidKey(binding.nodeAudience), ED25519_VERIFY_OPTS)) return false;\n } catch {\n return false;\n }\n if (parsed.policyRoot.role !== \"policy-authority\" || parsed.enforcementRoot.role !== \"policy-enforcement\" || parsed.policyRoot.cid === parsed.enforcementRoot.cid) return false;\n try {\n const policyRoot = verifyCompactUcanAuthorization(parsed.policyRoot.authorization, parsed.policyRoot.cid);\n const enforcementRoot = verifyCompactUcanAuthorization(parsed.enforcementRoot.authorization, parsed.enforcementRoot.cid);\n const policyFact = policyRoot.payload.fct[0];\n const enforcementFact = enforcementRoot.payload.fct[0];\n const common = [\"ownerDid\", \"policyId\", \"policyDigestHex\", \"policyCid\", \"contentSourceDigestHex\", \"capabilityCeilingHashHex\", \"nativeProjectionHashHex\", \"nodeAudience\"];\n const policyKeys = [...common, \"role\", \"mode\"];\n const enforcementKeys = [...policyKeys, \"enforcerDid\"];\n if (Object.keys(policyFact).length !== policyKeys.length || policyKeys.some((key) => !(key in policyFact)) || Object.keys(enforcementFact).length !== enforcementKeys.length || enforcementKeys.some((key) => !(key in enforcementFact)) || policyRoot.payload.prf.length !== 0 || enforcementRoot.payload.prf.length !== 0 || policyRoot.payload.iss.split(\"#\", 1)[0] !== policy.ownerDid || enforcementRoot.payload.iss.split(\"#\", 1)[0] !== policy.ownerDid || policyRoot.payload.nbf !== enforcementRoot.payload.nbf || policyRoot.payload.exp !== enforcementRoot.payload.exp || canonicalize(policyRoot.payload.att) !== canonicalize(expectedAttenuation) || canonicalize(enforcementRoot.payload.att) !== canonicalize(expectedAttenuation) || policyFact.role !== \"policy-authority\" || policyFact.mode !== \"policy-source\" || \"enforcerDid\" in policyFact || enforcementFact.role !== \"policy-enforcement\" || enforcementFact.mode !== \"conditional-mint\" || policyRoot.payload.aud !== `did:tinycloud:policy:${hex(policyIdDigest)}` || enforcementRoot.payload.aud !== binding.enforcerDid || enforcementFact.enforcerDid !== binding.enforcerDid || common.some((key) => policyFact[key] !== enforcementFact[key]) || policyFact.ownerDid !== policy.ownerDid || policyFact.policyId !== policy.policyId || policyFact.policyDigestHex !== hex(policyIdDigest) || policyFact.policyCid !== parsed.policyCid || policyFact.contentSourceDigestHex !== parsed.contentSourceDigestHex || policyFact.capabilityCeilingHashHex !== capabilityCeilingHashHex || policyFact.nativeProjectionHashHex !== nativeProjectionHashHex || policyFact.nodeAudience !== binding.nodeAudience || policyRoot.payload.exp * 1000 < Date.parse(parsed.expiry)) return false;\n } catch {\n return false;\n }\n return true;\n}\n\nfunction hex(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction base32Lower(bytes: Uint8Array): string {\n const alphabet = \"abcdefghijklmnopqrstuvwxyz234567\";\n let output = \"\";\n let buffer = 0;\n let bits = 0;\n for (const byte of bytes) {\n buffer = (buffer << 8) | byte;\n bits += 8;\n while (bits >= 5) {\n output += alphabet[(buffer >>> (bits - 5)) & 31];\n bits -= 5;\n }\n }\n if (bits > 0) output += alphabet[(buffer << (5 - bits)) & 31];\n return output;\n}\n","import { CID } from \"multiformats/cid\";\nimport * as raw from \"multiformats/codecs/raw\";\n\nimport { fromBase64Url, toBase64Url } from \"./bytes.js\";\nimport { isCanonicalHttpsOrigin } from \"./schema.js\";\n\n/**\n * Share link codec (blueprint §2.1):\n *\n * ${origin}/s/${cid}#k=${base64url(key32)}\n *\n * The CID addresses the SEALED BLOB (`seal` in aead.ts: version byte ||\n * nonce || ciphertext+tag), so the link plus the fetched blob is everything a\n * recipient needs — the nonce rides inside the CID-verified blob.\n *\n * The AEAD key rides in the URL FRAGMENT only. Fragments are never sent in\n * HTTP requests, so the registry, CDNs, and any server that sees the URL\n * without its fragment learn nothing that decrypts the envelope. The fragment\n * must never leave the client (no logging, no postMessage to other origins).\n */\n\nexport const KEY_LENGTH = 32;\n\nexport interface ShareUrlParts {\n origin: string;\n /** CIDv1/raw/sha2-256 of the sealed blob. */\n ciphertextCid: string;\n key32: Uint8Array;\n}\n\nexport interface ParseShareUrlOptions {\n /** If given, the URL's origin must equal this canonical https origin exactly. */\n expectedOrigin?: string;\n}\n\nexport function assertCanonicalCid(cidString: string): void {\n const cid = CID.parse(cidString); // throws on garbage\n if (\n cid.version !== 1 ||\n cid.code !== raw.code ||\n cid.multihash.code !== 0x12 || // sha2-256 (0x12) only, at the link layer too\n cid.toString() !== cidString\n ) {\n throw new TypeError(`not a canonical CIDv1 raw sha2-256 base32 CID: ${cidString}`);\n }\n}\n\nexport function encodeShareUrl({ origin, ciphertextCid, key32 }: ShareUrlParts): string {\n if (key32.length !== KEY_LENGTH) {\n throw new TypeError(`key must be ${KEY_LENGTH} bytes, got ${key32.length}`);\n }\n assertCanonicalCid(ciphertextCid);\n if (!isCanonicalHttpsOrigin(origin)) {\n throw new TypeError(`origin must be a canonical https origin, got ${origin}`);\n }\n return `${origin}/s/${ciphertextCid}#k=${toBase64Url(key32)}`;\n}\n\nexport function parseShareUrl(\n url: string,\n options: ParseShareUrlOptions = {},\n): { ciphertextCid: string; key32: Uint8Array } {\n const parsed = new URL(url);\n if (parsed.protocol !== \"https:\") {\n throw new TypeError(`share URL must be https, got ${parsed.protocol}`);\n }\n if (parsed.username !== \"\" || parsed.password !== \"\") {\n throw new TypeError(\"share URL must not carry userinfo\");\n }\n // The key must never appear anywhere a server would see it — reject ANY\n // query string rather than guessing at intent.\n if (parsed.search !== \"\") {\n throw new TypeError(\"share URL must not have a query string\");\n }\n if (options.expectedOrigin !== undefined) {\n if (!isCanonicalHttpsOrigin(options.expectedOrigin)) {\n throw new TypeError(\n `expectedOrigin must be a canonical https origin, got ${options.expectedOrigin}`,\n );\n }\n if (parsed.origin !== options.expectedOrigin) {\n throw new TypeError(\n `share URL origin ${parsed.origin} does not match expected ${options.expectedOrigin}`,\n );\n }\n }\n const match = /^\\/s\\/([a-z2-7]+)$/.exec(parsed.pathname);\n if (!match || match[1] === undefined) {\n throw new TypeError(`not a share URL path: ${parsed.pathname}`);\n }\n const ciphertextCid = match[1];\n assertCanonicalCid(ciphertextCid);\n if (!parsed.hash.startsWith(\"#k=\")) {\n throw new TypeError(\"share URL is missing the #k= key fragment\");\n }\n // fromBase64Url is a STRICT decode: it throws on padding, characters\n // outside the base64url alphabet, impossible lengths, and non-zero\n // trailing bits — not just an alphabet regex.\n const key32 = fromBase64Url(parsed.hash.slice(\"#k=\".length));\n if (key32.length !== KEY_LENGTH) {\n throw new TypeError(`fragment key must be ${KEY_LENGTH} bytes, got ${key32.length}`);\n }\n return { ciphertextCid, key32 };\n}\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import { isCanonicalHttpsOrigin, parseShareUrl } from \"@tinycloud/share-envelope\";\nimport { MAX_LINK_REQUEST_BYTES, parseLink } from \"@tinycloud/share-envelope/links\";\nimport { parseNativeShareUrl } from \"../native.js\";\n\n/**\n * Share link validator (design C §5 check 6, §6 Open/Copy). A link is\n * accepted only when it is https on a configured share origin and has one of\n * the share link shapes:\n * - `/s/<cid>#k=<key>`: registry envelope link;\n * - `/s/<id>#v=4&k=<key>&c=<cid>` or `/s/full#v=4&k=<key>&r=<record>`: the\n * short or full link of a Policy/v3 share (what `publishAddressedShare`\n * emits and the links service stores);\n * - `/viewer#tc1=<token>`: native bearer link (`createNativeShare`).\n *\n * The result names the shape only; the link itself is never copied into it.\n */\nexport type ShareLinkShape = \"envelope\" | \"link\" | \"native\";\n\nexport type ShareLinkCheck = { readonly ok: true; readonly shape: ShareLinkShape } | { readonly ok: false };\n\nconst MAX_LINK_LENGTH = 12 * 1024;\n/** A full link carries a whole record (the create request's cap) in base64url, plus the origin and fragment names. */\nconst MAX_FULL_LINK_LENGTH = Math.ceil((MAX_LINK_REQUEST_BYTES * 4) / 3) + 512;\n/** A `/s/<id>` path (26 base32 characters) and `/s/full`: the paths the `v=4` grammar owns. */\nconst V4_SHARE_PATH = /^\\/s\\/([A-Za-z2-7]{26}|full)$/;\n\nexport function validateShareLink(link: unknown, shareOrigins: readonly string[]): ShareLinkCheck {\n if (typeof link !== \"string\" || link.length === 0 || link.length > MAX_FULL_LINK_LENGTH || /[\\s\\u0000-\\u001f\\u007f]/.test(link)) return { ok: false };\n let url: URL;\n try { url = new URL(link); } catch { return { ok: false }; }\n if (link.length > MAX_LINK_LENGTH && url.pathname !== \"/s/full\") return { ok: false };\n if (url.protocol !== \"https:\" || url.username !== \"\" || url.password !== \"\" || url.search !== \"\") return { ok: false };\n if (!isCanonicalHttpsOrigin(url.origin) || !shareOrigins.includes(url.origin)) return { ok: false };\n try {\n if (url.pathname === \"/viewer\") {\n parseNativeShareUrl(link);\n return link === `${url.origin}/viewer${url.hash}` ? { ok: true, shape: \"native\" } : { ok: false };\n }\n if (V4_SHARE_PATH.test(url.pathname)) {\n const parsed = parseLink(link, { trustedOrigins: shareOrigins });\n return parsed.form === \"full\" || parsed.pathType === \"share\" ? { ok: true, shape: \"link\" } : { ok: false };\n }\n parseShareUrl(link, { expectedOrigin: url.origin });\n return { ok: true, shape: \"envelope\" };\n } catch {\n return { ok: false };\n }\n}\n","/** Fragment-only adapter for TinyCloud's public SharingService. */\nexport const NATIVE_SHARE_FRAGMENT_PARAMETER = \"tc1\";\n\nexport interface NativeShareResult {\n readonly url: string;\n readonly delegationCid: string;\n readonly expiresAt: Date;\n readonly spaceId: string;\n}\n\nexport interface NativeSharingService {\n generate(params: { readonly path: string; readonly actions: string[]; readonly expiry: Date }): Promise<unknown>;\n receive(token: string, options: { readonly autoSubdelegate: false; readonly useSessionKey: false }): Promise<unknown>;\n decodeLink(token: string): { readonly spaceId: string; readonly path: string };\n}\n\n/** `https://<origin>/viewer` for a canonical HTTPS viewer origin. Also used by share-root bearer links. */\nexport function canonicalViewerUrl(viewerOrigin: string): URL {\n const url = new URL(viewerOrigin);\n if (url.protocol !== \"https:\" || url.origin !== viewerOrigin || url.pathname !== \"/\" || url.search || url.hash) throw new TypeError(\"viewer origin must be a canonical HTTPS origin\");\n url.pathname = \"/viewer\";\n return url;\n}\n\n/** Generate exactly one read-only TinyCloud delegation and put its tc1 token in the fragment. */\nexport async function createNativeShare(sharing: NativeSharingService, input: { readonly path: string; readonly expiresAt: Date; readonly viewerOrigin: string }): Promise<NativeShareResult> {\n if (!input.path || input.path.startsWith(\"/\") || input.path.endsWith(\"/\") || input.path.includes(\"..\") || input.path.includes(\"//\")) throw new TypeError(\"native share path must be one canonical TinyCloud KV key\");\n const generated = await sharing.generate({ path: input.path, actions: [\"tinycloud.kv/get\"], expiry: input.expiresAt }) as { readonly ok?: unknown; readonly data?: { readonly token?: unknown; readonly delegation?: { readonly cid?: unknown }; readonly expiresAt?: unknown }; readonly error?: { readonly code?: unknown; readonly message?: unknown } };\n if (generated.ok !== true) {\n const error = new Error(typeof generated.error?.message === \"string\" ? generated.error.message : \"TinyCloud sharing service rejected delegation generation\");\n if (typeof generated.error?.code === \"string\") Object.assign(error, { code: generated.error.code });\n throw error;\n }\n if (typeof generated.data?.token !== \"string\" || typeof generated.data.delegation?.cid !== \"string\" || !(generated.data.expiresAt instanceof Date)) throw new Error(\"TinyCloud sharing service returned incomplete delegation metadata\");\n const delegation = sharing.decodeLink(generated.data.token);\n if (typeof delegation.spaceId !== \"string\" || delegation.spaceId.length === 0 || typeof delegation.path !== \"string\" || delegation.path.length === 0) throw new Error(\"TinyCloud sharing service returned a non-canonical delegation authority\");\n const url = canonicalViewerUrl(input.viewerOrigin);\n url.hash = `${NATIVE_SHARE_FRAGMENT_PARAMETER}=${encodeURIComponent(generated.data.token)}`;\n return { url: url.toString(), delegationCid: generated.data.delegation.cid, expiresAt: generated.data.expiresAt, spaceId: delegation.spaceId };\n}\n\n/** Extract only a single tc1 fragment. Path/query/mixed legacy forms are refused. */\nexport function parseNativeShareUrl(value: string): string {\n const url = new URL(value);\n if (url.search || url.pathname !== \"/viewer\") throw new TypeError(\"native shares must carry tc1 only in the /viewer URL fragment\");\n const fragment = new URLSearchParams(url.hash.slice(1));\n const token = fragment.get(NATIVE_SHARE_FRAGMENT_PARAMETER);\n // `token` is opaque output from SharingService.generate(). `tc1` names this\n // fragment format; the opaque token may itself begin with `tc1:`.\n if (!token || fragment.size !== 1) throw new TypeError(\"missing native share fragment\");\n return token;\n}\n\n/** Receive through the public SDK without creating another transport protocol. */\nexport async function openNativeShare(sharing: NativeSharingService, link: string): Promise<unknown> {\n return sharing.receive(parseNativeShareUrl(link), { autoSubdelegate: false, useSessionKey: false });\n}\n","import { toBase64Url } from \"@tinycloud/share-envelope\";\n\n/**\n * The agent's key-encryption key (design C §3, V3-6). Security-sensitive:\n * keep this module small and free of logging.\n *\n * KEK_a = HKDF-SHA256(ikm = private key bytes,\n * salt = \"xyz.tinycloud.share/agent-kek/v1\",\n * info = agentDid)\n * kid = HKDF-SHA256(same ikm and salt, info = \"kid\")[0..8]\n *\n * The private key is the one the agent signs its invocations and delegations\n * with (the session key when it has a private part, otherwise the profile\n * key), and `agentDid` is that key's DID. KEK_a is imported non-extractable,\n * for AES-GCM wrapping only.\n */\nexport interface AgentKeyMaterial {\n readonly agentDid: string;\n /** base64url of the first 8 bytes of HKDF(…, info \"kid\"). */\n readonly kid: string;\n readonly kek: CryptoKey;\n}\n\nconst KEK_SALT = new TextEncoder().encode(\"xyz.tinycloud.share/agent-kek/v1\");\n\nfunction subtle(): SubtleCrypto {\n const value = globalThis.crypto?.subtle;\n if (value === undefined) throw new Error(\"WebCrypto is required for agent record keys\");\n return value;\n}\n\n/**\n * Derive KEK_a and kid. `privateKeyBytes` is read, never retained; the caller\n * owns (and should zero) it.\n */\nexport async function deriveAgentKeyMaterial(privateKeyBytes: Uint8Array, agentDid: string): Promise<AgentKeyMaterial> {\n if (!(privateKeyBytes instanceof Uint8Array) || privateKeyBytes.byteLength < 32) throw new TypeError(\"agent private key must be at least 32 bytes\");\n if (typeof agentDid !== \"string\" || !agentDid.startsWith(\"did:\")) throw new TypeError(\"agent DID is invalid\");\n const copy = new Uint8Array(privateKeyBytes);\n const ikm = await subtle().importKey(\"raw\", copy, \"HKDF\", false, [\"deriveBits\", \"deriveKey\"]);\n copy.fill(0);\n const kek = await subtle().deriveKey(\n { name: \"HKDF\", hash: \"SHA-256\", salt: KEK_SALT, info: new TextEncoder().encode(agentDid) },\n ikm,\n { name: \"AES-GCM\", length: 256 },\n false,\n [\"encrypt\", \"decrypt\"],\n );\n const kidBytes = new Uint8Array(await subtle().deriveBits({ name: \"HKDF\", hash: \"SHA-256\", salt: KEK_SALT, info: new TextEncoder().encode(\"kid\") }, ikm, 64));\n return { agentDid, kid: toBase64Url(kidBytes), kek };\n}\n","import { fromBase64Url, toBase64Url } from \"@tinycloud/share-envelope\";\nimport type { AgentKeyMaterial } from \"./agent-key.js\";\n\n/**\n * Agent record codec: the double-wrapped data key (design C §3, R1, V3-3..6).\n * Security-sensitive: keep this module small; nothing here logs, and no\n * error carries key bytes.\n *\n * One stored value per record, `vault/…/records/agents/<agentId>/<shareId>`:\n *\n * { hdr: { v: 1, agentDid, kid, alg: \"A256GCM\", ownerNetworkId, recordV },\n * ct: b64url(iv ‖ AES-256-GCM(encKey, record, aad = B)),\n * commit: b64url(HMAC-SHA256(commitKey, B)),\n * wrapAgent: b64url(iv ‖ AES-256-GCM(KEK_a, DEK, aad = B)) | null,\n * wrapOwner: owner-network envelope of DEK with aad = B }\n *\n * B = \"xyz.tinycloud.share/agent-record/v1|\" + spaceId + \"|\" + vaultKey\n * + \"|\" + agentDid + \"|\" + ownerNetworkId (EVM addresses lowercased)\n * encKey = HKDF-SHA256(DEK, info \"enc|\" + B)\n * commitKey = HKDF-SHA256(DEK, info \"commit|\" + B)\n *\n * Every seal takes a fresh random 32-byte DEK and fresh random 96-bit nonces.\n * The DEK itself is never used as a key. Opening requires the unwrapped DEK\n * to be exactly 32 bytes, checks `commit` in constant time, and zeroes the\n * DEK on every path.\n */\n\nexport const AGENT_RECORD_VERSION = 1;\n/** Record schema versions this build understands. */\nexport const SUPPORTED_AGENT_RECORD_V = 1;\n/**\n * Stored agent records larger than this are refused before any crypto.\n * Design C proposed 16 KiB (open decision 1); a real CLI bearer record that\n * carries its link and its full chain (C1: link UCAN + owner→session CACAO)\n * measured 16,918 B on a local node, so the cap is 32 KiB.\n */\nexport const MAX_AGENT_RECORD_BYTES = 32 * 1024;\n\nconst BINDING_DOMAIN = \"xyz.tinycloud.share/agent-record/v1|\";\nconst DEK_BYTES = 32;\nconst NONCE_BYTES = 12;\nconst encoder = new TextEncoder();\n\nexport type AgentRecordFailure = \"size\" | \"shape\" | \"header\" | \"newer\" | \"decrypt\" | \"commit\";\n\n/** A refused agent record. The message is fixed per reason. */\nexport class AgentRecordError extends Error {\n constructor(readonly reason: AgentRecordFailure) {\n super(`agent record refused: ${reason}`);\n this.name = \"AgentRecordError\";\n }\n}\n\n/** Thrown by an {@link OwnerNetworkUnwrap} when the decrypt service is unreachable (not a refusal). */\nexport class OwnerUnwrapUnavailableError extends Error {\n constructor() {\n super(\"owner-network decrypt is unavailable\");\n this.name = \"OwnerUnwrapUnavailableError\";\n }\n}\n\nexport interface AgentRecordHeader {\n readonly v: 1;\n readonly agentDid: string;\n readonly kid: string | null;\n readonly alg: \"A256GCM\";\n readonly ownerNetworkId: string;\n readonly recordV: number;\n}\n\nexport interface StoredAgentRecord {\n readonly hdr: AgentRecordHeader;\n readonly ct: string;\n readonly commit: string;\n readonly wrapAgent: string | null;\n readonly wrapOwner: Readonly<Record<string, unknown>>;\n}\n\n/** Encrypts the DEK to the owner network (needs no capability). */\nexport interface OwnerNetworkWrap {\n wrap(dek: Uint8Array, aad: Uint8Array): Promise<Readonly<Record<string, unknown>>>;\n}\n\n/**\n * Network-decrypts the owner wrap. Implementations must pass `aad` to the\n * decrypt call so the envelope's declared AAD is compared before any POST.\n */\nexport interface OwnerNetworkUnwrap {\n unwrap(envelope: Readonly<Record<string, unknown>>, aad: Uint8Array): Promise<Uint8Array>;\n}\n\nexport interface AgentRecordBindingInput {\n readonly spaceId: string;\n /** Full vault key: `sender-history/v2/records/agents/<agentId>/<shareId>`. */\n readonly vaultKey: string;\n readonly agentDid: string;\n readonly ownerNetworkId: string;\n}\n\n/** Space ids and network ids spell EVM addresses either way; B uses lowercase. */\nexport function canonicalAddressSpelling(value: string): string {\n // Only the address segment of an `eip155:<chain>:` principal, never a path or name that merely looks like one.\n return value.replace(/(?<=eip155:[1-9]\\d*:)0x[0-9a-fA-F]{40}(?![0-9a-fA-F])/g, (address) => address.toLowerCase());\n}\n\nexport function agentRecordBinding(input: AgentRecordBindingInput): Uint8Array {\n for (const part of [input.spaceId, input.vaultKey, input.agentDid, input.ownerNetworkId]) {\n if (typeof part !== \"string\" || part.length === 0 || part.includes(\"|\")) throw new TypeError(\"agent record binding input is invalid\");\n }\n return encoder.encode(`${BINDING_DOMAIN}${canonicalAddressSpelling(input.spaceId)}|${input.vaultKey}|${input.agentDid}|${canonicalAddressSpelling(input.ownerNetworkId)}`);\n}\n\nfunction subtle(): SubtleCrypto {\n const value = globalThis.crypto?.subtle;\n if (value === undefined) throw new Error(\"WebCrypto is required for agent records\");\n return value;\n}\n\nfunction concat(left: Uint8Array, right: Uint8Array): Uint8Array {\n const out = new Uint8Array(left.length + right.length);\n out.set(left);\n out.set(right, left.length);\n return out;\n}\n\n/** Constant-time equality for equal-length byte strings. */\nexport function constantTimeEqual(left: Uint8Array, right: Uint8Array): boolean {\n if (left.length !== right.length) return false;\n let diff = 0;\n for (let index = 0; index < left.length; index++) diff |= left[index]! ^ right[index]!;\n return diff === 0;\n}\n\ninterface Subkeys { readonly enc: CryptoKey; readonly commit: CryptoKey }\n\nasync function deriveSubkeys(dek: Uint8Array, binding: Uint8Array): Promise<Subkeys> {\n const base = await subtle().importKey(\"raw\", dek, \"HKDF\", false, [\"deriveBits\"]);\n const derive = async (label: string, usage: \"enc\" | \"commit\"): Promise<CryptoKey> => {\n const bits = new Uint8Array(await subtle().deriveBits({ name: \"HKDF\", hash: \"SHA-256\", salt: new Uint8Array(0), info: concat(encoder.encode(label), binding) }, base, 256));\n try {\n return usage === \"enc\"\n ? await subtle().importKey(\"raw\", bits, { name: \"AES-GCM\" }, false, [\"encrypt\", \"decrypt\"])\n : await subtle().importKey(\"raw\", bits, { name: \"HMAC\", hash: \"SHA-256\" }, false, [\"sign\"]);\n } finally {\n bits.fill(0);\n }\n };\n return { enc: await derive(\"enc|\", \"enc\"), commit: await derive(\"commit|\", \"commit\") };\n}\n\nasync function gcmSeal(key: CryptoKey, plaintext: Uint8Array, aad: Uint8Array): Promise<string> {\n const iv = crypto.getRandomValues(new Uint8Array(NONCE_BYTES));\n const sealed = new Uint8Array(await subtle().encrypt({ name: \"AES-GCM\", iv, additionalData: aad }, key, plaintext));\n return toBase64Url(concat(iv, sealed));\n}\n\nasync function gcmOpen(key: CryptoKey, encoded: string, aad: Uint8Array): Promise<Uint8Array> {\n const bytes = fromBase64Url(encoded);\n if (bytes.length < NONCE_BYTES + 16) throw new AgentRecordError(\"decrypt\");\n return new Uint8Array(await subtle().decrypt({ name: \"AES-GCM\", iv: bytes.subarray(0, NONCE_BYTES), additionalData: aad }, key, bytes.subarray(NONCE_BYTES)));\n}\n\nexport interface SealAgentRecordInput extends AgentRecordBindingInput {\n /** UTF-8 JSON of the full `SenderShareRecord` (link and `proofs` included). */\n readonly plaintext: Uint8Array;\n /** Absent for a remote-signer-only profile: the record is then owner-readable only (`kid: null`). */\n readonly agentKey?: AgentKeyMaterial;\n readonly ownerWrap: OwnerNetworkWrap;\n readonly recordV?: number;\n}\n\n/** Seal one agent record. Each call draws a fresh DEK and fresh nonces. */\nexport async function sealAgentRecord(input: SealAgentRecordInput): Promise<StoredAgentRecord> {\n if (input.agentKey !== undefined && input.agentKey.agentDid !== input.agentDid) throw new TypeError(\"agent key does not belong to the agent DID\");\n const binding = agentRecordBinding(input);\n const dek = crypto.getRandomValues(new Uint8Array(DEK_BYTES));\n try {\n const subkeys = await deriveSubkeys(dek, binding);\n const ct = await gcmSeal(subkeys.enc, input.plaintext, binding);\n const commit = toBase64Url(new Uint8Array(await subtle().sign(\"HMAC\", subkeys.commit, binding)));\n const wrapAgent = input.agentKey === undefined ? null : await gcmSeal(input.agentKey.kek, dek, binding);\n const wrapOwner = await input.ownerWrap.wrap(dek, binding);\n return {\n hdr: { v: AGENT_RECORD_VERSION, agentDid: input.agentDid, kid: input.agentKey?.kid ?? null, alg: \"A256GCM\", ownerNetworkId: input.ownerNetworkId, recordV: input.recordV ?? SUPPORTED_AGENT_RECORD_V },\n ct,\n commit,\n wrapAgent,\n wrapOwner,\n };\n } finally {\n dek.fill(0);\n }\n}\n\nfunction exactKeys(value: unknown, keys: readonly string[]): value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return false;\n const own = Object.keys(value);\n return own.length === keys.length && keys.every((key) => Object.prototype.hasOwnProperty.call(value, key));\n}\n\n/**\n * Parse the stored bytes and check the header against the path (§5 checks\n * 2–3), before any crypto. `newer` means a higher `recordV` than this build\n * knows: skip and re-check after an upgrade, do not reject.\n */\nexport function parseStoredAgentRecord(bytes: Uint8Array, expected: { readonly agentDid?: string; readonly ownerNetworkId: string }): StoredAgentRecord {\n if (bytes.byteLength > MAX_AGENT_RECORD_BYTES) throw new AgentRecordError(\"size\");\n let value: unknown;\n try { value = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes)); } catch { throw new AgentRecordError(\"shape\"); }\n if (!exactKeys(value, [\"hdr\", \"ct\", \"commit\", \"wrapAgent\", \"wrapOwner\"])) throw new AgentRecordError(\"shape\");\n const hdr = value.hdr;\n if (!exactKeys(hdr, [\"v\", \"agentDid\", \"kid\", \"alg\", \"ownerNetworkId\", \"recordV\"])) throw new AgentRecordError(\"header\");\n if (typeof value.ct !== \"string\" || typeof value.commit !== \"string\" || (value.wrapAgent !== null && typeof value.wrapAgent !== \"string\") || value.wrapOwner === null || typeof value.wrapOwner !== \"object\" || Array.isArray(value.wrapOwner)) throw new AgentRecordError(\"shape\");\n if (hdr.v !== AGENT_RECORD_VERSION || hdr.alg !== \"A256GCM\" || typeof hdr.agentDid !== \"string\" || (hdr.kid !== null && typeof hdr.kid !== \"string\") || typeof hdr.ownerNetworkId !== \"string\" || !Number.isSafeInteger(hdr.recordV) || (hdr.recordV as number) < 1) throw new AgentRecordError(\"header\");\n if (expected.agentDid !== undefined && hdr.agentDid !== expected.agentDid) throw new AgentRecordError(\"header\");\n if (canonicalAddressSpelling(hdr.ownerNetworkId) !== canonicalAddressSpelling(expected.ownerNetworkId)) throw new AgentRecordError(\"header\");\n if ((hdr.recordV as number) > SUPPORTED_AGENT_RECORD_V) throw new AgentRecordError(\"newer\");\n return value as unknown as StoredAgentRecord;\n}\n\nfunction bindingFor(record: StoredAgentRecord, location: { readonly spaceId: string; readonly vaultKey: string }): Uint8Array {\n return agentRecordBinding({ spaceId: location.spaceId, vaultKey: location.vaultKey, agentDid: record.hdr.agentDid, ownerNetworkId: record.hdr.ownerNetworkId });\n}\n\nfunction decodeStandardBase64(value: string): Uint8Array | undefined {\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(value) || value.length % 4 !== 0) return undefined;\n try { return fromBase64Url(value.replace(/=+$/, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\")); } catch { return undefined; }\n}\n\n/** DEK → subkeys → constant-time `commit` → open `ct`. Zeroes the DEK. */\nasync function openWithDek(record: StoredAgentRecord, binding: Uint8Array, dek: Uint8Array): Promise<Uint8Array> {\n try {\n if (dek.length !== DEK_BYTES) throw new AgentRecordError(\"decrypt\");\n const subkeys = await deriveSubkeys(dek, binding);\n let stored: Uint8Array;\n try { stored = fromBase64Url(record.commit); } catch { throw new AgentRecordError(\"commit\"); }\n const computed = new Uint8Array(await subtle().sign(\"HMAC\", subkeys.commit, binding));\n if (!constantTimeEqual(stored, computed)) throw new AgentRecordError(\"commit\");\n try { return await gcmOpen(subkeys.enc, record.ct, binding); } catch { throw new AgentRecordError(\"decrypt\"); }\n } finally {\n dek.fill(0);\n }\n}\n\n/**\n * Owner path (§3 steps 2–4): refuse locally, before any network call, an\n * owner wrap whose declared AAD is not exactly B or whose network is not the\n * owner's; then network-unwrap, and open.\n */\nexport async function openAgentRecordAsOwner(record: StoredAgentRecord, location: { readonly spaceId: string; readonly vaultKey: string }, unwrap: OwnerNetworkUnwrap): Promise<Uint8Array> {\n const binding = bindingFor(record, location);\n const declared = typeof record.wrapOwner.aad === \"string\" ? decodeStandardBase64(record.wrapOwner.aad) : undefined;\n if (declared === undefined || !constantTimeEqual(declared, binding)) throw new AgentRecordError(\"decrypt\");\n if (typeof record.wrapOwner.networkId !== \"string\" || canonicalAddressSpelling(record.wrapOwner.networkId) !== canonicalAddressSpelling(record.hdr.ownerNetworkId)) throw new AgentRecordError(\"decrypt\");\n let dek: Uint8Array;\n try { dek = await unwrap.unwrap(record.wrapOwner, binding); } catch (error) {\n // An outage is not a verdict on the record: let the reconciler retry it later.\n if (error instanceof OwnerUnwrapUnavailableError) throw error;\n throw new AgentRecordError(\"decrypt\");\n }\n return openWithDek(record, binding, dek);\n}\n\n/** Agent read-back: `wrapAgent` under KEK_a; no owner-network decrypt anywhere. */\nexport async function openAgentRecordAsAgent(record: StoredAgentRecord, location: { readonly spaceId: string; readonly vaultKey: string }, agentKey: AgentKeyMaterial): Promise<Uint8Array> {\n if (record.hdr.agentDid !== agentKey.agentDid || record.hdr.kid !== agentKey.kid || record.wrapAgent === null) throw new AgentRecordError(\"decrypt\");\n const binding = bindingFor(record, location);\n let dek: Uint8Array;\n try { dek = await gcmOpen(agentKey.kek, record.wrapAgent, binding); } catch { throw new AgentRecordError(\"decrypt\"); }\n return openWithDek(record, binding, dek);\n}\n","import { SHARE_RECORDS_VAULT_PREFIX } from \"./ids.js\";\nimport { OwnerUnwrapUnavailableError, type OwnerNetworkUnwrap, type OwnerNetworkWrap } from \"./agent-record.js\";\n\n/**\n * Storage port of the share index (design C §1, §4). Every key is relative to\n * `sender-history/v2/records/`. The port is structural so share-sdk does not\n * depend on the TinyCloud SDK packages; {@link createTinyCloudShareIndexBackend}\n * adapts a TinyCloud client (node or web SDK) to it.\n */\nexport type ShareDocumentRead =\n | { readonly status: \"ok\"; readonly value: unknown; readonly etag: string }\n | { readonly status: \"not_found\" }\n /** Deterministic corruption (bad envelope, AAD bound elsewhere, undecodable payload). */\n | { readonly status: \"corrupt\"; readonly etag?: string }\n /** Outage or transient failure: never a reason to rebuild. */\n | { readonly status: \"unavailable\" };\n\nexport type ShareRawRead =\n | { readonly status: \"ok\"; readonly bytes: Uint8Array; readonly etag: string }\n | { readonly status: \"not_found\" }\n /** Larger than the `maxBytes` the caller passed: the node refused to send the body, or its length was over. */\n | { readonly status: \"too_large\" }\n | { readonly status: \"unavailable\" };\n\nexport type ShareWriteCondition = { readonly ifMatch: string } | { readonly ifNoneMatch: \"*\" };\n\nexport type ShareWriteResult =\n | { readonly ok: true }\n | { readonly ok: false; readonly code: \"conflict\" | \"outcome_unknown\" | \"busy\" | \"unauthorized\" | \"failed\" }\n /** The etag was refused as malformed (for example weakened to `W/\"…\"` in transit). Never retried; `message` is the SDK's own. */\n | { readonly ok: false; readonly code: \"invalid_etag\"; readonly message: string };\n\nexport type ShareListResult =\n | { readonly status: \"ok\"; readonly keys: readonly string[]; readonly cursor?: string }\n | { readonly status: \"unavailable\" };\n\nexport interface ShareIndexBackend {\n readonly spaceId: string;\n readonly ownerNetworkId: string;\n /** Owner-network vault read with the slice-1 AAD check, from the network (never a replica). */\n readVault(key: string): Promise<ShareDocumentRead>;\n /** Owner-network vault write: a fresh envelope each time; conditional when `condition` is set. */\n writeVault(key: string, value: unknown, condition?: ShareWriteCondition): Promise<ShareWriteResult>;\n /** Delete a record; an absent key counts as success. */\n deleteRecord(key: string): Promise<ShareWriteResult>;\n /** One page of keys under `prefix` (relative, with its trailing slash, or \"\" for all records). */\n listKeys(prefix: string, cursor?: string): Promise<ShareListResult>;\n /**\n * Raw stored bytes and etag (agent records), from the network. With\n * `maxBytes`, a larger value is reported `too_large` and its body is not\n * downloaded (see {@link createTinyCloudShareIndexBackend}).\n */\n readRaw(key: string, maxBytes?: number): Promise<ShareRawRead>;\n writeRaw(key: string, value: Readonly<Record<string, unknown>>, condition: ShareWriteCondition): Promise<ShareWriteResult>;\n readonly ownerWrap: OwnerNetworkWrap;\n /** Owner-network decrypt; absent for Tier W agents, which have no decrypt grant. */\n readonly ownerUnwrap?: OwnerNetworkUnwrap;\n}\n\n/** The vault's classified network read (`readNetworkEncrypted`), as this adapter consumes it. */\nexport interface VaultNetworkRead {\n readonly status: string;\n readonly entry?: { readonly value: unknown; readonly etag?: string };\n}\n\ntype SdkResult<T> = { readonly ok: true; readonly data: T } | { readonly ok: false; readonly error: { readonly code: string; readonly message?: string; readonly meta?: Record<string, unknown> } };\n\n/** The subset of a TinyCloud client the adapter uses (node-sdk `TinyCloudNode` or the web SDK). */\nexport interface TinyCloudShareIndexClient {\n readonly vault: {\n readNetworkEncrypted(key: string, options: { readonly expectAad: true }): Promise<VaultNetworkRead>;\n put(key: string, value: unknown, options?: { readonly ifMatch?: string; readonly ifNoneMatch?: \"*\" }): Promise<SdkResult<unknown>>;\n delete(key: string): Promise<SdkResult<unknown>>;\n };\n readonly kv: {\n /** `maxResponseBytes`: the node refuses (413, `KV_RESPONSE_TOO_LARGE`) a larger value before sending its body. */\n get(key: string, options: { readonly prefix: \"\"; readonly raw: true; readonly source: \"network\"; readonly maxResponseBytes?: number }): Promise<SdkResult<{ readonly data: unknown; readonly headers: { readonly etag?: string } }>>;\n put(key: string, value: unknown, options: { readonly prefix: \"\"; readonly ifMatch?: string; readonly ifNoneMatch?: \"*\" }): Promise<SdkResult<unknown>>;\n list(options: { readonly prefix: string; readonly removePrefix: true; readonly limit: number; readonly cursor?: string; readonly source: \"network\" }): Promise<SdkResult<{ readonly keys: readonly string[]; readonly nextCursor?: string; readonly truncated?: boolean }>>;\n };\n readonly encryption: {\n encryptToNetwork(networkId: string, plaintext: Uint8Array, options: { readonly aad: Uint8Array }): Promise<SdkResult<object>>;\n decryptEnvelope?(envelope: never, proof: { readonly proofs: readonly string[] }, options: { readonly aad: Uint8Array }): Promise<SdkResult<Uint8Array>>;\n };\n}\n\n/** Shown when the SDK reports `INVALID_ETAG` without a message of its own. */\nexport const INVALID_ETAG_MESSAGE = \"etag was weakened in transit; compare-and-swap unavailable through this path\";\n\n/** Map an SDK write error. `invalid_etag` only applies to an `ifMatch` write: another 400 is a plain failure. */\nfunction writeFailure(error: { readonly code: string; readonly message?: string; readonly meta?: Record<string, unknown> }, condition: ShareWriteCondition | undefined): ShareWriteResult {\n const status = typeof error.meta?.status === \"number\" ? error.meta.status : undefined;\n if (error.code === \"KV_PRECONDITION_FAILED\" || error.code === \"ETAG_MISMATCH\" || error.code === \"ALREADY_EXISTS\") return { ok: false, code: \"conflict\" };\n if (condition !== undefined && \"ifMatch\" in condition && (error.code === \"INVALID_ETAG\" || (error.code === \"KV_WRITE_FAILED\" && status === 400))) return { ok: false, code: \"invalid_etag\", message: error.message ?? INVALID_ETAG_MESSAGE };\n if (error.code === \"OUTCOME_UNKNOWN\" || ((error.code === \"NETWORK_ERROR\" || error.code === \"TIMEOUT\") && status === undefined)) return { ok: false, code: \"outcome_unknown\" };\n if (error.code === \"NODE_BUSY\" || error.code === \"REQUEST_TIMEOUT\") return { ok: false, code: \"busy\" };\n if (error.code === \"AUTH_UNAUTHORIZED\" || error.code === \"PERMISSION_DENIED\") return { ok: false, code: \"unauthorized\" };\n return { ok: false, code: \"failed\" };\n}\n\n/** Keys per list page: the node's maximum. */\nconst LIST_PAGE_SIZE = 1000;\n\nfunction bytesOf(data: unknown): Uint8Array | undefined {\n if (data instanceof Uint8Array) return data;\n if (typeof data === \"string\") return new TextEncoder().encode(data);\n if (data !== null && typeof data === \"object\") return new TextEncoder().encode(JSON.stringify(data));\n return undefined;\n}\n\nexport interface TinyCloudShareIndexBackendOptions {\n readonly client: TinyCloudShareIndexClient;\n readonly spaceId: string;\n readonly ownerNetworkId: string;\n /** The decrypt capability proof of the owner session (`{ proofs: [session.delegationCid] }`). Omit for Tier W agents. */\n readonly decryptProof?: () => { readonly proofs: readonly string[] };\n /**\n * The KV prefix every key here sits under: `vault/sender-history/v2/records/`\n * for a client whose KV service has no prefix of its own.\n */\n readonly kvRecordsPrefix?: string;\n}\n\n/** Adapt a TinyCloud client (owner web, owner-key CLI, Tier 2 or Tier W agent) to {@link ShareIndexBackend}. */\nexport function createTinyCloudShareIndexBackend(options: TinyCloudShareIndexBackendOptions): ShareIndexBackend {\n const { client } = options;\n const kvPrefix = options.kvRecordsPrefix ?? `vault/${SHARE_RECORDS_VAULT_PREFIX}`;\n const rawEtag = async (key: string): Promise<string | undefined> => {\n try {\n const raw = await client.kv.get(`${kvPrefix}${key}`, { prefix: \"\", raw: true, source: \"network\" });\n return raw.ok ? raw.data.headers.etag : undefined;\n } catch {\n return undefined;\n }\n };\n const decryptProof = options.decryptProof;\n const decryptEnvelope = client.encryption.decryptEnvelope;\n return {\n spaceId: options.spaceId,\n ownerNetworkId: options.ownerNetworkId,\n async readVault(key) {\n let result: VaultNetworkRead;\n try { result = await client.vault.readNetworkEncrypted(`${SHARE_RECORDS_VAULT_PREFIX}${key}`, { expectAad: true }); } catch { return { status: \"unavailable\" }; }\n if (result.status === \"ok\" && result.entry !== undefined && typeof result.entry.etag === \"string\") return { status: \"ok\", value: result.entry.value, etag: result.entry.etag };\n if (result.status === \"not_found\") return { status: \"not_found\" };\n if (result.status === \"corrupt_envelope\" || result.status === \"invalid_payload\" || result.status === \"aad_mismatch\") {\n const etag = await rawEtag(key);\n return etag === undefined ? { status: \"corrupt\" } : { status: \"corrupt\", etag };\n }\n return { status: \"unavailable\" };\n },\n async writeVault(key, value, condition) {\n try {\n const result = await client.vault.put(`${SHARE_RECORDS_VAULT_PREFIX}${key}`, value, condition ?? {});\n return result.ok ? { ok: true } : writeFailure(result.error, condition);\n } catch {\n return { ok: false, code: \"outcome_unknown\" };\n }\n },\n async deleteRecord(key) {\n try {\n const result = await client.vault.delete(`${SHARE_RECORDS_VAULT_PREFIX}${key}`);\n if (result.ok || result.error.code === \"KEY_NOT_FOUND\" || result.error.code === \"KV_NOT_FOUND\" || result.error.code === \"NOT_FOUND\") return { ok: true };\n return writeFailure(result.error, undefined);\n } catch {\n return { ok: false, code: \"outcome_unknown\" };\n }\n },\n async listKeys(prefix, cursor) {\n try {\n // The node pages only when a limit is sent, and refuses a cursor without one.\n const result = await client.kv.list({ prefix: `${kvPrefix}${prefix}`, removePrefix: true, limit: LIST_PAGE_SIZE, source: \"network\", ...(cursor === undefined ? {} : { cursor }) });\n if (!result.ok) return { status: \"unavailable\" };\n // Keys come back relative to the listed prefix; re-anchor them on `records/`.\n const keys = result.data.keys.map((key) => `${prefix}${key}`);\n return result.data.nextCursor === undefined ? { status: \"ok\", keys } : { status: \"ok\", keys, cursor: result.data.nextCursor };\n } catch {\n return { status: \"unavailable\" };\n }\n },\n async readRaw(key, maxBytes) {\n try {\n // The node accepts values far larger than any record cap, and the SDK's get buffers the whole body. With a cap,\n // the node is asked to refuse a larger value before it sends the body (`x-tinycloud-max-response-bytes`); the\n // body length is checked again here.\n const result = await client.kv.get(`${kvPrefix}${key}`, { prefix: \"\", raw: true, source: \"network\", ...(maxBytes === undefined ? {} : { maxResponseBytes: maxBytes }) });\n if (!result.ok) {\n if (result.error.code === \"KV_NOT_FOUND\" || result.error.code === \"NOT_FOUND\") return { status: \"not_found\" };\n return maxBytes !== undefined && result.error.code === \"KV_RESPONSE_TOO_LARGE\" ? { status: \"too_large\" } : { status: \"unavailable\" };\n }\n const bytes = bytesOf(result.data.data);\n const etag = result.data.headers.etag;\n if (bytes !== undefined && maxBytes !== undefined && bytes.byteLength > maxBytes) return { status: \"too_large\" };\n return bytes === undefined || etag === undefined ? { status: \"unavailable\" } : { status: \"ok\", bytes, etag };\n } catch {\n return { status: \"unavailable\" };\n }\n },\n async writeRaw(key, value, condition) {\n try {\n const result = await client.kv.put(`${kvPrefix}${key}`, value, { prefix: \"\", ...condition });\n return result.ok ? { ok: true } : writeFailure(result.error, condition);\n } catch {\n return { ok: false, code: \"outcome_unknown\" };\n }\n },\n ownerWrap: {\n async wrap(dek, aad) {\n const result = await client.encryption.encryptToNetwork(options.ownerNetworkId, dek, { aad });\n if (!result.ok) throw new Error(\"owner-network wrap failed\");\n return Object.fromEntries(Object.entries(result.data));\n },\n },\n ...(decryptProof === undefined || decryptEnvelope === undefined ? {} : {\n ownerUnwrap: {\n async unwrap(envelope, aad) {\n // `aad` makes the SDK compare the envelope's declared AAD before any decrypt request.\n let result: SdkResult<Uint8Array>;\n try {\n result = await decryptEnvelope.call(client.encryption, envelope as never, decryptProof(), { aad });\n } catch {\n throw new OwnerUnwrapUnavailableError();\n }\n // TRANSPORT_ERROR is an outage; DECRYPT_DENIED, INVALID_INPUT and INVALID_RESPONSE are refusals.\n if (!result.ok) throw result.error.code === \"TRANSPORT_ERROR\" ? new OwnerUnwrapUnavailableError() : new Error(\"owner-network unwrap was refused\");\n return result.data;\n },\n },\n }),\n };\n}\n","import { INVALID_ETAG_MESSAGE, type ShareWriteResult } from \"./backend.js\";\n\n/**\n * The compare-and-swap loop policy shared by the index and the record stores\n * (design C §4, plus the lead's rule for slice 2):\n * - every attempt starts with a fresh network read and re-applies the change,\n * so a lost race (`ETAG_MISMATCH`) and an unknown outcome (`OUTCOME_UNKNOWN`)\n * are both decided from what the node now holds, never by a blind re-put;\n * - `ETAG_MISMATCH` and `NODE_BUSY` back off 50 ms·2ⁿ with jitter, capped at\n * 1 s, for at most 6 attempts;\n * - `INVALID_ETAG` is never retried: the first one throws\n * {@link ShareIndexCasError} with the SDK's own message (an ETag weakened\n * in transit, for example by a CDN, cannot be used for compare-and-swap).\n */\nexport interface CasPolicy {\n readonly maxAttempts: number;\n readonly backoffBaseMs: number;\n readonly backoffCapMs: number;\n readonly sleep: (ms: number) => Promise<void>;\n readonly random: () => number;\n}\n\nexport const DEFAULT_CAS_POLICY: CasPolicy = {\n maxAttempts: 6,\n backoffBaseMs: 50,\n backoffCapMs: 1000,\n sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),\n random: Math.random,\n};\n\nexport type ShareIndexCasErrorCode =\n /** The etag was refused as malformed; compare-and-swap is unavailable through this path. Never retried. */\n | \"INVALID_ETAG\"\n /** Every attempt lost a race or found the node busy. */\n | \"EXHAUSTED\"\n /** The write was refused (authorization, storage) or the read failed. */\n | \"FAILED\";\n\nexport class ShareIndexCasError extends Error {\n constructor(readonly code: ShareIndexCasErrorCode, message: string, readonly key: string, readonly attempts: number) {\n super(message);\n this.name = \"ShareIndexCasError\";\n }\n}\n\n/** One attempt: read, decide, and either finish or report a write result. */\nexport type CasAttempt<T> = { readonly done: T } | { readonly write: ShareWriteResult; readonly onSuccess: () => T };\n\nexport async function runCas<T>(key: string, policy: CasPolicy, attempt: () => Promise<CasAttempt<T>>): Promise<T> {\n for (let attemptNumber = 1; attemptNumber <= policy.maxAttempts; attemptNumber++) {\n const step = await attempt();\n if (\"done\" in step) return step.done;\n const result = step.write;\n if (result.ok) return step.onSuccess();\n if (result.code === \"invalid_etag\") throw new ShareIndexCasError(\"INVALID_ETAG\", result.message || INVALID_ETAG_MESSAGE, key, attemptNumber);\n if (result.code === \"unauthorized\" || result.code === \"failed\") throw new ShareIndexCasError(\"FAILED\", `write of ${key} was refused (${result.code})`, key, attemptNumber);\n // conflict and busy back off; outcome_unknown re-reads at once and decides from the node's state.\n if (result.code !== \"outcome_unknown\" && attemptNumber < policy.maxAttempts) {\n const ceiling = Math.min(policy.backoffCapMs, policy.backoffBaseMs * 2 ** (attemptNumber - 1));\n await policy.sleep(Math.floor(ceiling / 2 + policy.random() * (ceiling / 2)));\n }\n }\n throw new ShareIndexCasError(\"EXHAUSTED\", `compare-and-swap of ${key} did not converge in ${policy.maxAttempts} attempts`, key, policy.maxAttempts);\n}\n","import { canonicalize, computeCid, fromBase64Url, isCanonicalHttpsOrigin, open, toBase64Url } from \"@tinycloud/share-envelope\";\nimport { buildFullLink, checkLinkRecord, linkSignatureV1Schema, openLinkRecord, parseLink, validateLinkHeader, type LinkHeaderV1, type LinkSignatureV1, type ParsedLink } from \"@tinycloud/share-envelope/links\";\nimport type { SenderShareRecord } from \"../history.js\";\nimport type { PublishedShareDeliveryMaterial } from \"../publish.js\";\n\n/**\n * The stored form of a share record in the space (TC-1432 slice 2, cap\n * ruling): each blob is stored once.\n *\n * A Policy/v3 record's `deliveryMaterial.envelope` is exactly what\n * `sealedEnvelope` decrypts to under `envelopeKey` (`publishAddressedShare`\n * seals `canonicalize(envelope)`). It is omitted before an agent record is\n * sealed and rebuilt when needed by {@link openDeliveryEnvelope}, for the\n * verifier and a delivery retry. `sealedEnvelope` stays (the node reopens that\n * exact value and its nonce is random) and so does the session CACAO (it\n * proves the chain). Short links stay verbatim; full links keep their original\n * renderer origin, signed header and signature beside the single sealed body.\n * Details: TC-1739\n *\n * Security-sensitive: the sealed bytes are checked against `shareCid` before\n * they are opened, and the plaintext must be the canonical JSON of the\n * envelope, so a record cannot carry one envelope for display and another for\n * the node.\n */\nexport interface StoredFullShareLink {\n readonly origin: string;\n readonly header: LinkHeaderV1;\n readonly signature: LinkSignatureV1;\n}\nexport type StoredDeliveryMaterial = Omit<PublishedShareDeliveryMaterial, \"envelope\"> & { readonly fullLink?: StoredFullShareLink };\n\n/** A share record as stored at an agent (or migrated) key: {@link SenderShareRecord} without derivable blobs. */\nexport type StoredShareRecord = Omit<SenderShareRecord, \"deliveryMaterial\"> & { readonly deliveryMaterial?: StoredDeliveryMaterial };\n\n/** Required string fields; `fullLink` is optional original signed metadata. Details: TC-1739 */\nexport const STORED_DELIVERY_MATERIAL_KEYS: readonly string[] = [\"shareCid\", \"sealedEnvelope\", \"envelopeKey\"];\n\nexport class DeliveryMaterialError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"DeliveryMaterialError\";\n }\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/** Strict metadata container with the public header/signature validators. Details: TC-1739 */\nexport function checkStoredFullShareLink(value: unknown): StoredFullShareLink {\n if (!isObject(value) || Object.keys(value).length !== 3 || ![\"origin\", \"header\", \"signature\"].every(key => Object.hasOwn(value, key))\n || typeof value.origin !== \"string\" || !isCanonicalHttpsOrigin(value.origin)) throw new DeliveryMaterialError(\"full link metadata is invalid\");\n const header = validateLinkHeader(value.header, { mode: \"signed\" });\n const signature = linkSignatureV1Schema.parse(value.signature);\n if (header.type !== \"share\") throw new DeliveryMaterialError(\"full link is not a share\");\n return { origin: value.origin, header, signature };\n}\n\nfunction sealedParts(material: StoredDeliveryMaterial): { readonly sealed: Uint8Array; readonly key: Uint8Array } {\n let sealed: Uint8Array;\n let key: Uint8Array;\n try {\n sealed = fromBase64Url(material.sealedEnvelope);\n key = fromBase64Url(material.envelopeKey);\n } catch {\n throw new DeliveryMaterialError(\"delivery material is not canonical base64url\");\n }\n if (key.byteLength !== 32) throw new DeliveryMaterialError(\"envelope key must be 32 bytes\");\n return { sealed, key };\n}\n\n/** The signed envelope inside `sealedEnvelope`; throws {@link DeliveryMaterialError} unless it is exactly that. */\nexport async function openDeliveryEnvelope(material: StoredDeliveryMaterial): Promise<Record<string, unknown>> {\n const { sealed, key } = sealedParts(material);\n if (await computeCid(sealed) !== material.shareCid) throw new DeliveryMaterialError(\"sealed envelope does not match shareCid\");\n let text: string;\n let value: unknown;\n try {\n if (material.fullLink === undefined) {\n text = new TextDecoder(\"utf-8\", { fatal: true }).decode(await open(sealed, key));\n value = JSON.parse(text);\n } else {\n const metadata = checkStoredFullShareLink(material.fullLink);\n if (metadata.header.bodyCid !== material.shareCid) throw new DeliveryMaterialError(\"full link names another sealed body\");\n // History verifies the original signed wrapper at issuance; the chain reports actual expiry. Details: TC-1739\n const opened = await openLinkRecord({ header: metadata.header, signature: metadata.signature, body: material.sealedEnvelope }, key, { now: Date.parse(metadata.header.issuedAt) });\n text = new TextDecoder(\"utf-8\", { fatal: true }).decode(opened.plaintext);\n value = opened.value;\n if (typeof opened.value.expiry !== \"string\" || Date.parse(opened.value.expiry) !== Date.parse(metadata.header.expiresAt)) throw new DeliveryMaterialError(\"full link expiry differs from the sealed envelope\");\n }\n } catch (error) {\n if (error instanceof DeliveryMaterialError) throw error;\n throw new DeliveryMaterialError(material.fullLink === undefined ? \"sealed envelope does not open under its key\" : \"original full link is invalid\");\n }\n if (!isObject(value) || canonicalize(value) !== text) throw new DeliveryMaterialError(\"sealed envelope is not canonical JSON\");\n return value;\n}\n\n/**\n * A `v=4` link names its content key and body: a short link by the key `k` and\n * the body CID `c`, a full link by `k` and the record whose body it carries.\n * Either must be exactly this delivery material's key and sealed envelope.\n * Returns the link's form.\n */\nexport function assertLinkBoundToMaterial(link: string, material: StoredDeliveryMaterial): \"short\" | \"full\" {\n const { sealed, key } = sealedParts(material);\n let parsed: ParsedLink;\n try {\n parsed = parseLink(link, { trustedOrigins: [new URL(link).origin] });\n } catch {\n throw new DeliveryMaterialError(\"link is not a v=4 share link\");\n }\n const sameBody = parsed.form === \"short\"\n ? parsed.c === material.shareCid\n : typeof parsed.record === \"object\" && parsed.record !== null && \"body\" in parsed.record && parsed.record.body === toBase64Url(sealed);\n if (!sameBody || !equalBytes(parsed.key, key)) throw new DeliveryMaterialError(\"link is not the link of this delivery material\");\n return parsed.form;\n}\n\n/** Stores the sealed body once and retains the original signed full-link wrapper. Details: TC-1739 */\nexport async function compactShareRecord(record: SenderShareRecord | StoredShareRecord): Promise<StoredShareRecord> {\n const material = record.deliveryMaterial;\n if (material === undefined) return record;\n if (typeof material.shareCid !== \"string\" || typeof material.sealedEnvelope !== \"string\" || typeof material.envelopeKey !== \"string\") throw new DeliveryMaterialError(\"delivery material is incomplete\");\n let fullLink = \"fullLink\" in material ? checkStoredFullShareLink(material.fullLink) : undefined;\n const { link, deliveryMaterial: _material, ...rest } = record;\n let keptLink: string | undefined;\n if (link !== undefined) {\n if (assertLinkBoundToMaterial(link, material) === \"short\") keptLink = link;\n else {\n const parsed = parseLink(link, { trustedOrigins: [new URL(link).origin] });\n if (parsed.form !== \"full\" || !isObject(parsed.record)) throw new DeliveryMaterialError(\"full link record is invalid\");\n const header = validateLinkHeader(parsed.record.header, { mode: \"signed\" });\n const checked = await checkLinkRecord(parsed.record, Date.parse(header.issuedAt));\n if (checked.signature === undefined) throw new DeliveryMaterialError(\"full link signature is missing\");\n const original = checkStoredFullShareLink({ origin: parsed.origin, header: checked.header, signature: checked.signature });\n if (fullLink !== undefined && canonicalize(fullLink) !== canonicalize(original)) throw new DeliveryMaterialError(\"full link metadata differs from the original link\");\n fullLink = original;\n }\n }\n const stored: StoredDeliveryMaterial = { shareCid: material.shareCid, sealedEnvelope: material.sealedEnvelope, envelopeKey: material.envelopeKey, ...(fullLink === undefined ? {} : { fullLink }) };\n const opened = await openDeliveryEnvelope(stored);\n if (\"envelope\" in material && material.envelope !== undefined && canonicalize(opened) !== canonicalize(material.envelope)) throw new DeliveryMaterialError(\"envelope is not the sealed envelope\");\n if (fullLink !== undefined && Date.parse(fullLink.header.expiresAt) !== Date.parse(record.expiresAt)) throw new DeliveryMaterialError(\"full link expiry differs from the record\");\n return { ...rest, ...(keptLink === undefined ? {} : { link: keptLink }), deliveryMaterial: stored };\n}\n\nfunction equalBytes(left: Uint8Array, right: Uint8Array): boolean {\n return left.length === right.length && left.every((byte, index) => byte === right[index]);\n}\n\nfunction recordLink(record: StoredShareRecord, shareOrigins: readonly string[]): string | undefined {\n const material = record.deliveryMaterial;\n if (material?.fullLink === undefined) return record.link;\n const metadata = checkStoredFullShareLink(material.fullLink);\n if (!shareOrigins.includes(metadata.origin)) throw new DeliveryMaterialError(\"full link origin is not trusted\");\n if (Date.parse(metadata.header.expiresAt) !== Date.parse(record.expiresAt)) throw new DeliveryMaterialError(\"full link expiry differs from the record\");\n const full = buildFullLink({ origin: metadata.origin, key: sealedParts(material).key, record: { header: metadata.header, signature: metadata.signature, body: material.sealedEnvelope } });\n if (record.link !== undefined) {\n parseLink(record.link, { trustedOrigins: shareOrigins });\n assertLinkBoundToMaterial(record.link, material);\n }\n return record.link ?? full;\n}\n\n/** Verifies and restores original full-link metadata before owner admission. Details: TC-1739 */\nexport async function restoreShareRecordLink(record: StoredShareRecord, shareOrigins: readonly string[]): Promise<string | undefined> {\n if (record.deliveryMaterial?.fullLink !== undefined) await openDeliveryEnvelope(record.deliveryMaterial);\n return recordLink(record, shareOrigins);\n}\n\n/** Expands stored material; owner admission additionally supplies trusted origins and verifies the chain. Details: TC-1739 */\nexport async function expandShareRecord(record: StoredShareRecord, options: { readonly shareOrigins?: readonly string[] } = {}): Promise<SenderShareRecord> {\n const material = record.deliveryMaterial;\n if (material === undefined) {\n const { deliveryMaterial: _material, ...withoutMaterial } = record;\n return withoutMaterial;\n }\n const envelope = await openDeliveryEnvelope(material);\n const origins = options.shareOrigins ?? (material.fullLink === undefined ? [] : [checkStoredFullShareLink(material.fullLink).origin]);\n const link = recordLink(record, origins);\n return { ...record, ...(link === undefined ? {} : { link }), deliveryMaterial: { ...material, envelope } };\n}\n","import type { SenderShareRecord, SenderShareRecordStorage } from \"../history.js\";\nimport type { AgentKeyMaterial } from \"./agent-key.js\";\nimport { AgentRecordError, MAX_AGENT_RECORD_BYTES, openAgentRecordAsAgent, parseStoredAgentRecord, sealAgentRecord } from \"./agent-record.js\";\nimport type { ShareIndexBackend } from \"./backend.js\";\nimport { DEFAULT_CAS_POLICY, runCas, ShareIndexCasError, type CasPolicy } from \"./cas.js\";\nimport { compactShareRecord, DeliveryMaterialError, expandShareRecord, type StoredShareRecord } from \"./delivery.js\";\nimport { agentIdFromDid, agentRecordKey, agentRecordPrefix, classifyRecordKey, isShareId, SHARE_RECORDS_VAULT_PREFIX } from \"./ids.js\";\n\n/**\n * The space record store (design C §1, §3): canonical share records in the\n * owner's `applications` space. Two layouts behind the same\n * {@link SenderShareRecordStorage} interface:\n * - {@link WebShareRecordStore}: `records/<shareId>`, owner-network vault\n * envelopes (web, owner-key CLI, Tier 2);\n * - {@link AgentShareRecordStore}: `records/agents/<agentId>/<shareId>`,\n * double-wrapped agent records (Tier W). Lists use the explicit prefix with\n * its trailing slash (V3-7).\n * `isShareId` is enforced on every put/get/update/delete. Updates are CAS\n * writes; every write of an agent record draws a fresh DEK and nonces.\n */\n\nfunction assertShareId(shareId: string): void {\n if (!isShareId(shareId)) throw new TypeError(\"share id is invalid\");\n}\n\nfunction isRecordShape(value: unknown): value is SenderShareRecord {\n return value !== null && typeof value === \"object\" && !Array.isArray(value) && \"shareId\" in value && isShareId(value.shareId);\n}\n\nexport class WebShareRecordStore implements SenderShareRecordStorage {\n constructor(private readonly backend: ShareIndexBackend, private readonly cas: CasPolicy = DEFAULT_CAS_POLICY) {}\n\n async put(record: SenderShareRecord): Promise<void> {\n assertShareId(record.shareId);\n const result = await this.backend.writeVault(record.shareId, record);\n if (!result.ok) throw new ShareIndexCasError(result.code === \"invalid_etag\" ? \"INVALID_ETAG\" : \"FAILED\", `record write was refused (${result.code})`, record.shareId, 1);\n }\n\n async update(shareId: string, change: (record: SenderShareRecord) => SenderShareRecord | Promise<SenderShareRecord>): Promise<SenderShareRecord | undefined> {\n assertShareId(shareId);\n return runCas(shareId, this.cas, async () => {\n const read = await this.backend.readVault(shareId);\n if (read.status === \"not_found\") return { done: undefined };\n if (read.status !== \"ok\" || !isRecordShape(read.value)) throw new ShareIndexCasError(\"FAILED\", \"record read failed\", shareId, 1);\n const next = await change(read.value);\n if (next.shareId !== shareId) throw new TypeError(\"a record update cannot change its share id\");\n return { write: await this.backend.writeVault(shareId, next, { ifMatch: read.etag }), onSuccess: () => next };\n });\n }\n\n async get(shareId: string): Promise<SenderShareRecord | undefined> {\n assertShareId(shareId);\n const read = await this.backend.readVault(shareId);\n return read.status === \"ok\" && isRecordShape(read.value) && read.value.shareId === shareId ? read.value : undefined;\n }\n\n async list(): Promise<readonly SenderShareRecord[]> {\n const records: SenderShareRecord[] = [];\n let cursor: string | undefined;\n do {\n const page = await this.backend.listKeys(\"\", cursor);\n if (page.status !== \"ok\") throw new Error(\"record list is unavailable\");\n for (const key of page.keys) {\n const classified = classifyRecordKey(key);\n if (classified.kind !== \"web\") continue;\n const record = await this.get(classified.shareId);\n if (record !== undefined) records.push(record);\n }\n cursor = page.cursor;\n } while (cursor !== undefined);\n return records;\n }\n\n async delete(shareId: string): Promise<void> {\n assertShareId(shareId);\n const result = await this.backend.deleteRecord(shareId);\n if (!result.ok) throw new ShareIndexCasError(\"FAILED\", `record delete was refused (${result.code})`, shareId, 1);\n }\n}\n\nexport interface AgentShareRecordStoreOptions {\n readonly backend: ShareIndexBackend;\n /** DID of the key that signs the agent's invocations and delegations. */\n readonly agentDid: string;\n /** KEK_a from the same key; absent for a remote-signer-only profile (records are then owner-readable only). */\n readonly agentKey?: AgentKeyMaterial;\n readonly cas?: CasPolicy;\n}\n\nexport class AgentShareRecordStore implements SenderShareRecordStorage {\n readonly agentId: string;\n private readonly cas: CasPolicy;\n\n constructor(private readonly options: AgentShareRecordStoreOptions) {\n if (options.agentKey !== undefined && options.agentKey.agentDid !== options.agentDid) throw new TypeError(\"agent key does not belong to the agent DID\");\n this.agentId = agentIdFromDid(options.agentDid);\n this.cas = options.cas ?? DEFAULT_CAS_POLICY;\n }\n\n /** Whether this profile can read its own records back (`kid` is set). */\n get canReadBack(): boolean {\n return this.options.agentKey !== undefined;\n }\n\n private location(shareId: string): { readonly key: string; readonly spaceId: string; readonly vaultKey: string } {\n const key = agentRecordKey(this.agentId, shareId);\n return { key, spaceId: this.options.backend.spaceId, vaultKey: `${SHARE_RECORDS_VAULT_PREFIX}${key}` };\n }\n\n private async seal(record: SenderShareRecord, location: { readonly spaceId: string; readonly vaultKey: string }): Promise<Readonly<Record<string, unknown>>> {\n // Each blob once: a v3 record drops its envelope and inline link (checked to be rebuildable) before sealing.\n let stored: StoredShareRecord;\n try { stored = await compactShareRecord(record); } catch (error) { throw error instanceof DeliveryMaterialError ? new AgentRecordError(\"shape\") : error; }\n const sealed = await sealAgentRecord({\n plaintext: new TextEncoder().encode(JSON.stringify(stored)),\n spaceId: location.spaceId,\n vaultKey: location.vaultKey,\n agentDid: this.options.agentDid,\n ownerNetworkId: this.options.backend.ownerNetworkId,\n ownerWrap: this.options.backend.ownerWrap,\n ...(this.options.agentKey === undefined ? {} : { agentKey: this.options.agentKey }),\n });\n // The owner's reconciler refuses anything over the cap; refuse it here, before it is written.\n if (new TextEncoder().encode(JSON.stringify(sealed)).byteLength > MAX_AGENT_RECORD_BYTES) throw new AgentRecordError(\"size\");\n return sealed as unknown as Readonly<Record<string, unknown>>;\n }\n\n private async open(bytes: Uint8Array, location: { readonly spaceId: string; readonly vaultKey: string }, shareId: string): Promise<SenderShareRecord> {\n const agentKey = this.options.agentKey;\n if (agentKey === undefined) throw new Error(\"this profile cannot read its share records back\");\n const stored = parseStoredAgentRecord(bytes, { agentDid: this.options.agentDid, ownerNetworkId: this.options.backend.ownerNetworkId });\n const plaintext = await openAgentRecordAsAgent(stored, location, agentKey);\n let value: unknown;\n try { value = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(plaintext)); } catch { throw new AgentRecordError(\"shape\"); }\n if (!isRecordShape(value) || value.shareId !== shareId) throw new AgentRecordError(\"shape\");\n // The stored form back to the full record: the envelope reopened from the sealed material.\n try { return await expandShareRecord(value as StoredShareRecord); } catch { throw new AgentRecordError(\"shape\"); }\n }\n\n /** Create or replace; each write is a fresh seal under CAS (If-None-Match `*` for a new key). */\n async put(record: SenderShareRecord): Promise<void> {\n assertShareId(record.shareId);\n const location = this.location(record.shareId);\n await runCas(location.key, this.cas, async () => {\n const read = await this.options.backend.readRaw(location.key);\n if (read.status === \"unavailable\") throw new ShareIndexCasError(\"FAILED\", \"record read failed\", location.key, 1);\n const condition = read.status === \"ok\" ? { ifMatch: read.etag } : { ifNoneMatch: \"*\" as const };\n return { write: await this.options.backend.writeRaw(location.key, await this.seal(record, location), condition), onSuccess: () => undefined };\n });\n }\n\n /** CAS update with the etag from the agent's own read (for example its own `revokedAt`). */\n async update(shareId: string, change: (record: SenderShareRecord) => SenderShareRecord | Promise<SenderShareRecord>): Promise<SenderShareRecord | undefined> {\n assertShareId(shareId);\n const location = this.location(shareId);\n return runCas(location.key, this.cas, async () => {\n const read = await this.options.backend.readRaw(location.key);\n if (read.status === \"not_found\") return { done: undefined };\n if (read.status !== \"ok\") throw new ShareIndexCasError(\"FAILED\", \"record read failed\", location.key, 1);\n const next = await change(await this.open(read.bytes, location, shareId));\n if (next.shareId !== shareId) throw new TypeError(\"a record update cannot change its share id\");\n return { write: await this.options.backend.writeRaw(location.key, await this.seal(next, location), { ifMatch: read.etag }), onSuccess: () => next };\n });\n }\n\n async get(shareId: string): Promise<SenderShareRecord | undefined> {\n assertShareId(shareId);\n const location = this.location(shareId);\n const read = await this.options.backend.readRaw(location.key);\n if (read.status === \"not_found\") return undefined;\n if (read.status !== \"ok\") throw new Error(\"record read failed\");\n return this.open(read.bytes, location, shareId);\n }\n\n /** Lists the explicit `agents/<agentId>/` prefix (trailing slash: `list({})` would be refused). */\n async list(): Promise<readonly SenderShareRecord[]> {\n const prefix = agentRecordPrefix(this.agentId);\n const records: SenderShareRecord[] = [];\n let cursor: string | undefined;\n do {\n const page = await this.options.backend.listKeys(prefix, cursor);\n if (page.status !== \"ok\") throw new Error(\"record list is unavailable\");\n for (const key of page.keys) {\n const classified = classifyRecordKey(key);\n if (classified.kind !== \"agent\" || classified.agentId !== this.agentId) continue;\n try {\n const record = await this.get(classified.shareId);\n if (record !== undefined) records.push(record);\n } catch (error) {\n if (!(error instanceof AgentRecordError)) throw error;\n }\n }\n cursor = page.cursor;\n } while (cursor !== undefined);\n return records;\n }\n\n /** Tier W has no delete grant on its prefix; the owner deletes agent records. */\n async delete(_shareId: string): Promise<void> {\n throw new Error(\"agent share records are deleted by the owner, not the agent\");\n }\n}\n","/**\n * The few artifact helpers the browser bundles need (the pin verifier reads a version path). Kept\n * apart from `artifact.ts`, which is CLI and agent tooling and must stay out of those bundles.\n */\nexport const ARTIFACT_ROOT = \"artifacts\";\n\n/** The artifact and version a stored KV path belongs to, if it is under a version directory. */\nexport function parseArtifactVersionPath(path: string): { readonly artifactId: string; readonly version: number; readonly file: string } | undefined {\n const match = /^artifacts\\/([a-z0-9][a-z0-9_-]{2,62})\\/versions\\/([1-9][0-9]{0,14})\\/([^/]+)$/.exec(path);\n if (match === null) return undefined;\n return { artifactId: match[1]!, version: Number(match[2]), file: match[3]! };\n}\n","import type { SenderShareRecord } from \"../history.js\";\nimport { canonicalAddressSpelling } from \"./agent-record.js\";\nimport { checkStoredFullShareLink, STORED_DELIVERY_MATERIAL_KEYS, type StoredShareRecord } from \"./delivery.js\";\nimport { parseArtifactVersionPath } from \"../artifact-core.js\";\n\n/**\n * Index document schema v1, rows, `project()`, and the versioned agent-record\n * schema (design C §2, §5 check 5). The index holds display fields only:\n * never `link`, `deliveryMaterial`, share keys, unmasked emails or `#k=`.\n * Unknown fields on the header, on agent entries and on rows are kept.\n */\n\nexport const INDEX_SCHEMA_VERSION = 1;\n\nexport type ShareProofState = \"proven\" | \"chained\" | \"unproven\";\n\nexport interface ShareIndexRow {\n /** Display name: ≤120 characters, bidi and control characters stripped. */\n readonly n: string;\n readonly k: \"file\" | \"folder\";\n /** Content kind: the lowercase file extension, when there is a short one. */\n readonly ck?: string;\n readonly ak: \"bearer\" | \"recipientDid\" | \"exactEmail\" | \"emailDomain\";\n /** Masked audience label. */\n readonly al: string;\n readonly a: readonly string[];\n /** Created (`registeredAt`) and expires, ISO 8601. */\n readonly c: string;\n readonly x: string;\n /** Revocation; only `confirmed` (node-confirmed) is sticky. */\n readonly r?: { readonly at: string; readonly confirmed: boolean };\n /**\n * Revoke kind. For agent rows the revoke action is decided at click time\n * from the freshly verified record (§6). Observed on a local node (C5,\n * TC-1432 slice 2):\n * - per share: the owner wallet can revoke an agent's v3 root (`policyRoot`,\n * `enforcementRoot` CIDs from the signed envelope) through the generic\n * `/revoke` route: 200, and an open recipient session's next read gets 403\n * `root-revoked`. Only the JSON root-revocation route answers 403\n * `root-revocation-issuer-invalid` to the owner.\n * - session-wide: revoking the agent's owner→session delegation kills its\n * bearer links and fails new v3 claims at once, but an already-open v3\n * recipient session keeps reading for its lifetime (3,598 s observed).\n * The node liveness check (N3, test B-1) closes that.\n */\n readonly rk: \"policy-v3\" | \"delegation\" | \"none\";\n /** The share's revoke CID; unique across rows. */\n readonly cid?: string;\n /** Every CID this row claims (one row per CID, §5 check 7). */\n readonly cc?: readonly string[];\n /** Provenance, derived from the key path: `web` or `agent:<agentId>`. */\n readonly src: string;\n /** Agent and migrated rows: the proof state of the verified chain. */\n readonly ps?: ShareProofState;\n /** `migrated`: a one-time owner import (shown as \"imported\"); ranks by `ps`, never as a web row. */\n readonly pv?: \"migrated\";\n /** The verified chain has expired (shown as Expired, not rejected). */\n readonly pe?: true;\n /** Needs attention: unreadable record, or `shareId` ≠ key basename. */\n readonly na?: true;\n readonly [unknown: string]: unknown;\n}\n\nexport interface ShareIndexAgentEntry {\n /** The agent DID, once a record with a valid header was seen. */\n readonly did: string | null;\n readonly rows: number;\n readonly rejected: Readonly<Record<string, number>>;\n /** Raw key suffixes (≤64 chars) refused on first sight: never refetched. At most 100. */\n readonly rejectedKeys: readonly string[];\n /** Keys whose `recordV` is newer than this build: skipped until an upgrade. At most 100. */\n readonly newerKeys?: readonly string[];\n readonly newerV?: number;\n readonly paused: false | { readonly reason: \"rejections\" | \"row-cap\" | \"newer\"; readonly at: string };\n readonly firstSeen: string;\n readonly [unknown: string]: unknown;\n}\n\nexport interface ShareIndexDocument {\n readonly v: number;\n readonly ownerDid: string;\n readonly spaceId: string;\n readonly updatedAt: string;\n readonly updatedBy: string;\n readonly archives: readonly { readonly name: string; readonly ids: readonly string[] }[];\n readonly tombstones: readonly { readonly key: string; readonly at: string }[];\n readonly reconcile: { readonly cursor?: string };\n readonly agents: Readonly<Record<string, ShareIndexAgentEntry>>;\n readonly rows: Readonly<Record<string, ShareIndexRow>>;\n readonly [unknown: string]: unknown;\n}\n\nexport interface ShareIndexArchiveDocument {\n readonly v: number;\n readonly rows: Readonly<Record<string, ShareIndexRow>>;\n readonly [unknown: string]: unknown;\n}\n\nexport function emptyIndexDocument(input: { readonly ownerDid: string; readonly spaceId: string; readonly writer: string; readonly now: Date }): ShareIndexDocument {\n return {\n v: INDEX_SCHEMA_VERSION,\n ownerDid: input.ownerDid,\n spaceId: input.spaceId,\n updatedAt: input.now.toISOString(),\n updatedBy: input.writer,\n archives: [],\n tombstones: [],\n reconcile: {},\n agents: {},\n rows: {},\n };\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/**\n * An RFC 3339 UTC time as the SDK and node write it: whole seconds or a fraction (`publishAddressedShare` omits it).\n * It must round-trip: `Date.parse` rolls `2026-02-30`, a non-leap Feb 29 or `24:00:00` over to another instant.\n */\nfunction isIsoTime(value: unknown): value is string {\n const match = typeof value === \"string\" ? /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2})(?:\\.(\\d{1,9}))?Z$/.exec(value) : null;\n const parsed = match === null ? NaN : Date.parse(value as string);\n return Number.isFinite(parsed) && new Date(parsed).toISOString() === `${match![1]}.${(match![2] ?? \"\").padEnd(3, \"0\").slice(0, 3)}Z`;\n}\n\nfunction isRow(value: unknown): value is ShareIndexRow {\n if (!isObject(value)) return false;\n return typeof value.n === \"string\" && (value.k === \"file\" || value.k === \"folder\")\n && typeof value.ak === \"string\" && typeof value.al === \"string\"\n && Array.isArray(value.a) && value.a.every((item) => typeof item === \"string\")\n && typeof value.c === \"string\" && typeof value.x === \"string\"\n && (value.r === undefined || (isObject(value.r) && typeof value.r.at === \"string\" && typeof value.r.confirmed === \"boolean\"))\n && typeof value.rk === \"string\" && (value.cid === undefined || typeof value.cid === \"string\")\n && (value.cc === undefined || (Array.isArray(value.cc) && value.cc.every((item) => typeof item === \"string\")))\n && typeof value.src === \"string\";\n}\n\nfunction isAgentEntry(value: unknown): value is ShareIndexAgentEntry {\n return isObject(value) && (value.did === null || typeof value.did === \"string\") && Number.isSafeInteger(value.rows)\n && isObject(value.rejected) && Object.values(value.rejected).every((count) => Number.isSafeInteger(count))\n && Array.isArray(value.rejectedKeys) && value.rejectedKeys.every((item) => typeof item === \"string\")\n && (value.newerKeys === undefined || (Array.isArray(value.newerKeys) && value.newerKeys.every((item) => typeof item === \"string\")))\n && (value.paused === false || (isObject(value.paused) && typeof value.paused.reason === \"string\" && typeof value.paused.at === \"string\"))\n && typeof value.firstSeen === \"string\";\n}\n\nexport type ParsedIndexDocument =\n | { readonly status: \"ok\"; readonly doc: ShareIndexDocument }\n /** A higher `v`: render read-only, never write. */\n | { readonly status: \"newer\"; readonly v: number }\n /** Decrypted, but not a valid document: deterministic corruption. */\n | { readonly status: \"invalid\" };\n\nexport function parseIndexDocument(value: unknown): ParsedIndexDocument {\n if (!isObject(value) || !Number.isSafeInteger(value.v)) return { status: \"invalid\" };\n if ((value.v as number) > INDEX_SCHEMA_VERSION) return { status: \"newer\", v: value.v as number };\n if (value.v !== INDEX_SCHEMA_VERSION || typeof value.ownerDid !== \"string\" || typeof value.spaceId !== \"string\" || typeof value.updatedAt !== \"string\" || typeof value.updatedBy !== \"string\") return { status: \"invalid\" };\n if (!Array.isArray(value.archives) || !value.archives.every((item) => isObject(item) && typeof item.name === \"string\" && Array.isArray(item.ids) && item.ids.every((id) => typeof id === \"string\"))) return { status: \"invalid\" };\n if (!Array.isArray(value.tombstones) || !value.tombstones.every((item) => isObject(item) && typeof item.key === \"string\" && typeof item.at === \"string\")) return { status: \"invalid\" };\n if (!isObject(value.reconcile) || (value.reconcile.cursor !== undefined && typeof value.reconcile.cursor !== \"string\")) return { status: \"invalid\" };\n if (!isObject(value.agents) || !Object.values(value.agents).every(isAgentEntry)) return { status: \"invalid\" };\n if (!isObject(value.rows) || !Object.values(value.rows).every(isRow)) return { status: \"invalid\" };\n return { status: \"ok\", doc: value as unknown as ShareIndexDocument };\n}\n\nexport function parseArchiveDocument(value: unknown): ShareIndexArchiveDocument | undefined {\n if (!isObject(value) || value.v !== INDEX_SCHEMA_VERSION || !isObject(value.rows) || !Object.values(value.rows).every(isRow)) return undefined;\n return value as unknown as ShareIndexArchiveDocument;\n}\n\n// ---------------------------------------------------------------------------\n// project(): the display-only row of a record.\n\nconst UNSAFE_TEXT = /[\\u0000-\\u001f\\u007f-\\u009f\\u061c\\u200b-\\u200f\\u2028-\\u202e\\u2060-\\u206f\\ufeff\\ufff9-\\ufffb]/g;\nexport const MAX_ROW_NAME = 120;\n\n/** Strip bidi/control/format characters and cap at 120 code points. */\nexport function displayName(value: unknown, fallback: string): string {\n const cleaned = typeof value === \"string\" ? [...value.replace(UNSAFE_TEXT, \"\").trim()].slice(0, MAX_ROW_NAME).join(\"\") : \"\";\n return cleaned.length > 0 ? cleaned : fallback;\n}\n\nfunction maskedAudience(matcher: SenderShareRecord[\"recipientMatcher\"]): Pick<ShareIndexRow, \"ak\" | \"al\"> {\n if (matcher.kind === \"exactEmail\") {\n const at = matcher.value.lastIndexOf(\"@\");\n const domain = at < 0 ? \"\" : matcher.value.slice(at + 1);\n return { ak: \"exactEmail\", al: `${displayName(matcher.value.slice(0, 1), \"?\")}…@${displayName(domain, \"?\")}` };\n }\n if (matcher.kind === \"emailDomain\") return { ak: \"emailDomain\", al: `@${displayName(matcher.value, \"?\")}` };\n if (matcher.kind === \"recipientDid\") {\n const did = displayName(matcher.value, \"did\");\n return { ak: \"recipientDid\", al: did.length > 24 ? `${did.slice(0, 16)}…${did.slice(-4)}` : did };\n }\n return { ak: \"bearer\", al: \"Anyone with the link\" };\n}\n\n/** The CIDs a record names: one row per CID across all of them. */\nexport function recordCids(record: Pick<SenderShareRecord, \"registrationCid\" | \"policyCid\" | \"ownerDelegationCid\" | \"enforcementDelegationCid\">): string[] {\n return [record.registrationCid, record.policyCid, record.ownerDelegationCid, record.enforcementDelegationCid]\n .filter((value, index, all): value is string => typeof value === \"string\" && value.length > 0 && all.indexOf(value) === index);\n}\n\nexport function revokeKind(record: StoredShareRecord): ShareIndexRow[\"rk\"] {\n if (record.targetKind !== undefined && record.targetKind !== \"bearer\" && record.policyCid !== undefined && record.enforcementDelegationCid !== undefined) return \"policy-v3\";\n return record.enforcementDelegationCid === undefined ? \"none\" : \"delegation\";\n}\n\n/**\n * The display-only projection of a record. `claims` overrides the CIDs the\n * row may claim (agent rows claim only what their chain verified).\n */\nexport function project(record: StoredShareRecord, input: { readonly key: string; readonly src: string; readonly claims?: readonly string[]; readonly proof?: { readonly state: ShareProofState; readonly expired: boolean } }): ShareIndexRow {\n const basename = input.key.slice(input.key.lastIndexOf(\"/\") + 1);\n const extension = /\\.([a-z0-9]{1,10})$/i.exec(typeof record.filename === \"string\" ? record.filename : \"\")?.[1]?.toLowerCase();\n const claims = input.claims ?? recordCids(record);\n return {\n n: displayName(record.filename, \"Untitled share\"),\n k: record.resource.kind === \"prefix\" ? \"folder\" : \"file\",\n ...(extension === undefined ? {} : { ck: extension }),\n ...maskedAudience(record.recipientMatcher),\n a: [...record.actions],\n c: record.registeredAt,\n x: record.expiresAt,\n ...(record.revokedAt === undefined ? {} : { r: { at: record.revokedAt, confirmed: false } }),\n rk: revokeKind(record),\n ...(record.enforcementDelegationCid !== undefined && claims.includes(record.enforcementDelegationCid) ? { cid: record.enforcementDelegationCid } : {}),\n ...(claims.length === 0 ? {} : { cc: [...claims] }),\n src: input.src,\n ...(input.proof === undefined ? {} : { ps: input.proof.state, ...(input.proof.expired ? { pe: true as const } : {}) }),\n ...(record.provenance === \"migrated\" ? { pv: \"migrated\" as const } : {}),\n ...(record.shareId === basename ? {} : { na: true as const }),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Agent record schema, versioned by `recordV` (§5 check 5).\n\nexport const SHARE_ACTIONS: readonly string[] = [\"tinycloud.kv/get\", \"tinycloud.kv/list\", \"tinycloud.kv/metadata\", \"tinycloud.kv/put\"];\n/** Share resource prefixes: native bearer sources and Policy/v3 addressed sources. */\nexport const SHARE_RESOURCE_PREFIXES: readonly string[] = [\"xyz.tinycloud.share/shares/\", \"shares/\"];\n\nconst REQUIRED_V1 = [\"shareId\", \"target\", \"resource\", \"actions\", \"recipientMatcher\", \"registeredAt\", \"expiresAt\"];\nconst OPTIONAL_V1 = [\"registrationCid\", \"policyCid\", \"ownerDelegationCid\", \"enforcementDelegationCid\", \"shareKeyDid\", \"ownerDid\", \"enforcerDid\", \"targetKind\", \"revokedAt\", \"envelopeCid\", \"shareCid\", \"link\", \"filename\", \"deliveryMaterial\", \"deliveredRecipients\", \"proofs\", \"provenance\"];\nconst PROOF_STRING_FIELDS = [\"session\", \"link\", \"ownerPolicy\", \"ownerDelegation\"];\nconst PROOF_OBJECT_FIELDS = [\"enforcementDelegation\", \"registration\"];\n/** Allowed fields per `recordV`: an unknown field at a known `recordV` is rejected. */\nconst FIELDS_BY_RECORD_V: Readonly<Record<number, { readonly required: readonly string[]; readonly optional: readonly string[] }>> = {\n 1: { required: REQUIRED_V1, optional: OPTIONAL_V1 },\n};\n\n/** Canonical share paths and exact artifact version files use the existing path checks. Details: TC-1739 */\nexport function isShareResourcePath(path: unknown): path is string {\n if (typeof path !== \"string\" || path.length === 0 || path.length > 1024 || /[\\\\%\\u0000-\\u001f]/.test(path)) return false;\n if (!SHARE_RESOURCE_PREFIXES.some((prefix) => path.startsWith(prefix) && path.length > prefix.length) && parseArtifactVersionPath(path) === undefined) return false;\n return path.split(\"/\").every((segment, index, all) => (segment !== \"\" || index === all.length - 1) && segment !== \".\" && segment !== \"..\");\n}\n\nexport interface AgentRecordSchemaContext {\n readonly recordV: number;\n readonly shareId: string;\n readonly accountOwnerDid: string;\n /** `hdr.agentDid` for agent records; \"\" for migrated records, which have no agent binding. */\n readonly agentDid: string;\n /**\n * `agent`: a record in `records/agents/<id>/`, which may never claim a\n * provenance. `migrated`: an owner-layout record that must claim\n * `provenance: \"migrated\"` (one-time owner import).\n */\n readonly source: \"agent\" | \"migrated\";\n}\n\n/**\n * Whether `spaceId` (`tinycloud:pkh:eip155:<chain>:<address>:<name>`) is a\n * space of the account `ownerDid` (`did:pkh:eip155:<chain>:<address>`),\n * whatever its name: the CLI keeps share content in `default` while the\n * records live in `applications`. Address spelling is ignored.\n */\nexport function isSpaceOwnedBy(spaceId: string, ownerDid: string): boolean {\n const space = /^tinycloud:pkh:eip155:([1-9]\\d*):(0x[0-9a-fA-F]{40}):[A-Za-z0-9_.-]+$/.exec(spaceId);\n const owner = /^did:pkh:eip155:([1-9]\\d*):(0x[0-9a-fA-F]{40})$/.exec(ownerDid);\n return space !== null && owner !== null && space[1] === owner[1] && space[2]!.toLowerCase() === owner[2]!.toLowerCase();\n}\n\n/** `registeredAt` may sit at most this far from the chain's signed issuance time (M2). */\nexport const REGISTERED_AT_SKEW_MS = 24 * 60 * 60 * 1000;\n/** Clock skew tolerated for a `registeredAt` slightly in the future. */\nexport const FUTURE_SKEW_MS = 5 * 60 * 1000;\n\n/**\n * `registeredAt` against signed times from the verified chain, never against\n * when the owner happens to look: inside `[earliest, latest]` (already\n * widened by {@link REGISTERED_AT_SKEW_MS} where the bound is an issuance\n * time) and not in the future.\n */\nexport function registeredAtFits(registeredAt: string, window: { readonly earliest?: number; readonly latest?: number }, now: Date): boolean {\n const at = Date.parse(registeredAt);\n return Number.isFinite(at) && at <= now.getTime() + FUTURE_SKEW_MS && (window.earliest === undefined || at >= window.earliest) && (window.latest === undefined || at <= window.latest);\n}\n\n/** A record refused by the schema. `provenance`: an agent-subtree record claiming `migrated`. */\nexport class ShareRecordSchemaError extends Error {\n constructor(readonly reason: \"schema\" | \"provenance\") {\n super(`share record schema: ${reason}`);\n this.name = \"ShareRecordSchemaError\";\n }\n}\n\n/** Whether a link embeds the sealed record: the full form (`/s/full#v=4&k=…&r=…`) or an inline payload (`p=`). */\nfunction carriesSealedRecord(link: string): boolean {\n try {\n const url = new URL(link);\n const fragment = new URLSearchParams(url.hash.slice(1));\n return url.pathname === \"/s/full\" || fragment.has(\"r\") || fragment.has(\"p\");\n } catch {\n return false;\n }\n}\n\n/** Throws {@link ShareRecordSchemaError} when the decrypted value fails the schema. */\nexport function checkAgentRecordSchema(value: unknown, context: AgentRecordSchemaContext): StoredShareRecord {\n const fail = (): never => { throw new ShareRecordSchemaError(\"schema\"); };\n const fields = FIELDS_BY_RECORD_V[context.recordV];\n if (fields === undefined || !isObject(value)) return fail();\n const keys = Object.keys(value);\n if (!fields.required.every((key) => keys.includes(key)) || !keys.every((key) => fields.required.includes(key) || fields.optional.includes(key))) return fail();\n const record = value as Record<string, unknown>;\n if (context.source === \"agent\" && record.provenance === \"migrated\") throw new ShareRecordSchemaError(\"provenance\");\n if (context.source === \"agent\" ? record.provenance !== undefined : record.provenance !== \"migrated\") return fail();\n if (record.shareId !== context.shareId) return fail();\n const target = record.target;\n // `historyRecordForPublishedShare` keeps the publication's `target.kind`.\n const targetKeys = Object.keys(target ?? {});\n if (!isObject(target) || !targetKeys.every((key) => [\"origin\", \"nodeAudience\", \"spaceId\", \"kind\"].includes(key)) || typeof target.origin !== \"string\" || typeof target.nodeAudience !== \"string\" || typeof target.spaceId !== \"string\"\n || (target.kind !== undefined && (typeof target.kind !== \"string\" || ![\"bearer\", \"recipientDid\", \"email\", \"emailDomain\"].includes(target.kind)))) return fail();\n // Content may sit in any space of the account owner (the CLI uses `default`, records live in `applications`).\n if (!isSpaceOwnedBy(target.spaceId as string, context.accountOwnerDid)) return fail();\n const resource = record.resource;\n if (!isObject(resource) || Object.keys(resource).length !== 2 || (resource.kind !== \"exact\" && resource.kind !== \"prefix\") || !isShareResourcePath(resource.path)) return fail();\n if (!Array.isArray(record.actions) || record.actions.length === 0 || new Set(record.actions).size !== record.actions.length || !record.actions.every((action) => typeof action === \"string\" && SHARE_ACTIONS.includes(action))) return fail();\n const artifact = parseArtifactVersionPath(resource.path) !== undefined;\n if (artifact && (resource.kind !== \"exact\" || record.actions.some(action => action !== \"tinycloud.kv/get\" && action !== \"tinycloud.kv/metadata\"))) return fail();\n const matcher = record.recipientMatcher;\n if (!isObject(matcher) || !(matcher.kind === \"bearer\" ? Object.keys(matcher).length === 1 : [\"exactEmail\", \"emailDomain\", \"recipientDid\"].includes(matcher.kind as string) && Object.keys(matcher).length === 2 && typeof matcher.value === \"string\")) return fail();\n if (!isIsoTime(record.registeredAt) || !isIsoTime(record.expiresAt) || Date.parse(record.registeredAt) >= Date.parse(record.expiresAt)) return fail();\n for (const key of [\"registrationCid\", \"policyCid\", \"ownerDelegationCid\", \"enforcementDelegationCid\", \"envelopeCid\", \"shareCid\"]) {\n if (record[key] !== undefined && (typeof record[key] !== \"string\" || !/^[a-z0-9]{8,128}$/.test(record[key] as string))) return fail();\n }\n for (const key of [\"shareKeyDid\", \"enforcerDid\", \"ownerDid\"]) {\n if (record[key] !== undefined && (typeof record[key] !== \"string\" || !(record[key] as string).startsWith(\"did:\"))) return fail();\n }\n // CLI Policy/v3 records name the policy owner, which is the agent session key. A\n // migrated record's earlier session key is bound by its chain (the v3 verifier\n // requires ownerDid == the signed policy owner).\n if (record.ownerDid !== undefined && canonicalAddressSpelling(record.ownerDid as string) !== canonicalAddressSpelling(context.accountOwnerDid) && record.ownerDid !== context.agentDid\n && !(context.source === \"migrated\" && (record.ownerDid as string).startsWith(\"did:key:\"))) return fail();\n if (record.targetKind !== undefined && ![\"bearer\", \"recipientDid\", \"email\", \"emailDomain\"].includes(record.targetKind as string)) return fail();\n if (record.revokedAt !== undefined && !isIsoTime(record.revokedAt)) return fail();\n if (record.link !== undefined && typeof record.link !== \"string\") return fail();\n if (record.filename !== undefined && (typeof record.filename !== \"string\" || record.filename.length > 512)) return fail();\n // Each blob once (stored form, `delivery.ts`): a Policy/v3 record keeps the sealed envelope and its key, never\n // the envelope it decrypts to. Its `link` is the short link the sender printed, checked against the sealed\n // material when the record is accepted. A full link carries the sealed record and the key in its fragment, so a\n // record that stores one beside its delivery material is refused.\n if (record.deliveryMaterial !== undefined) {\n const material = record.deliveryMaterial;\n if (!isObject(material) || !STORED_DELIVERY_MATERIAL_KEYS.every((key) => typeof material[key] === \"string\")\n || Object.keys(material).some(key => !STORED_DELIVERY_MATERIAL_KEYS.includes(key) && key !== \"fullLink\")) return fail();\n if (Object.hasOwn(material, \"fullLink\")) {\n try { checkStoredFullShareLink(material.fullLink); } catch { return fail(); }\n }\n if (typeof record.link === \"string\" && carriesSealedRecord(record.link)) return fail();\n }\n if (record.deliveredRecipients !== undefined && (!Array.isArray(record.deliveredRecipients) || !record.deliveredRecipients.every((item) => typeof item === \"string\"))) return fail();\n if (record.proofs !== undefined) {\n const proofs = record.proofs;\n if (!isObject(proofs) || !Object.keys(proofs).every((key) => PROOF_STRING_FIELDS.includes(key) ? typeof proofs[key] === \"string\" : PROOF_OBJECT_FIELDS.includes(key) && isObject(proofs[key]))) return fail();\n }\n if (artifact) {\n const proofs = record.proofs;\n if (isObject(proofs) && proofs.ownerPolicy !== undefined) return fail();\n if (record.deliveryMaterial !== undefined) {\n if (record.targetKind === undefined || record.targetKind === \"bearer\" || (isObject(proofs) && proofs.link !== undefined)) return fail();\n } else if (record.targetKind !== undefined && record.targetKind !== \"bearer\") return fail();\n }\n return record as unknown as StoredShareRecord;\n}\n","import type { ShareIndexRow } from \"./schema.js\";\n\n/**\n * Who owns a CID (design C §5 check 7, C2/C3): web > proven > chained >\n * unproven, whatever the arrival order. A later higher claim displaces every\n * admitted lower row it collides with, in the same CAS; a lower or equal\n * claim never displaces anything, and `unproven` never displaces anything.\n *\n * A `migrated` row (one-time owner import) sits at an owner-layout key but\n * ranks by its verified proof state, never as a web row, and a migrated claim\n * never displaces a row whose revocation the node confirmed.\n */\nconst RANK: Readonly<Record<string, number>> = { unproven: 0, chained: 1, proven: 2, web: 3 };\n\nfunction isWebRow(row: Pick<ShareIndexRow, \"src\" | \"pv\">): boolean {\n return row.src === \"web\" && row.pv !== \"migrated\";\n}\n\nexport function claimRank(row: Pick<ShareIndexRow, \"src\" | \"ps\" | \"pv\">): number {\n if (isWebRow(row)) return RANK.web!;\n return RANK[row.ps ?? \"unproven\"] ?? 0;\n}\n\nexport type ClaimDecision =\n | { readonly admit: true; readonly displaced: readonly string[] }\n | { readonly admit: false; readonly heldBy: string };\n\n/**\n * Decide a new claim `row` at `key` against the rows already in `rows`.\n * Collisions are rows (other than `key` itself) that claim any CID in common.\n * Web rows never displace other web rows (both are owner-written).\n */\nexport function decideClaim(rows: Readonly<Record<string, ShareIndexRow>>, key: string, row: ShareIndexRow): ClaimDecision {\n const claims = row.cc ?? [];\n if (claims.length === 0) return { admit: true, displaced: [] };\n const rank = claimRank(row);\n const displaced: string[] = [];\n for (const [otherKey, other] of Object.entries(rows)) {\n if (otherKey === key || other.cc === undefined || !other.cc.some((cid) => claims.includes(cid))) continue;\n if (isWebRow(row) && isWebRow(other)) continue;\n if (rank <= claimRank(other) || (row.pv === \"migrated\" && other.r?.confirmed === true)) return { admit: false, heldBy: otherKey };\n displaced.push(otherKey);\n }\n return { admit: true, displaced };\n}\n","import { blake3 } from \"@noble/hashes/blake3\";\nimport { computeCid, fromBase64Url, shareEnvelopeV3Schema } from \"@tinycloud/share-envelope\";\nimport { verifyEnvelopeV3At } from \"./policy-v3.js\";\nimport { CID } from \"multiformats/cid\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\nimport { openDeliveryEnvelope, type StoredShareRecord } from \"../delivery.js\";\nimport { checkRegistrationReceipt, type CheckedRegistration } from \"./registration.js\";\nimport { canonicalAddressSpelling } from \"../agent-record.js\";\nimport { REGISTERED_AT_SKEW_MS, type ShareProofState } from \"../schema.js\";\nimport type { Attenuation } from \"./attenuation.js\";\nimport { verifyPolicyEnforcementDelegation } from \"./enforcement-delegation.js\";\nimport { NOT_BEFORE_SKEW_MS, verifyOwnerSessionDelegation, type SiweCacaoParser } from \"./session.js\";\nimport { parseSignedUcan, principalOf } from \"./ucan.js\";\n\n/**\n * CID ownership by proof (design C §5 check 7, C1–C4). Everything is checked\n * from the signed bytes the record carries; nothing is fetched.\n *\n * - `proven`: the full chain verifies to the account owner and the leaf\n * issuer (the policy owner for Policy/v3) is `hdr.agentDid`.\n * - `chained`: the full chain verifies to the account owner through another key.\n * - `unproven`: the leaf verifies but the owner→session CACAO is absent.\n * - `expired` is reported next to the state: a chain that verifies but has\n * expired is admitted as Expired, not rejected.\n * - anything else: `{ ok: false }` (reason `proof`).\n *\n * Supported chains: native bearer links (`proofs.link` + `proofs.session`),\n * Policy/v3 addressed shares (the envelope opened from\n * `deliveryMaterial.sealedEnvelope`, bound to `shareCid`, + `proofs.session`)\n * and Policy/v2 owner-policy shares (`proofs.ownerPolicy`, `ownerDelegation`,\n * `enforcementDelegation`, optional `registration`).\n *\n * What revocation achieves today (local node, C5): the owner wallet's generic\n * `/revoke` of a verified v3 root CID ends that share at once, open recipient\n * sessions included (403 `root-revoked`); only the JSON root-revocation route\n * refuses the owner (403 `root-revocation-issuer-invalid`). Revoking the\n * verified session CACAO kills the session's bearer links and new v3 claims\n * at once, but an already-open v3 recipient session keeps reading for its\n * lifetime (3,598 s observed) until the node liveness check (N3, test B-1).\n * Migrated records are verified with no agent binding, so they are never\n * `proven`.\n */\nexport type ChainVerdict =\n | {\n readonly ok: true;\n readonly state: ShareProofState;\n readonly expired: boolean;\n readonly claims: readonly string[];\n /**\n * Where `registeredAt` may lie, from signed times in the chain (epoch ms):\n * a signed issuance time ± {@link REGISTERED_AT_SKEW_MS} when the chain\n * has one (link `nbf`, the v3 binding's `issuedAt`, the node's v2\n * `registeredAt`); otherwise the session's signed `Issued At` as the\n * earliest and the leaf's expiry as the latest.\n */\n readonly issued: { readonly earliest?: number; readonly latest?: number };\n }\n | { readonly ok: false; readonly detail: string };\n\n/** The node registration key for a node audience, from the share public config. */\nexport interface ShareRegistrationKey {\n readonly kid: string;\n /** Raw 32-byte Ed25519 key, or its 34-byte did:key multicodec form. */\n readonly publicKey: Uint8Array;\n}\n\nexport interface ChainContext {\n readonly accountOwnerDid: string;\n /** `hdr.agentDid`, already bound to the path by `derive(agentDid) == agentId`. */\n readonly agentDid: string;\n readonly now: Date;\n readonly parseSiweCacao: SiweCacaoParser;\n /** Registration key by `target.nodeAudience`; absent ⇒ `registrationCid` is not claimed. */\n readonly registrationKey?: (nodeAudience: string) => ShareRegistrationKey | undefined;\n}\n\nclass ProofFailure extends Error {}\n\nfunction fail(detail: string): never {\n throw new ProofFailure(detail);\n}\n\n/** CID (raw, blake3) of a base64url DAG-CBOR CACAO's exact bytes. */\nfunction cacaoCid(authorization: string): string {\n return CID.createV1(0x55, createDigest(0x1e, blake3(fromBase64Url(authorization.replace(/=+$/, \"\"))))).toString();\n}\n\nfunction kvResource(record: StoredShareRecord): string {\n return `${record.target.spaceId}/kv/${record.resource.path}`;\n}\n\nfunction sameAttenuationResources(attenuation: Attenuation, resources: readonly string[]): boolean {\n const keys = Object.keys(attenuation).map(canonicalAddressSpelling).sort();\n const expected = resources.map(canonicalAddressSpelling).sort();\n return keys.length === expected.length && keys.every((key, index) => key === expected[index]);\n}\n\nfunction around(signedMs: number): { readonly earliest: number; readonly latest: number } {\n return { earliest: signedMs - REGISTERED_AT_SKEW_MS, latest: signedMs + REGISTERED_AT_SKEW_MS };\n}\n\nasync function bearerChain(record: StoredShareRecord, link: string, context: ChainContext): Promise<ChainVerdict> {\n if (record.enforcementDelegationCid === undefined) fail(\"bearer record names no link delegation\");\n const leaf = parseSignedUcan(link, record.enforcementDelegationCid);\n const resource = kvResource(record);\n if (!sameAttenuationResources(leaf.attenuation, [resource]) || !Object.keys(Object.values(leaf.attenuation)[0]!).every((ability) => record.actions.includes(ability as never))) fail(\"link delegation is not for the record's resource\");\n if (leaf.notBefore !== undefined && leaf.notBefore * 1000 > context.now.getTime() + NOT_BEFORE_SKEW_MS) fail(\"link delegation is not yet valid\");\n if (leaf.proofs.length !== 1) fail(\"link delegation must have exactly one parent\");\n const leafExpired = leaf.expiresAt * 1000 <= context.now.getTime();\n const claims = [leaf.cid];\n // WASM-issued link delegations carry no `nbf`; then the session's signed `Issued At` and the link's expiry bound it.\n const signedIssue = leaf.notBefore === undefined ? undefined : around(leaf.notBefore * 1000);\n const session = record.proofs?.session;\n if (session === undefined) return { ok: true, state: \"unproven\", expired: leafExpired, claims, issued: signedIssue ?? { latest: leaf.expiresAt * 1000 } };\n // prf ∋ parent CID: the CACAO must be exactly the leaf's parent.\n const parent = await verifyOwnerSessionDelegation({ authorization: session, expectedCid: leaf.proofs[0]!, accountOwnerDid: context.accountOwnerDid, childIssuer: leaf.issuer, childAttenuation: leaf.attenuation, now: context.now, parse: context.parseSiweCacao });\n const issued = signedIssue ?? { ...(parent.issuedAt === undefined ? {} : { earliest: parent.issuedAt - REGISTERED_AT_SKEW_MS }), latest: leaf.expiresAt * 1000 };\n return { ok: true, state: leaf.issuer === principalOf(context.agentDid) ? \"proven\" : \"chained\", expired: leafExpired || parent.time === \"expired\", claims, issued };\n}\n\nasync function policyV3Chain(record: StoredShareRecord, envelopeValue: unknown, context: ChainContext): Promise<ChainVerdict> {\n const parsed = shareEnvelopeV3Schema.safeParse(envelopeValue);\n if (!parsed.success) fail(\"Policy/v3 envelope is malformed\");\n const envelope = parsed.data;\n const ownerDid = envelope.policy.ownerDid;\n const binding = envelope.attestedEnforcerBinding;\n // Validity apart from time, judged inside the binding's own window; expiry is reported below.\n if (!await verifyEnvelopeV3At(envelope, ownerDid, Date.parse(binding.issuedAt))) fail(\"Policy/v3 chain does not verify\");\n if (envelope.policyCid !== record.policyCid || envelope.policyRoot.cid !== record.ownerDelegationCid || envelope.enforcementRoot.cid !== record.enforcementDelegationCid || envelope.shareId !== record.shareId\n || canonicalAddressSpelling(envelope.target.spaceId) !== canonicalAddressSpelling(record.target.spaceId) || envelope.resource.kind !== record.resource.kind || envelope.resource.path !== record.resource.path\n || (record.ownerDid !== undefined && record.ownerDid !== ownerDid)) fail(\"Policy/v3 chain is not this record's\");\n const root = parseSignedUcan(envelope.policyRoot.authorization, envelope.policyRoot.cid);\n const expiry = Math.min(Date.parse(binding.expiresAt), root.expiresAt * 1000, Date.parse(envelope.expiry));\n const expired = expiry <= context.now.getTime();\n const claims = [envelope.policyCid, envelope.policyRoot.cid, envelope.enforcementRoot.cid];\n const session = record.proofs?.session;\n const issued = around(Date.parse(binding.issuedAt));\n if (session === undefined) return { ok: true, state: \"unproven\", expired, claims, issued };\n // Roots are proofless (the node checks owner authority itself), so the CACAO is bound by audience, issuer and attenuation.\n const parent = await verifyOwnerSessionDelegation({ authorization: session, expectedCid: cacaoCid(session), accountOwnerDid: context.accountOwnerDid, childIssuer: root.issuer, childAttenuation: root.attenuation, now: context.now, parse: context.parseSiweCacao });\n return { ok: true, state: principalOf(ownerDid) === principalOf(context.agentDid) ? \"proven\" : \"chained\", expired: expired || parent.time === \"expired\", claims, issued };\n}\n\nasync function ownerPolicyV2Chain(record: StoredShareRecord, context: ChainContext): Promise<ChainVerdict> {\n const proofs = record.proofs!;\n if (proofs.ownerDelegation === undefined || proofs.enforcementDelegation === undefined || record.policyCid === undefined || record.ownerDelegationCid === undefined || record.enforcementDelegationCid === undefined) fail(\"Policy/v2 chain is incomplete\");\n const policyBytes = fromBase64Url(proofs.ownerPolicy!);\n if (await computeCid(policyBytes) !== record.policyCid) fail(\"Policy/v2 policy bytes do not match policyCid\");\n let envelope: { readonly domain?: unknown; readonly policy?: Record<string, unknown> };\n try { envelope = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(policyBytes)) as typeof envelope; } catch { fail(\"Policy/v2 policy is not JSON\"); }\n const policy = envelope.policy;\n const target = policy?.target as Record<string, unknown> | undefined;\n const resource = policy?.resource as Record<string, unknown> | undefined;\n if (envelope.domain !== \"xyz.tinycloud.share/policy/v2\\0\" || policy === undefined || typeof policy.shareKeyDid !== \"string\" || typeof policy.ownerDid !== \"string\" || typeof policy.contentSourceDigest !== \"string\"\n || policy.shareId !== record.shareId || typeof target?.spaceId !== \"string\" || canonicalAddressSpelling(target.spaceId) !== canonicalAddressSpelling(record.target.spaceId)\n || resource?.kind !== record.resource.kind || resource?.path !== record.resource.path\n || canonicalAddressSpelling(policy.ownerDid) !== canonicalAddressSpelling(context.accountOwnerDid)) fail(\"Policy/v2 policy is not this record's\");\n const shareKeyDid = policy.shareKeyDid;\n const enforcement = await verifyPolicyEnforcementDelegation(proofs.enforcementDelegation, record.enforcementDelegationCid);\n const facts = enforcement.facts;\n if (enforcement.issuerDid !== shareKeyDid || facts.policyCid !== record.policyCid || facts.ownerDelegationCid !== record.ownerDelegationCid || facts.shareId !== record.shareId\n || typeof facts.spaceId !== \"string\" || canonicalAddressSpelling(facts.spaceId) !== canonicalAddressSpelling(record.target.spaceId) || facts.path !== record.resource.path || typeof facts.expiresAt !== \"string\") fail(\"enforcement delegation is not this record's\");\n const owner = await verifyOwnerSessionDelegation({\n authorization: proofs.ownerDelegation, expectedCid: record.ownerDelegationCid, accountOwnerDid: context.accountOwnerDid, childIssuer: shareKeyDid,\n childAttenuation: { [kvResource(record)]: Object.fromEntries(record.actions.map((action) => [action, [{}]])) }, now: context.now, parse: context.parseSiweCacao,\n });\n let expired = owner.time === \"expired\" || Date.parse(facts.expiresAt as string) <= context.now.getTime();\n const claims = [record.policyCid, record.ownerDelegationCid, record.enforcementDelegationCid];\n let issued: { readonly earliest?: number; readonly latest?: number } = { latest: Date.parse(facts.expiresAt as string) };\n const key = context.registrationKey?.(record.target.nodeAudience);\n if (record.registrationCid !== undefined && proofs.registration !== undefined && key !== undefined) {\n let checked: CheckedRegistration;\n try {\n checked = checkRegistrationReceipt(proofs.registration, { policyCid: record.policyCid, ownerDelegationCid: record.ownerDelegationCid, enforcementDelegationCid: record.enforcementDelegationCid, policy, enforcementFacts: facts }, key, context.now);\n } catch {\n fail(\"registration receipt is invalid\");\n }\n const registration = checked.registration;\n if (registration.registrationCid !== record.registrationCid || registration.shareId !== record.shareId || registration.ownerDid !== policy.ownerDid || registration.shareKeyDid !== shareKeyDid || registration.enforcerDid !== enforcement.audienceDid) fail(\"registration receipt is not this record's\");\n expired ||= checked.status === \"expired\";\n claims.push(record.registrationCid);\n issued = around(Date.parse(registration.registeredAt));\n }\n return { ok: true, state: \"chained\", expired, claims, issued };\n}\n\n/** Verify the chain behind every CID a stored agent (or migrated) record claims. Never throws. */\nexport async function verifyAgentRecordChain(record: StoredShareRecord, context: ChainContext): Promise<ChainVerdict> {\n try {\n const proofs = record.proofs;\n if (proofs?.ownerPolicy !== undefined) return await ownerPolicyV2Chain(record, context);\n if (record.targetKind !== undefined && record.targetKind !== \"bearer\") {\n const material = record.deliveryMaterial;\n if (material === undefined) fail(\"Policy/v3 record carries no delivery material\");\n // The CIDs the record names for its sealed envelope are that envelope's.\n if ((record.shareCid !== undefined && record.shareCid !== material.shareCid) || (record.envelopeCid !== undefined && record.envelopeCid !== material.shareCid)) fail(\"Policy/v3 record names another sealed envelope\");\n let envelope: unknown;\n try { envelope = await openDeliveryEnvelope(material); } catch { fail(\"Policy/v3 delivery material does not open to its envelope\"); }\n return await policyV3Chain(record, envelope, context);\n }\n if (proofs?.link !== undefined) return await bearerChain(record, proofs.link, context);\n return { ok: false, detail: \"record carries no proof\" };\n } catch (error) {\n return { ok: false, detail: error instanceof ProofFailure ? error.message : \"proof does not verify\" };\n }\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport {\n canonicalize, computeCid, ed25519PublicKeyFromDidKey, fromBase64Url, shareEnvelopeV3Schema, verifyCompactUcanAuthorization, verifyEnvelopeV3SignatureOnly,\n type ShareEnvelopeV3,\n} from \"@tinycloud/share-envelope\";\n\n/**\n * Policy/v3 envelope verification at an explicit time. Security-sensitive.\n *\n * A line-for-line port of share-envelope `verifyEnvelopeV3` (`sign.ts`) whose\n * only change is that the enforcer-binding window is judged at `now` instead\n * of `Date.now()`, so a genuine but expired share can be reported as Expired\n * rather than invalid (design C4). It lives here, in the share-index entry,\n * so the package root (and the web-sdk bundle) does not change; keep it in\n * step with `verifyEnvelopeV3`. `test/share-index/policy-v3-parity.test.ts`\n * runs both on a frozen clock over a genuine envelope and single-field\n * tampers. Delete this copy once share-envelope's `verifyEnvelopeV3` takes a\n * `now` option.\n */\n\nconst ED25519_VERIFY_OPTS = { zip215: false } as const;\nconst POLICY_V1_SIGNATURE_DOMAIN = \"xyz.tinycloud.policy/policy/v1\\0\";\nconst POLICY_V2_SIGNATURE_DOMAIN = \"xyz.tinycloud.policy/policy/v2\\0\";\nconst CONTENT_SOURCE_V1_DOMAIN = \"xyz.tinycloud.policy/ContentSource/v1\\0\";\nconst POLICY_CAPABILITY_V1_DOMAIN = \"xyz.tinycloud.policy/PolicyCapability/v1\\0\";\nconst NATIVE_PROJECTION_V1_DOMAIN = \"xyz.tinycloud.policy/NativeProjection/v1\\0\";\nconst ATTESTED_ENFORCER_V2_DOMAIN = \"xyz.tinycloud.policy/AttestedEnforcerBinding/v2\\0\";\n\nfunction hex(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction base32Lower(bytes: Uint8Array): string {\n const alphabet = \"abcdefghijklmnopqrstuvwxyz234567\";\n let output = \"\";\n let buffer = 0;\n let bits = 0;\n for (const byte of bytes) {\n buffer = (buffer << 8) | byte;\n bits += 8;\n while (bits >= 5) {\n output += alphabet[(buffer >>> (bits - 5)) & 31];\n bits -= 5;\n }\n }\n if (bits > 0) output += alphabet[(buffer << (5 - bits)) & 31];\n return output;\n}\n\nexport async function verifyEnvelopeV3At(envelope: ShareEnvelopeV3, expectedSignerDid: string, now: number): Promise<boolean> {\n const parsed = shareEnvelopeV3Schema.parse(envelope);\n if (parsed.signature.signerDid !== expectedSignerDid || parsed.signature.signerDid !== parsed.policy.ownerDid || !verifyEnvelopeV3SignatureOnly(parsed)) return false;\n const { policy } = parsed;\n const unsignedPolicy = { ...policy } as Record<string, unknown>;\n delete unsignedPolicy.policyId;\n delete unsignedPolicy.signature;\n const policySignatureDomain = policy.schema === \"xyz.tinycloud.policy/policy/v2\"\n ? POLICY_V2_SIGNATURE_DOMAIN\n : POLICY_V1_SIGNATURE_DOMAIN;\n const policyDigest = sha256(new TextEncoder().encode(`${policySignatureDomain}${canonicalize(unsignedPolicy)}`));\n const policySignature = policy.signature;\n if (policySignature.suite !== \"Ed25519\" || policySignature.signerDid !== policy.ownerDid) return false;\n let policyPublicKey: Uint8Array;\n let policySignatureBytes: Uint8Array;\n try {\n policyPublicKey = ed25519PublicKeyFromDidKey(policy.ownerDid);\n policySignatureBytes = fromBase64Url(policySignature.value);\n } catch {\n return false;\n }\n if (policySignatureBytes.length !== 64 || !ed25519.verify(policySignatureBytes, policyDigest, policyPublicKey, ED25519_VERIFY_OPTS)) return false;\n const policyIdDigest = policyDigest;\n if (policy.policyId !== `pol_${base32Lower(policyIdDigest)}`) return false;\n const policyBytes = new TextEncoder().encode(canonicalize(policy));\n if ((await computeCid(policyBytes)) !== parsed.policyCid) return false;\n const sourceDigest = sha256(new TextEncoder().encode(`${CONTENT_SOURCE_V1_DOMAIN}${canonicalize(policy.contentSource)}`));\n if (hex(sourceDigest) !== parsed.contentSourceDigestHex) return false;\n const sortedCapabilities = [...policy.capabilityCeiling].sort((left, right) => canonicalize(left).localeCompare(canonicalize(right)));\n const capabilityCeilingHashHex = hex(sha256(new TextEncoder().encode(`${POLICY_CAPABILITY_V1_DOMAIN}${canonicalize(sortedCapabilities)}`)));\n const nativeProjection = sortedCapabilities.map((capability) => capability.kind === \"encryption\"\n ? { service: \"tinycloud.encryption\", space: capability.resource, path: capability.resource, actions: [capability.action] }\n : { service: \"tinycloud.kv\", space: capability.resource.slice(0, capability.resource.indexOf(\"/kv/\")), path: capability.resource.split(\"/kv/\")[1], actions: [...capability.actions], caveat: { type: \"xyz.tinycloud.resource/selector\", kind: capability.selector, value: capability.resource } })\n .sort((left, right) => canonicalize(left).localeCompare(canonicalize(right)));\n const nativeProjectionHashHex = hex(sha256(new TextEncoder().encode(`${NATIVE_PROJECTION_V1_DOMAIN}${canonicalize(nativeProjection)}`)));\n const expectedAttenuation = Object.fromEntries(sortedCapabilities.map((capability) => capability.kind === \"encryption\"\n ? [capability.resource, { [capability.action]: [{}] }]\n : [capability.resource, Object.fromEntries(capability.actions.map((action) => [action, [{ kind: capability.selector, type: \"xyz.tinycloud.resource/selector\", value: capability.resource }]]))]));\n const kv = policy.capabilityCeiling.find((capability) => capability.kind === \"kv\");\n const expectedKvActions = parsed.actions.flatMap((action) => action === \"read\" ? [\"tinycloud.kv/get\", \"tinycloud.kv/metadata\"] : action === \"list\" ? [\"tinycloud.kv/list\"] : [\"tinycloud.kv/put\"]);\n const marker = parsed.contentSource.kvResource.indexOf(\"/kv/\");\n const resourceSpace = marker < 1 ? \"\" : parsed.contentSource.kvResource.slice(0, marker);\n const resourcePath = marker < 1 ? \"\" : parsed.contentSource.kvResource.slice(marker + 4);\n if (parsed.shareId !== parsed.contentSource.shareId || resourceSpace !== parsed.target.spaceId || resourcePath !== parsed.resource.path.replace(/\\/$/, \"\") || parsed.resource.kind !== parsed.contentSource.selector || kv?.kind !== \"kv\" || expectedKvActions.some((action) => !kv.actions.includes(action as never)) || parsed.encryptionNetwork !== parsed.contentSource.encryptionNetwork || parsed.contentSource.keyVersion <= 0 || (policy.expiresAt !== undefined && Date.parse(parsed.expiry) > Date.parse(policy.expiresAt))) return false;\n const binding = parsed.attestedEnforcerBinding;\n const { signature: bindingSignature, ...unsignedBinding } = binding;\n const expectedBindingDigestHex = hex(sha256(new TextEncoder().encode(canonicalize({ enforcerDid: binding.enforcerDid, nodeAudience: binding.nodeAudience }))));\n if (binding.nodeAudience !== parsed.target.nodeAudience || binding.attestationBindingDigestHex !== expectedBindingDigestHex || bindingSignature.signerDid !== binding.nodeAudience || bindingSignature.suite !== \"Ed25519\" || Date.parse(binding.issuedAt) > now || Date.parse(binding.expiresAt) <= now || Date.parse(binding.expiresAt) < Date.parse(parsed.expiry)) return false;\n try {\n const digest = sha256(new TextEncoder().encode(`${ATTESTED_ENFORCER_V2_DOMAIN}${canonicalize(unsignedBinding)}`));\n if (!ed25519.verify(fromBase64Url(bindingSignature.value), digest, ed25519PublicKeyFromDidKey(binding.nodeAudience), ED25519_VERIFY_OPTS)) return false;\n } catch {\n return false;\n }\n if (parsed.policyRoot.role !== \"policy-authority\" || parsed.enforcementRoot.role !== \"policy-enforcement\" || parsed.policyRoot.cid === parsed.enforcementRoot.cid) return false;\n try {\n const policyRoot = verifyCompactUcanAuthorization(parsed.policyRoot.authorization, parsed.policyRoot.cid);\n const enforcementRoot = verifyCompactUcanAuthorization(parsed.enforcementRoot.authorization, parsed.enforcementRoot.cid);\n const policyFact = policyRoot.payload.fct[0];\n const enforcementFact = enforcementRoot.payload.fct[0];\n const common = [\"ownerDid\", \"policyId\", \"policyDigestHex\", \"policyCid\", \"contentSourceDigestHex\", \"capabilityCeilingHashHex\", \"nativeProjectionHashHex\", \"nodeAudience\"];\n const policyKeys = [...common, \"role\", \"mode\"];\n const enforcementKeys = [...policyKeys, \"enforcerDid\"];\n if (Object.keys(policyFact).length !== policyKeys.length || policyKeys.some((key) => !(key in policyFact)) || Object.keys(enforcementFact).length !== enforcementKeys.length || enforcementKeys.some((key) => !(key in enforcementFact)) || policyRoot.payload.prf.length !== 0 || enforcementRoot.payload.prf.length !== 0 || policyRoot.payload.iss.split(\"#\", 1)[0] !== policy.ownerDid || enforcementRoot.payload.iss.split(\"#\", 1)[0] !== policy.ownerDid || policyRoot.payload.nbf !== enforcementRoot.payload.nbf || policyRoot.payload.exp !== enforcementRoot.payload.exp || canonicalize(policyRoot.payload.att) !== canonicalize(expectedAttenuation) || canonicalize(enforcementRoot.payload.att) !== canonicalize(expectedAttenuation) || policyFact.role !== \"policy-authority\" || policyFact.mode !== \"policy-source\" || \"enforcerDid\" in policyFact || enforcementFact.role !== \"policy-enforcement\" || enforcementFact.mode !== \"conditional-mint\" || policyRoot.payload.aud !== `did:tinycloud:policy:${hex(policyIdDigest)}` || enforcementRoot.payload.aud !== binding.enforcerDid || enforcementFact.enforcerDid !== binding.enforcerDid || common.some((key) => policyFact[key] !== enforcementFact[key]) || policyFact.ownerDid !== policy.ownerDid || policyFact.policyId !== policy.policyId || policyFact.policyDigestHex !== hex(policyIdDigest) || policyFact.policyCid !== parsed.policyCid || policyFact.contentSourceDigestHex !== parsed.contentSourceDigestHex || policyFact.capabilityCeilingHashHex !== capabilityCeilingHashHex || policyFact.nativeProjectionHashHex !== nativeProjectionHashHex || policyFact.nodeAudience !== binding.nodeAudience || policyRoot.payload.exp * 1000 < Date.parse(parsed.expiry)) return false;\n } catch {\n return false;\n }\n return true;\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 { 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 const prefixCodePoint = prefix.codePointAt(0)\n /* c8 ignore next 3 */\n if (prefixCodePoint === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefixCodePoint\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 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, alphabetIdx: Record<string, number>, bitsPerChar: number, name: string): Uint8Array {\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 = alphabetIdx[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\nfunction createAlphabetIdx (alphabet: string): Record<string, number> {\n // Build the character lookup table:\n const alphabetIdx: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n alphabetIdx[alphabet[i]] = i\n }\n return alphabetIdx\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 const alphabetIdx = createAlphabetIdx(alphabet)\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, alphabetIdx, bitsPerChar, name)\n }\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","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","/* 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","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","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\n/**\n * Used to check that the passed multihash has the passed code\n */\nexport function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {\n return digest.code === code\n}\n","import { base32 } from './bases/base32.js'\nimport { base36 } from './bases/base36.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 case base36.prefix: {\n const decoder = base ?? base36\n return [base36.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32, base36 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 { ed25519 } from \"@noble/curves/ed25519\";\nimport { canonicalize, fromBase64Url } from \"@tinycloud/share-envelope\";\nimport { computeOwnerShareRegistrationCid, OWNER_SHARE_REGISTRATION_DOMAIN, type OwnerSharePolicyRegistration } from \"../../owner-policy.js\";\n\n/**\n * Policy/v2 node registration receipt, with expiry reported apart from\n * invalidity (design C4). Security-sensitive.\n *\n * The package's `validateOwnerSharePolicyRegistration` refuses an expired\n * receipt before checking anything else, so an expired-but-genuine receipt\n * cannot be told from a forged one. This verifier makes the same checks\n * (exact shape; binding to the chain's CIDs; every field the original compares\n * against the canonical policy and the enforcement facts; canonical times;\n * the CID over the canonical core; the node's Ed25519 signature against the\n * registration key from the share public config) and then reports `expired`\n * separately. `registrationCid` is not inside the node-signed core, so the\n * CID-over-core check is what binds it.\n */\nexport interface RegistrationKey {\n readonly kid: string;\n /** Raw 32-byte Ed25519 key, or its 34-byte did:key multicodec form. */\n readonly publicKey: Uint8Array;\n}\n\nexport interface CheckedRegistration {\n readonly status: \"valid\" | \"expired\";\n readonly registration: OwnerSharePolicyRegistration;\n}\n\nconst REGISTRATION_KEYS = [\"registrationCid\", \"policyCid\", \"ownerDelegationCid\", \"enforcementDelegationCid\", \"ownerDid\", \"shareKeyDid\", \"enforcerDid\", \"shareId\", \"recipientMatcher\", \"target\", \"resource\", \"actions\", \"contentSource\", \"contentSourceDigest\", \"registeredAt\", \"expiresAt\"];\n\nfunction exactObject(value: unknown, keys: readonly string[]): Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) throw new Error(\"registration receipt is malformed\");\n const own = Object.keys(value);\n if (own.length !== keys.length || !keys.every((key) => own.includes(key))) throw new Error(\"registration receipt has unknown or missing fields\");\n return value as Record<string, unknown>;\n}\n\nfunction canonicalTime(value: unknown): number {\n if (typeof value !== \"string\") throw new Error(\"registration time is invalid\");\n const parsed = Date.parse(value);\n if (!Number.isFinite(parsed) || new Date(parsed).toISOString() !== value) throw new Error(\"registration time is not canonical\");\n return parsed;\n}\n\nfunction matches(left: unknown, right: unknown): boolean {\n return left !== undefined && right !== undefined && canonicalize(left) === canonicalize(right);\n}\n\n/** Throws when the receipt does not verify; reports a verified receipt past its `expiresAt` as `expired`. */\nexport function checkRegistrationReceipt(\n value: unknown,\n expected: {\n readonly policyCid: string; readonly ownerDelegationCid: string; readonly enforcementDelegationCid: string;\n /** The `policy` object of the canonical Policy/v2 envelope whose bytes hash to `policyCid`. */\n readonly policy: Readonly<Record<string, unknown>>;\n /** The verified enforcement delegation's facts. */\n readonly enforcementFacts: Readonly<Record<string, unknown>>;\n },\n key: RegistrationKey,\n now: Date,\n): CheckedRegistration {\n const root = exactObject(value, [\"registration\", \"proof\"]);\n const registration = exactObject(root.registration, REGISTRATION_KEYS);\n const proof = exactObject(root.proof, [\"alg\", \"kid\", \"signature\"]);\n const { policy, enforcementFacts: facts } = expected;\n if (registration.policyCid !== expected.policyCid || registration.ownerDelegationCid !== expected.ownerDelegationCid || registration.enforcementDelegationCid !== expected.enforcementDelegationCid || registration.contentSourceDigest !== policy.contentSourceDigest) {\n throw new Error(\"registration is not bound to the record's chain\");\n }\n // The same comparisons as validateOwnerSharePolicyRegistration: the receipt restates the policy and the facts exactly.\n const target = policy.target as Record<string, unknown> | undefined;\n const resource = policy.resource as Record<string, unknown> | undefined;\n const registrationTarget = registration.target as Record<string, unknown> | undefined;\n const registrationResource = registration.resource as Record<string, unknown> | undefined;\n if (typeof target?.origin !== \"string\" || typeof target.nodeAudience !== \"string\" || typeof target.enforcerDid !== \"string\" || typeof target.spaceId !== \"string\"\n || typeof resource?.kind !== \"string\" || ![\"exact\", \"prefix\"].includes(resource.kind) || typeof resource.path !== \"string\" || !Array.isArray(policy.actions)\n || registrationTarget === undefined || registrationResource === undefined\n || policy.ownerDid !== registration.ownerDid || policy.shareKeyDid !== registration.shareKeyDid || policy.shareId !== registration.shareId\n || !matches(policy.recipientMatcher, registration.recipientMatcher)\n || target.origin !== registrationTarget.origin || target.nodeAudience !== registrationTarget.nodeAudience || target.enforcerDid !== registration.enforcerDid || target.spaceId !== registrationTarget.spaceId\n || resource.kind !== registrationResource.kind || resource.path !== registrationResource.path\n || !matches(policy.actions, registration.actions) || !matches(policy.contentSource, registration.contentSource) || policy.expiresAt !== registration.expiresAt\n || facts.ownerDelegationCid !== registration.ownerDelegationCid || facts.policyCid !== registration.policyCid || facts.shareKeyDid !== registration.shareKeyDid || facts.enforcerDid !== registration.enforcerDid\n || facts.nodeAudience !== registrationTarget.nodeAudience || facts.spaceId !== registrationTarget.spaceId || facts.path !== registrationResource.path\n || !matches(facts.actions, registration.actions) || facts.expiresAt !== registration.expiresAt) {\n throw new Error(\"registration is not bound to the canonical policy\");\n }\n canonicalTime(registration.registeredAt);\n const expiresAt = canonicalTime(registration.expiresAt);\n const { registrationCid, ...core } = registration;\n if (typeof registrationCid !== \"string\" || computeOwnerShareRegistrationCid(core as unknown as Omit<OwnerSharePolicyRegistration, \"registrationCid\">) !== registrationCid) throw new Error(\"registration CID does not match its canonical core\");\n if (proof.alg !== \"EdDSA\" || proof.kid !== key.kid || typeof proof.signature !== \"string\") throw new Error(\"registration proof key is not trusted\");\n const publicKey = key.publicKey.length === 34 && key.publicKey[0] === 0xed && key.publicKey[1] === 0x01 ? key.publicKey.slice(2) : key.publicKey;\n if (publicKey.length !== 32) throw new Error(\"registration key is invalid\");\n const signature = fromBase64Url(proof.signature);\n const signed = new TextEncoder().encode(`${OWNER_SHARE_REGISTRATION_DOMAIN}${canonicalize(core)}`);\n if (signature.length !== 64 || !ed25519.verify(signature, signed, publicKey, { zip215: false })) throw new Error(\"registration proof signature is invalid\");\n return { status: expiresAt <= now.getTime() ? \"expired\" : \"valid\", registration: registration as unknown as OwnerSharePolicyRegistration };\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { base32 } from \"multiformats/bases/base32\";\nimport { CID } from \"multiformats/cid\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\nconst SHA256_CODE = 0x12;\nimport * as raw from \"multiformats/codecs/raw\";\nimport { base58btc } from \"multiformats/bases/base58\";\nimport { canonicalize } from \"@tinycloud/share-envelope\";\n\nexport interface OwnerDelegationReceipt {\n readonly delegationCid: string;\n readonly signedDagCbor: Uint8Array;\n readonly delegation: { readonly delegateDID: string; readonly spaceId: string; readonly path: string; readonly actions: readonly string[]; readonly expiry: Date };\n /** Exact service-scoped capabilities encoded in the signed owner delegation. */\n readonly permissions?: readonly OwnerDelegationPermission[];\n}\n\nexport interface OwnerDelegationPermission {\n readonly service: string;\n readonly path: string;\n readonly actions: readonly string[];\n}\n\ninterface CreateOwnerDelegationBase {\n readonly delegateDid: string;\n readonly spaceId: string;\n readonly expiresAt: Date;\n}\n\nexport type CreateOwnerDelegationParams = CreateOwnerDelegationBase & (\n | {\n readonly path: string;\n readonly actions: readonly string[];\n readonly permissions?: never;\n }\n | {\n readonly permissions: readonly OwnerDelegationPermission[];\n readonly path?: never;\n readonly actions?: never;\n }\n);\n\nconst MAX_CONTENT_BYTES = 100 * 1024 * 1024;\nexport const POLICY_ENFORCEMENT_DOMAIN = \"xyz.tinycloud.share/policy-enforcement/v2\\0\";\nconst POLICY_DOMAIN = \"xyz.tinycloud.share/policy/v2\\0\";\nexport const OWNER_SHARE_REGISTRATION_DOMAIN = \"xyz.tinycloud.share/policy-registration/v2\\0\";\n\nexport type OwnerShareAction = \"tinycloud.kv/get\" | \"tinycloud.kv/list\" | \"tinycloud.kv/metadata\" | \"tinycloud.kv/put\";\nexport interface OwnerShareDecryption {\n readonly networkId: string;\n readonly action: \"tinycloud.encryption/decrypt\";\n}\nexport type OwnerShareMatcher =\n | { readonly kind: \"exactEmail\"; readonly value: string }\n | { readonly kind: \"emailDomain\"; readonly value: string }\n | { readonly kind: \"recipientDid\"; readonly value: string }\n | { readonly kind: \"bearer\" };\n\nexport interface OwnerSharePolicyV2 {\n readonly type: \"TinyCloudSharePolicy\";\n readonly version: 2;\n readonly shareId: string;\n readonly ownerDid: string;\n readonly shareKeyDid: string;\n readonly recipientMatcher: OwnerShareMatcher;\n readonly target: { readonly origin: string; readonly nodeAudience: string; readonly enforcerDid: string; readonly spaceId: string };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly OwnerShareAction[];\n readonly decryption?: OwnerShareDecryption;\n readonly contentSource: { readonly kind: \"kv\"; readonly space: string; readonly path: string; readonly action: \"tinycloud.kv/get\" };\n readonly contentSourceDigest: string;\n readonly ownerDelegationCid: string;\n readonly expiresAt: string;\n}\n\nexport interface DelegatedShareKey {\n readonly did: string;\n readonly publicKey: Uint8Array;\n readonly extractable: boolean;\n /** The underlying WebCrypto private key handle; private JWK material is never returned. */\n readonly cryptoKey: CryptoKey;\n sign(bytes: Uint8Array): Promise<Uint8Array>;\n clear(): void;\n}\n\nexport interface SignedDelegation {\n readonly cid: string;\n readonly dagCbor: string;\n readonly issuerDid: string;\n readonly audienceDid: string;\n readonly facts: Record<string, string | readonly string[]>;\n readonly signature: string;\n}\n\nexport interface RegisterOwnerSharePolicyParams {\n readonly policy: { readonly bytes: Uint8Array; readonly cid: string; readonly proof: string };\n readonly ownerDelegation: OwnerDelegationReceipt;\n readonly enforcementDelegation: SignedDelegation;\n readonly contentSourceDigest: string;\n /** The enrolled receipt key from the node trust bundle. */\n readonly nodeProof?: { readonly kid: string; readonly publicKey: Uint8Array };\n}\n\nexport interface OwnerSharePolicyRegistration {\n readonly registrationCid: string;\n readonly policyCid: string;\n readonly ownerDelegationCid: string;\n readonly enforcementDelegationCid: string;\n readonly ownerDid: string;\n readonly shareKeyDid: string;\n readonly enforcerDid: string;\n readonly shareId: string;\n readonly recipientMatcher: OwnerShareMatcher;\n readonly target: { readonly origin: string; readonly nodeAudience: string; readonly spaceId: string };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n readonly actions: readonly OwnerShareAction[];\n readonly contentSource: { readonly kind: \"kv\"; readonly space: string; readonly path: string; readonly action: \"tinycloud.kv/get\" };\n readonly contentSourceDigest: string;\n readonly registeredAt: string;\n readonly expiresAt: string;\n}\n\nexport interface OwnerSharePolicyRegistrationReceipt {\n readonly registration: OwnerSharePolicyRegistration;\n readonly proof: { readonly alg: \"EdDSA\"; readonly kid: string; readonly signature: string };\n}\n\nfunction bytes(value: Uint8Array): Uint8Array { return new Uint8Array(value); }\n\nfunction b64(value: Uint8Array): string {\n if (typeof btoa === \"function\") {\n let binary = \"\";\n for (const byte of value) binary += String.fromCharCode(byte);\n return btoa(binary).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/g, \"\");\n }\n if (typeof Buffer !== \"undefined\") return Buffer.from(value).toString(\"base64url\");\n throw new Error(\"base64url encoding is unavailable\");\n}\n\nfunction fromB64(value: string): Uint8Array {\n if (!/^[A-Za-z0-9_-]+$/.test(value)) throw new Error(\"owner-share value is not canonical base64url\");\n if (typeof atob === \"function\") {\n const padded = value.replace(/-/g, \"+\").replace(/_/g, \"/\") + \"=\".repeat((4 - value.length % 4) % 4);\n return Uint8Array.from(atob(padded), (character) => character.charCodeAt(0));\n }\n if (typeof Buffer !== \"undefined\") return new Uint8Array(Buffer.from(value, \"base64url\"));\n throw new Error(\"base64url decoding is unavailable\");\n}\n\nfunction cid(bytesValue: Uint8Array): string {\n return CID.createV1(raw.code, createDigest(SHA256_CODE, sha256(bytesValue))).toString(base32.encoder);\n}\n\nfunction digest(bytesValue: Uint8Array): string { return b64(sha256(bytesValue)); }\n\nfunction didKeyFromEd25519PublicKey(publicKey: Uint8Array): string {\n if (publicKey.length !== 32) throw new Error(\"share key public key must be 32 bytes\");\n const prefixed = new Uint8Array(34);\n prefixed.set([0xed, 0x01]);\n prefixed.set(publicKey, 2);\n return `did:key:${base58btc.encode(prefixed)}`;\n}\n\nfunction assertCanonical(value: string, label: string): void {\n if (value !== canonicalize(JSON.parse(value))) throw new Error(`${label} is not canonical JSON`);\n}\n\nexport function dagCborEncode(value: unknown): Uint8Array {\n const output: number[] = [];\n const writeHeader = (major: number, length: number): void => {\n if (!Number.isSafeInteger(length) || length < 0) throw new Error(\"DAG-CBOR value is too large\");\n if (length < 24) output.push((major << 5) | length);\n else if (length < 0x100) output.push((major << 5) | 24, length);\n else if (length < 0x10000) output.push((major << 5) | 25, length >> 8, length & 0xff);\n else throw new Error(\"DAG-CBOR value is too large\");\n };\n const write = (item: unknown): void => {\n if (item === null) { output.push(0xf6); return; }\n if (item === false) { output.push(0xf4); return; }\n if (item === true) { output.push(0xf5); return; }\n if (typeof item === \"string\") {\n const encoded = new TextEncoder().encode(item);\n writeHeader(3, encoded.length); output.push(...encoded); return;\n }\n if (typeof item === \"number\" && Number.isSafeInteger(item)) {\n if (item >= 0) writeHeader(0, item);\n else writeHeader(1, -1 - item);\n return;\n }\n if (Array.isArray(item)) {\n writeHeader(4, item.length); item.forEach(write); return;\n }\n if (typeof item === \"object\" && item !== null) {\n const entries = Object.entries(item as Record<string, unknown>).map(([key, value]) => {\n const keyBytes = dagCborEncode(key);\n return { key, value, keyBytes };\n }).sort((left, right) => {\n if (left.keyBytes.length !== right.keyBytes.length) return left.keyBytes.length - right.keyBytes.length;\n for (let index = 0; index < left.keyBytes.length; index += 1) {\n const leftByte = left.keyBytes[index] ?? 0;\n const rightByte = right.keyBytes[index] ?? 0;\n if (leftByte !== rightByte) return leftByte - rightByte;\n }\n return 0;\n });\n writeHeader(5, entries.length);\n entries.forEach(({ key, value }) => { write(key); write(value); });\n return;\n }\n throw new Error(\"Unsupported DAG-CBOR value\");\n };\n write(value);\n return Uint8Array.from(output);\n}\n\nfunction assertObject(value: unknown, keys: readonly string[], label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(`${label} is invalid`);\n const record = value as Record<string, unknown>;\n if (Object.keys(record).length !== keys.length || keys.some((key) => !Object.prototype.hasOwnProperty.call(record, key))) throw new Error(`${label} has unknown or missing fields`);\n return record;\n}\n\nexport async function createDelegatedShareKey(options: { readonly extractable: boolean }): Promise<DelegatedShareKey> {\n if (!globalThis.crypto?.subtle) throw new Error(\"WebCrypto Ed25519 is required for delegated share keys\");\n const generated = await crypto.subtle.generateKey({ name: \"Ed25519\" }, options.extractable, [\"sign\", \"verify\"]) as CryptoKeyPair;\n const privateKey = generated.privateKey;\n const publicKey = new Uint8Array(await crypto.subtle.exportKey(\"raw\", generated.publicKey));\n let cleared = false;\n const key: DelegatedShareKey = {\n did: didKeyFromEd25519PublicKey(publicKey),\n publicKey: bytes(publicKey),\n extractable: options.extractable,\n cryptoKey: privateKey,\n async sign(input) {\n if (cleared) throw new Error(\"share key has been cleared\");\n return new Uint8Array(await crypto.subtle.sign({ name: \"Ed25519\" }, privateKey, input));\n },\n clear() { cleared = true; },\n };\n return key;\n}\n\n/**\n * Rehydrate a signer wrapper around a `DelegatedShareKey`'s private\n * `CryptoKey` handle that was persisted (e.g. via IndexedDB structured\n * clone) and recovered after a reload. `privateKey` must be the same\n * non-extractable Ed25519 `CryptoKey` originally produced by\n * {@link createDelegatedShareKey}.\n */\nexport function restoreDelegatedShareKey(input: { readonly privateKey: CryptoKey; readonly publicKey: Uint8Array; readonly extractable: boolean }): DelegatedShareKey {\n let cleared = false;\n return {\n did: didKeyFromEd25519PublicKey(input.publicKey),\n publicKey: bytes(input.publicKey),\n extractable: input.extractable,\n cryptoKey: input.privateKey,\n async sign(signBytes) {\n if (cleared) throw new Error(\"share key has been cleared\");\n if (!globalThis.crypto?.subtle) throw new Error(\"WebCrypto Ed25519 is required for delegated share keys\");\n return new Uint8Array(await crypto.subtle.sign({ name: \"Ed25519\" }, input.privateKey, signBytes));\n },\n clear() { cleared = true; },\n };\n}\n\nexport async function createPolicyEnforcementDelegation(input: {\n readonly ownerDelegation: OwnerDelegationReceipt;\n readonly shareKey: DelegatedShareKey;\n readonly enforcerDid: string;\n readonly policyCid: string;\n readonly shareId: string;\n readonly spaceId: string;\n readonly nodeAudience: string;\n readonly path: string;\n readonly actions: readonly OwnerShareAction[];\n readonly contentSourceDigest: string;\n readonly expiresAt: string;\n}): Promise<SignedDelegation> {\n if (input.shareKey.did.length === 0 || input.ownerDelegation.delegationCid.length === 0) throw new Error(\"owner delegation and share key are required\");\n const facts = {\n ownerDelegationCid: input.ownerDelegation.delegationCid,\n policyCid: input.policyCid,\n shareId: input.shareId,\n shareKeyDid: input.shareKey.did,\n enforcerDid: input.enforcerDid,\n nodeAudience: input.nodeAudience,\n spaceId: input.spaceId,\n path: input.path,\n actions: [...input.actions],\n contentSourceDigest: input.contentSourceDigest,\n expiresAt: input.expiresAt,\n } satisfies Record<string, string | readonly string[]>;\n const unsigned = { type: \"TinyCloudSharePolicyEnforcement\", version: 2, issuerDid: input.shareKey.did, audienceDid: input.enforcerDid, facts };\n const dagCborBytes = dagCborEncode({ domain: POLICY_ENFORCEMENT_DOMAIN, unsigned });\n const signature = b64(await input.shareKey.sign(dagCborBytes));\n return { cid: cid(dagCborBytes), dagCbor: b64(dagCborBytes), issuerDid: input.shareKey.did, audienceDid: input.enforcerDid, facts, signature };\n}\n\nexport async function canonicalOwnerSharePolicy(policy: OwnerSharePolicyV2): Promise<{ readonly bytes: Uint8Array; readonly cid: string; readonly digest: string }> {\n const text = canonicalize({ domain: POLICY_DOMAIN, policy });\n const policyBytes = new TextEncoder().encode(text);\n return { bytes: policyBytes, cid: cid(policyBytes), digest: digest(policyBytes) };\n}\n\nexport function computeOwnerShareRegistrationCid(registration: Omit<OwnerSharePolicyRegistration, \"registrationCid\">): string {\n return cid(new TextEncoder().encode(canonicalize(registration)));\n}\n\nexport function validateOwnerSharePolicyRegistration(value: unknown, expected: RegisterOwnerSharePolicyParams): OwnerSharePolicyRegistrationReceipt {\n if (cid(expected.policy.bytes) !== expected.policy.cid) throw new Error(\"submitted owner-share policy bytes do not match its CID\");\n const root = assertObject(value, [\"registration\", \"proof\"], \"owner-share registration response\");\n const registration = assertObject(root.registration, [\"registrationCid\", \"policyCid\", \"ownerDelegationCid\", \"enforcementDelegationCid\", \"ownerDid\", \"shareKeyDid\", \"enforcerDid\", \"shareId\", \"recipientMatcher\", \"target\", \"resource\", \"actions\", \"contentSource\", \"contentSourceDigest\", \"registeredAt\", \"expiresAt\"], \"owner-share registration\");\n const proof = assertObject(root.proof, [\"alg\", \"kid\", \"signature\"], \"owner-share registration proof\");\n if (registration.policyCid !== expected.policy.cid || registration.ownerDelegationCid !== expected.ownerDelegation.delegationCid || registration.enforcementDelegationCid !== expected.enforcementDelegation.cid || registration.contentSourceDigest !== expected.contentSourceDigest) throw new Error(\"owner-share registration is not bound to the submitted chain\");\n let policyValue: Record<string, unknown>;\n try { policyValue = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(expected.policy.bytes)) as Record<string, unknown>; } catch { throw new Error(\"owner-share policy is not valid JSON\"); }\n const policy = policyValue.policy as Record<string, unknown> | undefined;\n if (policyValue.domain !== \"xyz.tinycloud.share/policy/v2\\0\" || policy === undefined || Array.isArray(policy)) throw new Error(\"owner-share policy envelope is invalid\");\n const target = policy.target as Record<string, unknown> | undefined;\n const resource = policy.resource as Record<string, unknown> | undefined;\n const registrationTarget = registration.target as Record<string, unknown>;\n const registrationResource = registration.resource as Record<string, unknown>;\n const enforcementFacts = expected.enforcementDelegation.facts;\n if (typeof target?.origin !== \"string\" || typeof target.nodeAudience !== \"string\" || typeof target.enforcerDid !== \"string\" || typeof target.spaceId !== \"string\" || typeof resource?.kind !== \"string\" || ![\"exact\", \"prefix\"].includes(resource.kind) || typeof resource?.path !== \"string\" || !Array.isArray(policy.actions) || policy.ownerDid !== registration.ownerDid || policy.shareKeyDid !== registration.shareKeyDid || policy.shareId !== registration.shareId || canonicalize(policy.recipientMatcher) !== canonicalize(registration.recipientMatcher) || target.origin !== registrationTarget.origin || target.nodeAudience !== registrationTarget.nodeAudience || target.enforcerDid !== registration.enforcerDid || target.spaceId !== registrationTarget.spaceId || resource.kind !== registrationResource.kind || resource.path !== registrationResource.path || canonicalize(policy.actions) !== canonicalize(registration.actions) || canonicalize(policy.contentSource) !== canonicalize(registration.contentSource) || policy.expiresAt !== registration.expiresAt || policy.contentSourceDigest !== registration.contentSourceDigest || enforcementFacts.ownerDelegationCid !== registration.ownerDelegationCid || enforcementFacts.policyCid !== registration.policyCid || enforcementFacts.shareKeyDid !== registration.shareKeyDid || enforcementFacts.enforcerDid !== registration.enforcerDid || enforcementFacts.nodeAudience !== registrationTarget.nodeAudience || enforcementFacts.spaceId !== registrationTarget.spaceId || enforcementFacts.path !== registrationResource.path || canonicalize(enforcementFacts.actions) !== canonicalize(registration.actions) || enforcementFacts.expiresAt !== registration.expiresAt) throw new Error(\"owner-share registration is not bound to the canonical policy\");\n if (typeof registration.registrationCid !== \"string\" || typeof registration.expiresAt !== \"string\" || typeof registration.registeredAt !== \"string\") throw new Error(\"owner-share registration timestamps are invalid\");\n if (new Date(registration.expiresAt).toISOString() !== registration.expiresAt || Date.parse(registration.expiresAt) <= Date.now()) throw new Error(\"owner-share registration is expired or non-canonical\");\n const { registrationCid: _registrationCid, ...registrationCore } = registration;\n if (computeOwnerShareRegistrationCid(registrationCore as unknown as Omit<OwnerSharePolicyRegistration, \"registrationCid\">) !== registration.registrationCid) throw new Error(\"owner-share registration CID does not match its canonical core\");\n if (proof.alg !== \"EdDSA\" || typeof proof.kid !== \"string\" || typeof proof.signature !== \"string\") throw new Error(\"owner-share registration proof is invalid\");\n const proofKey = expected.nodeProof;\n if (proofKey === undefined) throw new Error(\"owner-share registration proof trust material is required\");\n if (proof.kid !== proofKey.kid) throw new Error(\"owner-share registration proof key is not trusted\");\n const encodedKid = proofKey.publicKey;\n if (encodedKid.length === 34 && encodedKid[0] === 0xed && encodedKid[1] === 0x01) {\n // did:key multicodec prefix is removed below.\n } else if (encodedKid.length !== 32) throw new Error(\"owner-share registration proof key is invalid\");\n const publicKey = encodedKid.length === 34 ? encodedKid.slice(2) : encodedKid;\n const signatureBytes = fromB64(proof.signature);\n const signedBytes = new TextEncoder().encode(`${OWNER_SHARE_REGISTRATION_DOMAIN}${canonicalize(registrationCore)}`);\n if (signatureBytes.length !== 64 || !ed25519.verify(signatureBytes, signedBytes, publicKey)) throw new Error(\"owner-share registration proof signature is invalid\");\n return { registration: registration as unknown as OwnerSharePolicyRegistration, proof: proof as unknown as OwnerSharePolicyRegistrationReceipt[\"proof\"] };\n}\n\n/** Validate the exact UTF-8 response bytes emitted by the registration route. */\nexport function validateOwnerSharePolicyRegistrationBytes(bytesValue: Uint8Array, expected: RegisterOwnerSharePolicyParams): OwnerSharePolicyRegistrationReceipt {\n let value: unknown;\n try {\n value = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytesValue));\n } catch {\n throw new Error(\"owner-share registration response is not valid UTF-8 JSON\");\n }\n return validateOwnerSharePolicyRegistration(value, expected);\n}\n\nexport { MAX_CONTENT_BYTES };\n","import { coerce } from '../bytes.js'\nimport type { ArrayBufferView, 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> | ArrayBufferView<Uint8Array>): Uint8Array {\n return coerce(data)\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { computeCid, ed25519PublicKeyFromDidKey, fromBase64Url } from \"@tinycloud/share-envelope\";\nimport { POLICY_ENFORCEMENT_DOMAIN, dagCborEncode, type SignedDelegation } from \"../../owner-policy.js\";\n\n/**\n * Verifier for a Policy/v2 enforcement delegation\n * (`TinyCloudSharePolicyEnforcement`, signed by the share key;\n * `createPolicyEnforcementDelegation`). No verifier existed before\n * (design C §5 check 7, C4).\n *\n * Checks, all fail-closed:\n * - the DAG-CBOR bytes are exactly the canonical encoding of\n * `{ domain, unsigned: { type, version: 2, issuerDid, audienceDid, facts } }`\n * built from the delegation's own fields (so every reported field is signed);\n * - the Ed25519 signature over those bytes verifies against `issuerDid`\n * (a did:key), strict RFC 8032;\n * - the CID recomputed from the exact bytes equals `cid` (and `expectedCid`);\n * - `facts.shareKeyDid` equals the issuer.\n */\nexport async function verifyPolicyEnforcementDelegation(delegation: SignedDelegation, expectedCid?: string): Promise<SignedDelegation> {\n if (delegation === null || typeof delegation !== \"object\" || typeof delegation.dagCbor !== \"string\" || typeof delegation.signature !== \"string\" || typeof delegation.cid !== \"string\" || typeof delegation.issuerDid !== \"string\" || typeof delegation.audienceDid !== \"string\" || delegation.facts === null || typeof delegation.facts !== \"object\") {\n throw new Error(\"enforcement delegation is malformed\");\n }\n const bytes = fromBase64Url(delegation.dagCbor);\n const unsigned = { type: \"TinyCloudSharePolicyEnforcement\", version: 2, issuerDid: delegation.issuerDid, audienceDid: delegation.audienceDid, facts: delegation.facts };\n const expected = dagCborEncode({ domain: POLICY_ENFORCEMENT_DOMAIN, unsigned });\n if (expected.length !== bytes.length || expected.some((byte, index) => byte !== bytes[index])) throw new Error(\"enforcement delegation fields are not the signed bytes\");\n const signature = fromBase64Url(delegation.signature);\n const publicKey = ed25519PublicKeyFromDidKey(delegation.issuerDid);\n if (signature.length !== 64 || !ed25519.verify(signature, bytes, publicKey, { zip215: false })) throw new Error(\"enforcement delegation signature is invalid\");\n const cid = await computeCid(bytes);\n if (cid !== delegation.cid || (expectedCid !== undefined && cid !== expectedCid)) throw new Error(\"enforcement delegation CID does not match its bytes\");\n if (delegation.facts.shareKeyDid !== delegation.issuerDid) throw new Error(\"enforcement delegation is not issued by its share key\");\n return delegation;\n}\n","import { fromBase64Url } from \"@tinycloud/share-envelope\";\n\n/**\n * The signed `Issued At` and `Not Before` of a SIWE CACAO, read from its\n * DAG-CBOR bytes. Security-sensitive, but narrow: call it only on bytes the\n * injected parser (sdk-core `parseSignedSiweCacao`) has already verified\n * (canonical encoding, exact-bytes CID, EIP-191 signature), which reports the\n * expiry but not these two times. Reading them here keeps sdk-core, and the\n * bundles built on it, unchanged.\n *\n * Supports the DAG-CBOR subset a CACAO uses: unsigned/negative integers, byte\n * and text strings, arrays, text-keyed maps, false/true/null; definite\n * lengths only, bounded depth. Anything else throws.\n */\nexport interface CacaoTimes {\n readonly issuedAt?: string;\n readonly notBefore?: string;\n}\n\nconst MAX_DEPTH = 32;\n\nfunction decode(bytes: Uint8Array): unknown {\n let offset = 0;\n const take = (length: number): Uint8Array => {\n if (length > bytes.length - offset) throw new Error(\"CACAO ended early\");\n const out = bytes.subarray(offset, offset + length);\n offset += length;\n return out;\n };\n const read = (depth: number): unknown => {\n if (depth > MAX_DEPTH) throw new Error(\"CACAO nesting is too deep\");\n const initial = take(1)[0]!;\n const major = initial >> 5;\n const info = initial & 0x1f;\n if (major === 7) {\n if (info === 20) return false;\n if (info === 21) return true;\n if (info === 22) return null;\n throw new Error(\"unsupported CBOR simple value\");\n }\n let argument: number;\n if (info < 24) argument = info;\n else if (info === 24) argument = take(1)[0]!;\n else if (info === 25) { const b = take(2); argument = (b[0]! << 8) | b[1]!; }\n else if (info === 26) { const b = take(4); argument = ((b[0]! << 24) >>> 0) + (b[1]! << 16) + (b[2]! << 8) + b[3]!; }\n else throw new Error(\"unsupported CBOR length\");\n switch (major) {\n case 0: return argument;\n case 1: return -1 - argument;\n case 2: return take(argument);\n case 3: return new TextDecoder(\"utf-8\", { fatal: true }).decode(take(argument));\n case 4: return Array.from({ length: argument }, () => read(depth + 1));\n case 5: {\n const map = new Map<string, unknown>();\n for (let index = 0; index < argument; index++) {\n const key = read(depth + 1);\n if (typeof key !== \"string\" || map.has(key)) throw new Error(\"CBOR map key is invalid\");\n map.set(key, read(depth + 1));\n }\n return map;\n }\n default: throw new Error(\"unsupported CBOR type\");\n }\n };\n const value = read(0);\n if (offset !== bytes.length) throw new Error(\"CACAO has trailing bytes\");\n return value;\n}\n\nexport function cacaoTimes(authorization: string): CacaoTimes {\n const root = decode(fromBase64Url(authorization.replace(/=+$/, \"\")));\n const payload = root instanceof Map ? root.get(\"p\") : undefined;\n if (!(payload instanceof Map)) throw new Error(\"CACAO payload is missing\");\n const text = (key: string): string | undefined => {\n const value = payload.get(key);\n if (value === undefined) return undefined;\n if (typeof value !== \"string\") throw new Error(`CACAO ${key} is not text`);\n return value;\n };\n const issuedAt = text(\"iat\");\n const notBefore = text(\"nbf\");\n return { ...(issuedAt === undefined ? {} : { issuedAt }), ...(notBefore === undefined ? {} : { notBefore }) };\n}\n","import { canonicalize } from \"@tinycloud/share-envelope\";\nimport { canonicalAddressSpelling } from \"../agent-record.js\";\n\n/**\n * Attenuation containment (design C4): every (resource, ability) of the child\n * must be granted by the parent on the same resource or on a parent resource\n * under the segment-prefix rule `child == parent || child.startsWith(parent\n * + \"/\")` (a parent already ending in `/` is a prefix itself), as\n * `unified.ts:1225-1233` applies it. EVM address spelling is ignored. A\n * parent ability whose caveats are all empty objects is unrestricted;\n * otherwise the child's caveats must be identical. Fail-closed.\n */\nexport type Attenuation = Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>>;\n\nfunction resourceCovers(parent: string, child: string): boolean {\n const p = canonicalAddressSpelling(parent);\n const c = canonicalAddressSpelling(child);\n if (c === p) return true;\n return c.startsWith(p.endsWith(\"/\") ? p : `${p}/`);\n}\n\nfunction unrestricted(caveats: readonly unknown[]): boolean {\n return caveats.every((caveat) => caveat !== null && typeof caveat === \"object\" && !Array.isArray(caveat) && Object.keys(caveat).length === 0);\n}\n\nexport function attenuationCovers(parent: Attenuation, child: Attenuation): boolean {\n const childEntries = Object.entries(child);\n if (childEntries.length === 0) return false;\n return childEntries.every(([childResource, abilities]) =>\n Object.entries(abilities).every(([ability, childCaveats]) =>\n Object.entries(parent).some(([parentResource, parentAbilities]) => {\n const parentCaveats = Object.prototype.hasOwnProperty.call(parentAbilities, ability) ? parentAbilities[ability] : undefined;\n if (parentCaveats === undefined || !resourceCovers(parentResource, childResource)) return false;\n return unrestricted(parentCaveats) || canonicalize(parentCaveats) === canonicalize(childCaveats);\n })));\n}\n\n/** Whether the attenuation grants `ability` on exactly `resource` (spelling-insensitive). */\nexport function grantsExactly(attenuation: Attenuation, resource: string, ability: string): boolean {\n const target = canonicalAddressSpelling(resource);\n return Object.entries(attenuation).some(([key, abilities]) => canonicalAddressSpelling(key) === target && Object.prototype.hasOwnProperty.call(abilities, ability));\n}\n","import { ed25519 } from \"@noble/curves/ed25519\";\nimport { blake3 } from \"@noble/hashes/blake3\";\nimport { ed25519PublicKeyFromDidKey, fromBase64Url } from \"@tinycloud/share-envelope\";\nimport { CID } from \"multiformats/cid\";\nimport { create as createDigest } from \"multiformats/hashes/digest\";\n\n/**\n * Signed UCAN verifier for issued delegations (native bearer link\n * delegations and Policy/v3 owner roots). Security-sensitive.\n *\n * Same acceptance as sdk-core `parseSignedCompactUcanAttenuation`\n * (`unified.ts:1281-1314`): EdDSA/JWT/ucv 0.10.0 header whose JWK binds the\n * did:key issuer, strict Ed25519 signature, CID = CIDv1(raw, blake3) of the\n * exact Authorization bytes. It additionally returns the verified `prf`,\n * `nbf` and `exp` (design C4), and requires `exp`: an expiry-less delegation\n * is refused. Payload JSON need not be JCS: WASM-issued link delegations are\n * not.\n */\nexport interface SignedUcanDelegation {\n readonly cid: string;\n /** Issuer principal without any `#fragment`. */\n readonly issuer: string;\n /** Audience principal without any `#fragment`. */\n readonly audience: string;\n readonly attenuation: Readonly<Record<string, Readonly<Record<string, readonly unknown[]>>>>;\n readonly proofs: readonly string[];\n readonly notBefore?: number;\n readonly expiresAt: number;\n readonly facts?: readonly unknown[];\n}\n\nconst MAX_UCAN_LENGTH = 32 * 1024;\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/** `did:key:z…#z…` and `did:key:z…` name the same principal. */\nexport function principalOf(did: string): string {\n return did.split(\"#\", 1)[0]!;\n}\n\nexport function ucanCid(authorization: string): string {\n return CID.createV1(0x55, createDigest(0x1e, blake3(new TextEncoder().encode(authorization)))).toString();\n}\n\nexport function parseSignedUcan(authorization: string, expectedCid?: string): SignedUcanDelegation {\n if (typeof authorization !== \"string\" || authorization.length > MAX_UCAN_LENGTH || /\\s/.test(authorization)) throw new Error(\"UCAN must be compact bytes\");\n const segments = authorization.split(\".\");\n if (segments.length !== 3 || segments.some((segment) => segment.length === 0)) throw new Error(\"UCAN must have three segments\");\n const [headerSegment, payloadSegment, signatureSegment] = segments as [string, string, string];\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n let header: unknown;\n let payload: unknown;\n try {\n header = JSON.parse(decoder.decode(fromBase64Url(headerSegment)));\n payload = JSON.parse(decoder.decode(fromBase64Url(payloadSegment)));\n } catch {\n throw new Error(\"UCAN segments are not JSON\");\n }\n if (!record(header) || !record(header.jwk) || header.alg !== \"EdDSA\" || header.typ !== \"JWT\" || header.ucv !== \"0.10.0\" || header.jwk.kty !== \"OKP\" || header.jwk.crv !== \"Ed25519\" || typeof header.jwk.x !== \"string\") throw new Error(\"UCAN header is invalid\");\n if (!record(payload) || typeof payload.iss !== \"string\" || typeof payload.aud !== \"string\" || payload.aud.length === 0) throw new Error(\"UCAN issuer or audience is invalid\");\n const issuer = principalOf(payload.iss);\n const publicKey = ed25519PublicKeyFromDidKey(issuer);\n const jwkKey = fromBase64Url(header.jwk.x);\n if (jwkKey.length !== publicKey.length || jwkKey.some((byte, index) => byte !== publicKey[index])) throw new Error(\"UCAN JWK does not bind the issuer\");\n const signature = fromBase64Url(signatureSegment);\n if (signature.length !== 64 || !ed25519.verify(signature, new TextEncoder().encode(`${headerSegment}.${payloadSegment}`), publicKey, { zip215: false })) throw new Error(\"UCAN signature is invalid\");\n const cid = ucanCid(authorization);\n if (expectedCid !== undefined && cid !== expectedCid) throw new Error(\"UCAN CID does not match its exact bytes\");\n const att = payload.att;\n if (!record(att) || Object.keys(att).length === 0 || !Object.values(att).every((abilities) => record(abilities) && Object.keys(abilities).length > 0 && Object.values(abilities).every((caveats) => Array.isArray(caveats) && caveats.length > 0))) throw new Error(\"UCAN attenuation is invalid\");\n const prf = payload.prf ?? [];\n if (!Array.isArray(prf) || !prf.every((item) => typeof item === \"string\")) throw new Error(\"UCAN proofs are invalid\");\n if (!Number.isSafeInteger(payload.exp) || (payload.nbf !== undefined && (!Number.isSafeInteger(payload.nbf) || (payload.nbf as number) >= (payload.exp as number)))) throw new Error(\"UCAN validity window is invalid\");\n if (payload.fct !== undefined && !Array.isArray(payload.fct)) throw new Error(\"UCAN facts are invalid\");\n return {\n cid,\n issuer,\n audience: principalOf(payload.aud),\n attenuation: att as SignedUcanDelegation[\"attenuation\"],\n proofs: prf as string[],\n ...(payload.nbf === undefined ? {} : { notBefore: payload.nbf as number }),\n expiresAt: payload.exp as number,\n ...(payload.fct === undefined ? {} : { facts: payload.fct as unknown[] }),\n };\n}\n","import { canonicalAddressSpelling } from \"../agent-record.js\";\nimport { cacaoTimes } from \"./cacao-times.js\";\nimport { attenuationCovers, type Attenuation } from \"./attenuation.js\";\nimport { principalOf } from \"./ucan.js\";\n\n/**\n * Owner→session SIWE CACAO checks (design C4). Security-sensitive.\n *\n * Signature, canonical DAG-CBOR, exact-bytes CID and the ReCap statement are\n * verified by the injected parser: sdk-core `parseSignedSiweCacao`\n * (`cacao.ts:205-276`; share-sdk cannot depend on sdk-core, which depends on\n * share-sdk). That parser does not check validity times, so this module adds:\n * `Not Before`/`Expiration Time` against `now`, issuer == the account owner,\n * audience == the child's issuer, and child attenuation ⊆ the CACAO's. `Not\n * Before` and `Issued At` are read from the verified bytes ({@link cacaoTimes}).\n */\nexport interface ParsedSiweCacao {\n readonly cid: string;\n /** `did:pkh:eip155:<chain>:<address>`. */\n readonly issuer: string;\n /** SIWE `uri`: the delegate DID. */\n readonly audience: string;\n readonly attenuation: Attenuation;\n readonly expiresAt?: string;\n}\n\n/** Verifies signature, encoding and the exact-bytes CID; throws otherwise. */\nexport type SiweCacaoParser = (authorization: string, expectedCid: string) => Promise<ParsedSiweCacao>;\n\nexport type DelegationTime = \"current\" | \"expired\";\n\n/** Clock skew tolerated for a `Not Before` slightly in the future. */\nexport const NOT_BEFORE_SKEW_MS = 5 * 60 * 1000;\n\nexport interface OwnerSessionCheck {\n readonly authorization: string;\n readonly expectedCid: string;\n readonly accountOwnerDid: string;\n /** The issuer of the delegation this CACAO must authorize (the leaf or root issuer). */\n readonly childIssuer: string;\n readonly childAttenuation: Attenuation;\n readonly now: Date;\n readonly parse: SiweCacaoParser;\n}\n\nexport interface VerifiedOwnerSession {\n readonly cid: string;\n /** The session principal (audience without fragment). */\n readonly sessionDid: string;\n readonly time: DelegationTime;\n /** The signed `Issued At` (epoch ms), when the parser reports it. */\n readonly issuedAt?: number;\n}\n\nfunction timeOf(value: string | undefined, label: string): number | undefined {\n if (value === undefined) return undefined;\n const parsed = Date.parse(value);\n if (!Number.isFinite(parsed)) throw new Error(`SIWE ${label} is not a timestamp`);\n return parsed;\n}\n\n/** Throws when the CACAO does not prove the owner→session hop; reports expiry separately. */\nexport async function verifyOwnerSessionDelegation(input: OwnerSessionCheck): Promise<VerifiedOwnerSession> {\n const cacao = await input.parse(input.authorization, input.expectedCid);\n if (cacao.cid !== input.expectedCid) throw new Error(\"SIWE CID does not match\");\n if (canonicalAddressSpelling(cacao.issuer) !== canonicalAddressSpelling(input.accountOwnerDid)) throw new Error(\"SIWE issuer is not the account owner\");\n if (principalOf(cacao.audience) !== principalOf(input.childIssuer)) throw new Error(\"SIWE audience is not the delegation issuer\");\n if (!attenuationCovers(cacao.attenuation, input.childAttenuation)) throw new Error(\"delegation widens the SIWE attenuation\");\n const times = cacaoTimes(input.authorization);\n const notBefore = timeOf(times.notBefore, \"Not Before\");\n const expiresAt = timeOf(cacao.expiresAt, \"Expiration Time\");\n if (notBefore !== undefined && expiresAt !== undefined && notBefore >= expiresAt) throw new Error(\"SIWE validity window is empty\");\n if (notBefore !== undefined && notBefore > input.now.getTime() + NOT_BEFORE_SKEW_MS) throw new Error(\"SIWE is not yet valid\");\n const issuedAt = timeOf(times.issuedAt, \"Issued At\");\n return {\n cid: cacao.cid, sessionDid: principalOf(cacao.audience), time: expiresAt !== undefined && expiresAt <= input.now.getTime() ? \"expired\" : \"current\",\n ...(issuedAt === undefined ? {} : { issuedAt }),\n };\n}\n","/**\n * Artifact pin verification (TC-1428). Small on purpose: this is the one place that decides whether an addressed\n * share that reads an artifact version may be trusted.\n *\n * What is signed. The owner signs the whole Policy/v3 envelope (Ed25519, `verifyEnvelopeV3SignatureOnly`). `artifactPin` is a\n * field of that envelope, so the signature covers it: artifact id, version, the sha256 of the version's\n * `manifest.json`, and the sha256 and size of the one stored file the share reads. The manifest stays an owner-side\n * record; a recipient never needs to fetch it. Policy/v3 already binds the file's ciphertext digest\n * (`contentSource.initialCiphertextDigestHex`); the pin binds that digest to an artifact identity and a version, so a\n * share cannot be re-pointed at another version or another artifact's path without breaking the signature.\n *\n * Trust model (accepted, TC-1428 finding 3): the owner is the trusted signer. The node has no write-once ACL, so the\n * owner (or whoever holds the owner's session) can overwrite `versions/<n>/<file>` afterwards. A recipient then\n * detects the substitution through the pin digest and fails closed; it cannot tell a malicious owner from a node\n * serving stale or altered bytes, and does not try to.\n *\n * Fails closed: any addressed share whose content source lies under `artifacts/` must carry a valid pin that matches\n * that source. A pin on any other path is refused. `artifacts/<id>/current/...` has no pin form in v1 and is refused.\n */\nimport {\n verifyEnvelopeV3SignatureOnly,\n type ArtifactPin,\n type ShareEnvelopeV3,\n type UnsignedShareEnvelopeV3,\n} from \"@tinycloud/share-envelope\";\nimport { ARTIFACT_ROOT, parseArtifactVersionPath } from \"./artifact-core.js\";\n\nexport type ArtifactPinErrorCode =\n | \"missing-pin\"\n | \"unsupported-artifact-path\"\n | \"wrong-signer\"\n | \"bad-signature\"\n | \"pin-source-mismatch\"\n | \"pinned-share-writable\"\n | \"expectation-mismatch\"\n | \"file-digest-mismatch\"\n | \"manifest-mismatch\";\n\nexport class ArtifactPinError extends Error {\n readonly code: ArtifactPinErrorCode;\n /** The code is the message: stable, short, and what callers and tests match on. */\n constructor(code: ArtifactPinErrorCode) {\n super(code);\n this.name = \"ArtifactPinError\";\n this.code = code;\n }\n}\n\n/**\n * What the caller already knows about the share it is opening, from outside the envelope. Optional: a v1 pinned share\n * names its version in its own signed pin and nothing outside the link says which one to expect, so no production\n * caller passes it. A caller that does learn a version out of band (a listing, a \"newer version\" link) uses it to\n * refuse an older or different pin.\n */\nexport interface ExpectedArtifact {\n readonly artifactId?: string;\n readonly version?: number;\n}\n\nexport interface VerifyArtifactShareOptions {\n /** The did:key the caller trusts as the sender. `signature.signerDid` is self-asserted and proves nothing alone. */\n readonly expectedOwnerDid: string;\n readonly expected?: ExpectedArtifact;\n}\n\n/**\n * The fields of an envelope (or of a share about to be built) that the pin binds. Taking a view lets the publisher run\n * the identical check before it registers anything, and the recipient run it again where it reads.\n */\nexport interface ArtifactBindingView {\n readonly artifactPin?: ArtifactPin;\n readonly target: { readonly spaceId: string };\n readonly contentSource: {\n readonly kvResource: string;\n readonly selector: \"exact\" | \"prefix\";\n readonly mode: \"mutable\" | \"immutable\";\n readonly initialCiphertextDigestHex?: string | undefined;\n };\n readonly resource: { readonly kind: \"exact\" | \"prefix\"; readonly path: string };\n /** Share actions (`read` | `list` | `edit`). */\n readonly actions: readonly string[];\n /** KV abilities the signed policy grants on the content source. */\n readonly policyKvActions: readonly string[];\n}\n\nexport function artifactBindingView(envelope: UnsignedShareEnvelopeV3 | ShareEnvelopeV3): ArtifactBindingView {\n return {\n ...(envelope.artifactPin === undefined ? {} : { artifactPin: envelope.artifactPin }),\n target: envelope.target,\n contentSource: envelope.contentSource,\n resource: envelope.resource,\n actions: envelope.actions,\n policyKvActions: envelope.policy.capabilityCeiling.flatMap((capability) => capability.kind === \"kv\" ? capability.actions : []),\n };\n}\n\nfunction sourcePath(view: ArtifactBindingView): string {\n const resource = view.contentSource.kvResource;\n const marker = \"/kv/\";\n const at = resource.indexOf(marker);\n if (at <= 0 || resource.slice(0, at) !== view.target.spaceId) {\n throw new ArtifactPinError(\"pin-source-mismatch\");\n }\n return resource.slice(at + marker.length);\n}\n\n/**\n * The pin and the content source must say the same thing, and a pinned share must be read-only. Synchronous and\n * signature-free, so the publisher can run it before registering anything and the recipient can re-run it at the\n * point of reading. Returns the pin for an artifact share and `undefined` for any other share.\n */\nexport function assertArtifactBinding(view: ArtifactBindingView, expected: ExpectedArtifact = {}): ArtifactPin | undefined {\n const pin = view.artifactPin;\n const path = sourcePath(view);\n const inArtifacts = path === ARTIFACT_ROOT || path.startsWith(`${ARTIFACT_ROOT}/`);\n if (!inArtifacts) {\n if (pin !== undefined) throw new ArtifactPinError(\"pin-source-mismatch\");\n return undefined;\n }\n if (pin === undefined) throw new ArtifactPinError(\"missing-pin\");\n const parsed = parseArtifactVersionPath(path);\n if (parsed === undefined) throw new ArtifactPinError(\"unsupported-artifact-path\");\n const file = pin.files[0]!;\n const source = view.contentSource;\n if (\n // The stored ciphertext of one file: bounded like content (100 MiB) plus the envelope's own framing.\n file.bytes > 128 * 1024 * 1024\n || pin.artifactId !== parsed.artifactId\n || pin.version !== parsed.version\n || file.path !== parsed.file\n || view.resource.kind !== \"exact\"\n || view.resource.path !== path\n || source.selector !== \"exact\"\n || source.mode !== \"immutable\"\n || source.initialCiphertextDigestHex !== file.sha256\n ) {\n throw new ArtifactPinError(\"pin-source-mismatch\");\n }\n // A pinned path is immutable: neither the envelope nor the signed policy may grant a write on it.\n if (view.actions.includes(\"edit\") || view.policyKvActions.includes(\"tinycloud.kv/put\")) {\n throw new ArtifactPinError(\"pinned-share-writable\");\n }\n if (\n (expected.artifactId !== undefined && expected.artifactId !== pin.artifactId)\n || (expected.version !== undefined && expected.version !== pin.version)\n ) {\n throw new ArtifactPinError(\"expectation-mismatch\");\n }\n return pin;\n}\n\n/**\n * Check that the trusted owner signed this envelope (and so its pin), then the pin binding. Throws `ArtifactPinError`;\n * never returns a partial answer. Only the owner's Ed25519 signature over the envelope is checked here, because that\n * is what authenticates the pin. The rest of the envelope (policy signature, owner roots, enforcer binding) is\n * `verifyEnvelopeV3`'s job, and `resolvePolicyShare` runs both before it trusts a link. (Folding the two into one\n * call was measured: +911 gzip bytes in the canonical ESM bundle, for a saved ed25519 verify.)\n */\nexport function verifyArtifactShare(envelope: ShareEnvelopeV3, options: VerifyArtifactShareOptions): ArtifactPin | undefined {\n if (envelope.signature.signerDid !== options.expectedOwnerDid) {\n throw new ArtifactPinError(\"wrong-signer\");\n }\n let valid: boolean;\n try { valid = verifyEnvelopeV3SignatureOnly(envelope) && envelope.policy.ownerDid === options.expectedOwnerDid; }\n catch { valid = false; }\n if (!valid) throw new ArtifactPinError(\"bad-signature\");\n return assertArtifactBinding(artifactBindingView(envelope), options.expected);\n}\n","import { canonicalize, shareEnvelopeV3Schema } from \"@tinycloud/share-envelope\";\nimport type { SenderShareRecord } from \"../history.js\";\nimport { parseArtifactVersionPath } from \"../artifact-core.js\";\nimport { verifyArtifactShare } from \"../artifact-pin.js\";\nimport { AgentRecordError, OwnerUnwrapUnavailableError, openAgentRecordAsOwner, parseStoredAgentRecord, SUPPORTED_AGENT_RECORD_V, MAX_AGENT_RECORD_BYTES } from \"./agent-record.js\";\nimport type { ShareIndexBackend } from \"./backend.js\";\nimport { DEFAULT_CAS_POLICY, runCas, type CasPolicy } from \"./cas.js\";\nimport { agentIdFromDid, agentRecordPrefix, classifyRecordKey, INDEX_MAIN_KEY, rejectedKeyEntry, SHARE_RECORDS_VAULT_PREFIX } from \"./ids.js\";\nimport { assertLinkBoundToMaterial, openDeliveryEnvelope, restoreShareRecordLink, type StoredShareRecord } from \"./delivery.js\";\nimport { validateShareLink } from \"./link.js\";\nimport { claimRank, decideClaim } from \"./precedence.js\";\nimport {\n ShareRecordSchemaError, checkAgentRecordSchema, emptyIndexDocument, parseArchiveDocument, parseIndexDocument, project, registeredAtFits,\n type ShareIndexAgentEntry, type ShareIndexDocument, type ShareIndexRow,\n} from \"./schema.js\";\nimport { verifyAgentRecordChain, type ShareRegistrationKey } from \"./verify/chain.js\";\nimport type { SiweCacaoParser } from \"./verify/session.js\";\n\n/**\n * `SenderShareIndex`: the encrypted, display-only share index at\n * `records/_index/main` (design C §2, §4, §5, §7). Records stay canonical;\n * the index is a projection that is only ever written with compare-and-swap.\n */\n\nexport interface ShareIndexLimits {\n readonly listPagesPerPass: number;\n readonly fetchesPerPass: number;\n readonly newRowsPerAgentPerPass: number;\n readonly liveRowsPerAgent: number;\n readonly rejectionsBeforePause: number;\n /** Agent rows together may use at most this share of `mainRowBytes`. */\n readonly agentRowShare: number;\n readonly mainRowBytes: number;\n readonly headerBytes: number;\n readonly maxAgentRecordBytes: number;\n readonly tombstoneTtlMs: number;\n readonly archiveAgeMs: number;\n readonly statusChecksPerSync: number;\n}\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\n\nexport const DEFAULT_SHARE_INDEX_LIMITS: ShareIndexLimits = {\n listPagesPerPass: 10,\n fetchesPerPass: 200,\n newRowsPerAgentPerPass: 50,\n liveRowsPerAgent: 500,\n rejectionsBeforePause: 100,\n agentRowShare: 0.5,\n mainRowBytes: 1024 * 1024,\n headerBytes: 64 * 1024,\n maxAgentRecordBytes: MAX_AGENT_RECORD_BYTES,\n tombstoneTtlMs: 30 * DAY_MS,\n archiveAgeMs: 90 * DAY_MS,\n statusChecksPerSync: 200,\n};\n\n/** Outbox ops carry rows and CIDs, never records. */\nexport type ShareIndexOp =\n | { readonly id: string; readonly type: \"upsert\"; readonly key: string; readonly row: ShareIndexRow }\n | { readonly id: string; readonly type: \"revoke\"; readonly key: string; readonly at: string; readonly confirmed: boolean }\n /** Only for revoked, expired or unreadable rows: tombstone first, then the caller deletes the record. */\n | { readonly id: string; readonly type: \"delete\"; readonly key: string }\n /** Owner agent controls: `resume` clears a pause; `recheck` also clears the agent's rejected lists. */\n | { readonly id: string; readonly type: \"agent\"; readonly agentId: string; readonly action: \"resume\" | \"recheck\" };\n\n/** Durable op queue: IndexedDB on the web, the profile cache for Tier 2. */\nexport interface ShareIndexOutbox {\n list(): Promise<readonly ShareIndexOp[]>;\n put(op: ShareIndexOp): Promise<void>;\n remove(ids: readonly string[]): Promise<void>;\n}\n\nexport class MemoryShareIndexOutbox implements ShareIndexOutbox {\n private readonly ops = new Map<string, ShareIndexOp>();\n async list(): Promise<readonly ShareIndexOp[]> { return [...this.ops.values()]; }\n async put(op: ShareIndexOp): Promise<void> { this.ops.set(op.id, op); }\n async remove(ids: readonly string[]): Promise<void> { for (const id of ids) this.ops.delete(id); }\n}\n\n/** Node-side status of a row's share, for status sync. `unknown` (e.g. agent-issued CIDs, TC-1419) changes nothing. */\nexport interface ShareStatusPort {\n status(key: string, row: ShareIndexRow): Promise<\"revoked\" | \"active\" | \"unknown\">;\n}\n\nexport interface SenderShareIndexOptions {\n readonly backend: ShareIndexBackend;\n readonly outbox: ShareIndexOutbox;\n /** The account owner (`did:pkh:…`). */\n readonly ownerDid: string;\n /** `updatedBy` label of this writer. */\n readonly writer: string;\n /** Configured share origins, for the link check. */\n readonly shareOrigins: readonly string[];\n /** sdk-core `parseSignedSiweCacao`. */\n readonly parseSiweCacao: SiweCacaoParser;\n /** Node registration keys by `nodeAudience`, from the share public config. */\n readonly registrationKey?: (nodeAudience: string) => ShareRegistrationKey | undefined;\n readonly limits?: Partial<ShareIndexLimits>;\n readonly cas?: Partial<CasPolicy>;\n readonly now?: () => Date;\n}\n\nexport type ShareIndexLoad =\n | { readonly status: \"ok\"; readonly doc: ShareIndexDocument }\n /** A higher schema version: render read-only (option A path), never write. */\n | { readonly status: \"read_only\"; readonly v: number }\n | { readonly status: \"not_found\" }\n /** Deterministic corruption: the next write rebuilds. */\n | { readonly status: \"corrupt\" }\n /** Outage: never a reason to rebuild. */\n | { readonly status: \"unavailable\" };\n\nexport type ShareIndexWriteStatus = \"written\" | \"unchanged\" | \"read_only\" | \"unavailable\";\n\nexport interface ShareIndexWriteOutcome {\n readonly status: ShareIndexWriteStatus;\n /** The document as written, or as found when the change was already present. */\n readonly doc?: ShareIndexDocument;\n}\n\nexport interface ShareIndexFlushResult {\n readonly status: ShareIndexWriteStatus | \"empty\";\n /** Op ids that can never apply (tombstoned upsert, delete of a live row, unknown row). They are dropped. */\n readonly refused: readonly string[];\n}\n\n/**\n * §5 rejection reasons; every check-4 failure (unwrap, DEK length, commit, GCM) is `decrypt`.\n * `provenance`: an agent-subtree record claiming `migrated`, which only owner imports may carry.\n */\nexport type AgentRejectReason = \"size\" | \"shape\" | \"header\" | \"decrypt\" | \"schema\" | \"provenance\" | \"link\" | \"proof\";\n\nexport interface ShareIndexReconcileReport {\n readonly status: ShareIndexWriteStatus;\n readonly pages: number;\n readonly fetches: number;\n readonly admitted: number;\n readonly rejected: Readonly<Record<string, number>>;\n readonly deferred: number;\n /** True when this pass reached the end of the key listing. */\n readonly cycleComplete: boolean;\n /** The header reached its cap: new agent header state (entries, rejections) was not added. Show an alert; no row was evicted. */\n readonly headerFull: boolean;\n}\n\ntype Finding =\n | { readonly kind: \"web\"; readonly key: string; readonly row: ShareIndexRow }\n | { readonly kind: \"agent\"; readonly key: string; readonly agentId: string; readonly did: string; readonly row: ShareIndexRow }\n | { readonly kind: \"reject\"; readonly agentId: string; readonly suffix: string; readonly reason: AgentRejectReason }\n | { readonly kind: \"newer\"; readonly agentId: string; readonly suffix: string; readonly recordV: number }\n | { readonly kind: \"gc\"; readonly agentId: string }\n | { readonly kind: \"clear-newer\"; readonly agentId: string };\n\ntype Examined =\n | { readonly kind: \"admit\"; readonly did: string; readonly row: ShareIndexRow }\n | { readonly kind: \"reject\"; readonly reason: AgentRejectReason }\n | { readonly kind: \"newer\"; readonly recordV: number }\n | { readonly kind: \"skip\" };\n\n/** Mutable working copies used inside one CAS mutation. */\ninterface WorkingAgent {\n did: string | null;\n rows: number;\n rejected: Record<string, number>;\n rejectedKeys: string[];\n newerKeys?: string[];\n newerV?: number;\n paused: false | { reason: \"rejections\" | \"row-cap\" | \"newer\"; at: string };\n firstSeen: string;\n [unknown: string]: unknown;\n}\ninterface WorkingDoc {\n v: number;\n ownerDid: string;\n spaceId: string;\n updatedAt: string;\n updatedBy: string;\n archives: { name: string; ids: string[] }[];\n tombstones: { key: string; at: string }[];\n reconcile: { cursor?: string };\n agents: Record<string, WorkingAgent>;\n rows: Record<string, ShareIndexRow>;\n [unknown: string]: unknown;\n}\n\nfunction bytesOf(value: unknown): number {\n return new TextEncoder().encode(JSON.stringify(value)).length;\n}\n\n/** Encoded size of everything except the rows. */\nexport function headerBytes(doc: ShareIndexDocument): number {\n const { rows: _rows, ...header } = doc;\n return bytesOf(header);\n}\n\nfunction sameContent(left: ShareIndexDocument, right: ShareIndexDocument): boolean {\n const strip = ({ updatedAt: _a, updatedBy: _b, ...rest }: ShareIndexDocument) => rest;\n return canonicalize(strip(left)) === canonicalize(strip(right));\n}\n\nfunction basename(key: string): string {\n return key.slice(key.lastIndexOf(\"/\") + 1);\n}\n\nfunction agentOf(row: ShareIndexRow): string | undefined {\n return row.src.startsWith(\"agent:\") ? row.src.slice(\"agent:\".length) : undefined;\n}\n\nfunction isObject(item: unknown): item is Record<string, unknown> {\n return item !== null && typeof item === \"object\" && !Array.isArray(item);\n}\n\n/** Enough of a web record to project a row; anything less is shown as unreadable. */\nfunction isWebRecord(value: unknown): value is SenderShareRecord {\n if (!isObject(value)) return false;\n const { shareId, target, resource, actions, recipientMatcher, registeredAt, expiresAt } = value;\n return typeof shareId === \"string\" && isObject(target) && typeof target.spaceId === \"string\"\n && isObject(resource) && typeof resource.path === \"string\" && Array.isArray(actions) && actions.every((item) => typeof item === \"string\")\n && isObject(recipientMatcher) && typeof recipientMatcher.kind === \"string\"\n && typeof registeredAt === \"string\" && typeof expiresAt === \"string\";\n}\n\nfunction unreadableRow(now: Date): ShareIndexRow {\n const at = now.toISOString();\n return { n: \"Unreadable share\", k: \"file\", ak: \"bearer\", al: \"\", a: [], c: at, x: at, rk: \"none\", src: \"web\", na: true };\n}\n\nexport class SenderShareIndex {\n private readonly backend: ShareIndexBackend;\n private readonly limits: ShareIndexLimits;\n private readonly cas: CasPolicy;\n private readonly now: () => Date;\n\n constructor(private readonly options: SenderShareIndexOptions) {\n this.backend = options.backend;\n this.limits = { ...DEFAULT_SHARE_INDEX_LIMITS, ...options.limits };\n this.cas = { ...DEFAULT_CAS_POLICY, ...options.cas };\n this.now = options.now ?? (() => new Date());\n }\n\n /** Library open: one GET + one decrypt. */\n async load(): Promise<ShareIndexLoad> {\n const read = await this.backend.readVault(INDEX_MAIN_KEY);\n if (read.status === \"not_found\" || read.status === \"unavailable\") return { status: read.status };\n if (read.status === \"corrupt\") return { status: \"corrupt\" };\n const parsed = parseIndexDocument(read.value);\n if (parsed.status === \"newer\") return { status: \"read_only\", v: parsed.v };\n return parsed.status === \"ok\" ? { status: \"ok\", doc: parsed.doc } : { status: \"corrupt\" };\n }\n\n async enqueue(op: ShareIndexOp): Promise<void> {\n await this.options.outbox.put(op);\n }\n\n // -------------------------------------------------------------------------\n // CAS\n\n /** Rebuild base after deterministic corruption: an empty document plus the archives found under `_index/`. */\n private async rebuildBase(): Promise<WorkingDoc> {\n const doc = this.emptyDoc();\n const page = await this.backend.listKeys(\"_index/\");\n if (page.status !== \"ok\") return doc;\n for (const key of page.keys) {\n const classified = classifyRecordKey(key);\n if (classified.kind !== \"index\" || classified.name === \"main\") continue;\n const read = await this.backend.readVault(key);\n const archive = read.status === \"ok\" ? parseArchiveDocument(read.value) : undefined;\n if (archive !== undefined) doc.archives.push({ name: classified.name, ids: Object.keys(archive.rows) });\n }\n return doc;\n }\n\n private emptyDoc(): WorkingDoc {\n return emptyIndexDocument({ ownerDid: this.options.ownerDid, spaceId: this.backend.spaceId, writer: this.options.writer, now: this.now() }) as unknown as WorkingDoc;\n }\n\n /**\n * Read → mutate → If-Match write, per {@link runCas}. A no-op change is never\n * written. The header cap is enforced by the reconciler on agent-derived\n * state only (see {@link reconcile}); the owner's own writes are never blocked by it.\n */\n private async update(mutate: (doc: WorkingDoc) => void | Promise<void>): Promise<ShareIndexWriteOutcome> {\n return runCas<ShareIndexWriteOutcome>(INDEX_MAIN_KEY, this.cas, async () => {\n const read = await this.backend.readVault(INDEX_MAIN_KEY);\n let base: WorkingDoc;\n let condition: { ifMatch: string } | { ifNoneMatch: \"*\" };\n let existed = true;\n if (read.status === \"unavailable\") return { done: { status: \"unavailable\" as const } };\n if (read.status === \"not_found\") {\n base = this.emptyDoc();\n condition = { ifNoneMatch: \"*\" };\n existed = false;\n } else if (read.status === \"corrupt\") {\n if (read.etag === undefined) return { done: { status: \"unavailable\" as const } };\n base = await this.rebuildBase();\n condition = { ifMatch: read.etag };\n existed = false;\n } else {\n const parsed = parseIndexDocument(read.value);\n if (parsed.status === \"newer\") return { done: { status: \"read_only\" as const } };\n base = parsed.status === \"ok\" ? structuredClone(parsed.doc) as unknown as WorkingDoc : await this.rebuildBase();\n existed = parsed.status === \"ok\";\n condition = { ifMatch: read.etag };\n }\n const before = structuredClone(base) as unknown as ShareIndexDocument;\n await mutate(base);\n const next = base as unknown as ShareIndexDocument;\n if (existed && sameContent(before, next)) return { done: { status: \"unchanged\" as const, doc: before } };\n base.updatedAt = this.now().toISOString();\n base.updatedBy = this.options.writer;\n return { write: await this.backend.writeVault(INDEX_MAIN_KEY, next, condition), onSuccess: () => ({ status: \"written\" as const, doc: next }) };\n });\n }\n\n // -------------------------------------------------------------------------\n // Shared mutation helpers\n\n /** When false (header at its cap), no new agent header state is added: no new entries, rejections or newer keys. */\n private growHeader = true;\n\n private ensureAgent(doc: WorkingDoc, agentId: string): WorkingAgent | undefined {\n const existing = doc.agents[agentId];\n if (existing !== undefined || !this.growHeader) return existing;\n const created: WorkingAgent = { did: null, rows: 0, rejected: {}, rejectedKeys: [], paused: false, firstSeen: this.now().toISOString() };\n doc.agents[agentId] = created;\n return created;\n }\n\n /** Count a rejection once per key: a key already in `rejectedKeys` changes nothing. */\n private recordRejection(doc: WorkingDoc, agentId: string, suffix: string, reason: string): void {\n const entry = this.ensureAgent(doc, agentId);\n const entryKey = rejectedKeyEntry(suffix);\n if (entry === undefined || !this.growHeader || entry.rejectedKeys.includes(entryKey)) return;\n entry.rejected[reason] = (entry.rejected[reason] ?? 0) + 1;\n if (entry.rejectedKeys.length < this.limits.rejectionsBeforePause) entry.rejectedKeys.push(entryKey);\n const total = Object.values(entry.rejected).reduce((sum, count) => sum + count, 0);\n if (entry.paused === false && total >= this.limits.rejectionsBeforePause) entry.paused = { reason: \"rejections\", at: this.now().toISOString() };\n }\n\n /** Remove a displaced row; a displaced agent claim counts as `proof` and is not refetched. */\n private displace(doc: WorkingDoc, key: string): void {\n const row = doc.rows[key];\n if (row === undefined) return;\n delete doc.rows[key];\n const agentId = agentOf(row);\n if (agentId === undefined) return;\n const entry = this.ensureAgent(doc, agentId);\n if (entry !== undefined) entry.rows = Math.max(0, entry.rows - 1);\n this.recordRejection(doc, agentId, basename(key), \"proof\");\n }\n\n private isRetired(doc: WorkingDoc, key: string): boolean {\n return doc.tombstones.some((tombstone) => tombstone.key === key) || doc.archives.some((archive) => archive.ids.includes(key));\n }\n\n // -------------------------------------------------------------------------\n // Ops\n\n private applyOp(doc: WorkingDoc, op: ShareIndexOp): \"applied\" | \"refused\" {\n const now = this.now();\n if (op.type === \"agent\") {\n const entry = doc.agents[op.agentId];\n if (entry === undefined) return \"refused\";\n entry.paused = false;\n if (op.action === \"recheck\") {\n entry.rejected = {};\n entry.rejectedKeys = [];\n delete entry.newerKeys;\n delete entry.newerV;\n }\n return \"applied\";\n }\n const existing = doc.rows[op.key];\n if (op.type === \"upsert\") {\n if (this.isRetired(doc, op.key)) return \"refused\";\n if (existing !== undefined) return \"applied\"; // display fields are immutable\n const decision = decideClaim(doc.rows, op.key, op.row);\n if (!decision.admit) return \"refused\";\n for (const key of decision.displaced) this.displace(doc, key);\n doc.rows[op.key] = op.row;\n return \"applied\";\n }\n if (op.type === \"revoke\") {\n if (existing === undefined) return this.isRetired(doc, op.key) ? \"applied\" : \"refused\";\n const at = existing.r === undefined || Date.parse(op.at) < Date.parse(existing.r.at) ? op.at : existing.r.at;\n doc.rows[op.key] = { ...existing, r: { at, confirmed: existing.r?.confirmed === true || op.confirmed } };\n return \"applied\";\n }\n if (existing === undefined) return doc.tombstones.some((tombstone) => tombstone.key === op.key) ? \"applied\" : \"refused\";\n if (existing.r === undefined && Date.parse(existing.x) > now.getTime() && existing.na !== true) return \"refused\";\n this.displaceForDelete(doc, op.key, existing);\n doc.tombstones.push({ key: op.key, at: now.toISOString() });\n return \"applied\";\n }\n\n private displaceForDelete(doc: WorkingDoc, key: string, row: ShareIndexRow): void {\n delete doc.rows[key];\n const agentId = agentOf(row);\n const entry = agentId === undefined ? undefined : doc.agents[agentId];\n if (entry !== undefined) entry.rows = Math.max(0, entry.rows - 1);\n }\n\n /**\n * Apply every pending outbox op in one CAS. Ops leave the outbox only after\n * the write is confirmed (or the change was already present). Any CAS error,\n * including `INVALID_ETAG`, propagates with the ops still pending.\n */\n async flush(): Promise<ShareIndexFlushResult> {\n const ops = await this.options.outbox.list();\n if (ops.length === 0) return { status: \"empty\", refused: [] };\n let refused: string[] = [];\n const result = await this.update((doc) => {\n refused = [];\n for (const op of ops) if (this.applyOp(doc, op) === \"refused\") refused.push(op.id);\n });\n if (result.status === \"written\" || result.status === \"unchanged\") await this.options.outbox.remove(ops.map((op) => op.id));\n return { status: result.status, refused };\n }\n\n // -------------------------------------------------------------------------\n // Reconciler (§4, §5)\n\n private async examineAgentRecord(key: string, agentId: string, shareId: string, archived: () => Promise<ReadonlyMap<string, number>>): Promise<Examined> {\n const unwrap = this.backend.ownerUnwrap;\n if (unwrap === undefined) return { kind: \"skip\" };\n // 2. size: refused before the body is fetched when the adapter can learn it first, and from the body length otherwise.\n const raw = await this.backend.readRaw(key, this.limits.maxAgentRecordBytes);\n if (raw.status === \"too_large\") return { kind: \"reject\", reason: \"size\" };\n if (raw.status !== \"ok\") return { kind: \"skip\" };\n if (raw.bytes.byteLength > this.limits.maxAgentRecordBytes) return { kind: \"reject\", reason: \"size\" };\n // 3. header bound to the path.\n let stored;\n try {\n stored = parseStoredAgentRecord(raw.bytes, { ownerNetworkId: this.backend.ownerNetworkId });\n } catch (error) {\n if (error instanceof AgentRecordError && error.reason === \"newer\") return { kind: \"newer\", recordV: this.peekRecordV(raw.bytes) };\n return { kind: \"reject\", reason: error instanceof AgentRecordError && error.reason === \"header\" ? \"header\" : \"shape\" };\n }\n let derived: string;\n try { derived = agentIdFromDid(stored.hdr.agentDid); } catch { return { kind: \"reject\", reason: \"header\" }; }\n if (derived !== agentId) return { kind: \"reject\", reason: \"header\" };\n // 4. unwrap, commit, open.\n let plaintext: Uint8Array;\n try {\n plaintext = await openAgentRecordAsOwner(stored, { spaceId: this.backend.spaceId, vaultKey: `${SHARE_RECORDS_VAULT_PREFIX}${key}` }, unwrap);\n } catch (error) {\n if (error instanceof OwnerUnwrapUnavailableError) return { kind: \"skip\" };\n return { kind: \"reject\", reason: \"decrypt\" };\n }\n let value: unknown;\n try { value = JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(plaintext)); } catch { return { kind: \"reject\", reason: \"schema\" }; }\n const checked = await this.checkRecord(value, { key, shareId, src: `agent:${agentId}`, source: \"agent\", agentDid: stored.hdr.agentDid, recordV: stored.hdr.recordV }, archived);\n return checked.kind === \"admit\" ? { kind: \"admit\", did: stored.hdr.agentDid, row: checked.row } : checked;\n }\n\n /** §5 checks 5–7 for a decrypted record, shared by agent records and one-time owner imports. */\n private async checkRecord(\n value: unknown,\n input: { readonly key: string; readonly shareId: string; readonly src: string; readonly source: \"agent\" | \"migrated\"; readonly agentDid: string; readonly recordV: number },\n archived: () => Promise<ReadonlyMap<string, number>>,\n ): Promise<{ readonly kind: \"admit\"; readonly row: ShareIndexRow } | { readonly kind: \"reject\"; readonly reason: AgentRejectReason }> {\n // 5. schema, versioned.\n let record: StoredShareRecord;\n try {\n record = checkAgentRecordSchema(value, {\n recordV: input.recordV, shareId: input.shareId, accountOwnerDid: this.options.ownerDid, agentDid: input.agentDid, source: input.source,\n });\n } catch (error) {\n return { kind: \"reject\", reason: error instanceof ShareRecordSchemaError && error.reason === \"provenance\" ? \"provenance\" : \"schema\" };\n }\n // Reconstruct and verify original wrapper metadata before link and chain admission. Details: TC-1739\n let link: string | undefined;\n try { link = await restoreShareRecordLink(record, this.options.shareOrigins); } catch { return { kind: \"reject\", reason: \"link\" }; }\n if (link !== undefined && !validateShareLink(link, this.options.shareOrigins).ok) return { kind: \"reject\", reason: \"link\" };\n if (link !== undefined && record.deliveryMaterial !== undefined) {\n try { assertLinkBoundToMaterial(link, record.deliveryMaterial); } catch { return { kind: \"reject\", reason: \"link\" }; }\n }\n // 7. CID ownership by proof. A migrated record has no agent binding, so it is never `proven`.\n const verdict = await verifyAgentRecordChain(record, {\n accountOwnerDid: this.options.ownerDid, agentDid: input.agentDid, now: this.now(), parseSiweCacao: this.options.parseSiweCacao,\n ...(this.options.registrationKey === undefined ? {} : { registrationKey: this.options.registrationKey }),\n });\n if (!verdict.ok) return { kind: \"reject\", reason: \"proof\" };\n if (parseArtifactVersionPath(record.resource.path) !== undefined && record.deliveryMaterial !== undefined) {\n try {\n const envelope = shareEnvelopeV3Schema.parse(await openDeliveryEnvelope(record.deliveryMaterial));\n if (verifyArtifactShare(envelope, { expectedOwnerDid: envelope.policy.ownerDid }) === undefined) return { kind: \"reject\", reason: \"proof\" };\n } catch { return { kind: \"reject\", reason: \"proof\" }; }\n }\n // registeredAt against signed times in the chain, never against when the owner happens to look. A one-time\n // owner import keeps the ruled exemption from the ±1-day anchor; it still may not postdate the chain or the clock.\n const window = input.source === \"migrated\" ? { ...(verdict.issued.latest === undefined ? {} : { latest: verdict.issued.latest }) } : verdict.issued;\n if (!registeredAtFits(record.registeredAt, window, this.now())) return { kind: \"reject\", reason: \"schema\" };\n const row = project(record, { key: input.key, src: input.src, claims: verdict.claims, proof: { state: verdict.state, expired: verdict.expired } });\n if (verdict.state !== \"proven\") {\n const archivedClaims = await archived();\n if (verdict.claims.some((cid) => (archivedClaims.get(cid) ?? -1) >= claimRank(row))) return { kind: \"reject\", reason: \"proof\" };\n }\n return { kind: \"admit\", row };\n }\n\n private peekRecordV(bytes: Uint8Array): number {\n try {\n const value: unknown = JSON.parse(new TextDecoder().decode(bytes));\n const recordV = isObject(value) && isObject(value.hdr) ? value.hdr.recordV : undefined;\n return typeof recordV === \"number\" && Number.isSafeInteger(recordV) ? recordV : SUPPORTED_AGENT_RECORD_V + 1;\n } catch {\n return SUPPORTED_AGENT_RECORD_V + 1;\n }\n }\n\n private async archivedClaims(doc: ShareIndexDocument): Promise<Map<string, number>> {\n const claims = new Map<string, number>();\n for (const archive of doc.archives) {\n const read = await this.backend.readVault(`_index/${archive.name}`);\n const parsed = read.status === \"ok\" ? parseArchiveDocument(read.value) : undefined;\n for (const row of Object.values(parsed?.rows ?? {})) for (const cid of row.cc ?? []) claims.set(cid, Math.max(claims.get(cid) ?? -1, claimRank(row)));\n }\n return claims;\n }\n\n /**\n * One budgeted pass: list keys from `reconcile.cursor`, fetch and check what\n * the index does not know, then apply the findings in one CAS. Never\n * deletes rows; tombstoned, archived and rejected keys are never refetched.\n */\n async reconcile(): Promise<ShareIndexReconcileReport> {\n const loaded = await this.load();\n if (loaded.status === \"read_only\" || loaded.status === \"unavailable\") return { status: loaded.status, pages: 0, fetches: 0, admitted: 0, rejected: {}, deferred: 0, cycleComplete: false, headerFull: false };\n const doc = loaded.status === \"ok\" ? loaded.doc : (this.emptyDoc() as unknown as ShareIndexDocument);\n const known = new Set<string>([...Object.keys(doc.rows), ...doc.tombstones.map((tombstone) => tombstone.key), ...doc.archives.flatMap((archive) => archive.ids)]);\n const findings: Finding[] = [];\n const agentStates = new Map<string, { known: Set<string>; attempted: number; rejections: number; paused: boolean; rows: number }>();\n const agentState = (agentId: string): { known: Set<string>; attempted: number; rejections: number; paused: boolean; rows: number } => {\n const entry: ShareIndexAgentEntry | undefined = doc.agents[agentId];\n let state = agentStates.get(agentId);\n if (state === undefined) {\n state = {\n known: new Set([...(entry?.rejectedKeys ?? []), ...(entry?.newerKeys ?? [])]),\n attempted: 0,\n rejections: Object.values(entry?.rejected ?? {}).reduce((sum, count) => sum + count, 0),\n paused: entry !== undefined && entry.paused !== false,\n rows: entry?.rows ?? 0,\n };\n agentStates.set(agentId, state);\n }\n return state;\n };\n let archived: Promise<Map<string, number>> | undefined;\n const archivedOnce = () => (archived ??= this.archivedClaims(doc));\n let pages = 0;\n let fetches = 0;\n let deferred = 0;\n const rejectedCounts: Record<string, number> = {};\n const reject = (agentId: string, suffix: string, reason: AgentRejectReason): void => {\n const state = agentState(agentId);\n state.known.add(rejectedKeyEntry(suffix));\n state.rejections++;\n if (state.rejections >= this.limits.rejectionsBeforePause) state.paused = true;\n rejectedCounts[reason] = (rejectedCounts[reason] ?? 0) + 1;\n findings.push({ kind: \"reject\", agentId, suffix, reason });\n };\n\n let cursor = doc.reconcile.cursor;\n let cycleComplete = false;\n let budgetHit = false;\n pageLoop: while (pages < this.limits.listPagesPerPass) {\n let page = await this.backend.listKeys(\"\", cursor);\n pages++;\n // A stored cursor can go stale (it is bound to the listing session): restart from the top once.\n if (page.status !== \"ok\" && cursor !== undefined && pages === 1) {\n cursor = undefined;\n page = await this.backend.listKeys(\"\");\n pages++;\n }\n if (page.status !== \"ok\") break;\n for (const key of page.keys) {\n const classified = classifyRecordKey(key);\n if (classified.kind === \"index\") continue;\n if (classified.kind === \"rejected\") {\n if (classified.agentId === undefined || classified.suffix === undefined) continue; // owner-written: skip uncounted\n const state = agentState(classified.agentId);\n if (state.paused || state.known.has(rejectedKeyEntry(classified.suffix))) continue;\n reject(classified.agentId, classified.suffix, \"shape\");\n continue;\n }\n if (known.has(key)) continue;\n if (fetches >= this.limits.fetchesPerPass) { budgetHit = true; break pageLoop; }\n if (classified.kind === \"web\") {\n fetches++;\n const read = await this.backend.readVault(key);\n if (read.status === \"ok\" && isObject(read.value) && read.value.provenance === \"migrated\") {\n // One-time owner import: verified like an agent record; a failure needs attention.\n const checked = await this.checkRecord(read.value, { key, shareId: classified.shareId, src: \"web\", source: \"migrated\", agentDid: \"\", recordV: SUPPORTED_AGENT_RECORD_V }, archivedOnce);\n findings.push({ kind: \"web\", key, row: checked.kind === \"admit\" ? checked.row : { ...unreadableRow(this.now()), pv: \"migrated\" } });\n } else if (read.status === \"ok\") {\n let row: ShareIndexRow;\n try { row = isWebRecord(read.value) ? project(read.value, { key, src: \"web\" }) : unreadableRow(this.now()); } catch { row = unreadableRow(this.now()); }\n findings.push({ kind: \"web\", key, row });\n } else if (read.status === \"corrupt\") {\n findings.push({ kind: \"web\", key, row: unreadableRow(this.now()) });\n }\n continue;\n }\n // Agent record.\n const state = agentState(classified.agentId);\n if (state.paused || state.known.has(rejectedKeyEntry(classified.shareId))) continue;\n // Every fetch, whatever its verdict, spends the agent's per-pass allowance (≤50 GETs and decrypts per agent per pass).\n if (state.attempted >= this.limits.newRowsPerAgentPerPass || state.rows + state.attempted >= this.limits.liveRowsPerAgent) { deferred++; continue; }\n fetches++;\n state.attempted++;\n const examined = await this.examineAgentRecord(key, classified.agentId, classified.shareId, archivedOnce);\n if (examined.kind === \"admit\") {\n findings.push({ kind: \"agent\", key, agentId: classified.agentId, did: examined.did, row: examined.row });\n } else if (examined.kind === \"reject\") {\n reject(classified.agentId, classified.shareId, examined.reason);\n } else if (examined.kind === \"newer\") {\n state.known.add(rejectedKeyEntry(classified.shareId));\n findings.push({ kind: \"newer\", agentId: classified.agentId, suffix: classified.shareId, recordV: examined.recordV });\n }\n }\n cursor = page.cursor;\n if (cursor === undefined) { cycleComplete = true; break; }\n }\n const nextCursor = budgetHit ? doc.reconcile.cursor : cursor;\n\n // Header GC (V3-8) and newer re-check.\n for (const [agentId, entry] of Object.entries(doc.agents)) {\n if (entry.newerKeys !== undefined && entry.newerV !== undefined && entry.newerV <= SUPPORTED_AGENT_RECORD_V) findings.push({ kind: \"clear-newer\", agentId });\n if (entry.rows !== 0 || agentStates.get(agentId)?.attempted || pages >= this.limits.listPagesPerPass) continue;\n const prefixPage = await this.backend.listKeys(agentRecordPrefix(agentId));\n pages++;\n if (prefixPage.status === \"ok\" && prefixPage.keys.length === 0) findings.push({ kind: \"gc\", agentId });\n }\n\n let admitted = 0;\n let headerFull = false;\n const result = await this.update((working) => {\n // Header cap (§5, never evicts rows): if the findings would grow the header past its cap, apply them\n // again without new agent header state. Rows still land; the caller shows `headerFull` as an alert.\n const trial = structuredClone(working);\n this.applyFindings(trial, findings, () => {});\n headerFull = headerBytes(trial as unknown as ShareIndexDocument) > this.limits.headerBytes && headerBytes(trial as unknown as ShareIndexDocument) > headerBytes(working as unknown as ShareIndexDocument);\n admitted = 0;\n this.growHeader = !headerFull;\n try {\n this.applyFindings(working, findings, () => { admitted++; });\n } finally {\n this.growHeader = true;\n }\n if (nextCursor === undefined) delete working.reconcile.cursor;\n else working.reconcile.cursor = nextCursor;\n });\n return { status: result.status, pages, fetches, admitted, rejected: rejectedCounts, deferred, cycleComplete, headerFull };\n }\n\n private applyFindings(doc: WorkingDoc, findings: readonly Finding[], onAdmit: () => void): void {\n const agentBudget = this.limits.mainRowBytes * this.limits.agentRowShare;\n let agentBytes = Object.values(doc.rows).filter((row) => agentOf(row) !== undefined).reduce((sum, row) => sum + bytesOf(row), 0);\n for (const finding of findings) {\n if (finding.kind === \"reject\") { this.recordRejection(doc, finding.agentId, finding.suffix, finding.reason); continue; }\n if (finding.kind === \"gc\") {\n const entry = doc.agents[finding.agentId];\n if (entry !== undefined && entry.rows === 0) delete doc.agents[finding.agentId];\n continue;\n }\n if (finding.kind === \"clear-newer\") {\n const entry = doc.agents[finding.agentId];\n if (entry !== undefined) { delete entry.newerKeys; delete entry.newerV; if (entry.paused !== false && entry.paused.reason === \"newer\") entry.paused = false; }\n continue;\n }\n if (finding.kind === \"newer\") {\n const entry = this.ensureAgent(doc, finding.agentId);\n if (entry === undefined || !this.growHeader) continue;\n const keys = entry.newerKeys ?? (entry.newerKeys = []);\n const suffix = rejectedKeyEntry(finding.suffix);\n if (keys.includes(suffix)) continue;\n if (keys.length >= this.limits.rejectionsBeforePause) { if (entry.paused === false) entry.paused = { reason: \"newer\", at: this.now().toISOString() }; continue; }\n keys.push(suffix);\n entry.newerV = Math.max(entry.newerV ?? 0, finding.recordV);\n continue;\n }\n if (doc.rows[finding.key] !== undefined || this.isRetired(doc, finding.key)) continue;\n if (finding.kind === \"agent\") {\n const entry = this.ensureAgent(doc, finding.agentId);\n if (entry === undefined || entry.paused !== false || entry.rejectedKeys.includes(rejectedKeyEntry(basename(finding.key)))) continue;\n if (entry.rows >= this.limits.liveRowsPerAgent) { entry.paused = { reason: \"row-cap\", at: this.now().toISOString() }; continue; }\n const size = bytesOf(finding.row);\n if (agentBytes + size > agentBudget) continue; // deferred: agent rows may not crowd out web rows\n const decision = decideClaim(doc.rows, finding.key, finding.row);\n if (!decision.admit) { this.recordRejection(doc, finding.agentId, basename(finding.key), \"proof\"); continue; }\n for (const key of decision.displaced) { agentBytes -= bytesOf(doc.rows[key]); this.displace(doc, key); }\n doc.rows[finding.key] = finding.row;\n entry.rows++;\n entry.did ??= finding.did;\n agentBytes += size;\n if (entry.rows >= this.limits.liveRowsPerAgent && entry.paused === false) entry.paused = { reason: \"row-cap\", at: this.now().toISOString() };\n onAdmit();\n continue;\n }\n const decision = decideClaim(doc.rows, finding.key, finding.row);\n if (!decision.admit) {\n // A migrated import that loses precedence stays visible as needs-attention with no claim, so it is not refetched.\n if (finding.row.pv === \"migrated\") {\n const { cid: _cid, cc: _cc, ...claimless } = finding.row;\n doc.rows[finding.key] = { ...claimless, na: true };\n }\n continue;\n }\n for (const key of decision.displaced) { agentBytes -= bytesOf(doc.rows[key]); this.displace(doc, key); }\n doc.rows[finding.key] = finding.row;\n onAdmit();\n }\n }\n\n // -------------------------------------------------------------------------\n // Status sync (§4): only node-confirmed revocation is sticky.\n\n async syncStatus(port: ShareStatusPort): Promise<{ readonly status: ShareIndexWriteStatus; readonly checked: number }> {\n const loaded = await this.load();\n if (loaded.status !== \"ok\") return { status: loaded.status === \"read_only\" ? \"read_only\" : \"unavailable\", checked: 0 };\n const results = new Map<string, \"revoked\" | \"active\">();\n let checked = 0;\n for (const [key, row] of Object.entries(loaded.doc.rows)) {\n if (checked >= this.limits.statusChecksPerSync) break;\n if (row.rk === \"none\" || row.r?.confirmed === true) continue;\n checked++;\n const status = await port.status(key, row);\n if (status !== \"unknown\") results.set(key, status);\n }\n const result = await this.update((doc) => {\n for (const [key, status] of results) {\n const row = doc.rows[key];\n if (row === undefined || row.r?.confirmed === true) continue;\n if (status === \"revoked\") doc.rows[key] = { ...row, r: { at: row.r?.at ?? this.now().toISOString(), confirmed: true } };\n else if (row.r !== undefined) { const { r: _r, ...rest } = row; doc.rows[key] = rest as ShareIndexRow; }\n }\n });\n return { status: result.status, checked };\n }\n\n // -------------------------------------------------------------------------\n // Compaction (§7): rows over their byte budget move to archives; the header never evicts rows.\n\n async compact(): Promise<{ readonly status: ShareIndexWriteStatus; readonly archived: number }> {\n const loaded = await this.load();\n if (loaded.status !== \"ok\") return { status: loaded.status === \"read_only\" ? \"read_only\" : \"unavailable\", archived: 0 };\n const doc = loaded.doc;\n const now = this.now().getTime();\n const sizes = new Map(Object.entries(doc.rows).map(([key, row]) => [key, bytesOf(row)] as const));\n let total = [...sizes.values()].reduce((sum, size) => sum + size, 0);\n let agentTotal = Object.entries(doc.rows).filter(([, row]) => agentOf(row) !== undefined).reduce((sum, [key]) => sum + sizes.get(key)!, 0);\n const byAge = Object.entries(doc.rows).sort(([, left], [, right]) => Date.parse(left.c) - Date.parse(right.c));\n const chosen = new Set<string>();\n const take = (key: string): void => {\n if (chosen.has(key)) return;\n chosen.add(key);\n total -= sizes.get(key)!;\n if (agentOf(doc.rows[key]!) !== undefined) agentTotal -= sizes.get(key)!;\n };\n if (total > this.limits.mainRowBytes) {\n for (const [key, row] of byAge) {\n if (total <= this.limits.mainRowBytes) break;\n const done = row.r !== undefined || Date.parse(row.x) <= now;\n if (done && now - Date.parse(row.c) > this.limits.archiveAgeMs) take(key);\n }\n for (const [key, row] of byAge) {\n if (total <= this.limits.mainRowBytes || agentTotal <= this.limits.mainRowBytes * this.limits.agentRowShare) break;\n if (agentOf(row) !== undefined) take(key);\n }\n for (const [key] of byAge) {\n if (total <= this.limits.mainRowBytes) break;\n take(key);\n }\n }\n // Archive documents first, so a crash leaves rows in both places, never in neither.\n const groups = new Map<string, Record<string, ShareIndexRow>>();\n for (const key of chosen) {\n const row = doc.rows[key]!;\n const name = `archive-${new Date(Date.parse(row.c) || now).getUTCFullYear()}`;\n const group = groups.get(name) ?? {};\n group[key] = row;\n groups.set(name, group);\n }\n for (const [name, rows] of groups) {\n await runCas(`_index/${name}`, this.cas, async () => {\n const read = await this.backend.readVault(`_index/${name}`);\n if (read.status === \"unavailable\" || (read.status === \"corrupt\" && read.etag === undefined)) throw new Error(\"archive document is unavailable\");\n const existing = read.status === \"ok\" ? parseArchiveDocument(read.value) : undefined;\n const merged = { ...(existing ?? { v: 1 }), rows: { ...(existing?.rows ?? {}), ...rows } };\n const condition = read.status === \"ok\" || read.status === \"corrupt\" ? { ifMatch: read.etag! } : { ifNoneMatch: \"*\" as const };\n return { write: await this.backend.writeVault(`_index/${name}`, merged, condition), onSuccess: () => undefined };\n });\n }\n // Tombstones past their TTL are dropped once the record is gone.\n const expiredTombstones: string[] = [];\n for (const tombstone of doc.tombstones) {\n if (now - Date.parse(tombstone.at) <= this.limits.tombstoneTtlMs) continue;\n const classified = classifyRecordKey(tombstone.key);\n const gone = classified.kind === \"agent\" ? (await this.backend.readRaw(tombstone.key)).status === \"not_found\" : (await this.backend.readVault(tombstone.key)).status === \"not_found\";\n if (gone) expiredTombstones.push(tombstone.key);\n }\n const result = await this.update((working) => {\n for (const [name, rows] of groups) {\n let archive = working.archives.find((item) => item.name === name);\n if (archive === undefined) working.archives.push(archive = { name, ids: [] });\n for (const key of Object.keys(rows)) {\n const row = working.rows[key];\n if (row !== undefined) this.displaceForDelete(working, key, row);\n if (!archive.ids.includes(key)) archive.ids.push(key);\n }\n }\n working.tombstones = working.tombstones.filter((tombstone) => !expiredTombstones.includes(tombstone.key));\n });\n return { status: result.status, archived: chosen.size };\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,iBAAuB;;;AYGvB,kBAAuB;ACuDvB,qBAAwB;;;AY1DxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAI;AAAA,CACV,SAAUC,OAAM;AACb,EAAAA,MAAK,cAAc,CAAC,MAAM;AAAA,EAAE;AAC5B,WAAS,SAAS,MAAM;AAAA,EAAE;AAC1B,EAAAA,MAAK,WAAW;AAChB,WAAS,YAAY,IAAI;AACrB,UAAM,IAAI,MAAM;AAAA,EACpB;AACA,EAAAA,MAAK,cAAc;AACnB,EAAAA,MAAK,cAAc,CAAC,UAAU;AAC1B,UAAM,MAAM,CAAC;AACb,eAAW,QAAQ,OAAO;AACtB,UAAI,IAAI,IAAI;AAAA,IAChB;AACA,WAAO;AAAA,EACX;AACA,EAAAA,MAAK,qBAAqB,CAAC,QAAQ;AAC/B,UAAM,YAAYA,MAAK,WAAW,GAAG,EAAE,OAAO,CAAC,MAAM,OAAO,IAAI,IAAI,CAAC,CAAC,MAAM,QAAQ;AACpF,UAAM,WAAW,CAAC;AAClB,eAAW,KAAK,WAAW;AACvB,eAAS,CAAC,IAAI,IAAI,CAAC;AAAA,IACvB;AACA,WAAOA,MAAK,aAAa,QAAQ;AAAA,EACrC;AACA,EAAAA,MAAK,eAAe,CAAC,QAAQ;AACzB,WAAOA,MAAK,WAAW,GAAG,EAAE,IAAI,SAAU,GAAG;AACzC,aAAO,IAAI,CAAC;AAAA,IAChB,CAAC;AAAA,EACL;AACA,EAAAA,MAAK,aAAa,OAAO,OAAO,SAAS,aACnC,CAAC,QAAQ,OAAO,KAAK,GAAG,IACxB,CAACC,YAAW;AACV,UAAM,OAAO,CAAC;AACd,eAAW,OAAOA,SAAQ;AACtB,UAAI,OAAO,UAAU,eAAe,KAAKA,SAAQ,GAAG,GAAG;AACnD,aAAK,KAAK,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ,EAAAD,MAAK,OAAO,CAAC,KAAK,YAAY;AAC1B,eAAW,QAAQ,KAAK;AACpB,UAAI,QAAQ,IAAI;AACZ,eAAO;AAAA,IACf;AACA,WAAO;AAAA,EACX;AACA,EAAAA,MAAK,YAAY,OAAO,OAAO,cAAc,aACvC,CAAC,QAAQ,OAAO,UAAU,GAAG,IAC7B,CAAC,QAAQ,OAAO,QAAQ,YAAY,OAAO,SAAS,GAAG,KAAK,KAAK,MAAM,GAAG,MAAM;AACtF,WAAS,WAAW,OAAO,YAAY,OAAO;AAC1C,WAAO,MAAM,IAAI,CAAC,QAAS,OAAO,QAAQ,WAAW,IAAI,GAAG,MAAM,GAAI,EAAE,KAAK,SAAS;AAAA,EAC1F;AACA,EAAAA,MAAK,aAAa;AAClB,EAAAA,MAAK,wBAAwB,CAAC,GAAG,UAAU;AACvC,QAAI,OAAO,UAAU,UAAU;AAC3B,aAAO,MAAM,SAAS;AAAA,IAC1B;AACA,WAAO;AAAA,EACX;AACJ,GAAG,SAAS,OAAO,CAAC,EAAE;AACf,IAAI;AAAA,CACV,SAAUE,aAAY;AACnB,EAAAA,YAAW,cAAc,CAAC,OAAO,WAAW;AACxC,WAAO;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA;AAAA,IACP;AAAA,EACJ;AACJ,GAAG,eAAe,aAAa,CAAC,EAAE;AAC3B,IAAM,gBAAgB,KAAK,YAAY;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;AACM,IAAM,gBAAgB,CAAC,SAAS;AACnC,QAAM,IAAI,OAAO;AACjB,UAAQ,GAAG;AAAA,IACP,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,aAAO,OAAO,MAAM,IAAI,IAAI,cAAc,MAAM,cAAc;AAAA,IAClE,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,UAAI,MAAM,QAAQ,IAAI,GAAG;AACrB,eAAO,cAAc;AAAA,MACzB;AACA,UAAI,SAAS,MAAM;AACf,eAAO,cAAc;AAAA,MACzB;AACA,UAAI,KAAK,QAAQ,OAAO,KAAK,SAAS,cAAc,KAAK,SAAS,OAAO,KAAK,UAAU,YAAY;AAChG,eAAO,cAAc;AAAA,MACzB;AACA,UAAI,OAAO,QAAQ,eAAe,gBAAgB,KAAK;AACnD,eAAO,cAAc;AAAA,MACzB;AACA,UAAI,OAAO,QAAQ,eAAe,gBAAgB,KAAK;AACnD,eAAO,cAAc;AAAA,MACzB;AACA,UAAI,OAAO,SAAS,eAAe,gBAAgB,MAAM;AACrD,eAAO,cAAc;AAAA,MACzB;AACA,aAAO,cAAc;AAAA,IACzB;AACI,aAAO,cAAc;AAAA,EAC7B;AACJ;;;ACnIO,IAAM,eAAe,KAAK,YAAY;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;AACM,IAAM,gBAAgB,CAAC,QAAQ;AAClC,QAAM,OAAO,KAAK,UAAU,KAAK,MAAM,CAAC;AACxC,SAAO,KAAK,QAAQ,eAAe,KAAK;AAC5C;AACO,IAAM,WAAN,MAAM,kBAAiB,MAAM;AAAA,EAChC,IAAI,SAAS;AACT,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,YAAY,QAAQ;AAChB,UAAM;AACN,SAAK,SAAS,CAAC;AACf,SAAK,WAAW,CAAC,QAAQ;AACrB,WAAK,SAAS,CAAC,GAAG,KAAK,QAAQ,GAAG;AAAA,IACtC;AACA,SAAK,YAAY,CAAC,OAAO,CAAC,MAAM;AAC5B,WAAK,SAAS,CAAC,GAAG,KAAK,QAAQ,GAAG,IAAI;AAAA,IAC1C;AACA,UAAM,cAAc,WAAW;AAC/B,QAAI,OAAO,gBAAgB;AAEvB,aAAO,eAAe,MAAM,WAAW;AAAA,IAC3C,OACK;AACD,WAAK,YAAY;AAAA,IACrB;AACA,SAAK,OAAO;AACZ,SAAK,SAAS;AAAA,EAClB;AAAA,EACA,OAAO,SAAS;AACZ,UAAM,SAAS,WACX,SAAU,OAAO;AACb,aAAO,MAAM;AAAA,IACjB;AACJ,UAAM,cAAc,EAAE,SAAS,CAAC,EAAE;AAClC,UAAM,eAAe,CAAC,UAAU;AAC5B,iBAAW,SAAS,MAAM,QAAQ;AAC9B,YAAI,MAAM,SAAS,iBAAiB;AAChC,gBAAM,YAAY,IAAI,YAAY;AAAA,QACtC,WACS,MAAM,SAAS,uBAAuB;AAC3C,uBAAa,MAAM,eAAe;AAAA,QACtC,WACS,MAAM,SAAS,qBAAqB;AACzC,uBAAa,MAAM,cAAc;AAAA,QACrC,WACS,MAAM,KAAK,WAAW,GAAG;AAC9B,sBAAY,QAAQ,KAAK,OAAO,KAAK,CAAC;AAAA,QAC1C,OACK;AACD,cAAI,OAAO;AACX,cAAI,IAAI;AACR,iBAAO,IAAI,MAAM,KAAK,QAAQ;AAC1B,kBAAM,KAAK,MAAM,KAAK,CAAC;AACvB,kBAAM,WAAW,MAAM,MAAM,KAAK,SAAS;AAC3C,gBAAI,CAAC,UAAU;AACX,mBAAK,EAAE,IAAI,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE;AAAA,YAQzC,OACK;AACD,mBAAK,EAAE,IAAI,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE;AACrC,mBAAK,EAAE,EAAE,QAAQ,KAAK,OAAO,KAAK,CAAC;AAAA,YACvC;AACA,mBAAO,KAAK,EAAE;AACd;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,iBAAa,IAAI;AACjB,WAAO;AAAA,EACX;AAAA,EACA,OAAO,OAAO,OAAO;AACjB,QAAI,EAAE,iBAAiB,YAAW;AAC9B,YAAM,IAAI,MAAM,mBAAmB,KAAK,EAAE;AAAA,IAC9C;AAAA,EACJ;AAAA,EACA,WAAW;AACP,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,UAAU,KAAK,QAAQ,KAAK,uBAAuB,CAAC;AAAA,EACpE;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,OAAO,WAAW;AAAA,EAClC;AAAA,EACA,QAAQ,SAAS,CAAC,UAAU,MAAM,SAAS;AACvC,UAAM,cAAc,CAAC;AACrB,UAAM,aAAa,CAAC;AACpB,eAAW,OAAO,KAAK,QAAQ;AAC3B,UAAI,IAAI,KAAK,SAAS,GAAG;AACrB,cAAM,UAAU,IAAI,KAAK,CAAC;AAC1B,oBAAY,OAAO,IAAI,YAAY,OAAO,KAAK,CAAC;AAChD,oBAAY,OAAO,EAAE,KAAK,OAAO,GAAG,CAAC;AAAA,MACzC,OACK;AACD,mBAAW,KAAK,OAAO,GAAG,CAAC;AAAA,MAC/B;AAAA,IACJ;AACA,WAAO,EAAE,YAAY,YAAY;AAAA,EACrC;AAAA,EACA,IAAI,aAAa;AACb,WAAO,KAAK,QAAQ;AAAA,EACxB;AACJ;AACA,SAAS,SAAS,CAAC,WAAW;AAC1B,QAAM,QAAQ,IAAI,SAAS,MAAM;AACjC,SAAO;AACX;;;AClIA,IAAM,WAAW,CAAC,OAAO,SAAS;AAC9B,MAAI;AACJ,UAAQ,MAAM,MAAM;AAAA,IAChB,KAAK,aAAa;AACd,UAAI,MAAM,aAAa,cAAc,WAAW;AAC5C,kBAAU;AAAA,MACd,OACK;AACD,kBAAU,YAAY,MAAM,QAAQ,cAAc,MAAM,QAAQ;AAAA,MACpE;AACA;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU,mCAAmC,KAAK,UAAU,MAAM,UAAU,KAAK,qBAAqB,CAAC;AACvG;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU,kCAAkC,KAAK,WAAW,MAAM,MAAM,IAAI,CAAC;AAC7E;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU,yCAAyC,KAAK,WAAW,MAAM,OAAO,CAAC;AACjF;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU,gCAAgC,KAAK,WAAW,MAAM,OAAO,CAAC,eAAe,MAAM,QAAQ;AACrG;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,UAAI,OAAO,MAAM,eAAe,UAAU;AACtC,YAAI,cAAc,MAAM,YAAY;AAChC,oBAAU,gCAAgC,MAAM,WAAW,QAAQ;AACnE,cAAI,OAAO,MAAM,WAAW,aAAa,UAAU;AAC/C,sBAAU,GAAG,OAAO,sDAAsD,MAAM,WAAW,QAAQ;AAAA,UACvG;AAAA,QACJ,WACS,gBAAgB,MAAM,YAAY;AACvC,oBAAU,mCAAmC,MAAM,WAAW,UAAU;AAAA,QAC5E,WACS,cAAc,MAAM,YAAY;AACrC,oBAAU,iCAAiC,MAAM,WAAW,QAAQ;AAAA,QACxE,OACK;AACD,eAAK,YAAY,MAAM,UAAU;AAAA,QACrC;AAAA,MACJ,WACS,MAAM,eAAe,SAAS;AACnC,kBAAU,WAAW,MAAM,UAAU;AAAA,MACzC,OACK;AACD,kBAAU;AAAA,MACd;AACA;AAAA,IACJ,KAAK,aAAa;AACd,UAAI,MAAM,SAAS;AACf,kBAAU,sBAAsB,MAAM,QAAQ,YAAY,MAAM,YAAY,aAAa,WAAW,IAAI,MAAM,OAAO;AAAA,eAChH,MAAM,SAAS;AACpB,kBAAU,uBAAuB,MAAM,QAAQ,YAAY,MAAM,YAAY,aAAa,MAAM,IAAI,MAAM,OAAO;AAAA,eAC5G,MAAM,SAAS;AACpB,kBAAU,kBAAkB,MAAM,QAAQ,sBAAsB,MAAM,YAAY,8BAA8B,eAAe,GAAG,MAAM,OAAO;AAAA,eAC1I,MAAM,SAAS;AACpB,kBAAU,kBAAkB,MAAM,QAAQ,sBAAsB,MAAM,YAAY,8BAA8B,eAAe,GAAG,MAAM,OAAO;AAAA,eAC1I,MAAM,SAAS;AACpB,kBAAU,gBAAgB,MAAM,QAAQ,sBAAsB,MAAM,YAAY,8BAA8B,eAAe,GAAG,IAAI,KAAK,OAAO,MAAM,OAAO,CAAC,CAAC;AAAA;AAE/J,kBAAU;AACd;AAAA,IACJ,KAAK,aAAa;AACd,UAAI,MAAM,SAAS;AACf,kBAAU,sBAAsB,MAAM,QAAQ,YAAY,MAAM,YAAY,YAAY,WAAW,IAAI,MAAM,OAAO;AAAA,eAC/G,MAAM,SAAS;AACpB,kBAAU,uBAAuB,MAAM,QAAQ,YAAY,MAAM,YAAY,YAAY,OAAO,IAAI,MAAM,OAAO;AAAA,eAC5G,MAAM,SAAS;AACpB,kBAAU,kBAAkB,MAAM,QAAQ,YAAY,MAAM,YAAY,0BAA0B,WAAW,IAAI,MAAM,OAAO;AAAA,eACzH,MAAM,SAAS;AACpB,kBAAU,kBAAkB,MAAM,QAAQ,YAAY,MAAM,YAAY,0BAA0B,WAAW,IAAI,MAAM,OAAO;AAAA,eACzH,MAAM,SAAS;AACpB,kBAAU,gBAAgB,MAAM,QAAQ,YAAY,MAAM,YAAY,6BAA6B,cAAc,IAAI,IAAI,KAAK,OAAO,MAAM,OAAO,CAAC,CAAC;AAAA;AAEpJ,kBAAU;AACd;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU,gCAAgC,MAAM,UAAU;AAC1D;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ;AACI,gBAAU,KAAK;AACf,WAAK,YAAY,KAAK;AAAA,EAC9B;AACA,SAAO,EAAE,QAAQ;AACrB;AACA,IAAO,aAAQ;;;AC3Gf,IAAI,mBAAmB;AAEhB,SAAS,YAAY,KAAK;AAC7B,qBAAmB;AACvB;AACO,SAAS,cAAc;AAC1B,SAAO;AACX;;;ACNO,IAAM,YAAY,CAAC,WAAW;AACjC,QAAM,EAAE,MAAM,MAAM,WAAW,UAAU,IAAI;AAC7C,QAAM,WAAW,CAAC,GAAG,MAAM,GAAI,UAAU,QAAQ,CAAC,CAAE;AACpD,QAAM,YAAY;AAAA,IACd,GAAG;AAAA,IACH,MAAM;AAAA,EACV;AACA,MAAI,UAAU,YAAY,QAAW;AACjC,WAAO;AAAA,MACH,GAAG;AAAA,MACH,MAAM;AAAA,MACN,SAAS,UAAU;AAAA,IACvB;AAAA,EACJ;AACA,MAAI,eAAe;AACnB,QAAM,OAAO,UACR,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EACjB,MAAM,EACN,QAAQ;AACb,aAAW,OAAO,MAAM;AACpB,mBAAe,IAAI,WAAW,EAAE,MAAM,cAAc,aAAa,CAAC,EAAE;AAAA,EACxE;AACA,SAAO;AAAA,IACH,GAAG;AAAA,IACH,MAAM;AAAA,IACN,SAAS;AAAA,EACb;AACJ;AACO,IAAM,aAAa,CAAC;AACpB,SAAS,kBAAkB,KAAK,WAAW;AAC9C,QAAM,cAAc,YAAY;AAChC,QAAM,QAAQ,UAAU;AAAA,IACpB;AAAA,IACA,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,WAAW;AAAA,MACP,IAAI,OAAO;AAAA;AAAA,MACX,IAAI;AAAA;AAAA,MACJ;AAAA;AAAA,MACA,gBAAgB,aAAkB,SAAY;AAAA;AAAA,IAClD,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,EACvB,CAAC;AACD,MAAI,OAAO,OAAO,KAAK,KAAK;AAChC;AACO,IAAM,cAAN,MAAM,aAAY;AAAA,EACrB,cAAc;AACV,SAAK,QAAQ;AAAA,EACjB;AAAA,EACA,QAAQ;AACJ,QAAI,KAAK,UAAU;AACf,WAAK,QAAQ;AAAA,EACrB;AAAA,EACA,QAAQ;AACJ,QAAI,KAAK,UAAU;AACf,WAAK,QAAQ;AAAA,EACrB;AAAA,EACA,OAAO,WAAW,QAAQ,SAAS;AAC/B,UAAM,aAAa,CAAC;AACpB,eAAW,KAAK,SAAS;AACrB,UAAI,EAAE,WAAW;AACb,eAAO;AACX,UAAI,EAAE,WAAW;AACb,eAAO,MAAM;AACjB,iBAAW,KAAK,EAAE,KAAK;AAAA,IAC3B;AACA,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,WAAW;AAAA,EACrD;AAAA,EACA,aAAa,iBAAiB,QAAQ,OAAO;AACzC,UAAM,YAAY,CAAC;AACnB,eAAW,QAAQ,OAAO;AACtB,YAAM,MAAM,MAAM,KAAK;AACvB,YAAM,QAAQ,MAAM,KAAK;AACzB,gBAAU,KAAK;AAAA,QACX;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL;AACA,WAAO,aAAY,gBAAgB,QAAQ,SAAS;AAAA,EACxD;AAAA,EACA,OAAO,gBAAgB,QAAQ,OAAO;AAClC,UAAM,cAAc,CAAC;AACrB,eAAW,QAAQ,OAAO;AACtB,YAAM,EAAE,KAAK,MAAM,IAAI;AACvB,UAAI,IAAI,WAAW;AACf,eAAO;AACX,UAAI,MAAM,WAAW;AACjB,eAAO;AACX,UAAI,IAAI,WAAW;AACf,eAAO,MAAM;AACjB,UAAI,MAAM,WAAW;AACjB,eAAO,MAAM;AACjB,UAAI,IAAI,UAAU,gBAAgB,OAAO,MAAM,UAAU,eAAe,KAAK,YAAY;AACrF,oBAAY,IAAI,KAAK,IAAI,MAAM;AAAA,MACnC;AAAA,IACJ;AACA,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,YAAY;AAAA,EACtD;AACJ;AACO,IAAM,UAAU,OAAO,OAAO;AAAA,EACjC,QAAQ;AACZ,CAAC;AACM,IAAM,QAAQ,CAAC,WAAW,EAAE,QAAQ,SAAS,MAAM;AACnD,IAAM,KAAK,CAAC,WAAW,EAAE,QAAQ,SAAS,MAAM;AAChD,IAAM,YAAY,CAAC,MAAM,EAAE,WAAW;AACtC,IAAM,UAAU,CAAC,MAAM,EAAE,WAAW;AACpC,IAAM,UAAU,CAAC,MAAM,EAAE,WAAW;AACpC,IAAM,UAAU,CAAC,MAAM,OAAO,YAAY,eAAe,aAAa;;;AC5GtE,IAAI;AAAA,CACV,SAAUC,YAAW;AAClB,EAAAA,WAAU,WAAW,CAAC,YAAY,OAAO,YAAY,WAAW,EAAE,QAAQ,IAAI,WAAW,CAAC;AAE1F,EAAAA,WAAU,WAAW,CAAC,YAAY,OAAO,YAAY,WAAW,UAAU,SAAS;AACvF,GAAG,cAAc,YAAY,CAAC,EAAE;;;ACAhC,IAAM,qBAAN,MAAyB;AAAA,EACrB,YAAY,QAAQ,OAAO,MAAM,KAAK;AAClC,SAAK,cAAc,CAAC;AACpB,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,OAAO;AAAA,EAChB;AAAA,EACA,IAAI,OAAO;AACP,QAAI,CAAC,KAAK,YAAY,QAAQ;AAC1B,UAAI,MAAM,QAAQ,KAAK,IAAI,GAAG;AAC1B,aAAK,YAAY,KAAK,GAAG,KAAK,OAAO,GAAG,KAAK,IAAI;AAAA,MACrD,OACK;AACD,aAAK,YAAY,KAAK,GAAG,KAAK,OAAO,KAAK,IAAI;AAAA,MAClD;AAAA,IACJ;AACA,WAAO,KAAK;AAAA,EAChB;AACJ;AACA,IAAM,eAAe,CAAC,KAAK,WAAW;AAClC,MAAI,QAAQ,MAAM,GAAG;AACjB,WAAO,EAAE,SAAS,MAAM,MAAM,OAAO,MAAM;AAAA,EAC/C,OACK;AACD,QAAI,CAAC,IAAI,OAAO,OAAO,QAAQ;AAC3B,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAC/D;AACA,WAAO;AAAA,MACH,SAAS;AAAA,MACT,IAAI,QAAQ;AACR,YAAI,KAAK;AACL,iBAAO,KAAK;AAChB,cAAM,QAAQ,IAAI,SAAS,IAAI,OAAO,MAAM;AAC5C,aAAK,SAAS;AACd,eAAO,KAAK;AAAA,MAChB;AAAA,IACJ;AAAA,EACJ;AACJ;AACA,SAAS,oBAAoB,QAAQ;AACjC,MAAI,CAAC;AACD,WAAO,CAAC;AACZ,QAAM,EAAE,UAAAC,WAAU,oBAAoB,gBAAgB,YAAY,IAAI;AACtE,MAAIA,cAAa,sBAAsB,iBAAiB;AACpD,UAAM,IAAI,MAAM,0FAA0F;AAAA,EAC9G;AACA,MAAIA;AACA,WAAO,EAAE,UAAUA,WAAU,YAAY;AAC7C,QAAM,YAAY,CAAC,KAAK,QAAQ;AAC5B,UAAM,EAAE,QAAQ,IAAI;AACpB,QAAI,IAAI,SAAS,sBAAsB;AACnC,aAAO,EAAE,SAAS,WAAW,IAAI,aAAa;AAAA,IAClD;AACA,QAAI,OAAO,IAAI,SAAS,aAAa;AACjC,aAAO,EAAE,SAAS,WAAW,kBAAkB,IAAI,aAAa;AAAA,IACpE;AACA,QAAI,IAAI,SAAS;AACb,aAAO,EAAE,SAAS,IAAI,aAAa;AACvC,WAAO,EAAE,SAAS,WAAW,sBAAsB,IAAI,aAAa;AAAA,EACxE;AACA,SAAO,EAAE,UAAU,WAAW,YAAY;AAC9C;AACO,IAAM,UAAN,MAAc;AAAA,EACjB,IAAI,cAAc;AACd,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,SAAS,OAAO;AACZ,WAAO,cAAc,MAAM,IAAI;AAAA,EACnC;AAAA,EACA,gBAAgB,OAAO,KAAK;AACxB,WAAQ,OAAO;AAAA,MACX,QAAQ,MAAM,OAAO;AAAA,MACrB,MAAM,MAAM;AAAA,MACZ,YAAY,cAAc,MAAM,IAAI;AAAA,MACpC,gBAAgB,KAAK,KAAK;AAAA,MAC1B,MAAM,MAAM;AAAA,MACZ,QAAQ,MAAM;AAAA,IAClB;AAAA,EACJ;AAAA,EACA,oBAAoB,OAAO;AACvB,WAAO;AAAA,MACH,QAAQ,IAAI,YAAY;AAAA,MACxB,KAAK;AAAA,QACD,QAAQ,MAAM,OAAO;AAAA,QACrB,MAAM,MAAM;AAAA,QACZ,YAAY,cAAc,MAAM,IAAI;AAAA,QACpC,gBAAgB,KAAK,KAAK;AAAA,QAC1B,MAAM,MAAM;AAAA,QACZ,QAAQ,MAAM;AAAA,MAClB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,WAAW,OAAO;AACd,UAAM,SAAS,KAAK,OAAO,KAAK;AAChC,QAAI,QAAQ,MAAM,GAAG;AACjB,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC5D;AACA,WAAO;AAAA,EACX;AAAA,EACA,YAAY,OAAO;AACf,UAAM,SAAS,KAAK,OAAO,KAAK;AAChC,WAAO,QAAQ,QAAQ,MAAM;AAAA,EACjC;AAAA,EACA,MAAM,MAAM,QAAQ;AAChB,UAAM,SAAS,KAAK,UAAU,MAAM,MAAM;AAC1C,QAAI,OAAO;AACP,aAAO,OAAO;AAClB,UAAM,OAAO;AAAA,EACjB;AAAA,EACA,UAAU,MAAM,QAAQ;AACpB,UAAM,MAAM;AAAA,MACR,QAAQ;AAAA,QACJ,QAAQ,CAAC;AAAA,QACT,OAAO,QAAQ,SAAS;AAAA,QACxB,oBAAoB,QAAQ;AAAA,MAChC;AAAA,MACA,MAAM,QAAQ,QAAQ,CAAC;AAAA,MACvB,gBAAgB,KAAK,KAAK;AAAA,MAC1B,QAAQ;AAAA,MACR;AAAA,MACA,YAAY,cAAc,IAAI;AAAA,IAClC;AACA,UAAM,SAAS,KAAK,WAAW,EAAE,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC;AACpE,WAAO,aAAa,KAAK,MAAM;AAAA,EACnC;AAAA,EACA,YAAY,MAAM;AACd,UAAM,MAAM;AAAA,MACR,QAAQ;AAAA,QACJ,QAAQ,CAAC;AAAA,QACT,OAAO,CAAC,CAAC,KAAK,WAAW,EAAE;AAAA,MAC/B;AAAA,MACA,MAAM,CAAC;AAAA,MACP,gBAAgB,KAAK,KAAK;AAAA,MAC1B,QAAQ;AAAA,MACR;AAAA,MACA,YAAY,cAAc,IAAI;AAAA,IAClC;AACA,QAAI,CAAC,KAAK,WAAW,EAAE,OAAO;AAC1B,UAAI;AACA,cAAM,SAAS,KAAK,WAAW,EAAE,MAAM,MAAM,CAAC,GAAG,QAAQ,IAAI,CAAC;AAC9D,eAAO,QAAQ,MAAM,IACf;AAAA,UACE,OAAO,OAAO;AAAA,QAClB,IACE;AAAA,UACE,QAAQ,IAAI,OAAO;AAAA,QACvB;AAAA,MACR,SACO,KAAK;AACR,YAAI,KAAK,SAAS,YAAY,GAAG,SAAS,aAAa,GAAG;AACtD,eAAK,WAAW,EAAE,QAAQ;AAAA,QAC9B;AACA,YAAI,SAAS;AAAA,UACT,QAAQ,CAAC;AAAA,UACT,OAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,KAAK,YAAY,EAAE,MAAM,MAAM,CAAC,GAAG,QAAQ,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,QAAQ,MAAM,IAClF;AAAA,MACE,OAAO,OAAO;AAAA,IAClB,IACE;AAAA,MACE,QAAQ,IAAI,OAAO;AAAA,IACvB,CAAC;AAAA,EACT;AAAA,EACA,MAAM,WAAW,MAAM,QAAQ;AAC3B,UAAM,SAAS,MAAM,KAAK,eAAe,MAAM,MAAM;AACrD,QAAI,OAAO;AACP,aAAO,OAAO;AAClB,UAAM,OAAO;AAAA,EACjB;AAAA,EACA,MAAM,eAAe,MAAM,QAAQ;AAC/B,UAAM,MAAM;AAAA,MACR,QAAQ;AAAA,QACJ,QAAQ,CAAC;AAAA,QACT,oBAAoB,QAAQ;AAAA,QAC5B,OAAO;AAAA,MACX;AAAA,MACA,MAAM,QAAQ,QAAQ,CAAC;AAAA,MACvB,gBAAgB,KAAK,KAAK;AAAA,MAC1B,QAAQ;AAAA,MACR;AAAA,MACA,YAAY,cAAc,IAAI;AAAA,IAClC;AACA,UAAM,mBAAmB,KAAK,OAAO,EAAE,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC;AAC1E,UAAM,SAAS,OAAO,QAAQ,gBAAgB,IAAI,mBAAmB,QAAQ,QAAQ,gBAAgB;AACrG,WAAO,aAAa,KAAK,MAAM;AAAA,EACnC;AAAA,EACA,OAAO,OAAO,SAAS;AACnB,UAAM,qBAAqB,CAAC,QAAQ;AAChC,UAAI,OAAO,YAAY,YAAY,OAAO,YAAY,aAAa;AAC/D,eAAO,EAAE,QAAQ;AAAA,MACrB,WACS,OAAO,YAAY,YAAY;AACpC,eAAO,QAAQ,GAAG;AAAA,MACtB,OACK;AACD,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO,KAAK,YAAY,CAAC,KAAK,QAAQ;AAClC,YAAM,SAAS,MAAM,GAAG;AACxB,YAAM,WAAW,MAAM,IAAI,SAAS;AAAA,QAChC,MAAM,aAAa;AAAA,QACnB,GAAG,mBAAmB,GAAG;AAAA,MAC7B,CAAC;AACD,UAAI,OAAO,YAAY,eAAe,kBAAkB,SAAS;AAC7D,eAAO,OAAO,KAAK,CAAC,SAAS;AACzB,cAAI,CAAC,MAAM;AACP,qBAAS;AACT,mBAAO;AAAA,UACX,OACK;AACD,mBAAO;AAAA,UACX;AAAA,QACJ,CAAC;AAAA,MACL;AACA,UAAI,CAAC,QAAQ;AACT,iBAAS;AACT,eAAO;AAAA,MACX,OACK;AACD,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,WAAW,OAAO,gBAAgB;AAC9B,WAAO,KAAK,YAAY,CAAC,KAAK,QAAQ;AAClC,UAAI,CAAC,MAAM,GAAG,GAAG;AACb,YAAI,SAAS,OAAO,mBAAmB,aAAa,eAAe,KAAK,GAAG,IAAI,cAAc;AAC7F,eAAO;AAAA,MACX,OACK;AACD,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,YAAY,YAAY;AACpB,WAAO,IAAI,WAAW;AAAA,MAClB,QAAQ;AAAA,MACR,UAAU,sBAAsB;AAAA,MAChC,QAAQ,EAAE,MAAM,cAAc,WAAW;AAAA,IAC7C,CAAC;AAAA,EACL;AAAA,EACA,YAAY,YAAY;AACpB,WAAO,KAAK,YAAY,UAAU;AAAA,EACtC;AAAA,EACA,YAAY,KAAK;AAEb,SAAK,MAAM,KAAK;AAChB,SAAK,OAAO;AACZ,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,MAAM,KAAK,IAAI,KAAK,IAAI;AAC7B,SAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,SAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,SAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,KAAK,KAAK,GAAG,KAAK,IAAI;AAC3B,SAAK,MAAM,KAAK,IAAI,KAAK,IAAI;AAC7B,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAC/B,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,SAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,SAAK,WAAW,IAAI;AAAA,MAChB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU,CAAC,SAAS,KAAK,WAAW,EAAE,IAAI;AAAA,IAC9C;AAAA,EACJ;AAAA,EACA,WAAW;AACP,WAAO,YAAY,OAAO,MAAM,KAAK,IAAI;AAAA,EAC7C;AAAA,EACA,WAAW;AACP,WAAO,YAAY,OAAO,MAAM,KAAK,IAAI;AAAA,EAC7C;AAAA,EACA,UAAU;AACN,WAAO,KAAK,SAAS,EAAE,SAAS;AAAA,EACpC;AAAA,EACA,QAAQ;AACJ,WAAO,SAAS,OAAO,IAAI;AAAA,EAC/B;AAAA,EACA,UAAU;AACN,WAAO,WAAW,OAAO,MAAM,KAAK,IAAI;AAAA,EAC5C;AAAA,EACA,GAAG,QAAQ;AACP,WAAO,SAAS,OAAO,CAAC,MAAM,MAAM,GAAG,KAAK,IAAI;AAAA,EACpD;AAAA,EACA,IAAI,UAAU;AACV,WAAO,gBAAgB,OAAO,MAAM,UAAU,KAAK,IAAI;AAAA,EAC3D;AAAA,EACA,UAAU,WAAW;AACjB,WAAO,IAAI,WAAW;AAAA,MAClB,GAAG,oBAAoB,KAAK,IAAI;AAAA,MAChC,QAAQ;AAAA,MACR,UAAU,sBAAsB;AAAA,MAChC,QAAQ,EAAE,MAAM,aAAa,UAAU;AAAA,IAC3C,CAAC;AAAA,EACL;AAAA,EACA,QAAQ,KAAK;AACT,UAAM,mBAAmB,OAAO,QAAQ,aAAa,MAAM,MAAM;AACjE,WAAO,IAAI,WAAW;AAAA,MAClB,GAAG,oBAAoB,KAAK,IAAI;AAAA,MAChC,WAAW;AAAA,MACX,cAAc;AAAA,MACd,UAAU,sBAAsB;AAAA,IACpC,CAAC;AAAA,EACL;AAAA,EACA,QAAQ;AACJ,WAAO,IAAI,WAAW;AAAA,MAClB,UAAU,sBAAsB;AAAA,MAChC,MAAM;AAAA,MACN,GAAG,oBAAoB,KAAK,IAAI;AAAA,IACpC,CAAC;AAAA,EACL;AAAA,EACA,MAAM,KAAK;AACP,UAAM,iBAAiB,OAAO,QAAQ,aAAa,MAAM,MAAM;AAC/D,WAAO,IAAI,SAAS;AAAA,MAChB,GAAG,oBAAoB,KAAK,IAAI;AAAA,MAChC,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,UAAU,sBAAsB;AAAA,IACpC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,aAAa;AAClB,UAAM,OAAO,KAAK;AAClB,WAAO,IAAI,KAAK;AAAA,MACZ,GAAG,KAAK;AAAA,MACR;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,KAAK,QAAQ;AACT,WAAO,YAAY,OAAO,MAAM,MAAM;AAAA,EAC1C;AAAA,EACA,WAAW;AACP,WAAO,YAAY,OAAO,IAAI;AAAA,EAClC;AAAA,EACA,aAAa;AACT,WAAO,KAAK,UAAU,MAAS,EAAE;AAAA,EACrC;AAAA,EACA,aAAa;AACT,WAAO,KAAK,UAAU,IAAI,EAAE;AAAA,EAChC;AACJ;AACA,IAAM,YAAY;AAClB,IAAM,aAAa;AACnB,IAAM,YAAY;AAGlB,IAAM,YAAY;AAClB,IAAM,cAAc;AACpB,IAAM,WAAW;AACjB,IAAM,gBAAgB;AAatB,IAAM,aAAa;AAInB,IAAM,cAAc;AACpB,IAAI;AAEJ,IAAM,YAAY;AAClB,IAAM,gBAAgB;AAGtB,IAAM,YAAY;AAClB,IAAM,gBAAgB;AAEtB,IAAM,cAAc;AAEpB,IAAM,iBAAiB;AAMvB,IAAM,kBAAkB;AACxB,IAAM,YAAY,IAAI,OAAO,IAAI,eAAe,GAAG;AACnD,SAAS,gBAAgB,MAAM;AAC3B,MAAI,qBAAqB;AACzB,MAAI,KAAK,WAAW;AAChB,yBAAqB,GAAG,kBAAkB,UAAU,KAAK,SAAS;AAAA,EACtE,WACS,KAAK,aAAa,MAAM;AAC7B,yBAAqB,GAAG,kBAAkB;AAAA,EAC9C;AACA,QAAM,oBAAoB,KAAK,YAAY,MAAM;AACjD,SAAO,8BAA8B,kBAAkB,IAAI,iBAAiB;AAChF;AACA,SAAS,UAAU,MAAM;AACrB,SAAO,IAAI,OAAO,IAAI,gBAAgB,IAAI,CAAC,GAAG;AAClD;AAEO,SAAS,cAAc,MAAM;AAChC,MAAI,QAAQ,GAAG,eAAe,IAAI,gBAAgB,IAAI,CAAC;AACvD,QAAM,OAAO,CAAC;AACd,OAAK,KAAK,KAAK,QAAQ,OAAO,GAAG;AACjC,MAAI,KAAK;AACL,SAAK,KAAK,sBAAsB;AACpC,UAAQ,GAAG,KAAK,IAAI,KAAK,KAAK,GAAG,CAAC;AAClC,SAAO,IAAI,OAAO,IAAI,KAAK,GAAG;AAClC;AACA,SAAS,UAAU,IAAI,SAAS;AAC5B,OAAK,YAAY,QAAQ,CAAC,YAAY,UAAU,KAAK,EAAE,GAAG;AACtD,WAAO;AAAA,EACX;AACA,OAAK,YAAY,QAAQ,CAAC,YAAY,UAAU,KAAK,EAAE,GAAG;AACtD,WAAO;AAAA,EACX;AACA,SAAO;AACX;AACA,SAAS,WAAW,KAAK,KAAK;AAC1B,MAAI,CAAC,SAAS,KAAK,GAAG;AAClB,WAAO;AACX,MAAI;AACA,UAAM,CAAC,MAAM,IAAI,IAAI,MAAM,GAAG;AAC9B,QAAI,CAAC;AACD,aAAO;AAEX,UAAMC,UAAS,OACV,QAAQ,MAAM,GAAG,EACjB,QAAQ,MAAM,GAAG,EACjB,OAAO,OAAO,UAAW,IAAK,OAAO,SAAS,KAAM,GAAI,GAAG;AAChE,UAAM,UAAU,KAAK,MAAM,KAAKA,OAAM,CAAC;AACvC,QAAI,OAAO,YAAY,YAAY,YAAY;AAC3C,aAAO;AACX,QAAI,SAAS,WAAW,SAAS,QAAQ;AACrC,aAAO;AACX,QAAI,CAAC,QAAQ;AACT,aAAO;AACX,QAAI,OAAO,QAAQ,QAAQ;AACvB,aAAO;AACX,WAAO;AAAA,EACX,QACM;AACF,WAAO;AAAA,EACX;AACJ;AACA,SAAS,YAAY,IAAI,SAAS;AAC9B,OAAK,YAAY,QAAQ,CAAC,YAAY,cAAc,KAAK,EAAE,GAAG;AAC1D,WAAO;AAAA,EACX;AACA,OAAK,YAAY,QAAQ,CAAC,YAAY,cAAc,KAAK,EAAE,GAAG;AAC1D,WAAO;AAAA,EACX;AACA,SAAO;AACX;AACO,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,EACnC,OAAO,OAAO;AACV,QAAI,KAAK,KAAK,QAAQ;AAClB,YAAM,OAAO,OAAO,MAAM,IAAI;AAAA,IAClC;AACA,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,QAAQ;AACrC,YAAMC,OAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkBA,MAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAUA,KAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,SAAS,IAAI,YAAY;AAC/B,QAAI,MAAM;AACV,eAAW,SAAS,KAAK,KAAK,QAAQ;AAClC,UAAI,MAAM,SAAS,OAAO;AACtB,YAAI,MAAM,KAAK,SAAS,MAAM,OAAO;AACjC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,YACf,MAAM;AAAA,YACN,WAAW;AAAA,YACX,OAAO;AAAA,YACP,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,OAAO;AAC3B,YAAI,MAAM,KAAK,SAAS,MAAM,OAAO;AACjC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,YACf,MAAM;AAAA,YACN,WAAW;AAAA,YACX,OAAO;AAAA,YACP,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,UAAU;AAC9B,cAAM,SAAS,MAAM,KAAK,SAAS,MAAM;AACzC,cAAM,WAAW,MAAM,KAAK,SAAS,MAAM;AAC3C,YAAI,UAAU,UAAU;AACpB,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,cAAI,QAAQ;AACR,8BAAkB,KAAK;AAAA,cACnB,MAAM,aAAa;AAAA,cACnB,SAAS,MAAM;AAAA,cACf,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,cACP,SAAS,MAAM;AAAA,YACnB,CAAC;AAAA,UACL,WACS,UAAU;AACf,8BAAkB,KAAK;AAAA,cACnB,MAAM,aAAa;AAAA,cACnB,SAAS,MAAM;AAAA,cACf,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,cACP,SAAS,MAAM;AAAA,YACnB,CAAC;AAAA,UACL;AACA,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,SAAS;AAC7B,YAAI,CAAC,WAAW,KAAK,MAAM,IAAI,GAAG;AAC9B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,SAAS;AAC7B,YAAI,CAAC,YAAY;AACb,uBAAa,IAAI,OAAO,aAAa,GAAG;AAAA,QAC5C;AACA,YAAI,CAAC,WAAW,KAAK,MAAM,IAAI,GAAG;AAC9B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,YAAI,CAAC,UAAU,KAAK,MAAM,IAAI,GAAG;AAC7B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,UAAU;AAC9B,YAAI,CAAC,YAAY,KAAK,MAAM,IAAI,GAAG;AAC/B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,YAAI,CAAC,UAAU,KAAK,MAAM,IAAI,GAAG;AAC7B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,SAAS;AAC7B,YAAI,CAAC,WAAW,KAAK,MAAM,IAAI,GAAG;AAC9B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,YAAI,CAAC,UAAU,KAAK,MAAM,IAAI,GAAG;AAC7B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,OAAO;AAC3B,YAAI;AACA,cAAI,IAAI,MAAM,IAAI;AAAA,QACtB,QACM;AACF,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,SAAS;AAC7B,cAAM,MAAM,YAAY;AACxB,cAAM,aAAa,MAAM,MAAM,KAAK,MAAM,IAAI;AAC9C,YAAI,CAAC,YAAY;AACb,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,cAAM,OAAO,MAAM,KAAK,KAAK;AAAA,MACjC,WACS,MAAM,SAAS,YAAY;AAChC,YAAI,CAAC,MAAM,KAAK,SAAS,MAAM,OAAO,MAAM,QAAQ,GAAG;AACnD,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,YAAY,EAAE,UAAU,MAAM,OAAO,UAAU,MAAM,SAAS;AAAA,YAC9D,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,eAAe;AACnC,cAAM,OAAO,MAAM,KAAK,YAAY;AAAA,MACxC,WACS,MAAM,SAAS,eAAe;AACnC,cAAM,OAAO,MAAM,KAAK,YAAY;AAAA,MACxC,WACS,MAAM,SAAS,cAAc;AAClC,YAAI,CAAC,MAAM,KAAK,WAAW,MAAM,KAAK,GAAG;AACrC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,YAAY,EAAE,YAAY,MAAM,MAAM;AAAA,YACtC,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,YAAY;AAChC,YAAI,CAAC,MAAM,KAAK,SAAS,MAAM,KAAK,GAAG;AACnC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,YAAY,EAAE,UAAU,MAAM,MAAM;AAAA,YACpC,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,YAAY;AAChC,cAAM,QAAQ,cAAc,KAAK;AACjC,YAAI,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG;AACzB,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,YAAY;AAAA,YACZ,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,cAAM,QAAQ;AACd,YAAI,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG;AACzB,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,YAAY;AAAA,YACZ,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,cAAM,QAAQ,UAAU,KAAK;AAC7B,YAAI,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG;AACzB,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,YAAY;AAAA,YACZ,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,YAAY;AAChC,YAAI,CAAC,cAAc,KAAK,MAAM,IAAI,GAAG;AACjC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,MAAM;AAC1B,YAAI,CAAC,UAAU,MAAM,MAAM,MAAM,OAAO,GAAG;AACvC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,OAAO;AAC3B,YAAI,CAAC,WAAW,MAAM,MAAM,MAAM,GAAG,GAAG;AACpC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,YAAI,CAAC,YAAY,MAAM,MAAM,MAAM,OAAO,GAAG;AACzC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,UAAU;AAC9B,YAAI,CAAC,YAAY,KAAK,MAAM,IAAI,GAAG;AAC/B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,aAAa;AACjC,YAAI,CAAC,eAAe,KAAK,MAAM,IAAI,GAAG;AAClC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,OACK;AACD,aAAK,YAAY,KAAK;AAAA,MAC1B;AAAA,IACJ;AACA,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,KAAK;AAAA,EACrD;AAAA,EACA,OAAO,OAAO,YAAY,SAAS;AAC/B,WAAO,KAAK,WAAW,CAAC,SAAS,MAAM,KAAK,IAAI,GAAG;AAAA,MAC/C;AAAA,MACA,MAAM,aAAa;AAAA,MACnB,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,UAAU,OAAO;AACb,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,MAAM,SAAS;AACX,WAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC3E;AAAA,EACA,IAAI,SAAS;AACT,WAAO,KAAK,UAAU,EAAE,MAAM,OAAO,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EACzE;AAAA,EACA,MAAM,SAAS;AACX,WAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC3E;AAAA,EACA,KAAK,SAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC1E;AAAA,EACA,OAAO,SAAS;AACZ,WAAO,KAAK,UAAU,EAAE,MAAM,UAAU,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC5E;AAAA,EACA,KAAK,SAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC1E;AAAA,EACA,MAAM,SAAS;AACX,WAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC3E;AAAA,EACA,KAAK,SAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC1E;AAAA,EACA,OAAO,SAAS;AACZ,WAAO,KAAK,UAAU,EAAE,MAAM,UAAU,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC5E;AAAA,EACA,UAAU,SAAS;AAEf,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,SAAS;AACT,WAAO,KAAK,UAAU,EAAE,MAAM,OAAO,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EACzE;AAAA,EACA,GAAG,SAAS;AACR,WAAO,KAAK,UAAU,EAAE,MAAM,MAAM,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EACxE;AAAA,EACA,KAAK,SAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC1E;AAAA,EACA,SAAS,SAAS;AACd,QAAI,OAAO,YAAY,UAAU;AAC7B,aAAO,KAAK,UAAU;AAAA,QAClB,MAAM;AAAA,QACN,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,SAAS;AAAA,MACb,CAAC;AAAA,IACL;AACA,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,WAAW,OAAO,SAAS,cAAc,cAAc,OAAO,SAAS;AAAA,MACvE,QAAQ,SAAS,UAAU;AAAA,MAC3B,OAAO,SAAS,SAAS;AAAA,MACzB,GAAG,UAAU,SAAS,SAAS,OAAO;AAAA,IAC1C,CAAC;AAAA,EACL;AAAA,EACA,KAAK,SAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,QAAQ,CAAC;AAAA,EACnD;AAAA,EACA,KAAK,SAAS;AACV,QAAI,OAAO,YAAY,UAAU;AAC7B,aAAO,KAAK,UAAU;AAAA,QAClB,MAAM;AAAA,QACN,WAAW;AAAA,QACX,SAAS;AAAA,MACb,CAAC;AAAA,IACL;AACA,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,WAAW,OAAO,SAAS,cAAc,cAAc,OAAO,SAAS;AAAA,MACvE,GAAG,UAAU,SAAS,SAAS,OAAO;AAAA,IAC1C,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,UAAU,EAAE,MAAM,YAAY,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC9E;AAAA,EACA,MAAM,OAAO,SAAS;AAClB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,OAAO,SAAS;AACrB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,UAAU,SAAS;AAAA,MACnB,GAAG,UAAU,SAAS,SAAS,OAAO;AAAA,IAC1C,CAAC;AAAA,EACL;AAAA,EACA,WAAW,OAAO,SAAS;AACvB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,OAAO,SAAS;AACrB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,WAAW,SAAS;AACpB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,WAAW,SAAS;AACpB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,OAAO,KAAK,SAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS,SAAS;AACd,WAAO,KAAK,IAAI,GAAG,UAAU,SAAS,OAAO,CAAC;AAAA,EAClD;AAAA,EACA,OAAO;AACH,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAC;AAAA,IAClD,CAAC;AAAA,EACL;AAAA,EACA,cAAc;AACV,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAAA,IACzD,CAAC;AAAA,EACL;AAAA,EACA,cAAc;AACV,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAAA,IACzD,CAAC;AAAA,EACL;AAAA,EACA,IAAI,aAAa;AACb,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,UAAU;AAAA,EACjE;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,aAAa;AACb,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,UAAU;AAAA,EACjE;AAAA,EACA,IAAI,UAAU;AACV,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO;AAAA,EAC9D;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,KAAK;AAAA,EAC5D;AAAA,EACA,IAAI,UAAU;AACV,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO;AAAA,EAC9D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,WAAW;AACX,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ;AAAA,EAC/D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,UAAU;AACV,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO;AAAA,EAC9D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,OAAO;AACP,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,IAAI;AAAA,EAC3D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,WAAW;AACX,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ;AAAA,EAC/D;AAAA,EACA,IAAI,cAAc;AAEd,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,WAAW;AAAA,EAClE;AAAA,EACA,IAAI,YAAY;AACZ,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,OAAO;AACnB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,YAAY;AACZ,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,OAAO;AACnB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ;AACA,UAAU,SAAS,CAAC,WAAW;AAC3B,SAAO,IAAI,UAAU;AAAA,IACjB,QAAQ,CAAC;AAAA,IACT,UAAU,sBAAsB;AAAA,IAChC,QAAQ,QAAQ,UAAU;AAAA,IAC1B,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AAEA,SAAS,mBAAmB,KAAK,MAAM;AACnC,QAAM,eAAe,IAAI,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI;AACzD,QAAM,gBAAgB,KAAK,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI;AAC3D,QAAM,WAAW,cAAc,eAAe,cAAc;AAC5D,QAAM,SAAS,OAAO,SAAS,IAAI,QAAQ,QAAQ,EAAE,QAAQ,KAAK,EAAE,CAAC;AACrE,QAAM,UAAU,OAAO,SAAS,KAAK,QAAQ,QAAQ,EAAE,QAAQ,KAAK,EAAE,CAAC;AACvE,SAAQ,SAAS,UAAW,MAAM;AACtC;AACO,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,EACnC,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,MAAM,KAAK;AAChB,SAAK,MAAM,KAAK;AAChB,SAAK,OAAO,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,OAAO;AACV,QAAI,KAAK,KAAK,QAAQ;AAClB,YAAM,OAAO,OAAO,MAAM,IAAI;AAAA,IAClC;AACA,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,QAAQ;AACrC,YAAMA,OAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkBA,MAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAUA,KAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,QAAI,MAAM;AACV,UAAM,SAAS,IAAI,YAAY;AAC/B,eAAW,SAAS,KAAK,KAAK,QAAQ;AAClC,UAAI,MAAM,SAAS,OAAO;AACtB,YAAI,CAAC,KAAK,UAAU,MAAM,IAAI,GAAG;AAC7B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU;AAAA,YACV,UAAU;AAAA,YACV,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,OAAO;AAC3B,cAAM,WAAW,MAAM,YAAY,MAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM;AAClF,YAAI,UAAU;AACV,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,YACf,MAAM;AAAA,YACN,WAAW,MAAM;AAAA,YACjB,OAAO;AAAA,YACP,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,OAAO;AAC3B,cAAM,SAAS,MAAM,YAAY,MAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM;AAChF,YAAI,QAAQ;AACR,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,YACf,MAAM;AAAA,YACN,WAAW,MAAM;AAAA,YACjB,OAAO;AAAA,YACP,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,cAAc;AAClC,YAAI,mBAAmB,MAAM,MAAM,MAAM,KAAK,MAAM,GAAG;AACnD,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,YAAY,MAAM;AAAA,YAClB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,UAAU;AAC9B,YAAI,CAAC,OAAO,SAAS,MAAM,IAAI,GAAG;AAC9B,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,OACK;AACD,aAAK,YAAY,KAAK;AAAA,MAC1B;AAAA,IACJ;AACA,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,KAAK;AAAA,EACrD;AAAA,EACA,IAAI,OAAO,SAAS;AAChB,WAAO,KAAK,SAAS,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,CAAC;AAAA,EACxE;AAAA,EACA,GAAG,OAAO,SAAS;AACf,WAAO,KAAK,SAAS,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,CAAC;AAAA,EACzE;AAAA,EACA,IAAI,OAAO,SAAS;AAChB,WAAO,KAAK,SAAS,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,CAAC;AAAA,EACxE;AAAA,EACA,GAAG,OAAO,SAAS;AACf,WAAO,KAAK,SAAS,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,CAAC;AAAA,EACzE;AAAA,EACA,SAAS,MAAM,OAAO,WAAW,SAAS;AACtC,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ;AAAA,QACJ,GAAG,KAAK,KAAK;AAAA,QACb;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,UAAU,OAAO;AACb,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,SAAS;AACT,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,YAAY,SAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,YAAY,SAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,WAAW,OAAO,SAAS;AACvB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,OAAO,SAAS;AACZ,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,KAAK,SAAS;AACV,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO,OAAO;AAAA,MACd,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC,EAAE,UAAU;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO,OAAO;AAAA,MACd,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,WAAW;AACX,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,OAAO;AACnB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,WAAW;AACX,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,OAAO;AACnB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,SAAU,GAAG,SAAS,gBAAgB,KAAK,UAAU,GAAG,KAAK,CAAE;AAAA,EACtH;AAAA,EACA,IAAI,WAAW;AACX,QAAI,MAAM;AACV,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,YAAY,GAAG,SAAS,SAAS,GAAG,SAAS,cAAc;AACvE,eAAO;AAAA,MACX,WACS,GAAG,SAAS,OAAO;AACxB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB,WACS,GAAG,SAAS,OAAO;AACxB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO,OAAO,SAAS,GAAG,KAAK,OAAO,SAAS,GAAG;AAAA,EACtD;AACJ;AACA,UAAU,SAAS,CAAC,WAAW;AAC3B,SAAO,IAAI,UAAU;AAAA,IACjB,QAAQ,CAAC;AAAA,IACT,UAAU,sBAAsB;AAAA,IAChC,QAAQ,QAAQ,UAAU;AAAA,IAC1B,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,EACnC,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,MAAM,KAAK;AAChB,SAAK,MAAM,KAAK;AAAA,EACpB;AAAA,EACA,OAAO,OAAO;AACV,QAAI,KAAK,KAAK,QAAQ;AAClB,UAAI;AACA,cAAM,OAAO,OAAO,MAAM,IAAI;AAAA,MAClC,QACM;AACF,eAAO,KAAK,iBAAiB,KAAK;AAAA,MACtC;AAAA,IACJ;AACA,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,QAAQ;AACrC,aAAO,KAAK,iBAAiB,KAAK;AAAA,IACtC;AACA,QAAI,MAAM;AACV,UAAM,SAAS,IAAI,YAAY;AAC/B,eAAW,SAAS,KAAK,KAAK,QAAQ;AAClC,UAAI,MAAM,SAAS,OAAO;AACtB,cAAM,WAAW,MAAM,YAAY,MAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM;AAClF,YAAI,UAAU;AACV,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,MAAM;AAAA,YACN,SAAS,MAAM;AAAA,YACf,WAAW,MAAM;AAAA,YACjB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,OAAO;AAC3B,cAAM,SAAS,MAAM,YAAY,MAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM;AAChF,YAAI,QAAQ;AACR,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,MAAM;AAAA,YACN,SAAS,MAAM;AAAA,YACf,WAAW,MAAM;AAAA,YACjB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,cAAc;AAClC,YAAI,MAAM,OAAO,MAAM,UAAU,OAAO,CAAC,GAAG;AACxC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,YAAY,MAAM;AAAA,YAClB,SAAS,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,OACK;AACD,aAAK,YAAY,KAAK;AAAA,MAC1B;AAAA,IACJ;AACA,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,KAAK;AAAA,EACrD;AAAA,EACA,iBAAiB,OAAO;AACpB,UAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,sBAAkB,KAAK;AAAA,MACnB,MAAM,aAAa;AAAA,MACnB,UAAU,cAAc;AAAA,MACxB,UAAU,IAAI;AAAA,IAClB,CAAC;AACD,WAAO;AAAA,EACX;AAAA,EACA,IAAI,OAAO,SAAS;AAChB,WAAO,KAAK,SAAS,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,CAAC;AAAA,EACxE;AAAA,EACA,GAAG,OAAO,SAAS;AACf,WAAO,KAAK,SAAS,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,CAAC;AAAA,EACzE;AAAA,EACA,IAAI,OAAO,SAAS;AAChB,WAAO,KAAK,SAAS,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,CAAC;AAAA,EACxE;AAAA,EACA,GAAG,OAAO,SAAS;AACf,WAAO,KAAK,SAAS,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,CAAC;AAAA,EACzE;AAAA,EACA,SAAS,MAAM,OAAO,WAAW,SAAS;AACtC,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ;AAAA,QACJ,GAAG,KAAK,KAAK;AAAA,QACb;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,UAAU,OAAO;AACb,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,OAAO,CAAC;AAAA,MACf,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,OAAO,CAAC;AAAA,MACf,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,YAAY,SAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,OAAO,CAAC;AAAA,MACf,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,YAAY,SAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,OAAO,CAAC;AAAA,MACf,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,WAAW,OAAO,SAAS;AACvB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,WAAW;AACX,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,OAAO;AACnB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,WAAW;AACX,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,OAAO;AACnB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ;AACA,UAAU,SAAS,CAAC,WAAW;AAC3B,SAAO,IAAI,UAAU;AAAA,IACjB,QAAQ,CAAC;AAAA,IACT,UAAU,sBAAsB;AAAA,IAChC,QAAQ,QAAQ,UAAU;AAAA,IAC1B,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,EACpC,OAAO,OAAO;AACV,QAAI,KAAK,KAAK,QAAQ;AAClB,YAAM,OAAO,QAAQ,MAAM,IAAI;AAAA,IACnC;AACA,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,SAAS;AACtC,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,WAAW,SAAS,CAAC,WAAW;AAC5B,SAAO,IAAI,WAAW;AAAA,IAClB,UAAU,sBAAsB;AAAA,IAChC,QAAQ,QAAQ,UAAU;AAAA,IAC1B,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,UAAN,MAAM,iBAAgB,QAAQ;AAAA,EACjC,OAAO,OAAO;AACV,QAAI,KAAK,KAAK,QAAQ;AAClB,YAAM,OAAO,IAAI,KAAK,MAAM,IAAI;AAAA,IACpC;AACA,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,MAAM;AACnC,YAAMA,OAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkBA,MAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAUA,KAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,QAAI,OAAO,MAAM,MAAM,KAAK,QAAQ,CAAC,GAAG;AACpC,YAAMA,OAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkBA,MAAK;AAAA,QACnB,MAAM,aAAa;AAAA,MACvB,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,SAAS,IAAI,YAAY;AAC/B,QAAI,MAAM;AACV,eAAW,SAAS,KAAK,KAAK,QAAQ;AAClC,UAAI,MAAM,SAAS,OAAO;AACtB,YAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,OAAO;AACpC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,YACf,WAAW;AAAA,YACX,OAAO;AAAA,YACP,SAAS,MAAM;AAAA,YACf,MAAM;AAAA,UACV,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,MAAM,SAAS,OAAO;AAC3B,YAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,OAAO;AACpC,gBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,YACf,WAAW;AAAA,YACX,OAAO;AAAA,YACP,SAAS,MAAM;AAAA,YACf,MAAM;AAAA,UACV,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,OACK;AACD,aAAK,YAAY,KAAK;AAAA,MAC1B;AAAA,IACJ;AACA,WAAO;AAAA,MACH,QAAQ,OAAO;AAAA,MACf,OAAO,IAAI,KAAK,MAAM,KAAK,QAAQ,CAAC;AAAA,IACxC;AAAA,EACJ;AAAA,EACA,UAAU,OAAO;AACb,WAAO,IAAI,SAAQ;AAAA,MACf,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,SAAS,SAAS;AAClB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,QAAQ,QAAQ;AAAA,MACvB,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,SAAS,SAAS;AAClB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,QAAQ,QAAQ;AAAA,MACvB,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,UAAU;AACV,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,OAAO;AACnB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO,OAAO,OAAO,IAAI,KAAK,GAAG,IAAI;AAAA,EACzC;AAAA,EACA,IAAI,UAAU;AACV,QAAI,MAAM;AACV,eAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,OAAO;AACnB,YAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,gBAAM,GAAG;AAAA,MACjB;AAAA,IACJ;AACA,WAAO,OAAO,OAAO,IAAI,KAAK,GAAG,IAAI;AAAA,EACzC;AACJ;AACA,QAAQ,SAAS,CAAC,WAAW;AACzB,SAAO,IAAI,QAAQ;AAAA,IACf,QAAQ,CAAC;AAAA,IACT,QAAQ,QAAQ,UAAU;AAAA,IAC1B,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,YAAN,cAAwB,QAAQ;AAAA,EACnC,OAAO,OAAO;AACV,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,QAAQ;AACrC,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,UAAU,SAAS,CAAC,WAAW;AAC3B,SAAO,IAAI,UAAU;AAAA,IACjB,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,eAAN,cAA2B,QAAQ;AAAA,EACtC,OAAO,OAAO;AACV,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,WAAW;AACxC,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,aAAa,SAAS,CAAC,WAAW;AAC9B,SAAO,IAAI,aAAa;AAAA,IACpB,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,UAAN,cAAsB,QAAQ;AAAA,EACjC,OAAO,OAAO;AACV,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,MAAM;AACnC,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,QAAQ,SAAS,CAAC,WAAW;AACzB,SAAO,IAAI,QAAQ;AAAA,IACf,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,SAAN,cAAqB,QAAQ;AAAA,EAChC,cAAc;AACV,UAAM,GAAG,SAAS;AAElB,SAAK,OAAO;AAAA,EAChB;AAAA,EACA,OAAO,OAAO;AACV,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,OAAO,SAAS,CAAC,WAAW;AACxB,SAAO,IAAI,OAAO;AAAA,IACd,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,EACpC,cAAc;AACV,UAAM,GAAG,SAAS;AAElB,SAAK,WAAW;AAAA,EACpB;AAAA,EACA,OAAO,OAAO;AACV,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,WAAW,SAAS,CAAC,WAAW;AAC5B,SAAO,IAAI,WAAW;AAAA,IAClB,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,WAAN,cAAuB,QAAQ;AAAA,EAClC,OAAO,OAAO;AACV,UAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,sBAAkB,KAAK;AAAA,MACnB,MAAM,aAAa;AAAA,MACnB,UAAU,cAAc;AAAA,MACxB,UAAU,IAAI;AAAA,IAClB,CAAC;AACD,WAAO;AAAA,EACX;AACJ;AACA,SAAS,SAAS,CAAC,WAAW;AAC1B,SAAO,IAAI,SAAS;AAAA,IAChB,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,UAAN,cAAsB,QAAQ;AAAA,EACjC,OAAO,OAAO;AACV,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,WAAW;AACxC,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,QAAQ,SAAS,CAAC,WAAW;AACzB,SAAO,IAAI,QAAQ;AAAA,IACf,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,WAAN,MAAM,kBAAiB,QAAQ;AAAA,EAClC,OAAO,OAAO;AACV,UAAM,EAAE,KAAK,OAAO,IAAI,KAAK,oBAAoB,KAAK;AACtD,UAAM,MAAM,KAAK;AACjB,QAAI,IAAI,eAAe,cAAc,OAAO;AACxC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,QAAI,IAAI,gBAAgB,MAAM;AAC1B,YAAM,SAAS,IAAI,KAAK,SAAS,IAAI,YAAY;AACjD,YAAM,WAAW,IAAI,KAAK,SAAS,IAAI,YAAY;AACnD,UAAI,UAAU,UAAU;AACpB,0BAAkB,KAAK;AAAA,UACnB,MAAM,SAAS,aAAa,UAAU,aAAa;AAAA,UACnD,SAAU,WAAW,IAAI,YAAY,QAAQ;AAAA,UAC7C,SAAU,SAAS,IAAI,YAAY,QAAQ;AAAA,UAC3C,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS,IAAI,YAAY;AAAA,QAC7B,CAAC;AACD,eAAO,MAAM;AAAA,MACjB;AAAA,IACJ;AACA,QAAI,IAAI,cAAc,MAAM;AACxB,UAAI,IAAI,KAAK,SAAS,IAAI,UAAU,OAAO;AACvC,0BAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,SAAS,IAAI,UAAU;AAAA,UACvB,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS,IAAI,UAAU;AAAA,QAC3B,CAAC;AACD,eAAO,MAAM;AAAA,MACjB;AAAA,IACJ;AACA,QAAI,IAAI,cAAc,MAAM;AACxB,UAAI,IAAI,KAAK,SAAS,IAAI,UAAU,OAAO;AACvC,0BAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,SAAS,IAAI,UAAU;AAAA,UACvB,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS,IAAI,UAAU;AAAA,QAC3B,CAAC;AACD,eAAO,MAAM;AAAA,MACjB;AAAA,IACJ;AACA,QAAI,IAAI,OAAO,OAAO;AAClB,aAAO,QAAQ,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,MAAM;AAC9C,eAAO,IAAI,KAAK,YAAY,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,CAAC,CAAC;AAAA,MAC9E,CAAC,CAAC,EAAE,KAAK,CAACC,YAAW;AACjB,eAAO,YAAY,WAAW,QAAQA,OAAM;AAAA,MAChD,CAAC;AAAA,IACL;AACA,UAAM,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,MAAM;AAC1C,aAAO,IAAI,KAAK,WAAW,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,CAAC,CAAC;AAAA,IAC7E,CAAC;AACD,WAAO,YAAY,WAAW,QAAQ,MAAM;AAAA,EAChD;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,WAAW,SAAS;AACpB,WAAO,IAAI,UAAS;AAAA,MAChB,GAAG,KAAK;AAAA,MACR,WAAW,EAAE,OAAO,WAAW,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,IACxE,CAAC;AAAA,EACL;AAAA,EACA,IAAI,WAAW,SAAS;AACpB,WAAO,IAAI,UAAS;AAAA,MAChB,GAAG,KAAK;AAAA,MACR,WAAW,EAAE,OAAO,WAAW,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,IACxE,CAAC;AAAA,EACL;AAAA,EACA,OAAO,KAAK,SAAS;AACjB,WAAO,IAAI,UAAS;AAAA,MAChB,GAAG,KAAK;AAAA,MACR,aAAa,EAAE,OAAO,KAAK,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,IACpE,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,IAAI,GAAG,OAAO;AAAA,EAC9B;AACJ;AACA,SAAS,SAAS,CAAC,QAAQ,WAAW;AAClC,SAAO,IAAI,SAAS;AAAA,IAChB,MAAM;AAAA,IACN,WAAW;AAAA,IACX,WAAW;AAAA,IACX,aAAa;AAAA,IACb,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,SAAS,eAAe,QAAQ;AAC5B,MAAI,kBAAkB,WAAW;AAC7B,UAAM,WAAW,CAAC;AAClB,eAAW,OAAO,OAAO,OAAO;AAC5B,YAAM,cAAc,OAAO,MAAM,GAAG;AACpC,eAAS,GAAG,IAAI,YAAY,OAAO,eAAe,WAAW,CAAC;AAAA,IAClE;AACA,WAAO,IAAI,UAAU;AAAA,MACjB,GAAG,OAAO;AAAA,MACV,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL,WACS,kBAAkB,UAAU;AACjC,WAAO,IAAI,SAAS;AAAA,MAChB,GAAG,OAAO;AAAA,MACV,MAAM,eAAe,OAAO,OAAO;AAAA,IACvC,CAAC;AAAA,EACL,WACS,kBAAkB,aAAa;AACpC,WAAO,YAAY,OAAO,eAAe,OAAO,OAAO,CAAC,CAAC;AAAA,EAC7D,WACS,kBAAkB,aAAa;AACpC,WAAO,YAAY,OAAO,eAAe,OAAO,OAAO,CAAC,CAAC;AAAA,EAC7D,WACS,kBAAkB,UAAU;AACjC,WAAO,SAAS,OAAO,OAAO,MAAM,IAAI,CAAC,SAAS,eAAe,IAAI,CAAC,CAAC;AAAA,EAC3E,OACK;AACD,WAAO;AAAA,EACX;AACJ;AACO,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,EACnC,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,UAAU;AAKf,SAAK,YAAY,KAAK;AAqCtB,SAAK,UAAU,KAAK;AAAA,EACxB;AAAA,EACA,aAAa;AACT,QAAI,KAAK,YAAY;AACjB,aAAO,KAAK;AAChB,UAAM,QAAQ,KAAK,KAAK,MAAM;AAC9B,UAAM,OAAO,KAAK,WAAW,KAAK;AAClC,SAAK,UAAU,EAAE,OAAO,KAAK;AAC7B,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,OAAO,OAAO;AACV,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,QAAQ;AACrC,YAAMD,OAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkBA,MAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAUA,KAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,UAAM,EAAE,OAAO,MAAM,UAAU,IAAI,KAAK,WAAW;AACnD,UAAM,YAAY,CAAC;AACnB,QAAI,EAAE,KAAK,KAAK,oBAAoB,YAAY,KAAK,KAAK,gBAAgB,UAAU;AAChF,iBAAW,OAAO,IAAI,MAAM;AACxB,YAAI,CAAC,UAAU,SAAS,GAAG,GAAG;AAC1B,oBAAU,KAAK,GAAG;AAAA,QACtB;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,QAAQ,CAAC;AACf,eAAW,OAAO,WAAW;AACzB,YAAM,eAAe,MAAM,GAAG;AAC9B,YAAM,QAAQ,IAAI,KAAK,GAAG;AAC1B,YAAM,KAAK;AAAA,QACP,KAAK,EAAE,QAAQ,SAAS,OAAO,IAAI;AAAA,QACnC,OAAO,aAAa,OAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,MAAM,GAAG,CAAC;AAAA,QAC5E,WAAW,OAAO,IAAI;AAAA,MAC1B,CAAC;AAAA,IACL;AACA,QAAI,KAAK,KAAK,oBAAoB,UAAU;AACxC,YAAM,cAAc,KAAK,KAAK;AAC9B,UAAI,gBAAgB,eAAe;AAC/B,mBAAW,OAAO,WAAW;AACzB,gBAAM,KAAK;AAAA,YACP,KAAK,EAAE,QAAQ,SAAS,OAAO,IAAI;AAAA,YACnC,OAAO,EAAE,QAAQ,SAAS,OAAO,IAAI,KAAK,GAAG,EAAE;AAAA,UACnD,CAAC;AAAA,QACL;AAAA,MACJ,WACS,gBAAgB,UAAU;AAC/B,YAAI,UAAU,SAAS,GAAG;AACtB,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,MAAM;AAAA,UACV,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ,WACS,gBAAgB,SAAS;AAAA,MAClC,OACK;AACD,cAAM,IAAI,MAAM,sDAAsD;AAAA,MAC1E;AAAA,IACJ,OACK;AAED,YAAM,WAAW,KAAK,KAAK;AAC3B,iBAAW,OAAO,WAAW;AACzB,cAAM,QAAQ,IAAI,KAAK,GAAG;AAC1B,cAAM,KAAK;AAAA,UACP,KAAK,EAAE,QAAQ,SAAS,OAAO,IAAI;AAAA,UACnC,OAAO,SAAS;AAAA,YAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,MAAM,GAAG;AAAA;AAAA,UACvE;AAAA,UACA,WAAW,OAAO,IAAI;AAAA,QAC1B,CAAC;AAAA,MACL;AAAA,IACJ;AACA,QAAI,IAAI,OAAO,OAAO;AAClB,aAAO,QAAQ,QAAQ,EAClB,KAAK,YAAY;AAClB,cAAM,YAAY,CAAC;AACnB,mBAAW,QAAQ,OAAO;AACtB,gBAAM,MAAM,MAAM,KAAK;AACvB,gBAAM,QAAQ,MAAM,KAAK;AACzB,oBAAU,KAAK;AAAA,YACX;AAAA,YACA;AAAA,YACA,WAAW,KAAK;AAAA,UACpB,CAAC;AAAA,QACL;AACA,eAAO;AAAA,MACX,CAAC,EACI,KAAK,CAAC,cAAc;AACrB,eAAO,YAAY,gBAAgB,QAAQ,SAAS;AAAA,MACxD,CAAC;AAAA,IACL,OACK;AACD,aAAO,YAAY,gBAAgB,QAAQ,KAAK;AAAA,IACpD;AAAA,EACJ;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK,KAAK,MAAM;AAAA,EAC3B;AAAA,EACA,OAAO,SAAS;AACZ,cAAU;AACV,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,aAAa;AAAA,MACb,GAAI,YAAY,SACV;AAAA,QACE,UAAU,CAAC,OAAO,QAAQ;AACtB,gBAAM,eAAe,KAAK,KAAK,WAAW,OAAO,GAAG,EAAE,WAAW,IAAI;AACrE,cAAI,MAAM,SAAS;AACf,mBAAO;AAAA,cACH,SAAS,UAAU,SAAS,OAAO,EAAE,WAAW;AAAA,YACpD;AACJ,iBAAO;AAAA,YACH,SAAS;AAAA,UACb;AAAA,QACJ;AAAA,MACJ,IACE,CAAC;AAAA,IACX,CAAC;AAAA,EACL;AAAA,EACA,QAAQ;AACJ,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,aAAa;AAAA,IACjB,CAAC;AAAA,EACL;AAAA,EACA,cAAc;AACV,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,aAAa;AAAA,IACjB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,OAAO,cAAc;AACjB,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,OAAO;AAAA,QACV,GAAG,KAAK,KAAK,MAAM;AAAA,QACnB,GAAG;AAAA,MACP;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAS;AACX,UAAM,SAAS,IAAI,WAAU;AAAA,MACzB,aAAa,QAAQ,KAAK;AAAA,MAC1B,UAAU,QAAQ,KAAK;AAAA,MACvB,OAAO,OAAO;AAAA,QACV,GAAG,KAAK,KAAK,MAAM;AAAA,QACnB,GAAG,QAAQ,KAAK,MAAM;AAAA,MAC1B;AAAA,MACA,UAAU,sBAAsB;AAAA,IACpC,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoCA,OAAO,KAAK,QAAQ;AAChB,WAAO,KAAK,QAAQ,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,SAAS,OAAO;AACZ,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,UAAU;AAAA,IACd,CAAC;AAAA,EACL;AAAA,EACA,KAAK,MAAM;AACP,UAAM,QAAQ,CAAC;AACf,eAAW,OAAO,KAAK,WAAW,IAAI,GAAG;AACrC,UAAI,KAAK,GAAG,KAAK,KAAK,MAAM,GAAG,GAAG;AAC9B,cAAM,GAAG,IAAI,KAAK,MAAM,GAAG;AAAA,MAC/B;AAAA,IACJ;AACA,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL;AAAA,EACA,KAAK,MAAM;AACP,UAAM,QAAQ,CAAC;AACf,eAAW,OAAO,KAAK,WAAW,KAAK,KAAK,GAAG;AAC3C,UAAI,CAAC,KAAK,GAAG,GAAG;AACZ,cAAM,GAAG,IAAI,KAAK,MAAM,GAAG;AAAA,MAC/B;AAAA,IACJ;AACA,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,cAAc;AACV,WAAO,eAAe,IAAI;AAAA,EAC9B;AAAA,EACA,QAAQ,MAAM;AACV,UAAM,WAAW,CAAC;AAClB,eAAW,OAAO,KAAK,WAAW,KAAK,KAAK,GAAG;AAC3C,YAAM,cAAc,KAAK,MAAM,GAAG;AAClC,UAAI,QAAQ,CAAC,KAAK,GAAG,GAAG;AACpB,iBAAS,GAAG,IAAI;AAAA,MACpB,OACK;AACD,iBAAS,GAAG,IAAI,YAAY,SAAS;AAAA,MACzC;AAAA,IACJ;AACA,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL;AAAA,EACA,SAAS,MAAM;AACX,UAAM,WAAW,CAAC;AAClB,eAAW,OAAO,KAAK,WAAW,KAAK,KAAK,GAAG;AAC3C,UAAI,QAAQ,CAAC,KAAK,GAAG,GAAG;AACpB,iBAAS,GAAG,IAAI,KAAK,MAAM,GAAG;AAAA,MAClC,OACK;AACD,cAAM,cAAc,KAAK,MAAM,GAAG;AAClC,YAAI,WAAW;AACf,eAAO,oBAAoB,aAAa;AACpC,qBAAW,SAAS,KAAK;AAAA,QAC7B;AACA,iBAAS,GAAG,IAAI;AAAA,MACpB;AAAA,IACJ;AACA,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL;AAAA,EACA,QAAQ;AACJ,WAAO,cAAc,KAAK,WAAW,KAAK,KAAK,CAAC;AAAA,EACpD;AACJ;AACA,UAAU,SAAS,CAAC,OAAO,WAAW;AAClC,SAAO,IAAI,UAAU;AAAA,IACjB,OAAO,MAAM;AAAA,IACb,aAAa;AAAA,IACb,UAAU,SAAS,OAAO;AAAA,IAC1B,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,UAAU,eAAe,CAAC,OAAO,WAAW;AACxC,SAAO,IAAI,UAAU;AAAA,IACjB,OAAO,MAAM;AAAA,IACb,aAAa;AAAA,IACb,UAAU,SAAS,OAAO;AAAA,IAC1B,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,UAAU,aAAa,CAAC,OAAO,WAAW;AACtC,SAAO,IAAI,UAAU;AAAA,IACjB;AAAA,IACA,aAAa;AAAA,IACb,UAAU,SAAS,OAAO;AAAA,IAC1B,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,WAAN,cAAuB,QAAQ;AAAA,EAClC,OAAO,OAAO;AACV,UAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,UAAM,UAAU,KAAK,KAAK;AAC1B,aAAS,cAAc,SAAS;AAE5B,iBAAW,UAAU,SAAS;AAC1B,YAAI,OAAO,OAAO,WAAW,SAAS;AAClC,iBAAO,OAAO;AAAA,QAClB;AAAA,MACJ;AACA,iBAAW,UAAU,SAAS;AAC1B,YAAI,OAAO,OAAO,WAAW,SAAS;AAElC,cAAI,OAAO,OAAO,KAAK,GAAG,OAAO,IAAI,OAAO,MAAM;AAClD,iBAAO,OAAO;AAAA,QAClB;AAAA,MACJ;AAEA,YAAM,cAAc,QAAQ,IAAI,CAAC,WAAW,IAAI,SAAS,OAAO,IAAI,OAAO,MAAM,CAAC;AAClF,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB;AAAA,MACJ,CAAC;AACD,aAAO;AAAA,IACX;AACA,QAAI,IAAI,OAAO,OAAO;AAClB,aAAO,QAAQ,IAAI,QAAQ,IAAI,OAAO,WAAW;AAC7C,cAAM,WAAW;AAAA,UACb,GAAG;AAAA,UACH,QAAQ;AAAA,YACJ,GAAG,IAAI;AAAA,YACP,QAAQ,CAAC;AAAA,UACb;AAAA,UACA,QAAQ;AAAA,QACZ;AACA,eAAO;AAAA,UACH,QAAQ,MAAM,OAAO,YAAY;AAAA,YAC7B,MAAM,IAAI;AAAA,YACV,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC;AAAA,UACD,KAAK;AAAA,QACT;AAAA,MACJ,CAAC,CAAC,EAAE,KAAK,aAAa;AAAA,IAC1B,OACK;AACD,UAAI,QAAQ;AACZ,YAAM,SAAS,CAAC;AAChB,iBAAW,UAAU,SAAS;AAC1B,cAAM,WAAW;AAAA,UACb,GAAG;AAAA,UACH,QAAQ;AAAA,YACJ,GAAG,IAAI;AAAA,YACP,QAAQ,CAAC;AAAA,UACb;AAAA,UACA,QAAQ;AAAA,QACZ;AACA,cAAM,SAAS,OAAO,WAAW;AAAA,UAC7B,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AACD,YAAI,OAAO,WAAW,SAAS;AAC3B,iBAAO;AAAA,QACX,WACS,OAAO,WAAW,WAAW,CAAC,OAAO;AAC1C,kBAAQ,EAAE,QAAQ,KAAK,SAAS;AAAA,QACpC;AACA,YAAI,SAAS,OAAO,OAAO,QAAQ;AAC/B,iBAAO,KAAK,SAAS,OAAO,MAAM;AAAA,QACtC;AAAA,MACJ;AACA,UAAI,OAAO;AACP,YAAI,OAAO,OAAO,KAAK,GAAG,MAAM,IAAI,OAAO,MAAM;AACjD,eAAO,MAAM;AAAA,MACjB;AACA,YAAM,cAAc,OAAO,IAAI,CAACE,YAAW,IAAI,SAASA,OAAM,CAAC;AAC/D,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB;AAAA,MACJ,CAAC;AACD,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,SAAS,SAAS,CAAC,OAAO,WAAW;AACjC,SAAO,IAAI,SAAS;AAAA,IAChB,SAAS;AAAA,IACT,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AAQA,IAAM,mBAAmB,CAAC,SAAS;AAC/B,MAAI,gBAAgB,SAAS;AACzB,WAAO,iBAAiB,KAAK,MAAM;AAAA,EACvC,WACS,gBAAgB,YAAY;AACjC,WAAO,iBAAiB,KAAK,UAAU,CAAC;AAAA,EAC5C,WACS,gBAAgB,YAAY;AACjC,WAAO,CAAC,KAAK,KAAK;AAAA,EACtB,WACS,gBAAgB,SAAS;AAC9B,WAAO,KAAK;AAAA,EAChB,WACS,gBAAgB,eAAe;AAEpC,WAAO,KAAK,aAAa,KAAK,IAAI;AAAA,EACtC,WACS,gBAAgB,YAAY;AACjC,WAAO,iBAAiB,KAAK,KAAK,SAAS;AAAA,EAC/C,WACS,gBAAgB,cAAc;AACnC,WAAO,CAAC,MAAS;AAAA,EACrB,WACS,gBAAgB,SAAS;AAC9B,WAAO,CAAC,IAAI;AAAA,EAChB,WACS,gBAAgB,aAAa;AAClC,WAAO,CAAC,QAAW,GAAG,iBAAiB,KAAK,OAAO,CAAC,CAAC;AAAA,EACzD,WACS,gBAAgB,aAAa;AAClC,WAAO,CAAC,MAAM,GAAG,iBAAiB,KAAK,OAAO,CAAC,CAAC;AAAA,EACpD,WACS,gBAAgB,YAAY;AACjC,WAAO,iBAAiB,KAAK,OAAO,CAAC;AAAA,EACzC,WACS,gBAAgB,aAAa;AAClC,WAAO,iBAAiB,KAAK,OAAO,CAAC;AAAA,EACzC,WACS,gBAAgB,UAAU;AAC/B,WAAO,iBAAiB,KAAK,KAAK,SAAS;AAAA,EAC/C,OACK;AACD,WAAO,CAAC;AAAA,EACZ;AACJ;AACO,IAAM,wBAAN,MAAM,+BAA8B,QAAQ;AAAA,EAC/C,OAAO,OAAO;AACV,UAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,QAAI,IAAI,eAAe,cAAc,QAAQ;AACzC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,gBAAgB,KAAK;AAC3B,UAAM,qBAAqB,IAAI,KAAK,aAAa;AACjD,UAAM,SAAS,KAAK,WAAW,IAAI,kBAAkB;AACrD,QAAI,CAAC,QAAQ;AACT,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,SAAS,MAAM,KAAK,KAAK,WAAW,KAAK,CAAC;AAAA,QAC1C,MAAM,CAAC,aAAa;AAAA,MACxB,CAAC;AACD,aAAO;AAAA,IACX;AACA,QAAI,IAAI,OAAO,OAAO;AAClB,aAAO,OAAO,YAAY;AAAA,QACtB,MAAM,IAAI;AAAA,QACV,MAAM,IAAI;AAAA,QACV,QAAQ;AAAA,MACZ,CAAC;AAAA,IACL,OACK;AACD,aAAO,OAAO,WAAW;AAAA,QACrB,MAAM,IAAI;AAAA,QACV,MAAM,IAAI;AAAA,QACV,QAAQ;AAAA,MACZ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,IAAI,gBAAgB;AAChB,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,aAAa;AACb,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,OAAO,eAAe,SAAS,QAAQ;AAE1C,UAAM,aAAa,oBAAI,IAAI;AAE3B,eAAW,QAAQ,SAAS;AACxB,YAAM,sBAAsB,iBAAiB,KAAK,MAAM,aAAa,CAAC;AACtE,UAAI,CAAC,oBAAoB,QAAQ;AAC7B,cAAM,IAAI,MAAM,mCAAmC,aAAa,mDAAmD;AAAA,MACvH;AACA,iBAAW,SAAS,qBAAqB;AACrC,YAAI,WAAW,IAAI,KAAK,GAAG;AACvB,gBAAM,IAAI,MAAM,0BAA0B,OAAO,aAAa,CAAC,wBAAwB,OAAO,KAAK,CAAC,EAAE;AAAA,QAC1G;AACA,mBAAW,IAAI,OAAO,IAAI;AAAA,MAC9B;AAAA,IACJ;AACA,WAAO,IAAI,uBAAsB;AAAA,MAC7B,UAAU,sBAAsB;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG,oBAAoB,MAAM;AAAA,IACjC,CAAC;AAAA,EACL;AACJ;AACA,SAAS,YAAY,GAAG,GAAG;AACvB,QAAM,QAAQ,cAAc,CAAC;AAC7B,QAAM,QAAQ,cAAc,CAAC;AAC7B,MAAI,MAAM,GAAG;AACT,WAAO,EAAE,OAAO,MAAM,MAAM,EAAE;AAAA,EAClC,WACS,UAAU,cAAc,UAAU,UAAU,cAAc,QAAQ;AACvE,UAAM,QAAQ,KAAK,WAAW,CAAC;AAC/B,UAAM,aAAa,KAAK,WAAW,CAAC,EAAE,OAAO,CAAC,QAAQ,MAAM,QAAQ,GAAG,MAAM,EAAE;AAC/E,UAAM,SAAS,EAAE,GAAG,GAAG,GAAG,EAAE;AAC5B,eAAW,OAAO,YAAY;AAC1B,YAAM,cAAc,YAAY,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC;AAC9C,UAAI,CAAC,YAAY,OAAO;AACpB,eAAO,EAAE,OAAO,MAAM;AAAA,MAC1B;AACA,aAAO,GAAG,IAAI,YAAY;AAAA,IAC9B;AACA,WAAO,EAAE,OAAO,MAAM,MAAM,OAAO;AAAA,EACvC,WACS,UAAU,cAAc,SAAS,UAAU,cAAc,OAAO;AACrE,QAAI,EAAE,WAAW,EAAE,QAAQ;AACvB,aAAO,EAAE,OAAO,MAAM;AAAA,IAC1B;AACA,UAAM,WAAW,CAAC;AAClB,aAAS,QAAQ,GAAG,QAAQ,EAAE,QAAQ,SAAS;AAC3C,YAAM,QAAQ,EAAE,KAAK;AACrB,YAAM,QAAQ,EAAE,KAAK;AACrB,YAAM,cAAc,YAAY,OAAO,KAAK;AAC5C,UAAI,CAAC,YAAY,OAAO;AACpB,eAAO,EAAE,OAAO,MAAM;AAAA,MAC1B;AACA,eAAS,KAAK,YAAY,IAAI;AAAA,IAClC;AACA,WAAO,EAAE,OAAO,MAAM,MAAM,SAAS;AAAA,EACzC,WACS,UAAU,cAAc,QAAQ,UAAU,cAAc,QAAQ,CAAC,MAAM,CAAC,GAAG;AAChF,WAAO,EAAE,OAAO,MAAM,MAAM,EAAE;AAAA,EAClC,OACK;AACD,WAAO,EAAE,OAAO,MAAM;AAAA,EAC1B;AACJ;AACO,IAAM,kBAAN,cAA8B,QAAQ;AAAA,EACzC,OAAO,OAAO;AACV,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,UAAM,eAAe,CAAC,YAAY,gBAAgB;AAC9C,UAAI,UAAU,UAAU,KAAK,UAAU,WAAW,GAAG;AACjD,eAAO;AAAA,MACX;AACA,YAAM,SAAS,YAAY,WAAW,OAAO,YAAY,KAAK;AAC9D,UAAI,CAAC,OAAO,OAAO;AACf,0BAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,QACvB,CAAC;AACD,eAAO;AAAA,MACX;AACA,UAAI,QAAQ,UAAU,KAAK,QAAQ,WAAW,GAAG;AAC7C,eAAO,MAAM;AAAA,MACjB;AACA,aAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,IACtD;AACA,QAAI,IAAI,OAAO,OAAO;AAClB,aAAO,QAAQ,IAAI;AAAA,QACf,KAAK,KAAK,KAAK,YAAY;AAAA,UACvB,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AAAA,QACD,KAAK,KAAK,MAAM,YAAY;AAAA,UACxB,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AAAA,MACL,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,aAAa,MAAM,KAAK,CAAC;AAAA,IACxD,OACK;AACD,aAAO,aAAa,KAAK,KAAK,KAAK,WAAW;AAAA,QAC1C,MAAM,IAAI;AAAA,QACV,MAAM,IAAI;AAAA,QACV,QAAQ;AAAA,MACZ,CAAC,GAAG,KAAK,KAAK,MAAM,WAAW;AAAA,QAC3B,MAAM,IAAI;AAAA,QACV,MAAM,IAAI;AAAA,QACV,QAAQ;AAAA,MACZ,CAAC,CAAC;AAAA,IACN;AAAA,EACJ;AACJ;AACA,gBAAgB,SAAS,CAAC,MAAM,OAAO,WAAW;AAC9C,SAAO,IAAI,gBAAgB;AAAA,IACvB;AAAA,IACA;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AAEO,IAAM,WAAN,MAAM,kBAAiB,QAAQ;AAAA,EAClC,OAAO,OAAO;AACV,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,QAAI,IAAI,eAAe,cAAc,OAAO;AACxC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,QAAI,IAAI,KAAK,SAAS,KAAK,KAAK,MAAM,QAAQ;AAC1C,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,SAAS,KAAK,KAAK,MAAM;AAAA,QACzB,WAAW;AAAA,QACX,OAAO;AAAA,QACP,MAAM;AAAA,MACV,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,OAAO,KAAK,KAAK;AACvB,QAAI,CAAC,QAAQ,IAAI,KAAK,SAAS,KAAK,KAAK,MAAM,QAAQ;AACnD,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,SAAS,KAAK,KAAK,MAAM;AAAA,QACzB,WAAW;AAAA,QACX,OAAO;AAAA,QACP,MAAM;AAAA,MACV,CAAC;AACD,aAAO,MAAM;AAAA,IACjB;AACA,UAAM,QAAQ,CAAC,GAAG,IAAI,IAAI,EACrB,IAAI,CAAC,MAAM,cAAc;AAC1B,YAAM,SAAS,KAAK,KAAK,MAAM,SAAS,KAAK,KAAK,KAAK;AACvD,UAAI,CAAC;AACD,eAAO;AACX,aAAO,OAAO,OAAO,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC/E,CAAC,EACI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACtB,QAAI,IAAI,OAAO,OAAO;AAClB,aAAO,QAAQ,IAAI,KAAK,EAAE,KAAK,CAAC,YAAY;AACxC,eAAO,YAAY,WAAW,QAAQ,OAAO;AAAA,MACjD,CAAC;AAAA,IACL,OACK;AACD,aAAO,YAAY,WAAW,QAAQ,KAAK;AAAA,IAC/C;AAAA,EACJ;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,KAAK,MAAM;AACP,WAAO,IAAI,UAAS;AAAA,MAChB,GAAG,KAAK;AAAA,MACR;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;AACA,SAAS,SAAS,CAAC,SAAS,WAAW;AACnC,MAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AACzB,UAAM,IAAI,MAAM,uDAAuD;AAAA,EAC3E;AACA,SAAO,IAAI,SAAS;AAAA,IAChB,OAAO;AAAA,IACP,UAAU,sBAAsB;AAAA,IAChC,MAAM;AAAA,IACN,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,EACnC,IAAI,YAAY;AACZ,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,OAAO;AACV,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,QAAI,IAAI,eAAe,cAAc,QAAQ;AACzC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,QAAQ,CAAC;AACf,UAAM,UAAU,KAAK,KAAK;AAC1B,UAAM,YAAY,KAAK,KAAK;AAC5B,eAAW,OAAO,IAAI,MAAM;AACxB,YAAM,KAAK;AAAA,QACP,KAAK,QAAQ,OAAO,IAAI,mBAAmB,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC;AAAA,QACnE,OAAO,UAAU,OAAO,IAAI,mBAAmB,KAAK,IAAI,KAAK,GAAG,GAAG,IAAI,MAAM,GAAG,CAAC;AAAA,QACjF,WAAW,OAAO,IAAI;AAAA,MAC1B,CAAC;AAAA,IACL;AACA,QAAI,IAAI,OAAO,OAAO;AAClB,aAAO,YAAY,iBAAiB,QAAQ,KAAK;AAAA,IACrD,OACK;AACD,aAAO,YAAY,gBAAgB,QAAQ,KAAK;AAAA,IACpD;AAAA,EACJ;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,OAAO,OAAO,QAAQ,OAAO;AAChC,QAAI,kBAAkB,SAAS;AAC3B,aAAO,IAAI,WAAU;AAAA,QACjB,SAAS;AAAA,QACT,WAAW;AAAA,QACX,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,KAAK;AAAA,MAChC,CAAC;AAAA,IACL;AACA,WAAO,IAAI,WAAU;AAAA,MACjB,SAAS,UAAU,OAAO;AAAA,MAC1B,WAAW;AAAA,MACX,UAAU,sBAAsB;AAAA,MAChC,GAAG,oBAAoB,MAAM;AAAA,IACjC,CAAC;AAAA,EACL;AACJ;AACO,IAAM,SAAN,cAAqB,QAAQ;AAAA,EAChC,IAAI,YAAY;AACZ,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,OAAO;AACV,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,QAAI,IAAI,eAAe,cAAc,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,UAAU,KAAK,KAAK;AAC1B,UAAM,YAAY,KAAK,KAAK;AAC5B,UAAM,QAAQ,CAAC,GAAG,IAAI,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,UAAU;AAC/D,aAAO;AAAA,QACH,KAAK,QAAQ,OAAO,IAAI,mBAAmB,KAAK,KAAK,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC;AAAA,QAC9E,OAAO,UAAU,OAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,MAAM,CAAC,OAAO,OAAO,CAAC,CAAC;AAAA,MAC1F;AAAA,IACJ,CAAC;AACD,QAAI,IAAI,OAAO,OAAO;AAClB,YAAM,WAAW,oBAAI,IAAI;AACzB,aAAO,QAAQ,QAAQ,EAAE,KAAK,YAAY;AACtC,mBAAW,QAAQ,OAAO;AACtB,gBAAM,MAAM,MAAM,KAAK;AACvB,gBAAM,QAAQ,MAAM,KAAK;AACzB,cAAI,IAAI,WAAW,aAAa,MAAM,WAAW,WAAW;AACxD,mBAAO;AAAA,UACX;AACA,cAAI,IAAI,WAAW,WAAW,MAAM,WAAW,SAAS;AACpD,mBAAO,MAAM;AAAA,UACjB;AACA,mBAAS,IAAI,IAAI,OAAO,MAAM,KAAK;AAAA,QACvC;AACA,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,SAAS;AAAA,MACnD,CAAC;AAAA,IACL,OACK;AACD,YAAM,WAAW,oBAAI,IAAI;AACzB,iBAAW,QAAQ,OAAO;AACtB,cAAM,MAAM,KAAK;AACjB,cAAM,QAAQ,KAAK;AACnB,YAAI,IAAI,WAAW,aAAa,MAAM,WAAW,WAAW;AACxD,iBAAO;AAAA,QACX;AACA,YAAI,IAAI,WAAW,WAAW,MAAM,WAAW,SAAS;AACpD,iBAAO,MAAM;AAAA,QACjB;AACA,iBAAS,IAAI,IAAI,OAAO,MAAM,KAAK;AAAA,MACvC;AACA,aAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,SAAS;AAAA,IACnD;AAAA,EACJ;AACJ;AACA,OAAO,SAAS,CAAC,SAAS,WAAW,WAAW;AAC5C,SAAO,IAAI,OAAO;AAAA,IACd;AAAA,IACA;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,SAAN,MAAM,gBAAe,QAAQ;AAAA,EAChC,OAAO,OAAO;AACV,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,QAAI,IAAI,eAAe,cAAc,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,MAAM,KAAK;AACjB,QAAI,IAAI,YAAY,MAAM;AACtB,UAAI,IAAI,KAAK,OAAO,IAAI,QAAQ,OAAO;AACnC,0BAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,SAAS,IAAI,QAAQ;AAAA,UACrB,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS,IAAI,QAAQ;AAAA,QACzB,CAAC;AACD,eAAO,MAAM;AAAA,MACjB;AAAA,IACJ;AACA,QAAI,IAAI,YAAY,MAAM;AACtB,UAAI,IAAI,KAAK,OAAO,IAAI,QAAQ,OAAO;AACnC,0BAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,SAAS,IAAI,QAAQ;AAAA,UACrB,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS,IAAI,QAAQ;AAAA,QACzB,CAAC;AACD,eAAO,MAAM;AAAA,MACjB;AAAA,IACJ;AACA,UAAM,YAAY,KAAK,KAAK;AAC5B,aAAS,YAAYC,WAAU;AAC3B,YAAM,YAAY,oBAAI,IAAI;AAC1B,iBAAW,WAAWA,WAAU;AAC5B,YAAI,QAAQ,WAAW;AACnB,iBAAO;AACX,YAAI,QAAQ,WAAW;AACnB,iBAAO,MAAM;AACjB,kBAAU,IAAI,QAAQ,KAAK;AAAA,MAC/B;AACA,aAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,UAAU;AAAA,IACpD;AACA,UAAM,WAAW,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,MAAM,UAAU,OAAO,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;AACzH,QAAI,IAAI,OAAO,OAAO;AAClB,aAAO,QAAQ,IAAI,QAAQ,EAAE,KAAK,CAACA,cAAa,YAAYA,SAAQ,CAAC;AAAA,IACzE,OACK;AACD,aAAO,YAAY,QAAQ;AAAA,IAC/B;AAAA,EACJ;AAAA,EACA,IAAI,SAAS,SAAS;AAClB,WAAO,IAAI,QAAO;AAAA,MACd,GAAG,KAAK;AAAA,MACR,SAAS,EAAE,OAAO,SAAS,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,IACpE,CAAC;AAAA,EACL;AAAA,EACA,IAAI,SAAS,SAAS;AAClB,WAAO,IAAI,QAAO;AAAA,MACd,GAAG,KAAK;AAAA,MACR,SAAS,EAAE,OAAO,SAAS,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,IACpE,CAAC;AAAA,EACL;AAAA,EACA,KAAK,MAAM,SAAS;AAChB,WAAO,KAAK,IAAI,MAAM,OAAO,EAAE,IAAI,MAAM,OAAO;AAAA,EACpD;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,IAAI,GAAG,OAAO;AAAA,EAC9B;AACJ;AACA,OAAO,SAAS,CAAC,WAAW,WAAW;AACnC,SAAO,IAAI,OAAO;AAAA,IACd;AAAA,IACA,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,cAAN,MAAM,qBAAoB,QAAQ;AAAA,EACrC,cAAc;AACV,UAAM,GAAG,SAAS;AAClB,SAAK,WAAW,KAAK;AAAA,EACzB;AAAA,EACA,OAAO,OAAO;AACV,UAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,QAAI,IAAI,eAAe,cAAc,UAAU;AAC3C,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,aAAS,cAAc,MAAM,OAAO;AAChC,aAAO,UAAU;AAAA,QACb,MAAM;AAAA,QACN,MAAM,IAAI;AAAA,QACV,WAAW,CAAC,IAAI,OAAO,oBAAoB,IAAI,gBAAgB,YAAY,GAAG,UAAe,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,QAChH,WAAW;AAAA,UACP,MAAM,aAAa;AAAA,UACnB,gBAAgB;AAAA,QACpB;AAAA,MACJ,CAAC;AAAA,IACL;AACA,aAAS,iBAAiB,SAAS,OAAO;AACtC,aAAO,UAAU;AAAA,QACb,MAAM;AAAA,QACN,MAAM,IAAI;AAAA,QACV,WAAW,CAAC,IAAI,OAAO,oBAAoB,IAAI,gBAAgB,YAAY,GAAG,UAAe,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,QAChH,WAAW;AAAA,UACP,MAAM,aAAa;AAAA,UACnB,iBAAiB;AAAA,QACrB;AAAA,MACJ,CAAC;AAAA,IACL;AACA,UAAM,SAAS,EAAE,UAAU,IAAI,OAAO,mBAAmB;AACzD,UAAM,KAAK,IAAI;AACf,QAAI,KAAK,KAAK,mBAAmB,YAAY;AAIzC,YAAM,KAAK;AACX,aAAO,GAAG,kBAAmB,MAAM;AAC/B,cAAM,QAAQ,IAAI,SAAS,CAAC,CAAC;AAC7B,cAAM,aAAa,MAAM,GAAG,KAAK,KAAK,WAAW,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM;AACxE,gBAAM,SAAS,cAAc,MAAM,CAAC,CAAC;AACrC,gBAAM;AAAA,QACV,CAAC;AACD,cAAM,SAAS,MAAM,QAAQ,MAAM,IAAI,MAAM,UAAU;AACvD,cAAM,gBAAgB,MAAM,GAAG,KAAK,QAAQ,KAAK,KAC5C,WAAW,QAAQ,MAAM,EACzB,MAAM,CAAC,MAAM;AACd,gBAAM,SAAS,iBAAiB,QAAQ,CAAC,CAAC;AAC1C,gBAAM;AAAA,QACV,CAAC;AACD,eAAO;AAAA,MACX,CAAC;AAAA,IACL,OACK;AAID,YAAM,KAAK;AACX,aAAO,GAAG,YAAa,MAAM;AACzB,cAAM,aAAa,GAAG,KAAK,KAAK,UAAU,MAAM,MAAM;AACtD,YAAI,CAAC,WAAW,SAAS;AACrB,gBAAM,IAAI,SAAS,CAAC,cAAc,MAAM,WAAW,KAAK,CAAC,CAAC;AAAA,QAC9D;AACA,cAAM,SAAS,QAAQ,MAAM,IAAI,MAAM,WAAW,IAAI;AACtD,cAAM,gBAAgB,GAAG,KAAK,QAAQ,UAAU,QAAQ,MAAM;AAC9D,YAAI,CAAC,cAAc,SAAS;AACxB,gBAAM,IAAI,SAAS,CAAC,iBAAiB,QAAQ,cAAc,KAAK,CAAC,CAAC;AAAA,QACtE;AACA,eAAO,cAAc;AAAA,MACzB,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,aAAa;AACT,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,aAAa;AACT,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,QAAQ,OAAO;AACX,WAAO,IAAI,aAAY;AAAA,MACnB,GAAG,KAAK;AAAA,MACR,MAAM,SAAS,OAAO,KAAK,EAAE,KAAK,WAAW,OAAO,CAAC;AAAA,IACzD,CAAC;AAAA,EACL;AAAA,EACA,QAAQ,YAAY;AAChB,WAAO,IAAI,aAAY;AAAA,MACnB,GAAG,KAAK;AAAA,MACR,SAAS;AAAA,IACb,CAAC;AAAA,EACL;AAAA,EACA,UAAU,MAAM;AACZ,UAAM,gBAAgB,KAAK,MAAM,IAAI;AACrC,WAAO;AAAA,EACX;AAAA,EACA,gBAAgB,MAAM;AAClB,UAAM,gBAAgB,KAAK,MAAM,IAAI;AACrC,WAAO;AAAA,EACX;AAAA,EACA,OAAO,OAAO,MAAM,SAAS,QAAQ;AACjC,WAAO,IAAI,aAAY;AAAA,MACnB,MAAO,OAAO,OAAO,SAAS,OAAO,CAAC,CAAC,EAAE,KAAK,WAAW,OAAO,CAAC;AAAA,MACjE,SAAS,WAAW,WAAW,OAAO;AAAA,MACtC,UAAU,sBAAsB;AAAA,MAChC,GAAG,oBAAoB,MAAM;AAAA,IACjC,CAAC;AAAA,EACL;AACJ;AACO,IAAM,UAAN,cAAsB,QAAQ;AAAA,EACjC,IAAI,SAAS;AACT,WAAO,KAAK,KAAK,OAAO;AAAA,EAC5B;AAAA,EACA,OAAO,OAAO;AACV,UAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,UAAM,aAAa,KAAK,KAAK,OAAO;AACpC,WAAO,WAAW,OAAO,EAAE,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC;AAAA,EAC5E;AACJ;AACA,QAAQ,SAAS,CAAC,QAAQ,WAAW;AACjC,SAAO,IAAI,QAAQ;AAAA,IACf;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,EACpC,OAAO,OAAO;AACV,QAAI,MAAM,SAAS,KAAK,KAAK,OAAO;AAChC,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,UAAU,IAAI;AAAA,QACd,MAAM,aAAa;AAAA,QACnB,UAAU,KAAK,KAAK;AAAA,MACxB,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,EAAE,QAAQ,SAAS,OAAO,MAAM,KAAK;AAAA,EAChD;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,WAAW,SAAS,CAAC,OAAO,WAAW;AACnC,SAAO,IAAI,WAAW;AAAA,IAClB;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,SAAS,cAAc,QAAQ,QAAQ;AACnC,SAAO,IAAI,QAAQ;AAAA,IACf;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,UAAN,MAAM,iBAAgB,QAAQ;AAAA,EACjC,OAAO,OAAO;AACV,QAAI,OAAO,MAAM,SAAS,UAAU;AAChC,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,YAAM,iBAAiB,KAAK,KAAK;AACjC,wBAAkB,KAAK;AAAA,QACnB,UAAU,KAAK,WAAW,cAAc;AAAA,QACxC,UAAU,IAAI;AAAA,QACd,MAAM,aAAa;AAAA,MACvB,CAAC;AACD,aAAO;AAAA,IACX;AACA,QAAI,CAAC,KAAK,QAAQ;AACd,WAAK,SAAS,IAAI,IAAI,KAAK,KAAK,MAAM;AAAA,IAC1C;AACA,QAAI,CAAC,KAAK,OAAO,IAAI,MAAM,IAAI,GAAG;AAC9B,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,YAAM,iBAAiB,KAAK,KAAK;AACjC,wBAAkB,KAAK;AAAA,QACnB,UAAU,IAAI;AAAA,QACd,MAAM,aAAa;AAAA,QACnB,SAAS;AAAA,MACb,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,OAAO;AACP,UAAM,aAAa,CAAC;AACpB,eAAW,OAAO,KAAK,KAAK,QAAQ;AAChC,iBAAW,GAAG,IAAI;AAAA,IACtB;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,SAAS;AACT,UAAM,aAAa,CAAC;AACpB,eAAW,OAAO,KAAK,KAAK,QAAQ;AAChC,iBAAW,GAAG,IAAI;AAAA,IACtB;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,OAAO;AACP,UAAM,aAAa,CAAC;AACpB,eAAW,OAAO,KAAK,KAAK,QAAQ;AAChC,iBAAW,GAAG,IAAI;AAAA,IACtB;AACA,WAAO;AAAA,EACX;AAAA,EACA,QAAQ,QAAQ,SAAS,KAAK,MAAM;AAChC,WAAO,SAAQ,OAAO,QAAQ;AAAA,MAC1B,GAAG,KAAK;AAAA,MACR,GAAG;AAAA,IACP,CAAC;AAAA,EACL;AAAA,EACA,QAAQ,QAAQ,SAAS,KAAK,MAAM;AAChC,WAAO,SAAQ,OAAO,KAAK,QAAQ,OAAO,CAAC,QAAQ,CAAC,OAAO,SAAS,GAAG,CAAC,GAAG;AAAA,MACvE,GAAG,KAAK;AAAA,MACR,GAAG;AAAA,IACP,CAAC;AAAA,EACL;AACJ;AACA,QAAQ,SAAS;AACV,IAAM,gBAAN,cAA4B,QAAQ;AAAA,EACvC,OAAO,OAAO;AACV,UAAM,mBAAmB,KAAK,mBAAmB,KAAK,KAAK,MAAM;AACjE,UAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,QAAI,IAAI,eAAe,cAAc,UAAU,IAAI,eAAe,cAAc,QAAQ;AACpF,YAAM,iBAAiB,KAAK,aAAa,gBAAgB;AACzD,wBAAkB,KAAK;AAAA,QACnB,UAAU,KAAK,WAAW,cAAc;AAAA,QACxC,UAAU,IAAI;AAAA,QACd,MAAM,aAAa;AAAA,MACvB,CAAC;AACD,aAAO;AAAA,IACX;AACA,QAAI,CAAC,KAAK,QAAQ;AACd,WAAK,SAAS,IAAI,IAAI,KAAK,mBAAmB,KAAK,KAAK,MAAM,CAAC;AAAA,IACnE;AACA,QAAI,CAAC,KAAK,OAAO,IAAI,MAAM,IAAI,GAAG;AAC9B,YAAM,iBAAiB,KAAK,aAAa,gBAAgB;AACzD,wBAAkB,KAAK;AAAA,QACnB,UAAU,IAAI;AAAA,QACd,MAAM,aAAa;AAAA,QACnB,SAAS;AAAA,MACb,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AAAA,EACA,IAAI,OAAO;AACP,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,cAAc,SAAS,CAAC,QAAQ,WAAW;AACvC,SAAO,IAAI,cAAc;AAAA,IACrB;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,EACpC,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,OAAO;AACV,UAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,QAAI,IAAI,eAAe,cAAc,WAAW,IAAI,OAAO,UAAU,OAAO;AACxE,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,UAAM,cAAc,IAAI,eAAe,cAAc,UAAU,IAAI,OAAO,QAAQ,QAAQ,IAAI,IAAI;AAClG,WAAO,GAAG,YAAY,KAAK,CAAC,SAAS;AACjC,aAAO,KAAK,KAAK,KAAK,WAAW,MAAM;AAAA,QACnC,MAAM,IAAI;AAAA,QACV,UAAU,IAAI,OAAO;AAAA,MACzB,CAAC;AAAA,IACL,CAAC,CAAC;AAAA,EACN;AACJ;AACA,WAAW,SAAS,CAAC,QAAQ,WAAW;AACpC,SAAO,IAAI,WAAW;AAAA,IAClB,MAAM;AAAA,IACN,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,EACpC,YAAY;AACR,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,aAAa;AACT,WAAO,KAAK,KAAK,OAAO,KAAK,aAAa,sBAAsB,aAC1D,KAAK,KAAK,OAAO,WAAW,IAC5B,KAAK,KAAK;AAAA,EACpB;AAAA,EACA,OAAO,OAAO;AACV,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,UAAM,SAAS,KAAK,KAAK,UAAU;AACnC,UAAM,WAAW;AAAA,MACb,UAAU,CAAC,QAAQ;AACf,0BAAkB,KAAK,GAAG;AAC1B,YAAI,IAAI,OAAO;AACX,iBAAO,MAAM;AAAA,QACjB,OACK;AACD,iBAAO,MAAM;AAAA,QACjB;AAAA,MACJ;AAAA,MACA,IAAI,OAAO;AACP,eAAO,IAAI;AAAA,MACf;AAAA,IACJ;AACA,aAAS,WAAW,SAAS,SAAS,KAAK,QAAQ;AACnD,QAAI,OAAO,SAAS,cAAc;AAC9B,YAAM,YAAY,OAAO,UAAU,IAAI,MAAM,QAAQ;AACrD,UAAI,IAAI,OAAO,OAAO;AAClB,eAAO,QAAQ,QAAQ,SAAS,EAAE,KAAK,OAAOC,eAAc;AACxD,cAAI,OAAO,UAAU;AACjB,mBAAO;AACX,gBAAM,SAAS,MAAM,KAAK,KAAK,OAAO,YAAY;AAAA,YAC9C,MAAMA;AAAA,YACN,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC;AACD,cAAI,OAAO,WAAW;AAClB,mBAAO;AACX,cAAI,OAAO,WAAW;AAClB,mBAAO,MAAM,OAAO,KAAK;AAC7B,cAAI,OAAO,UAAU;AACjB,mBAAO,MAAM,OAAO,KAAK;AAC7B,iBAAO;AAAA,QACX,CAAC;AAAA,MACL,OACK;AACD,YAAI,OAAO,UAAU;AACjB,iBAAO;AACX,cAAM,SAAS,KAAK,KAAK,OAAO,WAAW;AAAA,UACvC,MAAM;AAAA,UACN,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AACD,YAAI,OAAO,WAAW;AAClB,iBAAO;AACX,YAAI,OAAO,WAAW;AAClB,iBAAO,MAAM,OAAO,KAAK;AAC7B,YAAI,OAAO,UAAU;AACjB,iBAAO,MAAM,OAAO,KAAK;AAC7B,eAAO;AAAA,MACX;AAAA,IACJ;AACA,QAAI,OAAO,SAAS,cAAc;AAC9B,YAAM,oBAAoB,CAAC,QAAQ;AAC/B,cAAM,SAAS,OAAO,WAAW,KAAK,QAAQ;AAC9C,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,QAAQ,QAAQ,MAAM;AAAA,QACjC;AACA,YAAI,kBAAkB,SAAS;AAC3B,gBAAM,IAAI,MAAM,2FAA2F;AAAA,QAC/G;AACA,eAAO;AAAA,MACX;AACA,UAAI,IAAI,OAAO,UAAU,OAAO;AAC5B,cAAM,QAAQ,KAAK,KAAK,OAAO,WAAW;AAAA,UACtC,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AACD,YAAI,MAAM,WAAW;AACjB,iBAAO;AACX,YAAI,MAAM,WAAW;AACjB,iBAAO,MAAM;AAEjB,0BAAkB,MAAM,KAAK;AAC7B,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,MAAM;AAAA,MACtD,OACK;AACD,eAAO,KAAK,KAAK,OAAO,YAAY,EAAE,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC,EAAE,KAAK,CAAC,UAAU;AACjG,cAAI,MAAM,WAAW;AACjB,mBAAO;AACX,cAAI,MAAM,WAAW;AACjB,mBAAO,MAAM;AACjB,iBAAO,kBAAkB,MAAM,KAAK,EAAE,KAAK,MAAM;AAC7C,mBAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,MAAM;AAAA,UACtD,CAAC;AAAA,QACL,CAAC;AAAA,MACL;AAAA,IACJ;AACA,QAAI,OAAO,SAAS,aAAa;AAC7B,UAAI,IAAI,OAAO,UAAU,OAAO;AAC5B,cAAMC,QAAO,KAAK,KAAK,OAAO,WAAW;AAAA,UACrC,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AACD,YAAI,CAAC,QAAQA,KAAI;AACb,iBAAO;AACX,cAAM,SAAS,OAAO,UAAUA,MAAK,OAAO,QAAQ;AACpD,YAAI,kBAAkB,SAAS;AAC3B,gBAAM,IAAI,MAAM,iGAAiG;AAAA,QACrH;AACA,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,OAAO;AAAA,MACjD,OACK;AACD,eAAO,KAAK,KAAK,OAAO,YAAY,EAAE,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC,EAAE,KAAK,CAACA,UAAS;AAChG,cAAI,CAAC,QAAQA,KAAI;AACb,mBAAO;AACX,iBAAO,QAAQ,QAAQ,OAAO,UAAUA,MAAK,OAAO,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY;AAAA,YAC7E,QAAQ,OAAO;AAAA,YACf,OAAO;AAAA,UACX,EAAE;AAAA,QACN,CAAC;AAAA,MACL;AAAA,IACJ;AACA,SAAK,YAAY,MAAM;AAAA,EAC3B;AACJ;AACA,WAAW,SAAS,CAAC,QAAQ,QAAQ,WAAW;AAC5C,SAAO,IAAI,WAAW;AAAA,IAClB;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC;AAAA,IACA,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,WAAW,uBAAuB,CAAC,YAAY,QAAQ,WAAW;AAC9D,SAAO,IAAI,WAAW;AAAA,IAClB;AAAA,IACA,QAAQ,EAAE,MAAM,cAAc,WAAW,WAAW;AAAA,IACpD,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AAEO,IAAM,cAAN,cAA0B,QAAQ;AAAA,EACrC,OAAO,OAAO;AACV,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,WAAW;AACxC,aAAO,GAAG,MAAS;AAAA,IACvB;AACA,WAAO,KAAK,KAAK,UAAU,OAAO,KAAK;AAAA,EAC3C;AAAA,EACA,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,YAAY,SAAS,CAAC,MAAM,WAAW;AACnC,SAAO,IAAI,YAAY;AAAA,IACnB,WAAW;AAAA,IACX,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,cAAN,cAA0B,QAAQ;AAAA,EACrC,OAAO,OAAO;AACV,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,MAAM;AACnC,aAAO,GAAG,IAAI;AAAA,IAClB;AACA,WAAO,KAAK,KAAK,UAAU,OAAO,KAAK;AAAA,EAC3C;AAAA,EACA,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,YAAY,SAAS,CAAC,MAAM,WAAW;AACnC,SAAO,IAAI,YAAY;AAAA,IACnB,WAAW;AAAA,IACX,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,EACpC,OAAO,OAAO;AACV,UAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,QAAI,OAAO,IAAI;AACf,QAAI,IAAI,eAAe,cAAc,WAAW;AAC5C,aAAO,KAAK,KAAK,aAAa;AAAA,IAClC;AACA,WAAO,KAAK,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,MACA,MAAM,IAAI;AAAA,MACV,QAAQ;AAAA,IACZ,CAAC;AAAA,EACL;AAAA,EACA,gBAAgB;AACZ,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,WAAW,SAAS,CAAC,MAAM,WAAW;AAClC,SAAO,IAAI,WAAW;AAAA,IAClB,WAAW;AAAA,IACX,UAAU,sBAAsB;AAAA,IAChC,cAAc,OAAO,OAAO,YAAY,aAAa,OAAO,UAAU,MAAM,OAAO;AAAA,IACnF,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,WAAN,cAAuB,QAAQ;AAAA,EAClC,OAAO,OAAO;AACV,UAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAE9C,UAAM,SAAS;AAAA,MACX,GAAG;AAAA,MACH,QAAQ;AAAA,QACJ,GAAG,IAAI;AAAA,QACP,QAAQ,CAAC;AAAA,MACb;AAAA,IACJ;AACA,UAAM,SAAS,KAAK,KAAK,UAAU,OAAO;AAAA,MACtC,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MACb,QAAQ;AAAA,QACJ,GAAG;AAAA,MACP;AAAA,IACJ,CAAC;AACD,QAAI,QAAQ,MAAM,GAAG;AACjB,aAAO,OAAO,KAAK,CAACC,YAAW;AAC3B,eAAO;AAAA,UACH,QAAQ;AAAA,UACR,OAAOA,QAAO,WAAW,UACnBA,QAAO,QACP,KAAK,KAAK,WAAW;AAAA,YACnB,IAAI,QAAQ;AACR,qBAAO,IAAI,SAAS,OAAO,OAAO,MAAM;AAAA,YAC5C;AAAA,YACA,OAAO,OAAO;AAAA,UAClB,CAAC;AAAA,QACT;AAAA,MACJ,CAAC;AAAA,IACL,OACK;AACD,aAAO;AAAA,QACH,QAAQ;AAAA,QACR,OAAO,OAAO,WAAW,UACnB,OAAO,QACP,KAAK,KAAK,WAAW;AAAA,UACnB,IAAI,QAAQ;AACR,mBAAO,IAAI,SAAS,OAAO,OAAO,MAAM;AAAA,UAC5C;AAAA,UACA,OAAO,OAAO;AAAA,QAClB,CAAC;AAAA,MACT;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,cAAc;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,SAAS,SAAS,CAAC,MAAM,WAAW;AAChC,SAAO,IAAI,SAAS;AAAA,IAChB,WAAW;AAAA,IACX,UAAU,sBAAsB;AAAA,IAChC,YAAY,OAAO,OAAO,UAAU,aAAa,OAAO,QAAQ,MAAM,OAAO;AAAA,IAC7E,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,SAAN,cAAqB,QAAQ;AAAA,EAChC,OAAO,OAAO;AACV,UAAM,aAAa,KAAK,SAAS,KAAK;AACtC,QAAI,eAAe,cAAc,KAAK;AAClC,YAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AACA,WAAO,EAAE,QAAQ,SAAS,OAAO,MAAM,KAAK;AAAA,EAChD;AACJ;AACA,OAAO,SAAS,CAAC,WAAW;AACxB,SAAO,IAAI,OAAO;AAAA,IACd,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACO,IAAM,QAAQ,uBAAO,WAAW;AAChC,IAAM,aAAN,cAAyB,QAAQ;AAAA,EACpC,OAAO,OAAO;AACV,UAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,UAAM,OAAO,IAAI;AACjB,WAAO,KAAK,KAAK,KAAK,OAAO;AAAA,MACzB;AAAA,MACA,MAAM,IAAI;AAAA,MACV,QAAQ;AAAA,IACZ,CAAC;AAAA,EACL;AAAA,EACA,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACO,IAAM,cAAN,MAAM,qBAAoB,QAAQ;AAAA,EACrC,OAAO,OAAO;AACV,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,QAAI,IAAI,OAAO,OAAO;AAClB,YAAM,cAAc,YAAY;AAC5B,cAAM,WAAW,MAAM,KAAK,KAAK,GAAG,YAAY;AAAA,UAC5C,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AACD,YAAI,SAAS,WAAW;AACpB,iBAAO;AACX,YAAI,SAAS,WAAW,SAAS;AAC7B,iBAAO,MAAM;AACb,iBAAO,MAAM,SAAS,KAAK;AAAA,QAC/B,OACK;AACD,iBAAO,KAAK,KAAK,IAAI,YAAY;AAAA,YAC7B,MAAM,SAAS;AAAA,YACf,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL;AAAA,MACJ;AACA,aAAO,YAAY;AAAA,IACvB,OACK;AACD,YAAM,WAAW,KAAK,KAAK,GAAG,WAAW;AAAA,QACrC,MAAM,IAAI;AAAA,QACV,MAAM,IAAI;AAAA,QACV,QAAQ;AAAA,MACZ,CAAC;AACD,UAAI,SAAS,WAAW;AACpB,eAAO;AACX,UAAI,SAAS,WAAW,SAAS;AAC7B,eAAO,MAAM;AACb,eAAO;AAAA,UACH,QAAQ;AAAA,UACR,OAAO,SAAS;AAAA,QACpB;AAAA,MACJ,OACK;AACD,eAAO,KAAK,KAAK,IAAI,WAAW;AAAA,UAC5B,MAAM,SAAS;AAAA,UACf,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,OAAO,OAAO,GAAG,GAAG;AAChB,WAAO,IAAI,aAAY;AAAA,MACnB,IAAI;AAAA,MACJ,KAAK;AAAA,MACL,UAAU,sBAAsB;AAAA,IACpC,CAAC;AAAA,EACL;AACJ;AACO,IAAM,cAAN,cAA0B,QAAQ;AAAA,EACrC,OAAO,OAAO;AACV,UAAM,SAAS,KAAK,KAAK,UAAU,OAAO,KAAK;AAC/C,UAAM,SAAS,CAAC,SAAS;AACrB,UAAI,QAAQ,IAAI,GAAG;AACf,aAAK,QAAQ,OAAO,OAAO,KAAK,KAAK;AAAA,MACzC;AACA,aAAO;AAAA,IACX;AACA,WAAO,QAAQ,MAAM,IAAI,OAAO,KAAK,CAAC,SAAS,OAAO,IAAI,CAAC,IAAI,OAAO,MAAM;AAAA,EAChF;AAAA,EACA,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,YAAY,SAAS,CAAC,MAAM,WAAW;AACnC,SAAO,IAAI,YAAY;AAAA,IACnB,WAAW;AAAA,IACX,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AAQA,SAAS,YAAY,QAAQ,MAAM;AAC/B,QAAM,IAAI,OAAO,WAAW,aAAa,OAAO,IAAI,IAAI,OAAO,WAAW,WAAW,EAAE,SAAS,OAAO,IAAI;AAC3G,QAAM,KAAK,OAAO,MAAM,WAAW,EAAE,SAAS,EAAE,IAAI;AACpD,SAAO;AACX;AACO,SAAS,OAAO,OAAO,UAAU,CAAC,GAWzC,OAAO;AACH,MAAI;AACA,WAAO,OAAO,OAAO,EAAE,YAAY,CAAC,MAAM,QAAQ;AAC9C,YAAM,IAAI,MAAM,IAAI;AACpB,UAAI,aAAa,SAAS;AACtB,eAAO,EAAE,KAAK,CAACC,OAAM;AACjB,cAAI,CAACA,IAAG;AACJ,kBAAM,SAAS,YAAY,SAAS,IAAI;AACxC,kBAAM,SAAS,OAAO,SAAS,SAAS;AACxC,gBAAI,SAAS,EAAE,MAAM,UAAU,GAAG,QAAQ,OAAO,OAAO,CAAC;AAAA,UAC7D;AAAA,QACJ,CAAC;AAAA,MACL;AACA,UAAI,CAAC,GAAG;AACJ,cAAM,SAAS,YAAY,SAAS,IAAI;AACxC,cAAM,SAAS,OAAO,SAAS,SAAS;AACxC,YAAI,SAAS,EAAE,MAAM,UAAU,GAAG,QAAQ,OAAO,OAAO,CAAC;AAAA,MAC7D;AACA;AAAA,IACJ,CAAC;AACL,SAAO,OAAO,OAAO;AACzB;AAEO,IAAM,OAAO;AAAA,EAChB,QAAQ,UAAU;AACtB;AACO,IAAI;AAAA,CACV,SAAUC,wBAAuB;AAC9B,EAAAA,uBAAsB,WAAW,IAAI;AACrC,EAAAA,uBAAsB,WAAW,IAAI;AACrC,EAAAA,uBAAsB,QAAQ,IAAI;AAClC,EAAAA,uBAAsB,WAAW,IAAI;AACrC,EAAAA,uBAAsB,YAAY,IAAI;AACtC,EAAAA,uBAAsB,SAAS,IAAI;AACnC,EAAAA,uBAAsB,WAAW,IAAI;AACrC,EAAAA,uBAAsB,cAAc,IAAI;AACxC,EAAAA,uBAAsB,SAAS,IAAI;AACnC,EAAAA,uBAAsB,QAAQ,IAAI;AAClC,EAAAA,uBAAsB,YAAY,IAAI;AACtC,EAAAA,uBAAsB,UAAU,IAAI;AACpC,EAAAA,uBAAsB,SAAS,IAAI;AACnC,EAAAA,uBAAsB,UAAU,IAAI;AACpC,EAAAA,uBAAsB,WAAW,IAAI;AACrC,EAAAA,uBAAsB,UAAU,IAAI;AACpC,EAAAA,uBAAsB,uBAAuB,IAAI;AACjD,EAAAA,uBAAsB,iBAAiB,IAAI;AAC3C,EAAAA,uBAAsB,UAAU,IAAI;AACpC,EAAAA,uBAAsB,WAAW,IAAI;AACrC,EAAAA,uBAAsB,QAAQ,IAAI;AAClC,EAAAA,uBAAsB,QAAQ,IAAI;AAClC,EAAAA,uBAAsB,aAAa,IAAI;AACvC,EAAAA,uBAAsB,SAAS,IAAI;AACnC,EAAAA,uBAAsB,YAAY,IAAI;AACtC,EAAAA,uBAAsB,SAAS,IAAI;AACnC,EAAAA,uBAAsB,YAAY,IAAI;AACtC,EAAAA,uBAAsB,eAAe,IAAI;AACzC,EAAAA,uBAAsB,aAAa,IAAI;AACvC,EAAAA,uBAAsB,aAAa,IAAI;AACvC,EAAAA,uBAAsB,YAAY,IAAI;AACtC,EAAAA,uBAAsB,UAAU,IAAI;AACpC,EAAAA,uBAAsB,YAAY,IAAI;AACtC,EAAAA,uBAAsB,YAAY,IAAI;AACtC,EAAAA,uBAAsB,aAAa,IAAI;AACvC,EAAAA,uBAAsB,aAAa,IAAI;AAC3C,GAAG,0BAA0B,wBAAwB,CAAC,EAAE;AAKxD,IAAM,iBAAiB,CAEvB,KAAK,SAAS;AAAA,EACV,SAAS,yBAAyB,IAAI,IAAI;AAC9C,MAAM,OAAO,CAAC,SAAS,gBAAgB,KAAK,MAAM;AAClD,IAAM,aAAa,UAAU;AAC7B,IAAM,aAAa,UAAU;AAC7B,IAAM,UAAU,OAAO;AACvB,IAAM,aAAa,UAAU;AAC7B,IAAM,cAAc,WAAW;AAC/B,IAAM,WAAW,QAAQ;AACzB,IAAM,aAAa,UAAU;AAC7B,IAAM,gBAAgB,aAAa;AACnC,IAAM,WAAW,QAAQ;AACzB,IAAM,UAAU,OAAO;AACvB,IAAM,cAAc,WAAW;AAC/B,IAAM,YAAY,SAAS;AAC3B,IAAM,WAAW,QAAQ;AACzB,IAAM,YAAY,SAAS;AAC3B,IAAM,aAAa,UAAU;AAC7B,IAAM,mBAAmB,UAAU;AACnC,IAAM,YAAY,SAAS;AAC3B,IAAM,yBAAyB,sBAAsB;AACrD,IAAM,mBAAmB,gBAAgB;AACzC,IAAM,YAAY,SAAS;AAC3B,IAAM,aAAa,UAAU;AAC7B,IAAM,UAAU,OAAO;AACvB,IAAM,UAAU,OAAO;AACvB,IAAM,eAAe,YAAY;AACjC,IAAM,WAAW,QAAQ;AACzB,IAAM,cAAc,WAAW;AAC/B,IAAM,WAAW,QAAQ;AACzB,IAAM,iBAAiB,cAAc;AACrC,IAAM,cAAc,WAAW;AAC/B,IAAM,cAAc,WAAW;AAC/B,IAAM,eAAe,YAAY;AACjC,IAAM,eAAe,YAAY;AACjC,IAAM,iBAAiB,WAAW;AAClC,IAAM,eAAe,YAAY;AACjC,IAAM,UAAU,MAAM,WAAW,EAAE,SAAS;AAC5C,IAAM,UAAU,MAAM,WAAW,EAAE,SAAS;AAC5C,IAAM,WAAW,MAAM,YAAY,EAAE,SAAS;AACvC,IAAM,SAAS;AAAA,EAClB,SAAS,CAAC,QAAQ,UAAU,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,EAC3D,SAAS,CAAC,QAAQ,UAAU,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,EAC3D,UAAU,CAAC,QAAQ,WAAW,OAAO;AAAA,IACjC,GAAG;AAAA,IACH,QAAQ;AAAA,EACZ,CAAC;AAAA,EACD,SAAS,CAAC,QAAQ,UAAU,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,EAC3D,OAAO,CAAC,QAAQ,QAAQ,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,CAAC;AAC3D;AAEO,IAAM,QAAQ;;;AV5mHrB,IAAAC,kBAAwB;AACxB,oBAAuB;ACDvB,IAAAA,kBAAwB;AACxB,oBAAuB;AtBDhB,IAAM,QAAQ,IAAI,WAAW,CAAC;AAW/B,SAAU,OAAQ,IAAgB,IAAc;AACpD,MAAI,OAAO,IAAI;AAAE,WAAO;EAAK;AAC7B,MAAI,GAAG,eAAe,GAAG,YAAY;AACnC,WAAO;EACT;AAEA,WAAS,KAAK,GAAG,KAAK,GAAG,YAAY,MAAM;AACzC,QAAI,GAAG,EAAE,MAAM,GAAG,EAAE,GAAG;AACrB,aAAO;IACT;EACF;AAEA,SAAO;AACT;AAEM,SAAUC,QAAQ,GAA6C;AACnE,MAAI,aAAa,cAAc,EAAE,YAAY,SAAS,cAAc;AAAE,WAAO;EAAE;AAC/E,MAAI,aAAa,aAAa;AAAE,WAAO,IAAI,WAAW,CAAC;EAAE;AACzD,MAAI,YAAY,OAAO,CAAC,GAAG;AACzB,WAAO,IAAI,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU;EAC5D;AACA,QAAM,IAAI,MAAM,mCAAmC;AACrD;ACvBA,SAAS,KAAM,UAAU,MAAI;AAC3B,MAAI,SAAS,UAAU,KAAK;AAAE,UAAM,IAAI,UAAU,mBAAmB;EAAE;AACvE,MAAI,WAAW,IAAI,WAAW,GAAG;AACjC,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,aAAS,CAAC,IAAI;EAChB;AACA,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,QAAI,IAAI,SAAS,OAAO,CAAC;AACzB,QAAI,KAAK,EAAE,WAAW,CAAC;AACvB,QAAI,SAAS,EAAE,MAAM,KAAK;AAAE,YAAM,IAAI,UAAU,IAAI,eAAe;IAAE;AACrE,aAAS,EAAE,IAAI;EACjB;AACA,MAAI,OAAO,SAAS;AACpB,MAAI,SAAS,SAAS,OAAO,CAAC;AAC9B,MAAI,SAAS,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG;AAC1C,MAAI,UAAU,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI;AAI3C,WAASC,SAAQ,QAAM;AAErB,QAAI,kBAAkB;AAAY;aAAW,YAAY,OAAO,MAAM,GAAG;AACvE,eAAS,IAAI,WAAW,OAAO,QAAQ,OAAO,YAAY,OAAO,UAAU;IAC7E,WAAW,MAAM,QAAQ,MAAM,GAAG;AAChC,eAAS,WAAW,KAAK,MAAM;IACjC;AACA,QAAI,EAAE,kBAAkB,aAAa;AAAE,YAAM,IAAI,UAAU,qBAAqB;IAAE;AAClF,QAAI,OAAO,WAAW,GAAG;AAAE,aAAO;IAAG;AAErC,QAAI,SAAS;AACb,QAAIC,WAAS;AACb,QAAI,SAAS;AACb,QAAI,OAAO,OAAO;AAClB,WAAO,WAAW,QAAQ,OAAO,MAAM,MAAM,GAAG;AAC9C;AACA;IACF;AAEA,QAAI,QAAS,OAAO,UAAU,UAAU,MAAO;AAC/C,QAAI,MAAM,IAAI,WAAW,IAAI;AAE7B,WAAO,WAAW,MAAM;AACtB,UAAI,QAAQ,OAAO,MAAM;AAEzB,UAAIC,KAAI;AACR,eAAS,MAAM,OAAO,IAAI,UAAU,KAAKA,KAAID,aAAY,QAAQ,IAAK,OAAOC,MAAK;AAChF,iBAAU,MAAM,IAAI,GAAG,MAAO;AAC9B,YAAI,GAAG,IAAK,QAAQ,SAAU;AAC9B,gBAAS,QAAQ,SAAU;MAC7B;AACA,UAAI,UAAU,GAAG;AAAE,cAAM,IAAI,MAAM,gBAAgB;MAAE;AACrDD,MAAAA,WAASC;AACT;IACF;AAEA,QAAI,MAAM,OAAOD;AACjB,WAAO,QAAQ,QAAQ,IAAI,GAAG,MAAM,GAAG;AACrC;IACF;AAEA,QAAI,MAAM,OAAO,OAAO,MAAM;AAC9B,WAAO,MAAM,MAAM,EAAE,KAAK;AAAE,aAAO,SAAS,OAAO,IAAI,GAAG,CAAC;IAAG;AAC9D,WAAO;EACT;AAIA,WAAS,aAAc,QAAM;AAC3B,QAAI,OAAO,WAAW,UAAU;AAAE,YAAM,IAAI,UAAU,iBAAiB;IAAE;AACzE,QAAI,OAAO,WAAW,GAAG;AAAE,aAAO,IAAI,WAAU;IAAG;AACnD,QAAI,MAAM;AAEV,QAAI,OAAO,GAAG,MAAM,KAAK;AAAE;IAAO;AAElC,QAAI,SAAS;AACb,QAAIA,WAAS;AACb,WAAO,OAAO,GAAG,MAAM,QAAQ;AAC7B;AACA;IACF;AAEA,QAAI,QAAU,OAAO,SAAS,OAAO,SAAU,MAAO;AACtD,QAAI,OAAO,IAAI,WAAW,IAAI;AAE9B,WAAO,OAAO,GAAG,GAAG;AAElB,UAAI,QAAQ,SAAS,OAAO,WAAW,GAAG,CAAC;AAE3C,UAAI,UAAU,KAAK;AAAE;MAAO;AAC5B,UAAIC,KAAI;AACR,eAAS,MAAM,OAAO,IAAI,UAAU,KAAKA,KAAID,aAAY,QAAQ,IAAK,OAAOC,MAAK;AAChF,iBAAU,OAAO,KAAK,GAAG,MAAO;AAChC,aAAK,GAAG,IAAK,QAAQ,QAAS;AAC9B,gBAAS,QAAQ,QAAS;MAC5B;AACA,UAAI,UAAU,GAAG;AAAE,cAAM,IAAI,MAAM,gBAAgB;MAAE;AACrDD,MAAAA,WAASC;AACT;IACF;AAEA,QAAI,OAAO,GAAG,MAAM,KAAK;AAAE;IAAO;AAElC,QAAI,MAAM,OAAOD;AACjB,WAAO,QAAQ,QAAQ,KAAK,GAAG,MAAM,GAAG;AACtC;IACF;AACA,QAAI,MAAM,IAAI,WAAW,UAAU,OAAO,IAAI;AAC9C,QAAIE,KAAI;AACR,WAAO,QAAQ,MAAM;AACnB,UAAIA,IAAG,IAAI,KAAK,KAAK;IACvB;AACA,WAAO;EACT;AAIA,WAASC,SAAQ,QAAM;AACrB,QAAI,SAAS,aAAa,MAAM;AAChC,QAAI,QAAQ;AAAE,aAAO;IAAO;AAC5B,UAAM,IAAI,MAAM,OAAO,IAAI,YAAY;EACzC;AACA,SAAO;IACL,QAAQJ;IACR;IACA,QAAQI;;AAEZ;AACA,IAAI,MAAM;AAEV,IAAI,kCAAkC;AAEtC,IAAA,iBAAe;ACjIf,IAAM,UAAN,MAAa;EACF;EACA;EACA;EAET,YAAa,MAAY,QAAgB,YAAoB;AAC3D,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,aAAa;EACpB;EAEA,OAAQ,OAAiB;AACvB,QAAI,iBAAiB,YAAY;AAC/B,aAAO,GAAG,KAAK,MAAM,GAAG,KAAK,WAAW,KAAK,CAAC;IAChD,OAAO;AACL,YAAM,MAAM,mCAAmC;IACjD;EACF;;AAQF,IAAM,UAAN,MAAa;EACF;EACA;EACA;EACQ;EAEjB,YAAa,MAAY,QAAgB,YAAoB;AAC3D,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,UAAM,kBAAkB,OAAO,YAAY,CAAC;AAE5C,QAAI,oBAAoB,QAAW;AACjC,YAAM,IAAI,MAAM,0BAA0B;IAC5C;AACA,SAAK,kBAAkB;AACvB,SAAK,aAAa;EACpB;EAEA,OAAQ,MAAY;AAClB,QAAI,OAAO,SAAS,UAAU;AAC5B,UAAI,KAAK,YAAY,CAAC,MAAM,KAAK,iBAAiB;AAChD,cAAM,MAAM,qCAAqC,KAAK,UAAU,IAAI,CAAC,KAAK,KAAK,IAAI,+CAA+C,KAAK,MAAM,EAAE;MACjJ;AACA,aAAO,KAAK,WAAW,KAAK,MAAM,KAAK,OAAO,MAAM,CAAC;IACvD,OAAO;AACL,YAAM,MAAM,mCAAmC;IACjD;EACF;EAEA,GAAgC,SAAmE;AACjG,WAAO,GAAG,MAAM,OAAO;EACzB;;AAKF,IAAM,kBAAN,MAAqB;EACV;EAET,YAAa,UAA0B;AACrC,SAAK,WAAW;EAClB;EAEA,GAAiC,SAAmE;AAClG,WAAO,GAAG,MAAM,OAAO;EACzB;EAEA,OAAQ,OAAa;AACnB,UAAM,SAAS,MAAM,CAAC;AACtB,UAAM,UAAU,KAAK,SAAS,MAAM;AACpC,QAAI,WAAW,MAAM;AACnB,aAAO,QAAQ,OAAO,KAAK;IAC7B,OAAO;AACL,YAAM,WAAW,qCAAqC,KAAK,UAAU,KAAK,CAAC,+BAA+B,OAAO,KAAK,KAAK,QAAQ,CAAC,gBAAgB;IACtJ;EACF;;AAGI,SAAU,GAAyC,MAA+C,OAA8C;AACpJ,SAAO,IAAI,gBAAgB;IACzB,GAAI,KAAK,YAAY,EAAE,CAAE,KAA2B,MAAM,GAAG,KAAI;IACjE,GAAI,MAAM,YAAY,EAAE,CAAE,MAA4B,MAAM,GAAG,MAAK;GAClD;AACtB;AAEM,IAAO,QAAP,MAAY;EACP;EACA;EACA;EACA;EACA;EACA;EAET,YAAa,MAAY,QAAgB,YAAsB,YAAoB;AACjF,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,UAAU,IAAI,QAAQ,MAAM,QAAQ,UAAU;AACnD,SAAK,UAAU,IAAI,QAAQ,MAAM,QAAQ,UAAU;EACrD;EAEA,OAAQ,OAAiB;AACvB,WAAO,KAAK,QAAQ,OAAO,KAAK;EAClC;EAEA,OAAQ,OAAa;AACnB,WAAO,KAAK,QAAQ,OAAO,KAAK;EAClC;;AAGI,SAAU,KAAmD,EAAE,MAAM,QAAQ,QAAAJ,UAAQ,QAAAI,SAAM,GAAsE;AACrK,SAAO,IAAI,MAAM,MAAM,QAAQJ,UAAQI,QAAM;AAC/C;AAEM,SAAU,MAAoD,EAAE,MAAM,QAAQ,SAAQ,GAAoD;AAC9I,QAAM,EAAE,QAAAJ,UAAQ,QAAAI,SAAM,IAAK,eAAM,UAAU,IAAI;AAC/C,SAAO,KAAK;IACV;IACA;IACA,QAAAJ;IACA,QAAQ,CAAC,SAA6BD,QAAOK,SAAO,IAAI,CAAC;GAC1D;AACH;AAEA,SAAS,OAAQ,QAAgB,aAAqC,aAAqB,MAAY;AAErG,MAAI,MAAM,OAAO;AACjB,SAAO,OAAO,MAAM,CAAC,MAAM,KAAK;AAC9B,MAAE;EACJ;AAGA,QAAM,MAAM,IAAI,WAAY,MAAM,cAAc,IAAK,CAAC;AAGtD,MAAI,OAAO;AACX,MAAI,SAAS;AACb,MAAI,UAAU;AACd,WAAS,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAE5B,UAAM,QAAQ,YAAY,OAAO,CAAC,CAAC;AACnC,QAAI,UAAU,QAAW;AACvB,YAAM,IAAI,YAAY,OAAO,IAAI,YAAY;IAC/C;AAGA,aAAU,UAAU,cAAe;AACnC,YAAQ;AAGR,QAAI,QAAQ,GAAG;AACb,cAAQ;AACR,UAAI,SAAS,IAAI,MAAQ,UAAU;IACrC;EACF;AAGA,MAAI,QAAQ,gBAAgB,MAAQ,UAAW,IAAI,UAAY,GAAG;AAChE,UAAM,IAAI,YAAY,wBAAwB;EAChD;AAEA,SAAO;AACT;AAEA,SAAS,OAAQ,MAAkB,UAAkB,aAAmB;AACtE,QAAM,MAAM,SAAS,SAAS,SAAS,CAAC,MAAM;AAC9C,QAAM,QAAQ,KAAK,eAAe;AAClC,MAAI,MAAM;AAEV,MAAI,OAAO;AACX,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AAEpC,aAAU,UAAU,IAAK,KAAK,CAAC;AAC/B,YAAQ;AAGR,WAAO,OAAO,aAAa;AACzB,cAAQ;AACR,aAAO,SAAS,OAAQ,UAAU,IAAK;IACzC;EACF;AAGA,MAAI,SAAS,GAAG;AACd,WAAO,SAAS,OAAQ,UAAW,cAAc,IAAM;EACzD;AAGA,MAAI,KAAK;AACP,YAAS,IAAI,SAAS,cAAe,OAAO,GAAG;AAC7C,aAAO;IACT;EACF;AAEA,SAAO;AACT;AAEA,SAAS,kBAAmB,UAAgB;AAE1C,QAAM,cAAsC,CAAA;AAC5C,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AACxC,gBAAY,SAAS,CAAC,CAAC,IAAI;EAC7B;AACA,SAAO;AACT;AAKM,SAAU,QAAsD,EAAE,MAAM,QAAQ,aAAa,SAAQ,GAAyE;AAClL,QAAM,cAAc,kBAAkB,QAAQ;AAC9C,SAAO,KAAK;IACV;IACA;IACA,OAAQ,OAAiB;AACvB,aAAO,OAAO,OAAO,UAAU,WAAW;IAC5C;IACA,OAAQ,OAAa;AACnB,aAAO,OAAO,OAAO,aAAa,aAAa,IAAI;IACrD;GACD;AACH;AC9OO,IAAM,SAAS,QAAQ;EAC5B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,cAAc,QAAQ;EACjC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,YAAY,QAAQ;EAC/B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,iBAAiB,QAAQ;EACpC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,YAAY,QAAQ;EAC/B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,iBAAiB,QAAQ;EACpC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,eAAe,QAAQ;EAClC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,oBAAoB,QAAQ;EACvC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,UAAU,QAAQ;EAC7B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AC7DM,IAAM,SAAS,MAAM;EAC1B,QAAQ;EACR,MAAM;EACN,UAAU;CACX;AAEM,IAAM,cAAc,MAAM;EAC/B,QAAQ;EACR,MAAM;EACN,UAAU;CACX;ACVM,IAAM,YAAY,MAAM;EAC7B,MAAM;EACN,QAAQ;EACR,UAAU;CACX;AAEM,IAAM,eAAe,MAAM;EAChC,MAAM;EACN,QAAQ;EACR,UAAU;CACX;ACXD,IAAI,WAAWJ;AAEf,IAAI,MAAM;AAAV,IACI,OAAO;AADX,IAEI,SAAS,CAAC;AAFd,IAGI,MAAM,KAAK,IAAI,GAAG,EAAE;AAOxB,SAASA,QAAO,KAAK,KAAK,QAAM;AAC9B,QAAM,OAAO,CAAA;AACb,WAAS,UAAU;AACnB,MAAI,YAAY;AAEhB,SAAM,OAAO,KAAK;AAChB,QAAI,QAAQ,IAAK,MAAM,MAAQ;AAC/B,WAAO;EACT;AACA,SAAM,MAAM,QAAQ;AAClB,QAAI,QAAQ,IAAK,MAAM,MAAQ;AAC/B,aAAS;EACX;AACA,MAAI,MAAM,IAAI,MAAM;AAGpBA,UAAO,QAAQ,SAAS,YAAY;AAEpC,SAAO;AACT;AAEA,IAAII,UAAS;AAEb,IAAI,QAAQ;AAAZ,IACI,SAAS;AAMb,SAAS,KAAK,KAAK,QAAM;AACvB,MAAI,MAAS,GACT,SAAS,UAAU,GACnB,QAAS,GACT,UAAU,QACV,GACA,IAAI,IAAI;AAEZ,KAAG;AACD,QAAI,WAAW,GAAG;AAEhB,WAAK,QAAQ;AACb,YAAM,IAAI,WAAW,yBAAyB;IAChD;AACA,QAAI,IAAI,SAAS;AACjB,WAAO,QAAQ,MACV,IAAI,WAAW,SACf,IAAI,UAAU,KAAK,IAAI,GAAG,KAAK;AACpC,aAAS;EACX,SAAS,KAAK;AAGd,OAAK,QAAQ,UAAU;AAEvB,SAAO;AACT;AAEA,IAAI,KAAK,KAAK,IAAI,GAAI,CAAC;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE;AAEvB,IAAI,SAAS,SAAgC,OAAK;AAChD,SACE,QAAQ,KAAK,IACb,QAAQ,KAAK,IACb,QAAQ,KAAK,IACb,QAAQ,KAAK,IACb,QAAQ,KAAK,IACb,QAAQ,KAAK,IACb,QAAQ,KAAK,IACb,QAAQ,KAAK,IACb,QAAQ,KAAK,IACA;AAEjB;AAEA,IAAI,SAAS;EACT,QAAQ;EACR,QAAQA;EACR,gBAAgB;;AAGpB,IAAI,eAAe;AAEnB,IAAA,iBAAe;ACrGT,SAAUA,QAAQ,MAAkB,SAAS,GAAC;AAClD,QAAMC,SAAO,eAAO,OAAO,MAAM,MAAM;AACvC,SAAO,CAACA,QAAM,eAAO,OAAO,KAAK;AACnC;AAEM,SAAU,SAAU,KAAa,QAAoB,SAAS,GAAC;AACnE,iBAAO,OAAO,KAAK,QAAQ,MAAM;AACjC,SAAO;AACT;AAEM,SAAU,eAAgB,KAAW;AACzC,SAAO,eAAO,eAAe,GAAG;AAClC;ACPM,SAAU,OAA8BA,QAAY,QAAkB;AAC1E,QAAM,OAAO,OAAO;AACpB,QAAM,aAAoB,eAAeA,MAAI;AAC7C,QAAM,eAAe,aAAoB,eAAe,IAAI;AAE5D,QAAM,QAAQ,IAAI,WAAW,eAAe,IAAI;AACzC,WAASA,QAAM,OAAO,CAAC;AACvB,WAAS,MAAM,OAAO,UAAU;AACvC,QAAM,IAAI,QAAQ,YAAY;AAE9B,SAAO,IAAI,OAAOA,QAAM,MAAM,QAAQ,KAAK;AAC7C;AAKM,SAAUD,QAAQ,WAAqB;AAC3C,QAAM,QAAQL,QAAO,SAAS;AAC9B,QAAM,CAACM,QAAM,UAAU,IAAWD,QAAO,KAAK;AAC9C,QAAM,CAAC,MAAM,YAAY,IAAWA,QAAO,MAAM,SAAS,UAAU,CAAC;AACrE,QAAM,SAAS,MAAM,SAAS,aAAa,YAAY;AAEvD,MAAI,OAAO,eAAe,MAAM;AAC9B,UAAM,IAAI,MAAM,kBAAkB;EACpC;AAEA,SAAO,IAAI,OAAOC,QAAM,MAAM,QAAQ,KAAK;AAC7C;AAEM,SAAUC,QAAQ,GAAoB,GAAU;AACpD,MAAI,MAAM,GAAG;AACX,WAAO;EACT,OAAO;AACL,UAAM,OAAO;AAEb,WACE,EAAE,SAAS,KAAK,QAChB,EAAE,SAAS,KAAK,QAChB,KAAK,iBAAiB,cACtB,OAAW,EAAE,OAAO,KAAK,KAAK;EAElC;AACF;AAMM,IAAO,SAAP,MAAa;EACR;EACA;EACA;EACA;;;;EAKT,YAAaD,QAAY,MAAY,QAAoB,OAAiB;AACxE,SAAK,OAAOA;AACZ,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,QAAQ;EACf;;AC1DI,SAAU,OAA0F,MAASE,QAAmC;AACpJ,QAAM,EAAE,OAAO,QAAO,IAAK;AAC3B,UAAQ,SAAS;IACf,KAAK;AACH,aAAO,WACL,OACA,UAAU,IAAI,GACdA,UAAqC,UAAU,OAAO;IAE1D;AACE,aAAO,WACL,OACA,UAAU,IAAI,GACbA,UAAQ,OAAO,OAAwC;EAE9D;AACF;AAYA,IAAM,QAAQ,oBAAI,QAAO;AAEzB,SAAS,UAAWC,MAAoB;AACtC,QAAMC,cAAY,MAAM,IAAID,IAAG;AAC/B,MAAIC,eAAa,MAAM;AACrB,UAAMA,aAAY,oBAAI,IAAG;AACzB,UAAM,IAAID,MAAKC,UAAS;AACxB,WAAOA;EACT;AACA,SAAOA;AACT;AAEM,IAAO,MAAP,MAAO,KAAG;EACL;EACA;EACA;EACA;EACA;;;;;;EAOT,YAAa,SAAkBJ,QAAc,WAAqC,OAAiB;AACjG,SAAK,OAAOA;AACZ,SAAK,UAAU;AACf,SAAK,YAAY;AACjB,SAAK,QAAQ;AAIb,SAAK,GAAG,IAAI;EACd;;;;;;;EAQA,IAAI,QAAK;AACP,WAAO;EACT;;EAGA,IAAI,aAAU;AACZ,WAAO,KAAK,MAAM;EACpB;;EAGA,IAAI,aAAU;AACZ,WAAO,KAAK,MAAM;EACpB;EAEA,OAAI;AACF,YAAQ,KAAK,SAAS;MACpB,KAAK,GAAG;AACN,eAAO;MACT;MACA,KAAK,GAAG;AACN,cAAM,EAAE,MAAAA,QAAM,UAAS,IAAK;AAE5B,YAAIA,WAAS,aAAa;AACxB,gBAAM,IAAI,MAAM,0CAA0C;QAC5D;AAGA,YAAI,UAAU,SAAS,cAAc;AACnC,gBAAM,IAAI,MAAM,oDAAoD;QACtE;AAEA,eACE,KAAI,SACF,SAA6C;MAGnD;MACA,SAAS;AACP,cAAM,MACJ,+BAA+B,KAAK,OAAO,4CAA4C;MAE3F;IACF;EACF;EAEA,OAAI;AACF,YAAQ,KAAK,SAAS;MACpB,KAAK,GAAG;AACN,cAAM,EAAE,MAAAA,QAAM,OAAM,IAAK,KAAK;AAC9B,cAAM,YAAmB,OAAOA,QAAM,MAAM;AAC5C,eACE,KAAI,SAAS,KAAK,MAAM,SAAS;MAErC;MACA,KAAK,GAAG;AACN,eAAO;MACT;MACA,SAAS;AACP,cAAM,MACJ,+BAA+B,KAAK,OAAO,4CAA4C;MAE3F;IACF;EACF;EAEA,OAAQ,OAAc;AACpB,WAAO,KAAI,OAAO,MAAM,KAAK;EAC/B;EAEA,OAAO,OAAsF,MAA4C,OAAc;AACrJ,UAAM,UAAU;AAChB,WACE,WAAW,QACX,KAAK,SAAS,QAAQ,QACtB,KAAK,YAAY,QAAQ,WAClBC,QAAO,KAAK,WAAW,QAAQ,SAAS;EAEnD;EAEA,SAAUC,QAAmC;AAC3C,WAAO,OAAO,MAAMA,MAAI;EAC1B;EAEA,SAAM;AACJ,WAAO,EAAE,KAAK,OAAO,IAAI,EAAC;EAC5B;EAEA,OAAI;AACF,WAAO;EACT;EAES,CAAC,OAAO,WAAW,IAAI;;EAIhC,CAAC,uBAAO,IAAI,4BAA4B,CAAC,IAAC;AACxC,WAAO,OAAO,KAAK,SAAQ,CAAE;EAC/B;;;;;;;;;;;EAYA,OAAO,MAAwF,OAA+C;AAC5I,QAAI,SAAS,MAAM;AACjB,aAAO;IACT;AAEA,UAAM,QAAQ;AACd,QAAI,iBAAiB,MAAK;AAExB,aAAO;IACT,WAAY,MAAM,GAAG,KAAK,QAAQ,MAAM,GAAG,MAAM,MAAM,SAAU,MAAM,UAAU,OAAO;AAMtF,YAAM,EAAE,SAAS,MAAAF,QAAM,WAAW,MAAK,IAAK;AAC5C,aAAO,IAAI,KACT,SACAA,QACA,WACA,SAAS,UAAU,SAASA,QAAM,UAAU,KAAK,CAAC;IAEtD,WAAW,MAAM,SAAS,MAAM,MAAM;AAIpC,YAAM,EAAE,SAAS,WAAW,MAAAA,OAAI,IAAK;AACrC,YAAM,SAAgBD,QAAO,SAAS;AACtC,aAAO,KAAI,OAAO,SAASC,QAAM,MAAM;IACzC,OAAO;AAGL,aAAO;IACT;EACF;;;;;;EAOA,OAAO,OAAsF,SAAkBA,QAAc,QAAgC;AAC3J,QAAI,OAAOA,WAAS,UAAU;AAC5B,YAAM,IAAI,MAAM,uCAAuC;IACzD;AAEA,QAAI,EAAE,OAAO,iBAAiB,aAAa;AACzC,YAAM,IAAI,MAAM,gBAAgB;IAClC;AAEA,YAAQ,SAAS;MACf,KAAK,GAAG;AACN,YAAIA,WAAS,aAAa;AACxB,gBAAM,IAAI,MACR,wCAAwC,WAAW,kBAAkB;QAEzE,OAAO;AACL,iBAAO,IAAI,KAAI,SAASA,QAAM,QAAQ,OAAO,KAAK;QACpD;MACF;MACA,KAAK,GAAG;AACN,cAAM,QAAQ,UAAU,SAASA,QAAM,OAAO,KAAK;AACnD,eAAO,IAAI,KAAI,SAASA,QAAM,QAAQ,KAAK;MAC7C;MACA,SAAS;AACP,cAAM,IAAI,MAAM,iBAAiB;MACnC;IACF;EACF;;;;EAKA,OAAO,SAAuB,QAAgD;AAC5E,WAAO,KAAI,OAAO,GAAG,aAAa,MAAM;EAC1C;;;;;;;EAQA,OAAO,SAAyDA,QAAY,QAAgC;AAC1G,WAAO,KAAI,OAAO,GAAGA,QAAM,MAAM;EACnC;;;;;;;;EASA,OAAO,OAAoF,OAAuD;AAChJ,UAAM,CAACG,MAAK,SAAS,IAAI,KAAI,YAAY,KAAK;AAC9C,QAAI,UAAU,WAAW,GAAG;AAC1B,YAAM,IAAI,MAAM,kBAAkB;IACpC;AACA,WAAOA;EACT;;;;;;;;;;EAWA,OAAO,YAA2E,OAAyC;AACzH,UAAM,QAAQ,KAAI,aAAa,KAAK;AACpC,UAAM,aAAa,MAAM,OAAO,MAAM;AACtC,UAAM,iBAAiBT,QACrB,MAAM,SAAS,YAAY,aAAa,MAAM,aAAa,CAAC;AAE9D,QAAI,eAAe,eAAe,MAAM,eAAe;AACrD,YAAM,IAAI,MAAM,kBAAkB;IACpC;AACA,UAAM,cAAc,eAAe,SACjC,MAAM,gBAAgB,MAAM,UAAU;AAExC,UAAM,SAAS,IAAW,OACxB,MAAM,eACN,MAAM,YACN,aACA,cAAc;AAEhB,UAAMS,OACJ,MAAM,YAAY,IACd,KAAI,SAAS,MAA0C,IACvD,KAAI,SAAS,MAAM,OAAO,MAAM;AACtC,WAAO,CAACA,MAAwB,MAAM,SAAS,MAAM,IAAI,CAAC;EAC5D;;;;;;;;;;EAWA,OAAO,aAA4E,cAAgD;AACjI,QAAI,SAAS;AACb,UAAM,OAAO,MAAa;AACxB,YAAM,CAAC,GAAGP,QAAM,IAAWG,QAAO,aAAa,SAAS,MAAM,CAAC;AAC/D,gBAAUH;AACV,aAAO;IACT;AAEA,QAAI,UAAU,KAAI;AAClB,QAAI,QAAQ;AACZ,QAAI,YAAsB,IAAI;AAE5B,gBAAU;AACV,eAAS;IACX,OAAO;AACL,cAAQ,KAAI;IACd;AAEA,QAAI,YAAY,KAAK,YAAY,GAAG;AAClC,YAAM,IAAI,WAAW,uBAAuB,OAAO,EAAE;IACvD;AAEA,UAAM,aAAa;AACnB,UAAM,gBAAgB,KAAI;AAC1B,UAAM,aAAa,KAAI;AACvB,UAAM,OAAO,SAAS;AACtB,UAAM,gBAAgB,OAAO;AAE7B,WAAO,EAAE,SAAS,OAAO,eAAe,YAAY,eAAe,KAAI;EACzE;;;;;;;EAQA,OAAO,MAA0G,QAAkEM,QAAmC;AACpN,UAAM,CAAC,QAAQ,KAAK,IAAI,gBAAgB,QAAQA,MAAI;AAEpD,UAAMC,OAAM,KAAI,OAAO,KAAK;AAE5B,QAAIA,KAAI,YAAY,KAAK,OAAO,CAAC,MAAM,KAAK;AAC1C,YAAM,MAAM,wDAAwD;IACtE;AAGA,cAAUA,IAAG,EAAE,IAAI,QAAQ,MAAM;AAEjC,WAAOA;EACT;;AAGF,SAAS,gBAAqH,QAAkED,QAAmC;AACjO,UAAQ,OAAO,CAAC,GAAG;;IAEjB,KAAK,KAAK;AACR,YAAM,UAAUA,UAAQ;AACxB,aAAO;QACL,UAAU;QACV,QAAQ,OAAO,GAAG,UAAU,MAAM,GAAG,MAAM,EAAE;;IAEjD;IACA,KAAK,UAAU,QAAQ;AACrB,YAAM,UAAUA,UAAQ;AACxB,aAAO,CAAC,UAAU,QAAkB,QAAQ,OAAO,MAAM,CAAC;IAC5D;IACA,KAAK,OAAO,QAAQ;AAClB,YAAM,UAAUA,UAAQ;AACxB,aAAO,CAAC,OAAO,QAAkB,QAAQ,OAAO,MAAM,CAAC;IACzD;IACA,KAAK,OAAO,QAAQ;AAClB,YAAM,UAAUA,UAAQ;AACxB,aAAO,CAAC,OAAO,QAAkB,QAAQ,OAAO,MAAM,CAAC;IACzD;IACA,SAAS;AACP,UAAIA,UAAQ,MAAM;AAChB,cAAM,MACJ,yFAAyF;MAE7F;AACA,aAAO,CAAC,OAAO,CAAC,GAAaA,OAAK,OAAO,MAAM,CAAC;IAClD;EACF;AACF;AAEA,SAAS,WAAY,OAAmBG,SAA4BH,QAA+B;AACjG,QAAM,EAAE,OAAM,IAAKA;AACnB,MAAI,WAAW,UAAU,QAAQ;AAC/B,UAAM,MAAM,8BAA8BA,OAAK,IAAI,WAAW;EAChE;AAEA,QAAMC,OAAME,QAAM,IAAI,MAAM;AAC5B,MAAIF,QAAO,MAAM;AACf,UAAMA,QAAMD,OAAK,OAAO,KAAK,EAAE,MAAM,CAAC;AACtCG,IAAAA,QAAM,IAAI,QAAQF,KAAG;AACrB,WAAOA;EACT,OAAO;AACL,WAAOA;EACT;AACF;AAEA,SAAS,WAAoC,OAAmBE,SAA4BH,QAAkC;AAC5H,QAAM,EAAE,OAAM,IAAKA;AACnB,QAAMC,OAAME,QAAM,IAAI,MAAM;AAC5B,MAAIF,QAAO,MAAM;AACf,UAAMA,QAAMD,OAAK,OAAO,KAAK;AAC7BG,IAAAA,QAAM,IAAI,QAAQF,KAAG;AACrB,WAAOA;EACT,OAAO;AACL,WAAOA;EACT;AACF;AAEA,IAAM,cAAc;AACpB,IAAM,eAAe;AAErB,SAAS,UAAW,SAAsBH,QAAc,WAAqB;AAC3E,QAAM,aAAoB,eAAe,OAAO;AAChD,QAAM,aAAa,aAAoB,eAAeA,MAAI;AAC1D,QAAM,QAAQ,IAAI,WAAW,aAAa,UAAU,UAAU;AACvD,WAAS,SAAS,OAAO,CAAC;AAC1B,WAASA,QAAM,OAAO,UAAU;AACvC,QAAM,IAAI,WAAW,UAAU;AAC/B,SAAO;AACT;AAEA,IAAM,YAAY,uBAAO,IAAI,kBAAkB;ACzcxC,IAAM,OAAO;ACCpB,IAAM,cAAc;AAOpB,eAAsB,WAAW,OAAoC;AAGnE,QAAM,SAAS,OAAa,iBAAa,oBAAO,IAAI,WAAW,KAAK,CAAC,CAAC;AACtE,SAAO,IAAI,OAAO,GAAO,MAAM,MAAM,EAAE,SAAS;AAClD;AAOO,SAAS,kBAAkB,WAA4B;AAC5D,MAAIG;AACJ,MAAI;AACF,IAAAA,OAAM,IAAI,MAAM,SAAS;EAC3B,QAAQ;AACN,WAAO;EACT;AACA,SACEA,KAAI,YAAY,KAChBA,KAAI,SAAa,QACjBA,KAAI,UAAU,SAAS;EAEvB,IAAI,SAASA,KAAI,MAAMA,KAAI,SAAS,EAAE,SAAS,MAAM;AAEzD;AEpCO,IAAM,SAAS,QAAQ;EAC5B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,YAAY,QAAQ;EAC/B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,YAAY,QAAQ;EAC/B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAM,eAAe,QAAQ;EAClC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;ACzBM,SAAS,YAAY,OAA2B;AACrD,SAAO,UAAY,WAAW,KAAK;AACrC;AAQO,SAAS,cAAc,MAA0B;AACtD,QAAM,QAAQ,UAAY,WAAW,IAAI;AACzC,MAAI,UAAY,WAAW,KAAK,MAAM,MAAM;AAE1C,UAAM,IAAI,UAAU,+BAA+B;EACrD;AACA,SAAO;AACT;AAEO,SAAS,UAAU,MAA0B;AAClD,SAAO,IAAI,YAAY,EAAE,OAAO,IAAI;AACtC;ACrBA,IAAM,4BAA4B,WAAW,GAAG,KAAM,CAAI;AAC1D,IAAM,oBAAoB;AAgBnB,SAAS,2BAA2B,KAAyB;AAClE,MAAI,CAAC,IAAI,WAAW,UAAU,GAAG;AAC/B,UAAM,IAAI,UAAU,kBAAkB,GAAG,EAAE;EAC7C;AACA,QAAM,YAAY,IAAI,MAAM,WAAW,MAAM;AAC7C,QAAM,WAAW,UAAU,OAAO,SAAS;AAC3C,MACE,SAAS,WAAW,0BAA0B,SAAS,qBACvD,SAAS,CAAC,MAAM,0BAA0B,CAAC,KAC3C,SAAS,CAAC,MAAM,0BAA0B,CAAC,GAC3C;AACA,UAAM,IAAI,UAAU,+CAA+C;EACrE;AACA,SAAO,SAAS,MAAM,0BAA0B,MAAM;AACxD;AErBA,SAAS,sBAAsB,OAAkC;AAC/D,MAAI;AACF,WAAO,cAAc,KAAK;EAC5B,QAAQ;AACN,WAAO;EACT;AACF;AAEA,IAAM,kBAAkB,MACtB,iBAAE,OAAO,EAAE,OAAO,CAAC,UAAU,sBAAsB,KAAK,MAAM,MAAM;EAClE,SAAS;AACX,CAAC;AAUI,SAAS,uBAAuB,OAAwB;AAC7D,MAAI;AACJ,MAAI;AACF,UAAM,IAAI,IAAI,KAAK;EACrB,QAAQ;AACN,WAAO;EACT;AACA,SAAO,IAAI,aAAa,YAAY,IAAI,WAAW;AACrD;AASA,IAAM,yBAAyB;EAC7B,KAAK,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;EAChC,KAAK,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;EAChC,SAAS,iBAAE,MAAM,iBAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;EAC7C,KAAK,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;EAChC,KAAK,iBAAE,QAAQ,EAAE,SAAS;AAC5B;AAEA,IAAM,sBAAsB,iBACzB,OAAO;EACN,KAAK,iBAAE,QAAQ,KAAK;EACpB,KAAK,iBAAE,OAAO,EAAE,IAAI,CAAC;EACrB,GAAG,gBAAgB;EACnB,GAAG,gBAAgB;EACnB,GAAG;AACL,CAAC,EACA,OAAO;AAEV,IAAM,qBAAqB,iBACxB,OAAO;EACN,KAAK,iBAAE,QAAQ,IAAI;EACnB,KAAK,iBAAE,OAAO,EAAE,IAAI,CAAC;EACrB,GAAG,gBAAgB;EACnB,GAAG,gBAAgB;EACnB,GAAG,gBAAgB;EACnB,GAAG;AACL,CAAC,EACA,OAAO;AAEH,IAAM,mBAAmB,iBAAE,mBAAmB,OAAO;EAC1D;EACA;AACF,CAAC;AAEM,IAAM,qBAAqB,iBAC/B,OAAO;EACN,MAAM,iBAAE,QAAQ,QAAQ;EACxB,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC;;EAE3B,aAAa,gBAAgB;AAC/B,CAAC,EACA,OAAO;AAEH,IAAM,wBAAwB,iBAClC,OAAO;EACN,MAAM,iBAAE,QAAQ,WAAW;EAC3B,YAAY;AACd,CAAC,EACA,OAAO;AAEH,IAAM,2BAA2B,iBACrC,OAAO;EACN,MAAM,iBAAE,QAAQ,cAAc;EAC9B,KAAK,iBAAE,OAAO,EAAE,MAAM,sBAAsB,gBAAgB;AAC9D,CAAC,EACA,OAAO;AAGH,IAAM,4BAA4B,iBAAE,mBAAmB,QAAQ;EACpE;EACA;EACA;AACF,CAAC;AAaM,SAAS,wBAAwB,OAAwB;AAC9D,MAAI,MAAM,WAAW,EAAG,QAAO;AAE/B,MAAI,0BAA0B,KAAK,KAAK,EAAG,QAAO;AAClD,MAAI,eAAe,KAAK,KAAK,EAAG,QAAO;AACvC,SAAO,MACJ,MAAM,GAAG,EACT,MAAM,CAAC,YAAY,QAAQ,SAAS,KAAK,YAAY,OAAO,YAAY,IAAI;AACjF;AAGO,SAAS,uBAAuB,OAAwB;AAC7D,SAAO,wBAAwB,KAAK,KAAK,CAAC,MAAM,SAAS,GAAG;AAC9D;AAEO,IAAM,yBAAyB,iBACnC,OAAO;EACN,MAAM,iBAAE,MAAM,CAAC,iBAAE,QAAQ,OAAO,GAAG,iBAAE,QAAQ,QAAQ,CAAC,CAAC;EACvD,MAAM,iBAAE,OAAO,EAAE,IAAI,CAAC;AACxB,CAAC,EACA,OAAO,EACP,YAAY,CAAC,UAAU,QAAQ;AAG9B,QAAM,OACJ,SAAS,SAAS,YAAY,SAAS,KAAK,SAAS,GAAG,IACpD,SAAS,KAAK,MAAM,GAAG,EAAE,IACzB,SAAS;AACf,MAAI,CAAC,wBAAwB,IAAI,GAAG;AAClC,QAAI,SAAS;MACX,MAAM,iBAAE,aAAa;MACrB,MAAM,CAAC,MAAM;MACb,SACE;IACJ,CAAC;EACH;AACF,CAAC;AAEI,IAAM,eAAe,iBACzB,OAAO;EACN,QAAQ,iBAAE,OAAO,EAAE,OAAO,wBAAwB;IAChD,SAAS;EACX,CAAC;EACD,cAAc,iBAAE,OAAO,EAAE,IAAI,CAAC;EAC9B,SAAS,iBAAE,OAAO,EAAE,OAAO,wBAAwB;IACjD,SACE;EACJ,CAAC;EACD,UAAU;AACZ,CAAC,EACA,OAAO;AAEH,IAAM,gBAAgB,iBAC1B,OAAO;EACN,YAAY,iBAAE,OAAO,EAAE,SAAS;EAChC,UAAU,iBAAE,OAAO,EAAE,SAAS;EAC9B,eAAe,iBAAE,OAAO,EAAE,SAAS;;;;;EAKnC,MAAM,iBAAE,MAAM,CAAC,iBAAE,QAAQ,UAAU,GAAG,iBAAE,QAAQ,QAAQ,GAAG,iBAAE,QAAQ,QAAQ,CAAC,CAAC,EAAE,SAAS;AAC5F,CAAC,EACA,OAAO;AAwBH,IAAM,uBAAuB,iBACjC,OAAO;EACN,KAAK,iBAAE,OAAO,EAAE,OAAO,mBAAmB;IACxC,SAAS;EACX,CAAC;EACD,KAAK,iBAAE,OAAO,EAAE,OAAO,CAAC,UAAU,sBAAsB,KAAK,GAAG,WAAW,IAAI;IAC7E,SAAS;EACX,CAAC;AACH,CAAC,EACA,OAAO;AAEH,IAAM,kBAAkB,iBAC5B,OAAO;;EAEN,WAAW,iBAAE,OAAO,EAAE,MAAM,oCAAoC,oBAAoB;EACpF,WAAW,iBAAE,QAAQ,SAAS;;EAE9B,OAAO,iBAAE,OAAO,EAAE,OAAO,CAAC,UAAU,sBAAsB,KAAK,GAAG,WAAW,IAAI;IAC/E,SAAS;EACX,CAAC;AACH,CAAC,EACA,OAAO;AAGH,IAAM,8BAA8B,iBACxC,OAAO;EACN,SAAS,iBAAE,QAAQ,CAAC;EACpB,SAAS,iBAAE,OAAO,EAAE,IAAI,CAAC;;EAEzB,YAAY,iBAAE,OAAO,EAAE,IAAI,CAAC;EAC5B,qBAAqB;EACrB,QAAQ;EACR,SAAS;;EAET,QAAQ,iBAAE,OAAO,EAAE,SAAS;;EAE5B,SAAS,qBAAqB,SAAS;AACzC,CAAC,EACA,OAAO;AAEH,IAAM,sBAAsB,4BAChC,OAAO,EAAE,WAAW,gBAAgB,CAAC,EACrC,OAAO;AAgBH,IAAM,yBAAyB,iBAAE,mBAAmB,QAAQ;EACjE,iBAAE,OAAO,EAAE,MAAM,iBAAE,QAAQ,YAAY,GAAG,OAAO,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,2FAA2F,EAAE,CAAC,EAAE,OAAO;EAChL,iBAAE,OAAO,EAAE,MAAM,iBAAE,QAAQ,aAAa,GAAG,OAAO,iBAAE,OAAO,EAAE,MAAM,mFAAmF,EAAE,CAAC,EAAE,OAAO;EAClK,iBAAE,OAAO,EAAE,MAAM,iBAAE,QAAQ,cAAc,GAAG,OAAO,iBAAE,OAAO,EAAE,MAAM,oBAAoB,EAAE,CAAC,EAAE,OAAO;EACpG,iBAAE,OAAO,EAAE,MAAM,iBAAE,QAAQ,cAAc,GAAG,OAAO,iBAAE,OAAO,EAAE,MAAM,qBAAqB,EAAE,CAAC,EAAE,OAAO;EACrG,iBAAE,OAAO,EAAE,MAAM,iBAAE,QAAQ,QAAQ,EAAE,CAAC,EAAE,OAAO;AACjD,CAAC;AAEM,IAAM,oBAAoB,iBAAE,MAAM,CAAC,iBAAE,QAAQ,MAAM,GAAG,iBAAE,QAAQ,MAAM,GAAG,iBAAE,QAAQ,MAAM,CAAC,CAAC;AAKlG,IAAM,wBAAwB,iBAAE,OAAO;EACrC,MAAM,iBAAE,QAAQ,IAAI;EACpB,OAAO,iBAAE,OAAO,EAAE,IAAI,CAAC;EACvB,MAAM,iBAAE,OAAO,EAAE,IAAI,CAAC;EACtB,QAAQ,iBAAE,QAAQ,kBAAkB;AACtC,CAAC,EAAE,OAAO;AACV,IAAM,yBAAyB,iBAAE,OAAO;EACtC,MAAM,iBAAE,QAAQ,KAAK;EACrB,OAAO,iBAAE,OAAO,EAAE,IAAI,CAAC;EACvB,UAAU,iBAAE,OAAO,EAAE,IAAI,CAAC;EAC1B,MAAM,iBAAE,OAAO,EAAE,IAAI,CAAC;EACtB,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC;EAC3B,WAAW,iBAAE,OAAO,iBAAE,OAAO,GAAG,iBAAE,OAAO,EAAE,IAAI,CAAC;EAChD,iBAAiB,iBAAE,OAAO,EAAE,MAAM,qBAAqB;EACvD,QAAQ,iBAAE,QAAQ,oBAAoB;AACxC,CAAC,EAAE,OAAO;AACH,IAAM,sBAAsB,iBAAE,mBAAmB,QAAQ,CAAC,uBAAuB,sBAAsB,CAAC;AAExG,IAAM,iBAAiB,iBAAE,OAAO;EACrC,QAAQ,iBAAE,OAAO,EAAE,OAAO,wBAAwB,EAAE,SAAS,oCAAoC,CAAC;EAClG,cAAc,iBAAE,OAAO,EAAE,IAAI,CAAC;EAC9B,SAAS,iBAAE,OAAO,EAAE,OAAO,wBAAwB,EAAE,SAAS,gCAAgC,CAAC;AACjG,CAAC,EAAE,OAAO;AAEV,IAAM,wBAAwB,iBAAE,OAAO;EACrC,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC;EAC3B,QAAQ,iBAAE,QAAQ,8BAA8B;AAClD,CAAC,EAAE,OAAO;AAEV,IAAM,uBAAuB,iBAAE,OAAO;EACpC,iBAAiB,iBAAE,OAAO,EAAE,IAAI,CAAC;EACjC,UAAU,iBAAE,OAAO,EAAE,IAAI,CAAC;EAC1B,aAAa,iBAAE,OAAO,EAAE,IAAI,CAAC;EAC7B,uBAAuB,iBAAE,OAAO,iBAAE,OAAO,GAAG,iBAAE,QAAQ,CAAC;EACvD,eAAe,iBAAE,OAAO,iBAAE,OAAO,GAAG,iBAAE,QAAQ,CAAC;;EAE/C,qBAAqB,iBAAE,OAAO;IAC5B,cAAc,iBAAE,OAAO,iBAAE,OAAO,GAAG,iBAAE,QAAQ,CAAC;IAC9C,OAAO,iBAAE,OAAO,iBAAE,OAAO,GAAG,iBAAE,QAAQ,CAAC;EACzC,CAAC,EAAE,OAAO,EAAE,SAAS;AACvB,CAAC,EAAE,OAAO;AAEH,IAAM,wBAAwB,iBAAE,OAAO;EAC5C,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;EAC/C,YAAY,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,MAAM,OAAO,IAAI,EAAE,SAAS;EAC3E,UAAU,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;EAC9C,UAAU,iBAAE,QAAQ,OAAO,EAAE,SAAS;;EAEtC,UAAU,iBAAE,QAAQ,MAAM,EAAE,SAAS;AACvC,CAAC,EAAE,OAAO;AAOV,IAAM,sBAAsB,iBAAE,OAAO,EAAE,MAAM;AAO7C,IAAM,oCAAoC,iBAAE,OAAO;EACjD,SAAS,iBAAE,QAAQ,CAAC;EACpB,SAAS,iBAAE,OAAO,EAAE,IAAI,CAAC;EACzB,kBAAkB;EAClB,eAAe,oBAAoB,SAAS;EAC5C,SAAS,iBAAE,MAAM,iBAAiB,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;EAChD,UAAU;EACV,QAAQ;EACR,eAAe,iBAAE,OAAO,EAAE,IAAI,CAAC;EAC/B,yBAAyB,iBAAE,OAAO,EAAE,IAAI,CAAC;EACzC,yBAAyB,iBAAE,OAAO,EAAE,MAAM,qBAAqB;EAC/D,YAAY,sBAAsB,SAAS;EAC3C,eAAe;EACf,qBAAqB,iBAAE,OAAO,EAAE,MAAM,qBAAqB;EAC3D,qBAAqB;EACrB,SAAS;EACT,QAAQ,iBAAE,OAAO,EAAE,SAAS;EAC5B,WAAW,iBAAE,QAAQ;EACrB,SAAS,qBAAqB,SAAS;EACvC,UAAU;EACV,gBAAgB,qBAAqB,SAAS;AAChD,CAAC,EAAE,OAAO;AAEV,SAAS,qBAAqB,OAA0D,KAA4B;AAClH,QAAM,UAAU,CAAC,GAAG,MAAM,OAAO;AACjC,MAAI,IAAI,IAAI,OAAO,EAAE,SAAS,QAAQ,OAAQ,KAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,SAAS,GAAG,SAAS,yBAAyB,CAAC;AAChJ,MAAI,QAAQ,KAAK,CAAC,QAAQ,UAAU,WAAY,CAAC,QAAQ,QAAQ,MAAM,EAAY,OAAO,CAAC,cAAc,QAAQ,SAAS,SAAS,CAAC,EAAE,KAAK,CAAC,EAAG,KAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,SAAS,GAAG,SAAS,sCAAsC,CAAC;AAC9P,MAAI,CAAC,MAAM,aAAa,MAAM,iBAAiB,SAAS,eAAgB,KAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,kBAAkB,GAAG,SAAS,kDAAkD,CAAC;AAC5M,MAAI,CAAC,MAAM,aAAa,MAAM,oBAAoB,SAAS,SAAU,KAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,WAAW,GAAG,SAAS,+CAA+C,CAAC;AAC/L,MAAI,CAAC,MAAM,aAAa,MAAM,YAAY,OAAW,KAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,SAAS,GAAG,SAAS,6CAA6C,CAAC;AAC3K,MAAI,MAAM,cAAc,MAAM,SAAS,cAAc,UAAa,MAAM,SAAS,aAAa,UAAa,MAAM,SAAS,eAAe,QAAY,KAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,UAAU,GAAG,SAAS,+CAA+C,CAAC;AAC9Q,MAAI,CAAC,MAAM,aAAa,OAAO,KAAK,MAAM,QAAQ,EAAE,WAAW,EAAG,KAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,UAAU,GAAG,SAAS,gDAAgD,CAAC;AAC5L,MAAI,CAAC,MAAM,aAAa,MAAM,SAAS,aAAa,OAAW,KAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,YAAY,UAAU,GAAG,SAAS,sDAAsD,CAAC;AAC3M,MAAI,MAAM,SAAS,aAAa,WAAW,CAAC,MAAM,aAAa,MAAM,SAAS,SAAS,YAAY,CAAC,MAAM,QAAQ,SAAS,MAAM,KAAK,CAAC,MAAM,QAAQ,SAAS,MAAM,GAAI,KAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,YAAY,UAAU,GAAG,SAAS,sDAAsD,CAAC;AACpT,MAAI,CAAC,MAAM,cAAc,MAAM,QAAQ,eAAe,UAAa,MAAM,QAAQ,aAAa,UAAa,MAAM,QAAQ,kBAAkB,QAAY,KAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,SAAS,GAAG,SAAS,sDAAsD,CAAC;AACtR,MAAI,CAAC,MAAM,aAAa,MAAM,kBAAkB,OAAW,KAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,eAAe,GAAG,SAAS,uDAAuD,CAAC;AACjM,MAAI,MAAM,iBAAiB,SAAS,gBAAgB,MAAM,kBAAkB,UAAa,MAAM,kBAAkB,MAAM,iBAAiB,MAAO,KAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,eAAe,GAAG,SAAS,8CAA8C,CAAC;AAC5Q,MAAI,MAAM,iBAAiB,SAAS,iBAAiB,MAAM,kBAAkB,UAAa,MAAM,cAAc,YAAY,EAAE,SAAS,IAAI,MAAM,iBAAiB,KAAK,EAAE,MAAM,MAAO,KAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,eAAe,GAAG,SAAS,mDAAmD,CAAC;AACtT,MAAI,MAAM,cAAc,SAAS,QAAQ,MAAM,cAAc,WAAW,mBAAoB,KAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,eAAe,GAAG,SAAS,yBAAyB,CAAC;AACpM,MAAI,MAAM,cAAc,SAAS,SAAS,MAAM,cAAc,WAAW,qBAAsB,KAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,eAAe,GAAG,SAAS,yBAAyB,CAAC;AACzM;AAEO,IAAM,gCAAgC,kCAAkC,YAAY,oBAAoB;AAKxG,IAAM,wBAAwB,kCAAkC,OAAO,EAAE,WAAW,gBAAgB,CAAC,EAAE,OAAO,EAAE,YAAY,oBAAoB;AAavJ,IAAM,wBAAwB,iBAAE,OAAO,EAAE,OAAO,CAAC,UAAU;AACzD,QAAM,SAAS,MAAM,QAAQ,MAAM;AACnC,MAAI,SAAS,EAAG,QAAO;AACvB,QAAM,QAAQ,MAAM,MAAM,GAAG,MAAM;AACnC,QAAM,SAAS,MAAM,WAAW,cAAc;AAC9C,MAAI,SAAS,UAAU,KAAK,MAAM,MAAM,eAAe,MAAM,CAAC,IAAI,CAAC,MAAM,WAAW,YAAY,KAAK,SAAS,KAAK,KAAK,EAAG,QAAO;AAClI,QAAM,OAAO,MAAM,MAAM,SAAS,CAAC;AACnC,SAAO,CAAC,KAAK,WAAW,GAAG,KAAK,CAAC,KAAK,SAAS,GAAG,KAAK,CAAC,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM,GAAG,EAAE,MAAM,CAAC,YAAY,QAAQ,SAAS,KAAK,YAAY,OAAO,YAAY,IAAI;AAC7K,GAAG,EAAE,SAAS,2CAA2C,CAAC;AAC1D,IAAM,iCAAiC,iBAAE,OAAO,EAAE,OAAO,CAAC,UAAU;AAClE,MAAI,CAAC,MAAM,WAAW,2BAA2B,EAAG,QAAO;AAC3D,QAAM,OAAO,MAAM,MAAM,4BAA4B,MAAM;AAC3D,QAAM,YAAY,KAAK,YAAY,GAAG;AACtC,QAAM,QAAQ,YAAY,IAAI,KAAK,KAAK,MAAM,GAAG,SAAS;AAC1D,QAAM,UAAU,YAAY,IAAI,KAAK,KAAK,MAAM,YAAY,CAAC;AAC7D,SAAO,MAAM,WAAW,MAAM,KAAK,MAAM,SAAS,KAAK,QAAQ,SAAS,KAAK,CAAC,YAAY,KAAK,OAAO;AACxG,GAAG,EAAE,SAAS,kDAAkD,CAAC;AACjE,IAAM,kCAAkC,iBAAE,OAAO,EAAE,OAAO,CAAC,UAAU;AACnE,QAAM,SAAS;AACf,MAAI,CAAC,MAAM,WAAW,MAAM,EAAG,QAAO;AACtC,QAAM,QAAQ,qCAAqC,KAAK,MAAM,MAAM,OAAO,MAAM,CAAC;AAClF,MAAI,UAAU,KAAM,QAAO;AAC3B,QAAM,OAAO,MAAM,CAAC;AACpB,SAAO,SAAS,UAAa,KAAK,MAAM,GAAG,EAAE;IAAM,CAAC,YAClD,QAAQ,SAAS,KAAK,YAAY,OAAO,YAAY,QAAQ,CAAC,aAAa,KAAK,OAAO;EACzF;AACF,GAAG,EAAE,SAAS,qDAAqD,CAAC;AACpE,IAAM,iCAAiC,iBAAE,OAAO,EAAE,MAAM,gBAAgB,EAAE;EACxE,CAAC,UAAU;AACT,UAAM,UAAU,MAAM,MAAM,SAAS,MAAM;AAC3C,WAAO,YAAY,OAAO,YAAY,QAAQ,CAAC,aAAa,KAAK,OAAO;EAC1E;EACA,EAAE,SAAS,mCAAmC;AAChD;AACA,IAAM,4BAA4B,iBAAE,OAAO;EACzC,MAAM,iBAAE,QAAQ,IAAI;EACpB,UAAU;EACV,UAAU,iBAAE,MAAM,CAAC,iBAAE,QAAQ,OAAO,GAAG,iBAAE,QAAQ,QAAQ,CAAC,CAAC;EAC3D,SAAS,iBAAE,MAAM,iBAAE,MAAM;IACvB,iBAAE,QAAQ,kBAAkB;IAC5B,iBAAE,QAAQ,mBAAmB;IAC7B,iBAAE,QAAQ,uBAAuB;IACjC,iBAAE,QAAQ,kBAAkB;EAC9B,CAAC,CAAC,EAAE,IAAI,CAAC;AACX,CAAC,EAAE,OAAO;AACV,IAAM,oCAAoC,iBAAE,OAAO;EACjD,MAAM,iBAAE,QAAQ,YAAY;EAC5B,UAAU;EACV,QAAQ,iBAAE,QAAQ,8BAA8B;AAClD,CAAC,EAAE,OAAO;AACV,IAAM,0BAA0B,iBAAE,MAAM,CAAC,2BAA2B,iCAAiC,CAAC;AACtG,IAAM,6BAA6B,iBAAE,OAAO;EAC1C,SAAS,iBAAE,OAAO,EAAE,IAAI,CAAC;EACzB,YAAY;EACZ,UAAU,iBAAE,MAAM,CAAC,iBAAE,QAAQ,OAAO,GAAG,iBAAE,QAAQ,QAAQ,CAAC,CAAC;EAC3D,mBAAmB;EACnB,mBAAmB,+BAA+B,SAAS;EAC3D,gCAAgC,iBAAE,OAAO,EAAE,MAAM,gBAAgB;EACjE,YAAY,iBAAE,OAAO,EAAE,IAAI,EAAE,SAAS;EACtC,MAAM,iBAAE,MAAM,CAAC,iBAAE,QAAQ,SAAS,GAAG,iBAAE,QAAQ,WAAW,CAAC,CAAC;EAC5D,4BAA4B,iBAAE,OAAO,EAAE,MAAM,gBAAgB,EAAE,SAAS;AAC1E,CAAC,EAAE,OAAO;AACH,IAAM,wBAAwB,iBAAE,OAAO;EAC5C,QAAQ,iBAAE,QAAQ,gCAAgC;EAClD,UAAU,iBAAE,OAAO,EAAE,MAAM,iBAAiB;EAC5C,UAAU,iBAAE,OAAO,EAAE,IAAI,CAAC;EAC1B,WAAW,iBAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC;EAC/C,WAAW,iBAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC,EAAE,SAAS;EAC1D,eAAe;EACf,mBAAmB,iBAAE,MAAM,uBAAuB,EAAE,IAAI,CAAC;EACzD,WAAW,iBAAE,OAAO,EAAE,OAAO,iBAAE,OAAO,EAAE,IAAI,CAAC,GAAG,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO;AACnH,CAAC,EAAE,OAAO;AACH,IAAM,sCAAsC,iBAAE,OAAO;EAC1D,MAAM,iBAAE,QAAQ,sCAAsC;EACtD,SAAS,iBAAE,QAAQ,CAAC;EACpB,mBAAmB,iBAAE,OAAO,EAAE,MAAM,qBAAqB;EACzD,kBAAkB,iBAAE,OAAO,EAAE,MAAM,qBAAqB;EACxD,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC;EAC3B,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC;EAC3B,SAAS,iBAAE,OAAO,EAAE,IAAI,iBAAE,OAAO,EAAE,IAAI,CAAC,GAAG,SAAS,iBAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO;EAC3E,gBAAgB,iBAAE,OAAO,EAAE,IAAI,iBAAE,OAAO,EAAE,IAAI,CAAC,GAAG,SAAS,iBAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO;AACpF,CAAC,EAAE,OAAO;AACH,IAAM,wBAAwB,iBAAE,OAAO;EAC5C,QAAQ,iBAAE,QAAQ,gCAAgC;EAClD,UAAU,iBAAE,OAAO,EAAE,MAAM,iBAAiB;EAC5C,UAAU,iBAAE,OAAO,EAAE,IAAI,CAAC;EAC1B,WAAW,iBAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC;EAC/C,WAAW,iBAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC,EAAE,SAAS;EAC1D,eAAe;EACf,mBAAmB,iBAAE,MAAM,uBAAuB,EAAE,IAAI,CAAC;EACzD,uBAAuB;EACvB,WAAW,iBAAE,OAAO,EAAE,OAAO,iBAAE,QAAQ,SAAS,GAAG,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO;AACtH,CAAC,EAAE,OAAO;AACH,IAAM,sBAAsB,iBAAE,mBAAmB,UAAU;EAChE;EACA;AACF,CAAC;AACD,IAAM,oBAAoB,iBAAE,OAAO;EACjC,KAAK,iBAAE,OAAO,EAAE,IAAI,CAAC;EACrB,eAAe,iBAAE,OAAO,EAAE,MAAM,kDAAkD;EAClF,MAAM,iBAAE,MAAM,CAAC,iBAAE,QAAQ,kBAAkB,GAAG,iBAAE,QAAQ,oBAAoB,CAAC,CAAC;AAChF,CAAC,EAAE,OAAO;AACV,IAAM,kCAAkC,iBAAE,OAAO;EAC/C,QAAQ,iBAAE,QAAQ,2CAA2C;EAC7D,aAAa,iBAAE,OAAO,EAAE,MAAM,kCAAkC;EAChE,cAAc,iBAAE,OAAO,EAAE,IAAI,CAAC;EAC9B,6BAA6B,iBAAE,OAAO,EAAE,MAAM,gBAAgB;EAC9D,UAAU,iBAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC;EAC9C,WAAW,iBAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC;EAC/C,WAAW,iBAAE,OAAO,EAAE,OAAO,iBAAE,QAAQ,SAAS,GAAG,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,gBAAgB,EAAE,CAAC,EAAE,OAAO;AACtH,CAAC,EAAE,OAAO;AACV,IAAM,iBAAiB,iBAAE,OAAO;EAC9B,QAAQ,iBAAE,OAAO,EAAE,OAAO,wBAAwB,EAAE,SAAS,oCAAoC,CAAC;EAClG,cAAc,iBAAE,OAAO,EAAE,IAAI,CAAC;EAC9B,SAAS,iBAAE,OAAO,EAAE,OAAO,wBAAwB,EAAE,SAAS,gCAAgC,CAAC;AACjG,CAAC,EAAE,OAAO;AAEV,IAAM,sBAAsB;AACrB,IAAM,oBAAoB,iBAAE,OAAO;EACxC,GAAG,iBAAE,QAAQ,CAAC;EACd,YAAY,iBAAE,OAAO,EAAE,MAAM,mBAAmB;EAChD,SAAS,iBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,OAAO,gBAAgB;;EAE5D,gBAAgB,iBAAE,OAAO,EAAE,MAAM,gBAAgB;;EAEjD,OAAO,iBAAE,MAAM,iBAAE,OAAO;IACtB,MAAM,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;IAC/B,QAAQ,iBAAE,OAAO,EAAE,MAAM,gBAAgB;IACzC,OAAO,iBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;EACtC,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC;AACvB,CAAC,EAAE,OAAO;AAEV,IAAM,oCAAoC,iBAAE,OAAO;EACjD,SAAS,iBAAE,QAAQ,CAAC;EACpB,SAAS,iBAAE,OAAO,EAAE,IAAI,CAAC;EACzB,kBAAkB;EAClB,eAAe,oBAAoB,SAAS;EAC5C,SAAS,iBAAE,MAAM,iBAAiB,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;EAChD,UAAU;EACV,QAAQ;EACR,QAAQ;EACR,WAAW,iBAAE,OAAO,EAAE,IAAI,CAAC;EAC3B,YAAY;EACZ,iBAAiB;EACjB,yBAAyB;EACzB,eAAe;EACf,wBAAwB,iBAAE,OAAO,EAAE,MAAM,gBAAgB;EACzD,mBAAmB;EACnB,QAAQ,iBAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC;EAC5C,SAAS;EACT,WAAW,iBAAE,QAAQ,IAAI;EACzB,UAAU;;;;;;EAMV,aAAa,kBAAkB,SAAS;AAC1C,CAAC,EAAE,OAAO;AAEV,SAAS,qBAAqB,OAA0D,KAA4B;AAClH,QAAM,UAAU,CAAC,GAAG,MAAM,OAAO;AACjC,MAAI,IAAI,IAAI,OAAO,EAAE,SAAS,QAAQ,UAAU,QAAQ,KAAK,CAAC,QAAQ,UAAU,WAAY,CAAC,QAAQ,QAAQ,MAAM,EAAY,OAAO,CAAC,cAAc,QAAQ,SAAS,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG;AACzL,QAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,SAAS,GAAG,SAAS,iDAAiD,CAAC;EAC5H;AACA,MAAI,MAAM,WAAW,SAAS,sBAAsB,MAAM,gBAAgB,SAAS,sBAAsB;AACvG,QAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,cAAc,MAAM,GAAG,SAAS,uBAAuB,CAAC;EAC7G;AACA,MAAI,MAAM,UAAU,WAAW,KAAK,MAAM,cAAc,MAAM,WAAW,OAAO,MAAM,cAAc,MAAM,gBAAgB,KAAK;AAC7H,QAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,WAAW,GAAG,SAAS,8CAA8C,CAAC;EAC3H;AACA,MAAI,MAAM,cAAc,sBAAsB,MAAM,mBAAmB;AACrE,QAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,mBAAmB,GAAG,SAAS,gDAAgD,CAAC;EACrI;AACA,MAAI,MAAM,wBAAwB,iBAAiB,MAAM,OAAO,gBAAgB,MAAM,wBAAwB,UAAU,cAAc,MAAM,wBAAwB,gBAAgB,KAAK,MAAM,MAAM,wBAAwB,SAAS,IAAI,KAAK,MAAM,MAAM,MAAM,GAAG;AAClQ,QAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,yBAAyB,GAAG,SAAS,gEAAgE,CAAC;EAC3J;AACA,QAAM,oBAAoB,MAAM,cAAc;AAC9C,MAAI,sBAAsB,UAAa,sBAAsB,SAAS,MAAM,cAAc,OAAO,IAAI;AACnG,QAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,iBAAiB,mBAAmB,GAAG,SAAS,sCAAsC,CAAC;EAC5I;AACA,MAAI,MAAM,OAAO,cAAc,YAAY,MAAM,cAAc,WAAW,MAAM,OAAO,cAAc,eAAe,MAAM,cAAc,cAAc,MAAM,OAAO,cAAc,aAAa,MAAM,cAAc,YAAY,MAAM,OAAO,cAAc,sBAAsB,MAAM,qBAAqB,MAAM,OAAO,cAAc,sBAAsB,qBAAqB,MAAM,OAAO,cAAc,mCAAmC,MAAM,cAAc,kCAAkC,MAAM,OAAO,cAAc,eAAe,MAAM,cAAc,cAAc,MAAM,OAAO,cAAc,SAAS,MAAM,cAAc,QAAQ,MAAM,OAAO,cAAc,+BAA+B,MAAM,cAAc,4BAA4B;AACxtB,QAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,eAAe,GAAG,SAAS,wCAAwC,CAAC;EACzH;AACA,MAAI,MAAM,OAAO,UAAU,UAAU,aAAa,MAAM,OAAO,UAAU,cAAc,MAAM,OAAO,UAAU;AAC5G,QAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,UAAU,WAAW,GAAG,SAAS,qCAAqC,CAAC;EAC5H;AACA,QAAM,iBAAiB,MAAM,OAAO,kBAAkB,OAAO,CAAC,eAAe,WAAW,SAAS,IAAI;AACrG,QAAM,6BAA6B,sBAAsB,SACrD,MAAM,oBACN,GAAG,MAAM,iBAAiB,IAAI,iBAAiB;AACnD,QAAM,sBAAsB,MAAM,OAAO,kBAAkB,OAAO,CAAC,eAAe,WAAW,SAAS,gBAAgB,WAAW,aAAa,8BAA8B,WAAW,WAAW,8BAA8B;AAChO,MAAI,MAAM,OAAO,kBAAkB,WAAW,KAAK,eAAe,WAAW,KAAK,oBAAoB,WAAW,KAAK,eAAe,CAAC,GAAG,aAAa,MAAM,cAAc,cAAc,eAAe,CAAC,GAAG,aAAa,MAAM,cAAc,UAAU;AACpP,QAAI,SAAS,EAAE,MAAM,iBAAE,aAAa,QAAQ,MAAM,CAAC,UAAU,mBAAmB,GAAG,SAAS,yDAAyD,CAAC;EACxJ;AACF;AAEO,IAAM,gCAAgC,kCAAkC,YAAY,oBAAoB;AACxG,IAAM,wBAAwB,kCAAkC,OAAO,EAAE,WAAW,gBAAgB,CAAC,EAAE,OAAO,EAAE,YAAY,oBAAoB;ACtlBhJ,IAAM,qBAAqB;AAM3B,IAAM,sBAAsB;AAEnC,IAAM,MAAM,UAAU,kBAAkB;AACxC,IAAM,aAAa;AACnB,IAAM,eAAe;AACrB,IAAM,aAAa;AACnB,IAAM,gBAAgB;AAOtB,SAAS,UAAU,OAAyB;AAC1C,MAAI,MAAM,WAAW,YAAY;AAC/B,UAAM,IAAI,UAAU,eAAe,UAAU,eAAe,MAAM,MAAM,EAAE;EAC5E;AACF;AAEA,eAAe,aACb,OACA,OACoB;AACpB,YAAU,KAAK;AACf,SAAO,WAAW,OAAO,OAAO;IAC9B;IACA;IACA;IACA;IACA,CAAC,KAAK;EACR;AACF;AA2CA,eAAsB,KACpB,MACA,OACqB;AACrB,MAAI,KAAK,SAAS,gBAAgB,eAAe,YAAY;AAC3D,UAAM,IAAI,UAAU,0BAA0B,KAAK,MAAM,QAAQ;EACnE;AACA,MAAI,KAAK,CAAC,MAAM,qBAAqB;AACnC,UAAM,IAAI,UAAU,gCAAgC,KAAK,CAAC,CAAC,EAAE;EAC/D;AACA,QAAM,QAAQ,KAAK,SAAS,eAAe,gBAAgB,YAAY;AACvE,QAAM,aAAa,KAAK,SAAS,gBAAgB,YAAY;AAC7D,SAAO,gBAAgB,OAAO,YAAY,KAAK;AACjD;AA8BA,eAAsB,gBACpB,OACA,YACA,OACqB;AACrB,MAAI,MAAM,WAAW,cAAc;AACjC,UAAM,IAAI,UAAU,iBAAiB,YAAY,eAAe,MAAM,MAAM,EAAE;EAChF;AACA,QAAM,MAAM,MAAM,aAAa,OAAO,SAAS;AAC/C,SAAO,IAAI;IACT,MAAM,WAAW,OAAO,OAAO;MAC7B,EAAE,MAAM,WAAW,IAAI,OAAuB,gBAAgB,IAAoB;MAClF;MACA;IACF;EACF;AACF;ACtIA,SAAS,cAAc,OAAiD;AACtE,QAAM,QAAiB,OAAO,eAAe,KAAK;AAClD,SAAO,UAAU,OAAO,aAAa,UAAU;AACjD;AAQA,SAAS,uBAAuB,MAAoB;AAClD,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,OAAO,KAAK,WAAW,CAAC;AAC9B,QAAI,QAAQ,SAAU,QAAQ,OAAQ;AACpC,YAAM,IAAI;QACR,mEAAmE,CAAC;MACtE;IACF;AACA,QAAI,QAAQ,SAAU,QAAQ,OAAQ;AACpC,YAAM,OAAO,KAAK,WAAW,IAAI,CAAC;AAClC,UAAI,EAAE,QAAQ,SAAU,QAAQ,QAAS;AACvC,cAAM,IAAI;UACR,oEAAoE,CAAC;QACvE;MACF;AACA;IACF;EACF;AACF;AAEA,SAAS,gBAAgB,MAAsB;AAC7C,yBAAuB,IAAI;AAC3B,SAAO,KAAK,UAAU,IAAI;AAC5B;AAEA,SAAS,UAAU,OAAwB;AACzC,MAAI,UAAU,KAAM,QAAO;AAC3B,UAAQ,OAAO,OAAO;IACpB,KAAK;AACH,aAAO,KAAK,UAAU,KAAK;IAC7B,KAAK;AACH,aAAO,gBAAgB,KAAK;IAC9B,KAAK;AACH,UAAI,CAAC,OAAO,SAAS,KAAK,GAAG;AAC3B,cAAM,IAAI,UAAU,0CAA0C,KAAK,EAAE;MACvE;AACA,aAAO,KAAK,UAAU,KAAK;IAC7B,KAAK;AACH;IACF;AACE,YAAM,IAAI,UAAU,qCAAqC,OAAO,KAAK,EAAE;EAC3E;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,IAAI,MAAM,IAAI,CAAC,SAAS,UAAU,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC;EAC3D;AACA,MAAI,CAAC,cAAc,KAAK,GAAG;AACzB,UAAM,IAAI,UAAU,sCAAsC;EAC5D;AACA,QAAM,OAAO,OAAO,KAAK,KAAK,EAAE,KAAK;AACrC,QAAM,UAAoB,CAAC;AAC3B,aAAW,OAAO,MAAM;AACtB,UAAM,SAAS,MAAM,GAAG;AACxB,QAAI,WAAW,OAAW;AAC1B,YAAQ,KAAK,GAAG,gBAAgB,GAAG,CAAC,IAAI,UAAU,MAAM,CAAC,EAAE;EAC7D;AACA,SAAO,IAAI,QAAQ,KAAK,GAAG,CAAC;AAC9B;AAGO,SAAS,aAAa,OAAwB;AACnD,SAAO,UAAU,KAAK;AACxB;AEXO,SAAS,+BACd,eACA,aAC0B;AAC1B,MAAI,KAAK,KAAK,aAAa,EAAG,OAAM,IAAI,UAAU,2CAA2C;AAC7F,QAAM,WAAW,cAAc,MAAM,GAAG;AACxC,MAAI,SAAS,WAAW,KAAK,SAAS,KAAK,CAAC,YAAY,QAAQ,WAAW,CAAC,EAAG,OAAM,IAAI,UAAU,mDAAmD;AACtJ,QAAM,CAAC,eAAe,gBAAgB,gBAAgB,IAAI;AAC1D,QAAMG,eAAc,cAAc,aAAa;AAC/C,QAAM,eAAe,cAAc,cAAc;AACjD,QAAM,YAAY,cAAc,gBAAgB;AAChD,QAAM,UAAU,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC;AACxD,QAAM,SAAS,KAAK,MAAM,QAAQ,OAAOA,YAAW,CAAC;AACrD,QAAM,UAAU,KAAK,MAAM,QAAQ,OAAO,YAAY,CAAC;AACvD,MAAI,aAAa,MAAM,MAAM,QAAQ,OAAOA,YAAW,KAAK,aAAa,OAAO,MAAM,QAAQ,OAAO,YAAY,EAAG,OAAM,IAAI,UAAU,6CAA6C;AACrL,kBAAgB,QAAQ,CAAC,OAAO,OAAO,OAAO,KAAK,GAAG,kBAAkB;AACxE,QAAM,MAAM,OAAO,OAAO,KAAK,eAAe;AAC9C,kBAAgB,KAAK,CAAC,OAAO,OAAO,OAAO,GAAG,GAAG,eAAe;AAChE,MAAI,OAAO,QAAQ,WAAW,OAAO,QAAQ,SAAS,OAAO,QAAQ,YAAY,IAAI,QAAQ,WAAW,IAAI,QAAQ,aAAa,IAAI,QAAQ,SAAS,OAAO,IAAI,MAAM,SAAU,OAAM,IAAI,UAAU,yCAAyC;AAC9O,kBAAgB,SAAS,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,GAAG,cAAc;AACjG,MAAI,OAAO,QAAQ,QAAQ,YAAY,OAAO,QAAQ,QAAQ,YAAY,OAAO,QAAQ,QAAQ,YAAY,CAAC,OAAO,UAAU,QAAQ,GAAG,KAAK,CAAC,OAAO,UAAU,QAAQ,GAAG,KAAM,QAAQ,OAAmB,QAAQ,OAAkB,CAAC,MAAM,QAAQ,QAAQ,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,OAAO,UAAU,QAAQ,KAAK,CAAC,MAAM,QAAQ,QAAQ,GAAG,KAAK,QAAQ,IAAI,WAAW,EAAG,OAAM,IAAI,UAAU,0CAA0C;AACvb,QAAM,YAAY,QAAQ,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAM,YAAY,2BAA2B,SAAS;AACtD,MAAI,CAAC,MAAM,WAAW,cAAc,IAAI,CAAC,CAAC,EAAG,OAAM,IAAI,UAAU,gDAAgD;AACjH,MAAI,CAACC,gBAAAA,QAAQ,OAAO,WAAW,IAAI,YAAY,EAAE,OAAO,GAAG,aAAa,IAAI,cAAc,EAAE,GAAG,WAAW,EAAE,QAAQ,MAAM,CAAC,EAAG,OAAM,IAAI,UAAU,4CAA4C;AAC9L,QAAMC,OAAM,IAAI,SAAS,IAAM,OAAa,QAAM,sBAAO,IAAI,YAAY,EAAE,OAAO,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS;AAC7G,MAAI,gBAAgB,UAAaA,SAAQ,YAAa,OAAM,IAAI,UAAU,oCAAoC;AAC9G,SAAO,EAAE,eAAe,KAAAA,MAAK,QAAQ,QAAwD;AAC/F;AAEA,SAAS,OAAO,OAAgB,OAAwC;AACtE,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,OAAM,IAAI,UAAU,GAAG,KAAK,oBAAoB;AACzH,SAAO;AACT;AAEA,SAAS,gBAAgB,OAAgC,MAAyB,OAAqB;AACrG,MAAI,OAAO,KAAK,KAAK,EAAE,WAAW,KAAK,UAAU,OAAO,KAAK,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS,GAAG,CAAC,EAAG,OAAM,IAAI,UAAU,GAAG,KAAK,gCAAgC;AACtK;AAEA,SAAS,MAAM,MAAkB,OAA4B;AAC3D,SAAO,KAAK,WAAW,MAAM,UAAU,KAAK,MAAM,CAAC,MAAM,UAAU,SAAS,MAAM,KAAK,CAAC;AAC1F;ACnFA,IAAMC,uBAAsB,EAAE,QAAQ,MAAM;AAKrC,IAAM,+BAA+B;AA2B5C,SAAS,eAAe,UAA+C;AACrE,QAAM,SAAS,UAAU,4BAA4B;AACrD,QAAM,OAAO,UAAU,aAAa,QAAQ,CAAC;AAC7C,QAAM,QAAQ,IAAI,WAAW,OAAO,SAAS,KAAK,MAAM;AACxD,QAAM,IAAI,MAAM;AAChB,QAAM,IAAI,MAAM,OAAO,MAAM;AAC7B,SAAO;AACT;AA4HO,SAAS,8BAA8B,UAAoC;AAChF,QAAM,SAAS,sBAAsB,MAAM,QAAQ;AACnD,QAAM,EAAE,WAAW,GAAG,SAAS,IAAI;AACnC,SAAOC,gBAAAA,QAAQ,OAAO,cAAc,UAAU,KAAK,OAAGC,cAAAA,QAAO,eAAe,QAAQ,CAAC,GAAG,2BAA2B,UAAU,SAAS,GAAGC,oBAAmB;AAC9J;ACjLO,IAAMC,cAAa;AAcnB,SAAS,mBAAmB,WAAyB;AAC1D,QAAMC,OAAM,IAAI,MAAM,SAAS;AAC/B,MACEA,KAAI,YAAY,KAChBA,KAAI,SAAa,QACjBA,KAAI,UAAU,SAAS;EACvBA,KAAI,SAAS,MAAM,WACnB;AACA,UAAM,IAAI,UAAU,kDAAkD,SAAS,EAAE;EACnF;AACF;AAaO,SAAS,cACd,KACA,UAAgC,CAAC,GACa;AAC9C,QAAM,SAAS,IAAI,IAAI,GAAG;AAC1B,MAAI,OAAO,aAAa,UAAU;AAChC,UAAM,IAAI,UAAU,gCAAgC,OAAO,QAAQ,EAAE;EACvE;AACA,MAAI,OAAO,aAAa,MAAM,OAAO,aAAa,IAAI;AACpD,UAAM,IAAI,UAAU,mCAAmC;EACzD;AAGA,MAAI,OAAO,WAAW,IAAI;AACxB,UAAM,IAAI,UAAU,wCAAwC;EAC9D;AACA,MAAI,QAAQ,mBAAmB,QAAW;AACxC,QAAI,CAAC,uBAAuB,QAAQ,cAAc,GAAG;AACnD,YAAM,IAAI;QACR,wDAAwD,QAAQ,cAAc;MAChF;IACF;AACA,QAAI,OAAO,WAAW,QAAQ,gBAAgB;AAC5C,YAAM,IAAI;QACR,oBAAoB,OAAO,MAAM,4BAA4B,QAAQ,cAAc;MACrF;IACF;EACF;AACA,QAAM,QAAQ,qBAAqB,KAAK,OAAO,QAAQ;AACvD,MAAI,CAAC,SAAS,MAAM,CAAC,MAAM,QAAW;AACpC,UAAM,IAAI,UAAU,yBAAyB,OAAO,QAAQ,EAAE;EAChE;AACA,QAAM,gBAAgB,MAAM,CAAC;AAC7B,qBAAmB,aAAa;AAChC,MAAI,CAAC,OAAO,KAAK,WAAW,KAAK,GAAG;AAClC,UAAM,IAAI,UAAU,2CAA2C;EACjE;AAIA,QAAM,QAAQ,cAAc,OAAO,KAAK,MAAM,MAAM,MAAM,CAAC;AAC3D,MAAI,MAAM,WAAWC,aAAY;AAC/B,UAAM,IAAI,UAAU,wBAAwBA,WAAU,eAAe,MAAM,MAAM,EAAE;EACrF;AACA,SAAO,EAAE,eAAe,MAAM;AAChC;;;AxB7FO,IAAM,6BAA6B;AAEnC,IAAM,iBAAiB;AAEvB,IAAM,kBAAkB;AAExB,IAAM,4BAA4B;AAEzC,IAAM,kBAAkB;AACxB,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,eAAe;AAGd,SAAS,UAAU,OAAiC;AACzD,SAAO,OAAO,UAAU,YAAY,SAAS,KAAK,KAAK,KAAK,UAAU,YAAY,UAAU;AAC9F;AAEO,SAAS,UAAU,OAAiC;AACzD,SAAO,OAAO,UAAU,YAAY,SAAS,KAAK,KAAK;AACzD;AAGO,SAAS,oBAAoB,OAAiC;AACnE,SAAO,OAAO,UAAU,aAAa,UAAU,UAAU,aAAa,KAAK,KAAK;AAClF;AAQO,SAAS,eAAe,UAA0B;AACvD,MAAI,OAAO,aAAa,YAAY,CAAC,SAAS,WAAW,MAAM,KAAK,QAAQ,KAAK,QAAQ,EAAG,OAAM,IAAI,UAAU,sBAAsB;AACtI,SAAO,gBAAY,uBAAO,IAAI,YAAY,EAAE,OAAO,kBAAkB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,eAAe;AAC3G;AAEO,SAAS,eAAe,SAAiB,SAAyB;AACvE,MAAI,CAAC,UAAU,OAAO,KAAK,CAAC,UAAU,OAAO,EAAG,OAAM,IAAI,UAAU,6BAA6B;AACjG,SAAO,UAAU,OAAO,IAAI,OAAO;AACrC;AAGO,SAAS,kBAAkB,SAAyB;AACzD,MAAI,CAAC,UAAU,OAAO,EAAG,OAAM,IAAI,UAAU,qBAAqB;AAClE,SAAO,UAAU,OAAO;AAC1B;AAmBO,SAAS,iBAAiB,QAAwB;AACvD,SAAO,gBAAY,uBAAO,IAAI,YAAY,EAAE,OAAO,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,yBAAyB;AACjG;AAEA,SAAS,eAAe,KAAsB;AAC5C,MAAI,IAAI,WAAW,KAAK,IAAI,WAAW,GAAG,KAAK,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,IAAI,EAAG,QAAO;AAC/F,SAAO,IAAI,MAAM,GAAG,EAAE,KAAK,CAAC,YAAY,YAAY,MAAM,YAAY,OAAO,YAAY,IAAI;AAC/F;AAOO,SAAS,kBAAkB,KAAkC;AAClE,MAAI,OAAO,QAAQ,SAAU,QAAO,EAAE,MAAM,WAAW;AACvD,QAAM,cAAc,iCAAiC,KAAK,GAAG;AAC7D,QAAM,QAAQ,gBAAgB,OAAO,CAAC,IAAI,EAAE,SAAS,YAAY,CAAC,GAAI,QAAQ,IAAI,MAAM,YAAY,CAAC,EAAE,MAAM,EAAE;AAC/G,MAAI,eAAe,GAAG,EAAG,QAAO,EAAE,MAAM,YAAY,GAAG,MAAM;AAC7D,QAAM,WAAW,IAAI,MAAM,GAAG;AAC9B,MAAI,SAAS,WAAW,EAAG,QAAO,UAAU,GAAG,IAAI,EAAE,MAAM,OAAO,SAAS,IAAI,IAAI,EAAE,MAAM,WAAW;AACtG,MAAI,SAAS,CAAC,MAAM,SAAU,QAAO,SAAS,WAAW,KAAK,oBAAoB,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,SAAS,MAAM,SAAS,CAAC,EAAG,IAAI,EAAE,MAAM,WAAW;AAC5J,MAAI,SAAS,CAAC,MAAM,YAAY,SAAS,WAAW,KAAK,UAAU,SAAS,CAAC,CAAC,KAAK,UAAU,SAAS,CAAC,CAAC,GAAG;AACzG,WAAO,EAAE,MAAM,SAAS,SAAS,SAAS,CAAC,GAAI,SAAS,SAAS,CAAC,EAAG;AAAA,EACvE;AACA,SAAO,EAAE,MAAM,YAAY,GAAG,MAAM;AACtC;;;AiCrGA,mBAAkD;;;ACA3C,IAAM,kCAAkC;AAyCxC,SAAS,oBAAoB,OAAuB;AACzD,QAAM,MAAM,IAAI,IAAI,KAAK;AACzB,MAAI,IAAI,UAAU,IAAI,aAAa,UAAW,OAAM,IAAI,UAAU,+DAA+D;AACjI,QAAM,WAAW,IAAI,gBAAgB,IAAI,KAAK,MAAM,CAAC,CAAC;AACtD,QAAM,QAAQ,SAAS,IAAI,+BAA+B;AAG1D,MAAI,CAAC,SAAS,SAAS,SAAS,EAAG,OAAM,IAAI,UAAU,+BAA+B;AACtF,SAAO;AACT;;;AD/BA,IAAM,kBAAkB,KAAK;AAE7B,IAAM,uBAAuB,KAAK,KAAM,sCAAyB,IAAK,CAAC,IAAI;AAE3E,IAAM,gBAAgB;AAEf,SAAS,kBAAkB,MAAe,cAAiD;AAChG,MAAI,OAAO,SAAS,YAAY,KAAK,WAAW,KAAK,KAAK,SAAS,wBAAwB,0BAA0B,KAAK,IAAI,EAAG,QAAO,EAAE,IAAI,MAAM;AACpJ,MAAI;AACJ,MAAI;AAAE,UAAM,IAAI,IAAI,IAAI;AAAA,EAAG,QAAQ;AAAE,WAAO,EAAE,IAAI,MAAM;AAAA,EAAG;AAC3D,MAAI,KAAK,SAAS,mBAAmB,IAAI,aAAa,UAAW,QAAO,EAAE,IAAI,MAAM;AACpF,MAAI,IAAI,aAAa,YAAY,IAAI,aAAa,MAAM,IAAI,aAAa,MAAM,IAAI,WAAW,GAAI,QAAO,EAAE,IAAI,MAAM;AACrH,MAAI,CAAC,uBAAuB,IAAI,MAAM,KAAK,CAAC,aAAa,SAAS,IAAI,MAAM,EAAG,QAAO,EAAE,IAAI,MAAM;AAClG,MAAI;AACF,QAAI,IAAI,aAAa,WAAW;AAC9B,0BAAoB,IAAI;AACxB,aAAO,SAAS,GAAG,IAAI,MAAM,UAAU,IAAI,IAAI,KAAK,EAAE,IAAI,MAAM,OAAO,SAAS,IAAI,EAAE,IAAI,MAAM;AAAA,IAClG;AACA,QAAI,cAAc,KAAK,IAAI,QAAQ,GAAG;AACpC,YAAM,aAAS,wBAAU,MAAM,EAAE,gBAAgB,aAAa,CAAC;AAC/D,aAAO,OAAO,SAAS,UAAU,OAAO,aAAa,UAAU,EAAE,IAAI,MAAM,OAAO,OAAO,IAAI,EAAE,IAAI,MAAM;AAAA,IAC3G;AACA,kBAAc,MAAM,EAAE,gBAAgB,IAAI,OAAO,CAAC;AAClD,WAAO,EAAE,IAAI,MAAM,OAAO,WAAW;AAAA,EACvC,QAAQ;AACN,WAAO,EAAE,IAAI,MAAM;AAAA,EACrB;AACF;;;AExBA,IAAM,WAAW,IAAI,YAAY,EAAE,OAAO,kCAAkC;AAE5E,SAAS,SAAuB;AAC9B,QAAM,QAAQ,WAAW,QAAQ;AACjC,MAAI,UAAU,OAAW,OAAM,IAAI,MAAM,6CAA6C;AACtF,SAAO;AACT;AAMA,eAAsB,uBAAuB,iBAA6B,UAA6C;AACrH,MAAI,EAAE,2BAA2B,eAAe,gBAAgB,aAAa,GAAI,OAAM,IAAI,UAAU,6CAA6C;AAClJ,MAAI,OAAO,aAAa,YAAY,CAAC,SAAS,WAAW,MAAM,EAAG,OAAM,IAAI,UAAU,sBAAsB;AAC5G,QAAM,OAAO,IAAI,WAAW,eAAe;AAC3C,QAAM,MAAM,MAAM,OAAO,EAAE,UAAU,OAAO,MAAM,QAAQ,OAAO,CAAC,cAAc,WAAW,CAAC;AAC5F,OAAK,KAAK,CAAC;AACX,QAAM,MAAM,MAAM,OAAO,EAAE;AAAA,IACzB,EAAE,MAAM,QAAQ,MAAM,WAAW,MAAM,UAAU,MAAM,IAAI,YAAY,EAAE,OAAO,QAAQ,EAAE;AAAA,IAC1F;AAAA,IACA,EAAE,MAAM,WAAW,QAAQ,IAAI;AAAA,IAC/B;AAAA,IACA,CAAC,WAAW,SAAS;AAAA,EACvB;AACA,QAAM,WAAW,IAAI,WAAW,MAAM,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,MAAM,WAAW,MAAM,UAAU,MAAM,IAAI,YAAY,EAAE,OAAO,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC;AAC5J,SAAO,EAAE,UAAU,KAAK,YAAY,QAAQ,GAAG,IAAI;AACrD;;;ACvBO,IAAM,uBAAuB;AAE7B,IAAM,2BAA2B;AAOjC,IAAM,yBAAyB,KAAK;AAE3C,IAAM,iBAAiB;AACvB,IAAM,YAAY;AAClB,IAAM,cAAc;AACpB,IAAM,UAAU,IAAI,YAAY;AAKzB,IAAM,mBAAN,cAA+B,MAAM;AAAA,EAC1C,YAAqB,QAA4B;AAC/C,UAAM,yBAAyB,MAAM,EAAE;AADpB;AAEnB,SAAK,OAAO;AAAA,EACd;AACF;AAGO,IAAM,8BAAN,cAA0C,MAAM;AAAA,EACrD,cAAc;AACZ,UAAM,sCAAsC;AAC5C,SAAK,OAAO;AAAA,EACd;AACF;AAyCO,SAAS,yBAAyB,OAAuB;AAE9D,SAAO,MAAM,QAAQ,0DAA0D,CAAC,YAAY,QAAQ,YAAY,CAAC;AACnH;AAEO,SAAS,mBAAmB,OAA4C;AAC7E,aAAW,QAAQ,CAAC,MAAM,SAAS,MAAM,UAAU,MAAM,UAAU,MAAM,cAAc,GAAG;AACxF,QAAI,OAAO,SAAS,YAAY,KAAK,WAAW,KAAK,KAAK,SAAS,GAAG,EAAG,OAAM,IAAI,UAAU,uCAAuC;AAAA,EACtI;AACA,SAAO,QAAQ,OAAO,GAAG,cAAc,GAAG,yBAAyB,MAAM,OAAO,CAAC,IAAI,MAAM,QAAQ,IAAI,MAAM,QAAQ,IAAI,yBAAyB,MAAM,cAAc,CAAC,EAAE;AAC3K;AAEA,SAASC,UAAuB;AAC9B,QAAM,QAAQ,WAAW,QAAQ;AACjC,MAAI,UAAU,OAAW,OAAM,IAAI,MAAM,yCAAyC;AAClF,SAAO;AACT;AAEA,SAAS,OAAO,MAAkB,OAA+B;AAC/D,QAAM,MAAM,IAAI,WAAW,KAAK,SAAS,MAAM,MAAM;AACrD,MAAI,IAAI,IAAI;AACZ,MAAI,IAAI,OAAO,KAAK,MAAM;AAC1B,SAAO;AACT;AAGO,SAAS,kBAAkB,MAAkB,OAA4B;AAC9E,MAAI,KAAK,WAAW,MAAM,OAAQ,QAAO;AACzC,MAAI,OAAO;AACX,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,QAAS,SAAQ,KAAK,KAAK,IAAK,MAAM,KAAK;AACpF,SAAO,SAAS;AAClB;AAIA,eAAe,cAAc,KAAiB,SAAuC;AACnF,QAAMC,QAAO,MAAMD,QAAO,EAAE,UAAU,OAAO,KAAK,QAAQ,OAAO,CAAC,YAAY,CAAC;AAC/E,QAAM,SAAS,OAAO,OAAe,UAAgD;AACnF,UAAM,OAAO,IAAI,WAAW,MAAMA,QAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,MAAM,WAAW,MAAM,IAAI,WAAW,CAAC,GAAG,MAAM,OAAO,QAAQ,OAAO,KAAK,GAAG,OAAO,EAAE,GAAGC,OAAM,GAAG,CAAC;AAC1K,QAAI;AACF,aAAO,UAAU,QACb,MAAMD,QAAO,EAAE,UAAU,OAAO,MAAM,EAAE,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,SAAS,CAAC,IACxF,MAAMA,QAAO,EAAE,UAAU,OAAO,MAAM,EAAE,MAAM,QAAQ,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;AAAA,IAC9F,UAAE;AACA,WAAK,KAAK,CAAC;AAAA,IACb;AAAA,EACF;AACA,SAAO,EAAE,KAAK,MAAM,OAAO,QAAQ,KAAK,GAAG,QAAQ,MAAM,OAAO,WAAW,QAAQ,EAAE;AACvF;AAEA,eAAe,QAAQ,KAAgB,WAAuB,KAAkC;AAC9F,QAAM,KAAK,OAAO,gBAAgB,IAAI,WAAW,WAAW,CAAC;AAC7D,QAAM,SAAS,IAAI,WAAW,MAAMA,QAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,IAAI,gBAAgB,IAAI,GAAG,KAAK,SAAS,CAAC;AAClH,SAAO,YAAY,OAAO,IAAI,MAAM,CAAC;AACvC;AAEA,eAAe,QAAQ,KAAgB,SAAiB,KAAsC;AAC5F,QAAM,QAAQ,cAAc,OAAO;AACnC,MAAI,MAAM,SAAS,cAAc,GAAI,OAAM,IAAI,iBAAiB,SAAS;AACzE,SAAO,IAAI,WAAW,MAAMA,QAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,IAAI,MAAM,SAAS,GAAG,WAAW,GAAG,gBAAgB,IAAI,GAAG,KAAK,MAAM,SAAS,WAAW,CAAC,CAAC;AAC9J;AAYA,eAAsB,gBAAgB,OAAyD;AAC7F,MAAI,MAAM,aAAa,UAAa,MAAM,SAAS,aAAa,MAAM,SAAU,OAAM,IAAI,UAAU,4CAA4C;AAChJ,QAAM,UAAU,mBAAmB,KAAK;AACxC,QAAM,MAAM,OAAO,gBAAgB,IAAI,WAAW,SAAS,CAAC;AAC5D,MAAI;AACF,UAAM,UAAU,MAAM,cAAc,KAAK,OAAO;AAChD,UAAM,KAAK,MAAM,QAAQ,QAAQ,KAAK,MAAM,WAAW,OAAO;AAC9D,UAAM,SAAS,YAAY,IAAI,WAAW,MAAMA,QAAO,EAAE,KAAK,QAAQ,QAAQ,QAAQ,OAAO,CAAC,CAAC;AAC/F,UAAM,YAAY,MAAM,aAAa,SAAY,OAAO,MAAM,QAAQ,MAAM,SAAS,KAAK,KAAK,OAAO;AACtG,UAAM,YAAY,MAAM,MAAM,UAAU,KAAK,KAAK,OAAO;AACzD,WAAO;AAAA,MACL,KAAK,EAAE,GAAG,sBAAsB,UAAU,MAAM,UAAU,KAAK,MAAM,UAAU,OAAO,MAAM,KAAK,WAAW,gBAAgB,MAAM,gBAAgB,SAAS,MAAM,WAAW,yBAAyB;AAAA,MACrM;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,UAAE;AACA,QAAI,KAAK,CAAC;AAAA,EACZ;AACF;AAEA,SAAS,UAAU,OAAgB,MAA2D;AAC5F,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AAChF,QAAM,MAAM,OAAO,KAAK,KAAK;AAC7B,SAAO,IAAI,WAAW,KAAK,UAAU,KAAK,MAAM,CAAC,QAAQ,OAAO,UAAU,eAAe,KAAK,OAAO,GAAG,CAAC;AAC3G;AAOO,SAAS,uBAAuB,OAAmB,UAA8F;AACtJ,MAAI,MAAM,aAAa,uBAAwB,OAAM,IAAI,iBAAiB,MAAM;AAChF,MAAI;AACJ,MAAI;AAAE,YAAQ,KAAK,MAAM,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;AAAA,EAAG,QAAQ;AAAE,UAAM,IAAI,iBAAiB,OAAO;AAAA,EAAG;AAClI,MAAI,CAAC,UAAU,OAAO,CAAC,OAAO,MAAM,UAAU,aAAa,WAAW,CAAC,EAAG,OAAM,IAAI,iBAAiB,OAAO;AAC5G,QAAM,MAAM,MAAM;AAClB,MAAI,CAAC,UAAU,KAAK,CAAC,KAAK,YAAY,OAAO,OAAO,kBAAkB,SAAS,CAAC,EAAG,OAAM,IAAI,iBAAiB,QAAQ;AACtH,MAAI,OAAO,MAAM,OAAO,YAAY,OAAO,MAAM,WAAW,YAAa,MAAM,cAAc,QAAQ,OAAO,MAAM,cAAc,YAAa,MAAM,cAAc,QAAQ,OAAO,MAAM,cAAc,YAAY,MAAM,QAAQ,MAAM,SAAS,EAAG,OAAM,IAAI,iBAAiB,OAAO;AAClR,MAAI,IAAI,MAAM,wBAAwB,IAAI,QAAQ,aAAa,OAAO,IAAI,aAAa,YAAa,IAAI,QAAQ,QAAQ,OAAO,IAAI,QAAQ,YAAa,OAAO,IAAI,mBAAmB,YAAY,CAAC,OAAO,cAAc,IAAI,OAAO,KAAM,IAAI,UAAqB,EAAG,OAAM,IAAI,iBAAiB,QAAQ;AACxS,MAAI,SAAS,aAAa,UAAa,IAAI,aAAa,SAAS,SAAU,OAAM,IAAI,iBAAiB,QAAQ;AAC9G,MAAI,yBAAyB,IAAI,cAAc,MAAM,yBAAyB,SAAS,cAAc,EAAG,OAAM,IAAI,iBAAiB,QAAQ;AAC3I,MAAK,IAAI,UAAqB,yBAA0B,OAAM,IAAI,iBAAiB,OAAO;AAC1F,SAAO;AACT;AAEA,SAAS,WAAWE,SAA2B,UAA+E;AAC5H,SAAO,mBAAmB,EAAE,SAAS,SAAS,SAAS,UAAU,SAAS,UAAU,UAAUA,QAAO,IAAI,UAAU,gBAAgBA,QAAO,IAAI,eAAe,CAAC;AAChK;AAEA,SAAS,qBAAqB,OAAuC;AACnE,MAAI,CAAC,yBAAyB,KAAK,KAAK,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC5E,MAAI;AAAE,WAAO,cAAc,MAAM,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG,CAAC;AAAA,EAAG,QAAQ;AAAE,WAAO;AAAA,EAAW;AAC5H;AAGA,eAAe,YAAYA,SAA2B,SAAqB,KAAsC;AAC/G,MAAI;AACF,QAAI,IAAI,WAAW,UAAW,OAAM,IAAI,iBAAiB,SAAS;AAClE,UAAM,UAAU,MAAM,cAAc,KAAK,OAAO;AAChD,QAAI;AACJ,QAAI;AAAE,eAAS,cAAcA,QAAO,MAAM;AAAA,IAAG,QAAQ;AAAE,YAAM,IAAI,iBAAiB,QAAQ;AAAA,IAAG;AAC7F,UAAM,WAAW,IAAI,WAAW,MAAMF,QAAO,EAAE,KAAK,QAAQ,QAAQ,QAAQ,OAAO,CAAC;AACpF,QAAI,CAAC,kBAAkB,QAAQ,QAAQ,EAAG,OAAM,IAAI,iBAAiB,QAAQ;AAC7E,QAAI;AAAE,aAAO,MAAM,QAAQ,QAAQ,KAAKE,QAAO,IAAI,OAAO;AAAA,IAAG,QAAQ;AAAE,YAAM,IAAI,iBAAiB,SAAS;AAAA,IAAG;AAAA,EAChH,UAAE;AACA,QAAI,KAAK,CAAC;AAAA,EACZ;AACF;AAOA,eAAsB,uBAAuBA,SAA2B,UAAmE,QAAiD;AAC1L,QAAM,UAAU,WAAWA,SAAQ,QAAQ;AAC3C,QAAM,WAAW,OAAOA,QAAO,UAAU,QAAQ,WAAW,qBAAqBA,QAAO,UAAU,GAAG,IAAI;AACzG,MAAI,aAAa,UAAa,CAAC,kBAAkB,UAAU,OAAO,EAAG,OAAM,IAAI,iBAAiB,SAAS;AACzG,MAAI,OAAOA,QAAO,UAAU,cAAc,YAAY,yBAAyBA,QAAO,UAAU,SAAS,MAAM,yBAAyBA,QAAO,IAAI,cAAc,EAAG,OAAM,IAAI,iBAAiB,SAAS;AACxM,MAAI;AACJ,MAAI;AAAE,UAAM,MAAM,OAAO,OAAOA,QAAO,WAAW,OAAO;AAAA,EAAG,SAAS,OAAO;AAE1E,QAAI,iBAAiB,4BAA6B,OAAM;AACxD,UAAM,IAAI,iBAAiB,SAAS;AAAA,EACtC;AACA,SAAO,YAAYA,SAAQ,SAAS,GAAG;AACzC;AAGA,eAAsB,uBAAuBA,SAA2B,UAAmE,UAAiD;AAC1L,MAAIA,QAAO,IAAI,aAAa,SAAS,YAAYA,QAAO,IAAI,QAAQ,SAAS,OAAOA,QAAO,cAAc,KAAM,OAAM,IAAI,iBAAiB,SAAS;AACnJ,QAAM,UAAU,WAAWA,SAAQ,QAAQ;AAC3C,MAAI;AACJ,MAAI;AAAE,UAAM,MAAM,QAAQ,SAAS,KAAKA,QAAO,WAAW,OAAO;AAAA,EAAG,QAAQ;AAAE,UAAM,IAAI,iBAAiB,SAAS;AAAA,EAAG;AACrH,SAAO,YAAYA,SAAQ,SAAS,GAAG;AACzC;;;ACvLO,IAAM,uBAAuB;AAGpC,SAAS,aAAa,OAAsG,WAA8D;AACxL,QAAM,SAAS,OAAO,MAAM,MAAM,WAAW,WAAW,MAAM,KAAK,SAAS;AAC5E,MAAI,MAAM,SAAS,4BAA4B,MAAM,SAAS,mBAAmB,MAAM,SAAS,iBAAkB,QAAO,EAAE,IAAI,OAAO,MAAM,WAAW;AACvJ,MAAI,cAAc,UAAa,aAAa,cAAc,MAAM,SAAS,kBAAmB,MAAM,SAAS,qBAAqB,WAAW,KAAO,QAAO,EAAE,IAAI,OAAO,MAAM,gBAAgB,SAAS,MAAM,WAAW,qBAAqB;AAC3O,MAAI,MAAM,SAAS,sBAAuB,MAAM,SAAS,mBAAmB,MAAM,SAAS,cAAc,WAAW,OAAY,QAAO,EAAE,IAAI,OAAO,MAAM,kBAAkB;AAC5K,MAAI,MAAM,SAAS,eAAe,MAAM,SAAS,kBAAmB,QAAO,EAAE,IAAI,OAAO,MAAM,OAAO;AACrG,MAAI,MAAM,SAAS,uBAAuB,MAAM,SAAS,oBAAqB,QAAO,EAAE,IAAI,OAAO,MAAM,eAAe;AACvH,SAAO,EAAE,IAAI,OAAO,MAAM,SAAS;AACrC;AAGA,IAAM,iBAAiB;AAEvB,SAAS,QAAQ,MAAuC;AACtD,MAAI,gBAAgB,WAAY,QAAO;AACvC,MAAI,OAAO,SAAS,SAAU,QAAO,IAAI,YAAY,EAAE,OAAO,IAAI;AAClE,MAAI,SAAS,QAAQ,OAAO,SAAS,SAAU,QAAO,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,IAAI,CAAC;AACnG,SAAO;AACT;AAgBO,SAAS,iCAAiC,SAA+D;AAC9G,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,WAAW,QAAQ,mBAAmB,SAAS,0BAA0B;AAC/E,QAAM,UAAU,OAAO,QAA6C;AAClE,QAAI;AACF,YAAM,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,GAAG,IAAI,EAAE,QAAQ,IAAI,KAAK,MAAM,QAAQ,UAAU,CAAC;AACjG,aAAO,IAAI,KAAK,IAAI,KAAK,QAAQ,OAAO;AAAA,IAC1C,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,QAAM,eAAe,QAAQ;AAC7B,QAAMC,mBAAkB,OAAO,WAAW;AAC1C,SAAO;AAAA,IACL,SAAS,QAAQ;AAAA,IACjB,gBAAgB,QAAQ;AAAA,IACxB,MAAM,UAAU,KAAK;AACnB,UAAI;AACJ,UAAI;AAAE,iBAAS,MAAM,OAAO,MAAM,qBAAqB,GAAG,0BAA0B,GAAG,GAAG,IAAI,EAAE,WAAW,KAAK,CAAC;AAAA,MAAG,QAAQ;AAAE,eAAO,EAAE,QAAQ,cAAc;AAAA,MAAG;AAChK,UAAI,OAAO,WAAW,QAAQ,OAAO,UAAU,UAAa,OAAO,OAAO,MAAM,SAAS,SAAU,QAAO,EAAE,QAAQ,MAAM,OAAO,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,KAAK;AAC7K,UAAI,OAAO,WAAW,YAAa,QAAO,EAAE,QAAQ,YAAY;AAChE,UAAI,OAAO,WAAW,sBAAsB,OAAO,WAAW,qBAAqB,OAAO,WAAW,gBAAgB;AACnH,cAAM,OAAO,MAAM,QAAQ,GAAG;AAC9B,eAAO,SAAS,SAAY,EAAE,QAAQ,UAAU,IAAI,EAAE,QAAQ,WAAW,KAAK;AAAA,MAChF;AACA,aAAO,EAAE,QAAQ,cAAc;AAAA,IACjC;AAAA,IACA,MAAM,WAAW,KAAK,OAAO,WAAW;AACtC,UAAI;AACF,cAAM,SAAS,MAAM,OAAO,MAAM,IAAI,GAAG,0BAA0B,GAAG,GAAG,IAAI,OAAO,aAAa,CAAC,CAAC;AACnG,eAAO,OAAO,KAAK,EAAE,IAAI,KAAK,IAAI,aAAa,OAAO,OAAO,SAAS;AAAA,MACxE,QAAQ;AACN,eAAO,EAAE,IAAI,OAAO,MAAM,kBAAkB;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,MAAM,aAAa,KAAK;AACtB,UAAI;AACF,cAAM,SAAS,MAAM,OAAO,MAAM,OAAO,GAAG,0BAA0B,GAAG,GAAG,EAAE;AAC9E,YAAI,OAAO,MAAM,OAAO,MAAM,SAAS,mBAAmB,OAAO,MAAM,SAAS,kBAAkB,OAAO,MAAM,SAAS,YAAa,QAAO,EAAE,IAAI,KAAK;AACvJ,eAAO,aAAa,OAAO,OAAO,MAAS;AAAA,MAC7C,QAAQ;AACN,eAAO,EAAE,IAAI,OAAO,MAAM,kBAAkB;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,MAAM,SAAS,QAAQ,QAAQ;AAC7B,UAAI;AAEF,cAAM,SAAS,MAAM,OAAO,GAAG,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,IAAI,cAAc,MAAM,OAAO,gBAAgB,QAAQ,WAAW,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO,EAAG,CAAC;AACjL,YAAI,CAAC,OAAO,GAAI,QAAO,EAAE,QAAQ,cAAc;AAE/C,cAAM,OAAO,OAAO,KAAK,KAAK,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,GAAG,EAAE;AAC5D,eAAO,OAAO,KAAK,eAAe,SAAY,EAAE,QAAQ,MAAM,KAAK,IAAI,EAAE,QAAQ,MAAM,MAAM,QAAQ,OAAO,KAAK,WAAW;AAAA,MAC9H,QAAQ;AACN,eAAO,EAAE,QAAQ,cAAc;AAAA,MACjC;AAAA,IACF;AAAA,IACA,MAAM,QAAQ,KAAK,UAAU;AAC3B,UAAI;AAIF,cAAM,SAAS,MAAM,OAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,GAAG,IAAI,EAAE,QAAQ,IAAI,KAAK,MAAM,QAAQ,WAAW,GAAI,aAAa,SAAY,CAAC,IAAI,EAAE,kBAAkB,SAAS,EAAG,CAAC;AACvK,YAAI,CAAC,OAAO,IAAI;AACd,cAAI,OAAO,MAAM,SAAS,kBAAkB,OAAO,MAAM,SAAS,YAAa,QAAO,EAAE,QAAQ,YAAY;AAC5G,iBAAO,aAAa,UAAa,OAAO,MAAM,SAAS,0BAA0B,EAAE,QAAQ,YAAY,IAAI,EAAE,QAAQ,cAAc;AAAA,QACrI;AACA,cAAM,QAAQ,QAAQ,OAAO,KAAK,IAAI;AACtC,cAAM,OAAO,OAAO,KAAK,QAAQ;AACjC,YAAI,UAAU,UAAa,aAAa,UAAa,MAAM,aAAa,SAAU,QAAO,EAAE,QAAQ,YAAY;AAC/G,eAAO,UAAU,UAAa,SAAS,SAAY,EAAE,QAAQ,cAAc,IAAI,EAAE,QAAQ,MAAM,OAAO,KAAK;AAAA,MAC7G,QAAQ;AACN,eAAO,EAAE,QAAQ,cAAc;AAAA,MACjC;AAAA,IACF;AAAA,IACA,MAAM,SAAS,KAAK,OAAO,WAAW;AACpC,UAAI;AACF,cAAM,SAAS,MAAM,OAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,GAAG,IAAI,OAAO,EAAE,QAAQ,IAAI,GAAG,UAAU,CAAC;AAC3F,eAAO,OAAO,KAAK,EAAE,IAAI,KAAK,IAAI,aAAa,OAAO,OAAO,SAAS;AAAA,MACxE,QAAQ;AACN,eAAO,EAAE,IAAI,OAAO,MAAM,kBAAkB;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM,KAAK,KAAK,KAAK;AACnB,cAAM,SAAS,MAAM,OAAO,WAAW,iBAAiB,QAAQ,gBAAgB,KAAK,EAAE,IAAI,CAAC;AAC5F,YAAI,CAAC,OAAO,GAAI,OAAM,IAAI,MAAM,2BAA2B;AAC3D,eAAO,OAAO,YAAY,OAAO,QAAQ,OAAO,IAAI,CAAC;AAAA,MACvD;AAAA,IACF;AAAA,IACA,GAAI,iBAAiB,UAAaA,qBAAoB,SAAY,CAAC,IAAI;AAAA,MACrE,aAAa;AAAA,QACX,MAAM,OAAO,UAAU,KAAK;AAE1B,cAAI;AACJ,cAAI;AACF,qBAAS,MAAMA,iBAAgB,KAAK,OAAO,YAAY,UAAmB,aAAa,GAAG,EAAE,IAAI,CAAC;AAAA,UACnG,QAAQ;AACN,kBAAM,IAAI,4BAA4B;AAAA,UACxC;AAEA,cAAI,CAAC,OAAO,GAAI,OAAM,OAAO,MAAM,SAAS,oBAAoB,IAAI,4BAA4B,IAAI,IAAI,MAAM,kCAAkC;AAChJ,iBAAO,OAAO;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AChNO,IAAM,qBAAgC;AAAA,EAC3C,aAAa;AAAA,EACb,eAAe;AAAA,EACf,cAAc;AAAA,EACd,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAAA,EAC/D,QAAQ,KAAK;AACf;AAUO,IAAM,qBAAN,cAAiC,MAAM;AAAA,EAC5C,YAAqBC,OAA8B,SAA0B,KAAsB,UAAkB;AACnH,UAAM,OAAO;AADM,gBAAAA;AAAwD;AAAsB;AAEjG,SAAK,OAAO;AAAA,EACd;AACF;AAKA,eAAsB,OAAU,KAAa,QAAmB,SAAmD;AACjH,WAAS,gBAAgB,GAAG,iBAAiB,OAAO,aAAa,iBAAiB;AAChF,UAAM,OAAO,MAAM,QAAQ;AAC3B,QAAI,UAAU,KAAM,QAAO,KAAK;AAChC,UAAM,SAAS,KAAK;AACpB,QAAI,OAAO,GAAI,QAAO,KAAK,UAAU;AACrC,QAAI,OAAO,SAAS,eAAgB,OAAM,IAAI,mBAAmB,gBAAgB,OAAO,WAAW,sBAAsB,KAAK,aAAa;AAC3I,QAAI,OAAO,SAAS,kBAAkB,OAAO,SAAS,SAAU,OAAM,IAAI,mBAAmB,UAAU,YAAY,GAAG,iBAAiB,OAAO,IAAI,KAAK,KAAK,aAAa;AAEzK,QAAI,OAAO,SAAS,qBAAqB,gBAAgB,OAAO,aAAa;AAC3E,YAAM,UAAU,KAAK,IAAI,OAAO,cAAc,OAAO,gBAAgB,MAAM,gBAAgB,EAAE;AAC7F,YAAM,OAAO,MAAM,KAAK,MAAM,UAAU,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;AAAA,IAC9E;AAAA,EACF;AACA,QAAM,IAAI,mBAAmB,aAAa,uBAAuB,GAAG,wBAAwB,OAAO,WAAW,aAAa,KAAK,OAAO,WAAW;AACpJ;;;AC9DA,IAAAC,gBAA+K;AAkCxK,IAAM,gCAAmD,CAAC,YAAY,kBAAkB,aAAa;AAErG,IAAM,wBAAN,cAAoC,MAAM;AAAA,EAC/C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAGO,SAAS,yBAAyB,OAAqC;AAC5E,MAAI,CAAC,SAAS,KAAK,KAAK,OAAO,KAAK,KAAK,EAAE,WAAW,KAAK,CAAC,CAAC,UAAU,UAAU,WAAW,EAAE,MAAM,SAAO,OAAO,OAAO,OAAO,GAAG,CAAC,KAC/H,OAAO,MAAM,WAAW,YAAY,CAAC,uBAAuB,MAAM,MAAM,EAAG,OAAM,IAAI,sBAAsB,+BAA+B;AAC/I,QAAM,aAAS,kCAAmB,MAAM,QAAQ,EAAE,MAAM,SAAS,CAAC;AAClE,QAAM,YAAY,oCAAsB,MAAM,MAAM,SAAS;AAC7D,MAAI,OAAO,SAAS,QAAS,OAAM,IAAI,sBAAsB,0BAA0B;AACvF,SAAO,EAAE,QAAQ,MAAM,QAAQ,QAAQ,UAAU;AACnD;AAEA,SAAS,YAAY,UAA6F;AAChH,MAAI;AACJ,MAAI;AACJ,MAAI;AACF,aAAS,cAAc,SAAS,cAAc;AAC9C,UAAM,cAAc,SAAS,WAAW;AAAA,EAC1C,QAAQ;AACN,UAAM,IAAI,sBAAsB,8CAA8C;AAAA,EAChF;AACA,MAAI,IAAI,eAAe,GAAI,OAAM,IAAI,sBAAsB,+BAA+B;AAC1F,SAAO,EAAE,QAAQ,IAAI;AACvB;AAGA,eAAsB,qBAAqB,UAAoE;AAC7G,QAAM,EAAE,QAAQ,IAAI,IAAI,YAAY,QAAQ;AAC5C,MAAI,MAAM,WAAW,MAAM,MAAM,SAAS,SAAU,OAAM,IAAI,sBAAsB,yCAAyC;AAC7H,MAAI;AACJ,MAAI;AACJ,MAAI;AACF,QAAI,SAAS,aAAa,QAAW;AACnC,aAAO,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,MAAM,KAAK,QAAQ,GAAG,CAAC;AAC/E,cAAQ,KAAK,MAAM,IAAI;AAAA,IACzB,OAAO;AACL,YAAM,WAAW,yBAAyB,SAAS,QAAQ;AAC3D,UAAI,SAAS,OAAO,YAAY,SAAS,SAAU,OAAM,IAAI,sBAAsB,qCAAqC;AAExH,YAAM,SAAS,UAAM,8BAAe,EAAE,QAAQ,SAAS,QAAQ,WAAW,SAAS,WAAW,MAAM,SAAS,eAAe,GAAG,KAAK,EAAE,KAAK,KAAK,MAAM,SAAS,OAAO,QAAQ,EAAE,CAAC;AACjL,aAAO,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,OAAO,SAAS;AACxE,cAAQ,OAAO;AACf,UAAI,OAAO,OAAO,MAAM,WAAW,YAAY,KAAK,MAAM,OAAO,MAAM,MAAM,MAAM,KAAK,MAAM,SAAS,OAAO,SAAS,EAAG,OAAM,IAAI,sBAAsB,mDAAmD;AAAA,IAC/M;AAAA,EACF,SAAS,OAAO;AACd,QAAI,iBAAiB,sBAAuB,OAAM;AAClD,UAAM,IAAI,sBAAsB,SAAS,aAAa,SAAY,gDAAgD,+BAA+B;AAAA,EACnJ;AACA,MAAI,CAAC,SAAS,KAAK,KAAK,aAAa,KAAK,MAAM,KAAM,OAAM,IAAI,sBAAsB,uCAAuC;AAC7H,SAAO;AACT;AAQO,SAAS,0BAA0B,MAAc,UAAoD;AAC1G,QAAM,EAAE,QAAQ,IAAI,IAAI,YAAY,QAAQ;AAC5C,MAAI;AACJ,MAAI;AACF,iBAAS,yBAAU,MAAM,EAAE,gBAAgB,CAAC,IAAI,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;AAAA,EACrE,QAAQ;AACN,UAAM,IAAI,sBAAsB,8BAA8B;AAAA,EAChE;AACA,QAAM,WAAW,OAAO,SAAS,UAC7B,OAAO,MAAM,SAAS,WACtB,OAAO,OAAO,WAAW,YAAY,OAAO,WAAW,QAAQ,UAAU,OAAO,UAAU,OAAO,OAAO,SAAS,YAAY,MAAM;AACvI,MAAI,CAAC,YAAY,CAAC,WAAW,OAAO,KAAK,GAAG,EAAG,OAAM,IAAI,sBAAsB,gDAAgD;AAC/H,SAAO,OAAO;AAChB;AAGA,eAAsB,mBAAmBC,SAA2E;AAClH,QAAM,WAAWA,QAAO;AACxB,MAAI,aAAa,OAAW,QAAOA;AACnC,MAAI,OAAO,SAAS,aAAa,YAAY,OAAO,SAAS,mBAAmB,YAAY,OAAO,SAAS,gBAAgB,SAAU,OAAM,IAAI,sBAAsB,iCAAiC;AACvM,MAAI,WAAW,cAAc,WAAW,yBAAyB,SAAS,QAAQ,IAAI;AACtF,QAAM,EAAE,MAAM,kBAAkB,WAAW,GAAG,KAAK,IAAIA;AACvD,MAAI;AACJ,MAAI,SAAS,QAAW;AACtB,QAAI,0BAA0B,MAAM,QAAQ,MAAM,QAAS,YAAW;AAAA,SACjE;AACH,YAAM,aAAS,yBAAU,MAAM,EAAE,gBAAgB,CAAC,IAAI,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;AACzE,UAAI,OAAO,SAAS,UAAU,CAAC,SAAS,OAAO,MAAM,EAAG,OAAM,IAAI,sBAAsB,6BAA6B;AACrH,YAAM,aAAS,kCAAmB,OAAO,OAAO,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,YAAM,UAAU,UAAM,+BAAgB,OAAO,QAAQ,KAAK,MAAM,OAAO,QAAQ,CAAC;AAChF,UAAI,QAAQ,cAAc,OAAW,OAAM,IAAI,sBAAsB,gCAAgC;AACrG,YAAM,WAAW,yBAAyB,EAAE,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,QAAQ,UAAU,CAAC;AACzH,UAAI,aAAa,UAAa,aAAa,QAAQ,MAAM,aAAa,QAAQ,EAAG,OAAM,IAAI,sBAAsB,mDAAmD;AACpK,iBAAW;AAAA,IACb;AAAA,EACF;AACA,QAAM,SAAiC,EAAE,UAAU,SAAS,UAAU,gBAAgB,SAAS,gBAAgB,aAAa,SAAS,aAAa,GAAI,aAAa,SAAY,CAAC,IAAI,EAAE,SAAS,EAAG;AAClM,QAAM,SAAS,MAAM,qBAAqB,MAAM;AAChD,MAAI,cAAc,YAAY,SAAS,aAAa,UAAa,aAAa,MAAM,MAAM,aAAa,SAAS,QAAQ,EAAG,OAAM,IAAI,sBAAsB,qCAAqC;AAChM,MAAI,aAAa,UAAa,KAAK,MAAM,SAAS,OAAO,SAAS,MAAM,KAAK,MAAMA,QAAO,SAAS,EAAG,OAAM,IAAI,sBAAsB,0CAA0C;AAChL,SAAO,EAAE,GAAG,MAAM,GAAI,aAAa,SAAY,CAAC,IAAI,EAAE,MAAM,SAAS,GAAI,kBAAkB,OAAO;AACpG;AAEA,SAAS,WAAW,MAAkB,OAA4B;AAChE,SAAO,KAAK,WAAW,MAAM,UAAU,KAAK,MAAM,CAAC,MAAM,UAAU,SAAS,MAAM,KAAK,CAAC;AAC1F;AAEA,SAAS,WAAWA,SAA2B,cAAqD;AAClG,QAAM,WAAWA,QAAO;AACxB,MAAI,UAAU,aAAa,OAAW,QAAOA,QAAO;AACpD,QAAM,WAAW,yBAAyB,SAAS,QAAQ;AAC3D,MAAI,CAAC,aAAa,SAAS,SAAS,MAAM,EAAG,OAAM,IAAI,sBAAsB,iCAAiC;AAC9G,MAAI,KAAK,MAAM,SAAS,OAAO,SAAS,MAAM,KAAK,MAAMA,QAAO,SAAS,EAAG,OAAM,IAAI,sBAAsB,0CAA0C;AACtJ,QAAM,WAAO,6BAAc,EAAE,QAAQ,SAAS,QAAQ,KAAK,YAAY,QAAQ,EAAE,KAAK,QAAQ,EAAE,QAAQ,SAAS,QAAQ,WAAW,SAAS,WAAW,MAAM,SAAS,eAAe,EAAE,CAAC;AACzL,MAAIA,QAAO,SAAS,QAAW;AAC7B,iCAAUA,QAAO,MAAM,EAAE,gBAAgB,aAAa,CAAC;AACvD,8BAA0BA,QAAO,MAAM,QAAQ;AAAA,EACjD;AACA,SAAOA,QAAO,QAAQ;AACxB;AAGA,eAAsB,uBAAuBA,SAA2B,cAA8D;AACpI,MAAIA,QAAO,kBAAkB,aAAa,OAAW,OAAM,qBAAqBA,QAAO,gBAAgB;AACvG,SAAO,WAAWA,SAAQ,YAAY;AACxC;AAGA,eAAsB,kBAAkBA,SAA2B,UAAyD,CAAC,GAA+B;AAC1J,QAAM,WAAWA,QAAO;AACxB,MAAI,aAAa,QAAW;AAC1B,UAAM,EAAE,kBAAkB,WAAW,GAAG,gBAAgB,IAAIA;AAC5D,WAAO;AAAA,EACT;AACA,QAAM,WAAW,MAAM,qBAAqB,QAAQ;AACpD,QAAM,UAAU,QAAQ,iBAAiB,SAAS,aAAa,SAAY,CAAC,IAAI,CAAC,yBAAyB,SAAS,QAAQ,EAAE,MAAM;AACnI,QAAM,OAAO,WAAWA,SAAQ,OAAO;AACvC,SAAO,EAAE,GAAGA,SAAQ,GAAI,SAAS,SAAY,CAAC,IAAI,EAAE,KAAK,GAAI,kBAAkB,EAAE,GAAG,UAAU,SAAS,EAAE;AAC3G;;;ACjKA,SAAS,cAAc,SAAuB;AAC5C,MAAI,CAAC,UAAU,OAAO,EAAG,OAAM,IAAI,UAAU,qBAAqB;AACpE;AAEA,SAAS,cAAc,OAA4C;AACjE,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,KAAK,aAAa,SAAS,UAAU,MAAM,OAAO;AAC9H;AAEO,IAAM,sBAAN,MAA8D;AAAA,EACnE,YAA6B,SAA6C,MAAiB,oBAAoB;AAAlF;AAA6C;AAAA,EAAsC;AAAA,EAEhH,MAAM,IAAIC,SAA0C;AAClD,kBAAcA,QAAO,OAAO;AAC5B,UAAM,SAAS,MAAM,KAAK,QAAQ,WAAWA,QAAO,SAASA,OAAM;AACnE,QAAI,CAAC,OAAO,GAAI,OAAM,IAAI,mBAAmB,OAAO,SAAS,iBAAiB,iBAAiB,UAAU,6BAA6B,OAAO,IAAI,KAAKA,QAAO,SAAS,CAAC;AAAA,EACzK;AAAA,EAEA,MAAM,OAAO,SAAiB,QAA+H;AAC3J,kBAAc,OAAO;AACrB,WAAO,OAAO,SAAS,KAAK,KAAK,YAAY;AAC3C,YAAMC,QAAO,MAAM,KAAK,QAAQ,UAAU,OAAO;AACjD,UAAIA,MAAK,WAAW,YAAa,QAAO,EAAE,MAAM,OAAU;AAC1D,UAAIA,MAAK,WAAW,QAAQ,CAAC,cAAcA,MAAK,KAAK,EAAG,OAAM,IAAI,mBAAmB,UAAU,sBAAsB,SAAS,CAAC;AAC/H,YAAM,OAAO,MAAM,OAAOA,MAAK,KAAK;AACpC,UAAI,KAAK,YAAY,QAAS,OAAM,IAAI,UAAU,4CAA4C;AAC9F,aAAO,EAAE,OAAO,MAAM,KAAK,QAAQ,WAAW,SAAS,MAAM,EAAE,SAASA,MAAK,KAAK,CAAC,GAAG,WAAW,MAAM,KAAK;AAAA,IAC9G,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,SAAyD;AACjE,kBAAc,OAAO;AACrB,UAAMA,QAAO,MAAM,KAAK,QAAQ,UAAU,OAAO;AACjD,WAAOA,MAAK,WAAW,QAAQ,cAAcA,MAAK,KAAK,KAAKA,MAAK,MAAM,YAAY,UAAUA,MAAK,QAAQ;AAAA,EAC5G;AAAA,EAEA,MAAM,OAA8C;AAClD,UAAM,UAA+B,CAAC;AACtC,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,QAAQ,SAAS,IAAI,MAAM;AACnD,UAAI,KAAK,WAAW,KAAM,OAAM,IAAI,MAAM,4BAA4B;AACtE,iBAAW,OAAO,KAAK,MAAM;AAC3B,cAAM,aAAa,kBAAkB,GAAG;AACxC,YAAI,WAAW,SAAS,MAAO;AAC/B,cAAMD,UAAS,MAAM,KAAK,IAAI,WAAW,OAAO;AAChD,YAAIA,YAAW,OAAW,SAAQ,KAAKA,OAAM;AAAA,MAC/C;AACA,eAAS,KAAK;AAAA,IAChB,SAAS,WAAW;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,SAAgC;AAC3C,kBAAc,OAAO;AACrB,UAAM,SAAS,MAAM,KAAK,QAAQ,aAAa,OAAO;AACtD,QAAI,CAAC,OAAO,GAAI,OAAM,IAAI,mBAAmB,UAAU,8BAA8B,OAAO,IAAI,KAAK,SAAS,CAAC;AAAA,EACjH;AACF;AAWO,IAAM,wBAAN,MAAgE;AAAA,EAIrE,YAA6B,SAAuC;AAAvC;AAC3B,QAAI,QAAQ,aAAa,UAAa,QAAQ,SAAS,aAAa,QAAQ,SAAU,OAAM,IAAI,UAAU,4CAA4C;AACtJ,SAAK,UAAU,eAAe,QAAQ,QAAQ;AAC9C,SAAK,MAAM,QAAQ,OAAO;AAAA,EAC5B;AAAA,EAPS;AAAA,EACQ;AAAA;AAAA,EASjB,IAAI,cAAuB;AACzB,WAAO,KAAK,QAAQ,aAAa;AAAA,EACnC;AAAA,EAEQ,SAAS,SAAgG;AAC/G,UAAM,MAAM,eAAe,KAAK,SAAS,OAAO;AAChD,WAAO,EAAE,KAAK,SAAS,KAAK,QAAQ,QAAQ,SAAS,UAAU,GAAG,0BAA0B,GAAG,GAAG,GAAG;AAAA,EACvG;AAAA,EAEA,MAAc,KAAKA,SAA2B,UAA+G;AAE3J,QAAI;AACJ,QAAI;AAAE,eAAS,MAAM,mBAAmBA,OAAM;AAAA,IAAG,SAAS,OAAO;AAAE,YAAM,iBAAiB,wBAAwB,IAAI,iBAAiB,OAAO,IAAI;AAAA,IAAO;AACzJ,UAAM,SAAS,MAAM,gBAAgB;AAAA,MACnC,WAAW,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,MAAM,CAAC;AAAA,MAC1D,SAAS,SAAS;AAAA,MAClB,UAAU,SAAS;AAAA,MACnB,UAAU,KAAK,QAAQ;AAAA,MACvB,gBAAgB,KAAK,QAAQ,QAAQ;AAAA,MACrC,WAAW,KAAK,QAAQ,QAAQ;AAAA,MAChC,GAAI,KAAK,QAAQ,aAAa,SAAY,CAAC,IAAI,EAAE,UAAU,KAAK,QAAQ,SAAS;AAAA,IACnF,CAAC;AAED,QAAI,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,MAAM,CAAC,EAAE,aAAa,uBAAwB,OAAM,IAAI,iBAAiB,MAAM;AAC3H,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,KAAK,OAAmB,UAAmE,SAA6C;AACpJ,UAAM,WAAW,KAAK,QAAQ;AAC9B,QAAI,aAAa,OAAW,OAAM,IAAI,MAAM,iDAAiD;AAC7F,UAAM,SAAS,uBAAuB,OAAO,EAAE,UAAU,KAAK,QAAQ,UAAU,gBAAgB,KAAK,QAAQ,QAAQ,eAAe,CAAC;AACrI,UAAM,YAAY,MAAM,uBAAuB,QAAQ,UAAU,QAAQ;AACzE,QAAI;AACJ,QAAI;AAAE,cAAQ,KAAK,MAAM,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC;AAAA,IAAG,QAAQ;AAAE,YAAM,IAAI,iBAAiB,OAAO;AAAA,IAAG;AACtI,QAAI,CAAC,cAAc,KAAK,KAAK,MAAM,YAAY,QAAS,OAAM,IAAI,iBAAiB,OAAO;AAE1F,QAAI;AAAE,aAAO,MAAM,kBAAkB,KAA0B;AAAA,IAAG,QAAQ;AAAE,YAAM,IAAI,iBAAiB,OAAO;AAAA,IAAG;AAAA,EACnH;AAAA;AAAA,EAGA,MAAM,IAAIA,SAA0C;AAClD,kBAAcA,QAAO,OAAO;AAC5B,UAAM,WAAW,KAAK,SAASA,QAAO,OAAO;AAC7C,UAAM,OAAO,SAAS,KAAK,KAAK,KAAK,YAAY;AAC/C,YAAMC,QAAO,MAAM,KAAK,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AAC5D,UAAIA,MAAK,WAAW,cAAe,OAAM,IAAI,mBAAmB,UAAU,sBAAsB,SAAS,KAAK,CAAC;AAC/G,YAAM,YAAYA,MAAK,WAAW,OAAO,EAAE,SAASA,MAAK,KAAK,IAAI,EAAE,aAAa,IAAa;AAC9F,aAAO,EAAE,OAAO,MAAM,KAAK,QAAQ,QAAQ,SAAS,SAAS,KAAK,MAAM,KAAK,KAAKD,SAAQ,QAAQ,GAAG,SAAS,GAAG,WAAW,MAAM,OAAU;AAAA,IAC9I,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,OAAO,SAAiB,QAA+H;AAC3J,kBAAc,OAAO;AACrB,UAAM,WAAW,KAAK,SAAS,OAAO;AACtC,WAAO,OAAO,SAAS,KAAK,KAAK,KAAK,YAAY;AAChD,YAAMC,QAAO,MAAM,KAAK,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AAC5D,UAAIA,MAAK,WAAW,YAAa,QAAO,EAAE,MAAM,OAAU;AAC1D,UAAIA,MAAK,WAAW,KAAM,OAAM,IAAI,mBAAmB,UAAU,sBAAsB,SAAS,KAAK,CAAC;AACtG,YAAM,OAAO,MAAM,OAAO,MAAM,KAAK,KAAKA,MAAK,OAAO,UAAU,OAAO,CAAC;AACxE,UAAI,KAAK,YAAY,QAAS,OAAM,IAAI,UAAU,4CAA4C;AAC9F,aAAO,EAAE,OAAO,MAAM,KAAK,QAAQ,QAAQ,SAAS,SAAS,KAAK,MAAM,KAAK,KAAK,MAAM,QAAQ,GAAG,EAAE,SAASA,MAAK,KAAK,CAAC,GAAG,WAAW,MAAM,KAAK;AAAA,IACpJ,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,SAAyD;AACjE,kBAAc,OAAO;AACrB,UAAM,WAAW,KAAK,SAAS,OAAO;AACtC,UAAMA,QAAO,MAAM,KAAK,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AAC5D,QAAIA,MAAK,WAAW,YAAa,QAAO;AACxC,QAAIA,MAAK,WAAW,KAAM,OAAM,IAAI,MAAM,oBAAoB;AAC9D,WAAO,KAAK,KAAKA,MAAK,OAAO,UAAU,OAAO;AAAA,EAChD;AAAA;AAAA,EAGA,MAAM,OAA8C;AAClD,UAAM,SAAS,kBAAkB,KAAK,OAAO;AAC7C,UAAM,UAA+B,CAAC;AACtC,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,QAAQ,QAAQ,SAAS,QAAQ,MAAM;AAC/D,UAAI,KAAK,WAAW,KAAM,OAAM,IAAI,MAAM,4BAA4B;AACtE,iBAAW,OAAO,KAAK,MAAM;AAC3B,cAAM,aAAa,kBAAkB,GAAG;AACxC,YAAI,WAAW,SAAS,WAAW,WAAW,YAAY,KAAK,QAAS;AACxE,YAAI;AACF,gBAAMD,UAAS,MAAM,KAAK,IAAI,WAAW,OAAO;AAChD,cAAIA,YAAW,OAAW,SAAQ,KAAKA,OAAM;AAAA,QAC/C,SAAS,OAAO;AACd,cAAI,EAAE,iBAAiB,kBAAmB,OAAM;AAAA,QAClD;AAAA,MACF;AACA,eAAS,KAAK;AAAA,IAChB,SAAS,WAAW;AACpB,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,OAAO,UAAiC;AAC5C,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AACF;;;ACrMO,IAAM,gBAAgB;AAGtB,SAAS,yBAAyB,MAA4G;AACnJ,QAAM,QAAQ,iFAAiF,KAAK,IAAI;AACxG,MAAI,UAAU,KAAM,QAAO;AAC3B,SAAO,EAAE,YAAY,MAAM,CAAC,GAAI,SAAS,OAAO,MAAM,CAAC,CAAC,GAAG,MAAM,MAAM,CAAC,EAAG;AAC7E;;;ACCO,IAAM,uBAAuB;AAsF7B,SAAS,mBAAmB,OAAiI;AAClK,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU,MAAM;AAAA,IAChB,SAAS,MAAM;AAAA,IACf,WAAW,MAAM,IAAI,YAAY;AAAA,IACjC,WAAW,MAAM;AAAA,IACjB,UAAU,CAAC;AAAA,IACX,YAAY,CAAC;AAAA,IACb,WAAW,CAAC;AAAA,IACZ,QAAQ,CAAC;AAAA,IACT,MAAM,CAAC;AAAA,EACT;AACF;AAEA,SAASE,UAAS,OAAkD;AAClE,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAMA,SAAS,UAAU,OAAiC;AAClD,QAAM,QAAQ,OAAO,UAAU,WAAW,2DAA2D,KAAK,KAAK,IAAI;AACnH,QAAM,SAAS,UAAU,OAAO,MAAM,KAAK,MAAM,KAAe;AAChE,SAAO,OAAO,SAAS,MAAM,KAAK,IAAI,KAAK,MAAM,EAAE,YAAY,MAAM,GAAG,MAAO,CAAC,CAAC,KAAK,MAAO,CAAC,KAAK,IAAI,OAAO,GAAG,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC;AACnI;AAEA,SAAS,MAAM,OAAwC;AACrD,MAAI,CAACA,UAAS,KAAK,EAAG,QAAO;AAC7B,SAAO,OAAO,MAAM,MAAM,aAAa,MAAM,MAAM,UAAU,MAAM,MAAM,aACpE,OAAO,MAAM,OAAO,YAAY,OAAO,MAAM,OAAO,YACpD,MAAM,QAAQ,MAAM,CAAC,KAAK,MAAM,EAAE,MAAM,CAAC,SAAS,OAAO,SAAS,QAAQ,KAC1E,OAAO,MAAM,MAAM,YAAY,OAAO,MAAM,MAAM,aACjD,MAAM,MAAM,UAAcA,UAAS,MAAM,CAAC,KAAK,OAAO,MAAM,EAAE,OAAO,YAAY,OAAO,MAAM,EAAE,cAAc,cAC/G,OAAO,MAAM,OAAO,aAAa,MAAM,QAAQ,UAAa,OAAO,MAAM,QAAQ,cAChF,MAAM,OAAO,UAAc,MAAM,QAAQ,MAAM,EAAE,KAAK,MAAM,GAAG,MAAM,CAAC,SAAS,OAAO,SAAS,QAAQ,MACxG,OAAO,MAAM,QAAQ;AAC5B;AAEA,SAAS,aAAa,OAA+C;AACnE,SAAOA,UAAS,KAAK,MAAM,MAAM,QAAQ,QAAQ,OAAO,MAAM,QAAQ,aAAa,OAAO,cAAc,MAAM,IAAI,KAC7GA,UAAS,MAAM,QAAQ,KAAK,OAAO,OAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,UAAU,OAAO,cAAc,KAAK,CAAC,KACtG,MAAM,QAAQ,MAAM,YAAY,KAAK,MAAM,aAAa,MAAM,CAAC,SAAS,OAAO,SAAS,QAAQ,MAC/F,MAAM,cAAc,UAAc,MAAM,QAAQ,MAAM,SAAS,KAAK,MAAM,UAAU,MAAM,CAAC,SAAS,OAAO,SAAS,QAAQ,OAC5H,MAAM,WAAW,SAAUA,UAAS,MAAM,MAAM,KAAK,OAAO,MAAM,OAAO,WAAW,YAAY,OAAO,MAAM,OAAO,OAAO,aAC5H,OAAO,MAAM,cAAc;AAClC;AASO,SAAS,mBAAmB,OAAqC;AACtE,MAAI,CAACA,UAAS,KAAK,KAAK,CAAC,OAAO,cAAc,MAAM,CAAC,EAAG,QAAO,EAAE,QAAQ,UAAU;AACnF,MAAK,MAAM,IAAe,qBAAsB,QAAO,EAAE,QAAQ,SAAS,GAAG,MAAM,EAAY;AAC/F,MAAI,MAAM,MAAM,wBAAwB,OAAO,MAAM,aAAa,YAAY,OAAO,MAAM,YAAY,YAAY,OAAO,MAAM,cAAc,YAAY,OAAO,MAAM,cAAc,SAAU,QAAO,EAAE,QAAQ,UAAU;AAC1N,MAAI,CAAC,MAAM,QAAQ,MAAM,QAAQ,KAAK,CAAC,MAAM,SAAS,MAAM,CAAC,SAASA,UAAS,IAAI,KAAK,OAAO,KAAK,SAAS,YAAY,MAAM,QAAQ,KAAK,GAAG,KAAK,KAAK,IAAI,MAAM,CAAC,OAAO,OAAO,OAAO,QAAQ,CAAC,EAAG,QAAO,EAAE,QAAQ,UAAU;AAChO,MAAI,CAAC,MAAM,QAAQ,MAAM,UAAU,KAAK,CAAC,MAAM,WAAW,MAAM,CAAC,SAASA,UAAS,IAAI,KAAK,OAAO,KAAK,QAAQ,YAAY,OAAO,KAAK,OAAO,QAAQ,EAAG,QAAO,EAAE,QAAQ,UAAU;AACrL,MAAI,CAACA,UAAS,MAAM,SAAS,KAAM,MAAM,UAAU,WAAW,UAAa,OAAO,MAAM,UAAU,WAAW,SAAW,QAAO,EAAE,QAAQ,UAAU;AACnJ,MAAI,CAACA,UAAS,MAAM,MAAM,KAAK,CAAC,OAAO,OAAO,MAAM,MAAM,EAAE,MAAM,YAAY,EAAG,QAAO,EAAE,QAAQ,UAAU;AAC5G,MAAI,CAACA,UAAS,MAAM,IAAI,KAAK,CAAC,OAAO,OAAO,MAAM,IAAI,EAAE,MAAM,KAAK,EAAG,QAAO,EAAE,QAAQ,UAAU;AACjG,SAAO,EAAE,QAAQ,MAAM,KAAK,MAAuC;AACrE;AAEO,SAAS,qBAAqB,OAAuD;AAC1F,MAAI,CAACA,UAAS,KAAK,KAAK,MAAM,MAAM,wBAAwB,CAACA,UAAS,MAAM,IAAI,KAAK,CAAC,OAAO,OAAO,MAAM,IAAI,EAAE,MAAM,KAAK,EAAG,QAAO;AACrI,SAAO;AACT;AAKA,IAAM,cAAc;AACb,IAAM,eAAe;AAGrB,SAAS,YAAY,OAAgB,UAA0B;AACpE,QAAM,UAAU,OAAO,UAAU,WAAW,CAAC,GAAG,MAAM,QAAQ,aAAa,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,KAAK,EAAE,IAAI;AACzH,SAAO,QAAQ,SAAS,IAAI,UAAU;AACxC;AAEA,SAAS,eAAe,SAAkF;AACxG,MAAI,QAAQ,SAAS,cAAc;AACjC,UAAM,KAAK,QAAQ,MAAM,YAAY,GAAG;AACxC,UAAM,SAAS,KAAK,IAAI,KAAK,QAAQ,MAAM,MAAM,KAAK,CAAC;AACvD,WAAO,EAAE,IAAI,cAAc,IAAI,GAAG,YAAY,QAAQ,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,UAAK,YAAY,QAAQ,GAAG,CAAC,GAAG;AAAA,EAC/G;AACA,MAAI,QAAQ,SAAS,cAAe,QAAO,EAAE,IAAI,eAAe,IAAI,IAAI,YAAY,QAAQ,OAAO,GAAG,CAAC,GAAG;AAC1G,MAAI,QAAQ,SAAS,gBAAgB;AACnC,UAAM,MAAM,YAAY,QAAQ,OAAO,KAAK;AAC5C,WAAO,EAAE,IAAI,gBAAgB,IAAI,IAAI,SAAS,KAAK,GAAG,IAAI,MAAM,GAAG,EAAE,CAAC,SAAI,IAAI,MAAM,EAAE,CAAC,KAAK,IAAI;AAAA,EAClG;AACA,SAAO,EAAE,IAAI,UAAU,IAAI,uBAAuB;AACpD;AAGO,SAAS,WAAWC,SAAgI;AACzJ,SAAO,CAACA,QAAO,iBAAiBA,QAAO,WAAWA,QAAO,oBAAoBA,QAAO,wBAAwB,EACzG,OAAO,CAAC,OAAO,OAAO,QAAyB,OAAO,UAAU,YAAY,MAAM,SAAS,KAAK,IAAI,QAAQ,KAAK,MAAM,KAAK;AACjI;AAEO,SAAS,WAAWA,SAAgD;AACzE,MAAIA,QAAO,eAAe,UAAaA,QAAO,eAAe,YAAYA,QAAO,cAAc,UAAaA,QAAO,6BAA6B,OAAW,QAAO;AACjK,SAAOA,QAAO,6BAA6B,SAAY,SAAS;AAClE;AAMO,SAAS,QAAQA,SAA2B,OAA4L;AAC7O,QAAMC,YAAW,MAAM,IAAI,MAAM,MAAM,IAAI,YAAY,GAAG,IAAI,CAAC;AAC/D,QAAM,YAAY,uBAAuB,KAAK,OAAOD,QAAO,aAAa,WAAWA,QAAO,WAAW,EAAE,IAAI,CAAC,GAAG,YAAY;AAC5H,QAAM,SAAS,MAAM,UAAU,WAAWA,OAAM;AAChD,SAAO;AAAA,IACL,GAAG,YAAYA,QAAO,UAAU,gBAAgB;AAAA,IAChD,GAAGA,QAAO,SAAS,SAAS,WAAW,WAAW;AAAA,IAClD,GAAI,cAAc,SAAY,CAAC,IAAI,EAAE,IAAI,UAAU;AAAA,IACnD,GAAG,eAAeA,QAAO,gBAAgB;AAAA,IACzC,GAAG,CAAC,GAAGA,QAAO,OAAO;AAAA,IACrB,GAAGA,QAAO;AAAA,IACV,GAAGA,QAAO;AAAA,IACV,GAAIA,QAAO,cAAc,SAAY,CAAC,IAAI,EAAE,GAAG,EAAE,IAAIA,QAAO,WAAW,WAAW,MAAM,EAAE;AAAA,IAC1F,IAAI,WAAWA,OAAM;AAAA,IACrB,GAAIA,QAAO,6BAA6B,UAAa,OAAO,SAASA,QAAO,wBAAwB,IAAI,EAAE,KAAKA,QAAO,yBAAyB,IAAI,CAAC;AAAA,IACpJ,GAAI,OAAO,WAAW,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,EAAE;AAAA,IACjD,KAAK,MAAM;AAAA,IACX,GAAI,MAAM,UAAU,SAAY,CAAC,IAAI,EAAE,IAAI,MAAM,MAAM,OAAO,GAAI,MAAM,MAAM,UAAU,EAAE,IAAI,KAAc,IAAI,CAAC,EAAG;AAAA,IACpH,GAAIA,QAAO,eAAe,aAAa,EAAE,IAAI,WAAoB,IAAI,CAAC;AAAA,IACtE,GAAIA,QAAO,YAAYC,YAAW,CAAC,IAAI,EAAE,IAAI,KAAc;AAAA,EAC7D;AACF;AAKO,IAAM,gBAAmC,CAAC,oBAAoB,qBAAqB,yBAAyB,kBAAkB;AAE9H,IAAM,0BAA6C,CAAC,+BAA+B,SAAS;AAEnG,IAAM,cAAc,CAAC,WAAW,UAAU,YAAY,WAAW,oBAAoB,gBAAgB,WAAW;AAChH,IAAM,cAAc,CAAC,mBAAmB,aAAa,sBAAsB,4BAA4B,eAAe,YAAY,eAAe,cAAc,aAAa,eAAe,YAAY,QAAQ,YAAY,oBAAoB,uBAAuB,UAAU,YAAY;AAC5R,IAAM,sBAAsB,CAAC,WAAW,QAAQ,eAAe,iBAAiB;AAChF,IAAM,sBAAsB,CAAC,yBAAyB,cAAc;AAEpE,IAAM,qBAA+H;AAAA,EACnI,GAAG,EAAE,UAAU,aAAa,UAAU,YAAY;AACpD;AAGO,SAAS,oBAAoB,MAA+B;AACjE,MAAI,OAAO,SAAS,YAAY,KAAK,WAAW,KAAK,KAAK,SAAS,QAAQ,qBAAqB,KAAK,IAAI,EAAG,QAAO;AACnH,MAAI,CAAC,wBAAwB,KAAK,CAAC,WAAW,KAAK,WAAW,MAAM,KAAK,KAAK,SAAS,OAAO,MAAM,KAAK,yBAAyB,IAAI,MAAM,OAAW,QAAO;AAC9J,SAAO,KAAK,MAAM,GAAG,EAAE,MAAM,CAAC,SAAS,OAAO,SAAS,YAAY,MAAM,UAAU,IAAI,SAAS,MAAM,YAAY,OAAO,YAAY,IAAI;AAC3I;AAsBO,SAAS,eAAe,SAAiB,UAA2B;AACzE,QAAM,QAAQ,wEAAwE,KAAK,OAAO;AAClG,QAAM,QAAQ,kDAAkD,KAAK,QAAQ;AAC7E,SAAO,UAAU,QAAQ,UAAU,QAAQ,MAAM,CAAC,MAAM,MAAM,CAAC,KAAK,MAAM,CAAC,EAAG,YAAY,MAAM,MAAM,CAAC,EAAG,YAAY;AACxH;AAGO,IAAM,wBAAwB,KAAK,KAAK,KAAK;AAE7C,IAAM,iBAAiB,IAAI,KAAK;AAQhC,SAAS,iBAAiB,cAAsB,QAAkE,KAAoB;AAC3I,QAAM,KAAK,KAAK,MAAM,YAAY;AAClC,SAAO,OAAO,SAAS,EAAE,KAAK,MAAM,IAAI,QAAQ,IAAI,mBAAmB,OAAO,aAAa,UAAa,MAAM,OAAO,cAAc,OAAO,WAAW,UAAa,MAAM,OAAO;AACjL;AAGO,IAAM,yBAAN,cAAqC,MAAM;AAAA,EAChD,YAAqB,QAAiC;AACpD,UAAM,wBAAwB,MAAM,EAAE;AADnB;AAEnB,SAAK,OAAO;AAAA,EACd;AACF;AAGA,SAAS,oBAAoB,MAAuB;AAClD,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,IAAI;AACxB,UAAM,WAAW,IAAI,gBAAgB,IAAI,KAAK,MAAM,CAAC,CAAC;AACtD,WAAO,IAAI,aAAa,aAAa,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG;AAAA,EAC5E,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,SAAS,uBAAuB,OAAgB,SAAsD;AAC3G,QAAMC,QAAO,MAAa;AAAE,UAAM,IAAI,uBAAuB,QAAQ;AAAA,EAAG;AACxE,QAAM,SAAS,mBAAmB,QAAQ,OAAO;AACjD,MAAI,WAAW,UAAa,CAACH,UAAS,KAAK,EAAG,QAAOG,MAAK;AAC1D,QAAM,OAAO,OAAO,KAAK,KAAK;AAC9B,MAAI,CAAC,OAAO,SAAS,MAAM,CAAC,QAAQ,KAAK,SAAS,GAAG,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,QAAQ,OAAO,SAAS,SAAS,GAAG,KAAK,OAAO,SAAS,SAAS,GAAG,CAAC,EAAG,QAAOA,MAAK;AAC7J,QAAMF,UAAS;AACf,MAAI,QAAQ,WAAW,WAAWA,QAAO,eAAe,WAAY,OAAM,IAAI,uBAAuB,YAAY;AACjH,MAAI,QAAQ,WAAW,UAAUA,QAAO,eAAe,SAAYA,QAAO,eAAe,WAAY,QAAOE,MAAK;AACjH,MAAIF,QAAO,YAAY,QAAQ,QAAS,QAAOE,MAAK;AACpD,QAAM,SAASF,QAAO;AAEtB,QAAM,aAAa,OAAO,KAAK,UAAU,CAAC,CAAC;AAC3C,MAAI,CAACD,UAAS,MAAM,KAAK,CAAC,WAAW,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAgB,WAAW,MAAM,EAAE,SAAS,GAAG,CAAC,KAAK,OAAO,OAAO,WAAW,YAAY,OAAO,OAAO,iBAAiB,YAAY,OAAO,OAAO,YAAY,YACxN,OAAO,SAAS,WAAc,OAAO,OAAO,SAAS,YAAY,CAAC,CAAC,UAAU,gBAAgB,SAAS,aAAa,EAAE,SAAS,OAAO,IAAI,GAAK,QAAOG,MAAK;AAEhK,MAAI,CAAC,eAAe,OAAO,SAAmB,QAAQ,eAAe,EAAG,QAAOA,MAAK;AACpF,QAAM,WAAWF,QAAO;AACxB,MAAI,CAACD,UAAS,QAAQ,KAAK,OAAO,KAAK,QAAQ,EAAE,WAAW,KAAM,SAAS,SAAS,WAAW,SAAS,SAAS,YAAa,CAAC,oBAAoB,SAAS,IAAI,EAAG,QAAOG,MAAK;AAC/K,MAAI,CAAC,MAAM,QAAQF,QAAO,OAAO,KAAKA,QAAO,QAAQ,WAAW,KAAK,IAAI,IAAIA,QAAO,OAAO,EAAE,SAASA,QAAO,QAAQ,UAAU,CAACA,QAAO,QAAQ,MAAM,CAAC,WAAW,OAAO,WAAW,YAAY,cAAc,SAAS,MAAM,CAAC,EAAG,QAAOE,MAAK;AAC5O,QAAM,WAAW,yBAAyB,SAAS,IAAI,MAAM;AAC7D,MAAI,aAAa,SAAS,SAAS,WAAWF,QAAO,QAAQ,KAAK,YAAU,WAAW,sBAAsB,WAAW,uBAAuB,GAAI,QAAOE,MAAK;AAC/J,QAAM,UAAUF,QAAO;AACvB,MAAI,CAACD,UAAS,OAAO,KAAK,EAAE,QAAQ,SAAS,WAAW,OAAO,KAAK,OAAO,EAAE,WAAW,IAAI,CAAC,cAAc,eAAe,cAAc,EAAE,SAAS,QAAQ,IAAc,KAAK,OAAO,KAAK,OAAO,EAAE,WAAW,KAAK,OAAO,QAAQ,UAAU,UAAW,QAAOG,MAAK;AACnQ,MAAI,CAAC,UAAUF,QAAO,YAAY,KAAK,CAAC,UAAUA,QAAO,SAAS,KAAK,KAAK,MAAMA,QAAO,YAAY,KAAK,KAAK,MAAMA,QAAO,SAAS,EAAG,QAAOE,MAAK;AACpJ,aAAW,OAAO,CAAC,mBAAmB,aAAa,sBAAsB,4BAA4B,eAAe,UAAU,GAAG;AAC/H,QAAIF,QAAO,GAAG,MAAM,WAAc,OAAOA,QAAO,GAAG,MAAM,YAAY,CAAC,oBAAoB,KAAKA,QAAO,GAAG,CAAW,GAAI,QAAOE,MAAK;AAAA,EACtI;AACA,aAAW,OAAO,CAAC,eAAe,eAAe,UAAU,GAAG;AAC5D,QAAIF,QAAO,GAAG,MAAM,WAAc,OAAOA,QAAO,GAAG,MAAM,YAAY,CAAEA,QAAO,GAAG,EAAa,WAAW,MAAM,GAAI,QAAOE,MAAK;AAAA,EACjI;AAIA,MAAIF,QAAO,aAAa,UAAa,yBAAyBA,QAAO,QAAkB,MAAM,yBAAyB,QAAQ,eAAe,KAAKA,QAAO,aAAa,QAAQ,YACzK,EAAE,QAAQ,WAAW,cAAeA,QAAO,SAAoB,WAAW,UAAU,GAAI,QAAOE,MAAK;AACzG,MAAIF,QAAO,eAAe,UAAa,CAAC,CAAC,UAAU,gBAAgB,SAAS,aAAa,EAAE,SAASA,QAAO,UAAoB,EAAG,QAAOE,MAAK;AAC9I,MAAIF,QAAO,cAAc,UAAa,CAAC,UAAUA,QAAO,SAAS,EAAG,QAAOE,MAAK;AAChF,MAAIF,QAAO,SAAS,UAAa,OAAOA,QAAO,SAAS,SAAU,QAAOE,MAAK;AAC9E,MAAIF,QAAO,aAAa,WAAc,OAAOA,QAAO,aAAa,YAAYA,QAAO,SAAS,SAAS,KAAM,QAAOE,MAAK;AAKxH,MAAIF,QAAO,qBAAqB,QAAW;AACzC,UAAM,WAAWA,QAAO;AACxB,QAAI,CAACD,UAAS,QAAQ,KAAK,CAAC,8BAA8B,MAAM,CAAC,QAAQ,OAAO,SAAS,GAAG,MAAM,QAAQ,KACrG,OAAO,KAAK,QAAQ,EAAE,KAAK,SAAO,CAAC,8BAA8B,SAAS,GAAG,KAAK,QAAQ,UAAU,EAAG,QAAOG,MAAK;AACxH,QAAI,OAAO,OAAO,UAAU,UAAU,GAAG;AACvC,UAAI;AAAE,iCAAyB,SAAS,QAAQ;AAAA,MAAG,QAAQ;AAAE,eAAOA,MAAK;AAAA,MAAG;AAAA,IAC9E;AACA,QAAI,OAAOF,QAAO,SAAS,YAAY,oBAAoBA,QAAO,IAAI,EAAG,QAAOE,MAAK;AAAA,EACvF;AACA,MAAIF,QAAO,wBAAwB,WAAc,CAAC,MAAM,QAAQA,QAAO,mBAAmB,KAAK,CAACA,QAAO,oBAAoB,MAAM,CAAC,SAAS,OAAO,SAAS,QAAQ,GAAI,QAAOE,MAAK;AACnL,MAAIF,QAAO,WAAW,QAAW;AAC/B,UAAM,SAASA,QAAO;AACtB,QAAI,CAACD,UAAS,MAAM,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE,MAAM,CAAC,QAAQ,oBAAoB,SAAS,GAAG,IAAI,OAAO,OAAO,GAAG,MAAM,WAAW,oBAAoB,SAAS,GAAG,KAAKA,UAAS,OAAO,GAAG,CAAC,CAAC,EAAG,QAAOG,MAAK;AAAA,EAC9M;AACA,MAAI,UAAU;AACZ,UAAM,SAASF,QAAO;AACtB,QAAID,UAAS,MAAM,KAAK,OAAO,gBAAgB,OAAW,QAAOG,MAAK;AACtE,QAAIF,QAAO,qBAAqB,QAAW;AACzC,UAAIA,QAAO,eAAe,UAAaA,QAAO,eAAe,YAAaD,UAAS,MAAM,KAAK,OAAO,SAAS,OAAY,QAAOG,MAAK;AAAA,IACxI,WAAWF,QAAO,eAAe,UAAaA,QAAO,eAAe,SAAU,QAAOE,MAAK;AAAA,EAC5F;AACA,SAAOF;AACT;;;ACvXA,IAAM,OAAyC,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,EAAE;AAE5F,SAAS,SAAS,KAAiD;AACjE,SAAO,IAAI,QAAQ,SAAS,IAAI,OAAO;AACzC;AAEO,SAAS,UAAU,KAAuD;AAC/E,MAAI,SAAS,GAAG,EAAG,QAAO,KAAK;AAC/B,SAAO,KAAK,IAAI,MAAM,UAAU,KAAK;AACvC;AAWO,SAAS,YAAY,MAA+C,KAAa,KAAmC;AACzH,QAAM,SAAS,IAAI,MAAM,CAAC;AAC1B,MAAI,OAAO,WAAW,EAAG,QAAO,EAAE,OAAO,MAAM,WAAW,CAAC,EAAE;AAC7D,QAAM,OAAO,UAAU,GAAG;AAC1B,QAAM,YAAsB,CAAC;AAC7B,aAAW,CAAC,UAAU,KAAK,KAAK,OAAO,QAAQ,IAAI,GAAG;AACpD,QAAI,aAAa,OAAO,MAAM,OAAO,UAAa,CAAC,MAAM,GAAG,KAAK,CAACG,SAAQ,OAAO,SAASA,IAAG,CAAC,EAAG;AACjG,QAAI,SAAS,GAAG,KAAK,SAAS,KAAK,EAAG;AACtC,QAAI,QAAQ,UAAU,KAAK,KAAM,IAAI,OAAO,cAAc,MAAM,GAAG,cAAc,KAAO,QAAO,EAAE,OAAO,OAAO,QAAQ,SAAS;AAChI,cAAU,KAAK,QAAQ;AAAA,EACzB;AACA,SAAO,EAAE,OAAO,MAAM,UAAU;AAClC;;;AC5CA,IAAAC,iBAAuB;;;ACAvB,IAAAC,kBAAwB;AACxB,IAAAC,iBAAuB;AAoBvB,IAAM,sBAAsB,EAAE,QAAQ,MAAM;AAC5C,IAAM,6BAA6B;AACnC,IAAM,6BAA6B;AACnC,IAAM,2BAA2B;AACjC,IAAM,8BAA8B;AACpC,IAAM,8BAA8B;AACpC,IAAM,8BAA8B;AAEpC,SAAS,IAAI,OAA2B;AACtC,SAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAC7E;AAEA,SAAS,YAAY,OAA2B;AAC9C,QAAM,WAAW;AACjB,MAAI,SAAS;AACb,MAAI,SAAS;AACb,MAAI,OAAO;AACX,aAAW,QAAQ,OAAO;AACxB,aAAU,UAAU,IAAK;AACzB,YAAQ;AACR,WAAO,QAAQ,GAAG;AAChB,gBAAU,SAAU,WAAY,OAAO,IAAM,EAAE;AAC/C,cAAQ;AAAA,IACV;AAAA,EACF;AACA,MAAI,OAAO,EAAG,WAAU,SAAU,UAAW,IAAI,OAAS,EAAE;AAC5D,SAAO;AACT;AAEA,eAAsB,mBAAmB,UAA2B,mBAA2B,KAA+B;AAC5H,QAAM,SAAS,sBAAsB,MAAM,QAAQ;AACnD,MAAI,OAAO,UAAU,cAAc,qBAAqB,OAAO,UAAU,cAAc,OAAO,OAAO,YAAY,CAAC,8BAA8B,MAAM,EAAG,QAAO;AAChK,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,iBAAiB,EAAE,GAAG,OAAO;AACnC,SAAO,eAAe;AACtB,SAAO,eAAe;AACtB,QAAM,wBAAwB,OAAO,WAAW,mCAC5C,6BACA;AACJ,QAAM,mBAAe,uBAAO,IAAI,YAAY,EAAE,OAAO,GAAG,qBAAqB,GAAG,aAAa,cAAc,CAAC,EAAE,CAAC;AAC/G,QAAM,kBAAkB,OAAO;AAC/B,MAAI,gBAAgB,UAAU,aAAa,gBAAgB,cAAc,OAAO,SAAU,QAAO;AACjG,MAAI;AACJ,MAAI;AACJ,MAAI;AACF,sBAAkB,2BAA2B,OAAO,QAAQ;AAC5D,2BAAuB,cAAc,gBAAgB,KAAK;AAAA,EAC5D,QAAQ;AACN,WAAO;AAAA,EACT;AACA,MAAI,qBAAqB,WAAW,MAAM,CAAC,wBAAQ,OAAO,sBAAsB,cAAc,iBAAiB,mBAAmB,EAAG,QAAO;AAC5I,QAAM,iBAAiB;AACvB,MAAI,OAAO,aAAa,OAAO,YAAY,cAAc,CAAC,GAAI,QAAO;AACrE,QAAM,cAAc,IAAI,YAAY,EAAE,OAAO,aAAa,MAAM,CAAC;AACjE,MAAK,MAAM,WAAW,WAAW,MAAO,OAAO,UAAW,QAAO;AACjE,QAAM,mBAAe,uBAAO,IAAI,YAAY,EAAE,OAAO,GAAG,wBAAwB,GAAG,aAAa,OAAO,aAAa,CAAC,EAAE,CAAC;AACxH,MAAI,IAAI,YAAY,MAAM,OAAO,uBAAwB,QAAO;AAChE,QAAM,qBAAqB,CAAC,GAAG,OAAO,iBAAiB,EAAE,KAAK,CAAC,MAAM,UAAU,aAAa,IAAI,EAAE,cAAc,aAAa,KAAK,CAAC,CAAC;AACpI,QAAM,2BAA2B,QAAI,uBAAO,IAAI,YAAY,EAAE,OAAO,GAAG,2BAA2B,GAAG,aAAa,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAC1I,QAAM,mBAAmB,mBAAmB,IAAI,CAAC,eAAe,WAAW,SAAS,eAChF,EAAE,SAAS,wBAAwB,OAAO,WAAW,UAAU,MAAM,WAAW,UAAU,SAAS,CAAC,WAAW,MAAM,EAAE,IACvH,EAAE,SAAS,gBAAgB,OAAO,WAAW,SAAS,MAAM,GAAG,WAAW,SAAS,QAAQ,MAAM,CAAC,GAAG,MAAM,WAAW,SAAS,MAAM,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,GAAG,WAAW,OAAO,GAAG,QAAQ,EAAE,MAAM,mCAAmC,MAAM,WAAW,UAAU,OAAO,WAAW,SAAS,EAAE,CAAC,EAChS,KAAK,CAAC,MAAM,UAAU,aAAa,IAAI,EAAE,cAAc,aAAa,KAAK,CAAC,CAAC;AAC9E,QAAM,0BAA0B,QAAI,uBAAO,IAAI,YAAY,EAAE,OAAO,GAAG,2BAA2B,GAAG,aAAa,gBAAgB,CAAC,EAAE,CAAC,CAAC;AACvI,QAAM,sBAAsB,OAAO,YAAY,mBAAmB,IAAI,CAAC,eAAe,WAAW,SAAS,eACtG,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IACnD,CAAC,WAAW,UAAU,OAAO,YAAY,WAAW,QAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,WAAW,UAAU,MAAM,mCAAmC,OAAO,WAAW,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClM,QAAM,KAAK,OAAO,kBAAkB,KAAK,CAAC,eAAe,WAAW,SAAS,IAAI;AACjF,QAAM,oBAAoB,OAAO,QAAQ,QAAQ,CAAC,WAAW,WAAW,SAAS,CAAC,oBAAoB,uBAAuB,IAAI,WAAW,SAAS,CAAC,mBAAmB,IAAI,CAAC,kBAAkB,CAAC;AACjM,QAAM,SAAS,OAAO,cAAc,WAAW,QAAQ,MAAM;AAC7D,QAAM,gBAAgB,SAAS,IAAI,KAAK,OAAO,cAAc,WAAW,MAAM,GAAG,MAAM;AACvF,QAAM,eAAe,SAAS,IAAI,KAAK,OAAO,cAAc,WAAW,MAAM,SAAS,CAAC;AACvF,MAAI,OAAO,YAAY,OAAO,cAAc,WAAW,kBAAkB,OAAO,OAAO,WAAW,iBAAiB,OAAO,SAAS,KAAK,QAAQ,OAAO,EAAE,KAAK,OAAO,SAAS,SAAS,OAAO,cAAc,YAAY,IAAI,SAAS,QAAQ,kBAAkB,KAAK,CAAC,WAAW,CAAC,GAAG,QAAQ,SAAS,MAAe,CAAC,KAAK,OAAO,sBAAsB,OAAO,cAAc,qBAAqB,OAAO,cAAc,cAAc,KAAM,OAAO,cAAc,UAAa,KAAK,MAAM,OAAO,MAAM,IAAI,KAAK,MAAM,OAAO,SAAS,EAAI,QAAO;AAC9gB,QAAM,UAAU,OAAO;AACvB,QAAM,EAAE,WAAW,kBAAkB,GAAG,gBAAgB,IAAI;AAC5D,QAAM,2BAA2B,QAAI,uBAAO,IAAI,YAAY,EAAE,OAAO,aAAa,EAAE,aAAa,QAAQ,aAAa,cAAc,QAAQ,aAAa,CAAC,CAAC,CAAC,CAAC;AAC7J,MAAI,QAAQ,iBAAiB,OAAO,OAAO,gBAAgB,QAAQ,gCAAgC,4BAA4B,iBAAiB,cAAc,QAAQ,gBAAgB,iBAAiB,UAAU,aAAa,KAAK,MAAM,QAAQ,QAAQ,IAAI,OAAO,KAAK,MAAM,QAAQ,SAAS,KAAK,OAAO,KAAK,MAAM,QAAQ,SAAS,IAAI,KAAK,MAAM,OAAO,MAAM,EAAG,QAAO;AAC9W,MAAI;AACF,UAAM,aAAS,uBAAO,IAAI,YAAY,EAAE,OAAO,GAAG,2BAA2B,GAAG,aAAa,eAAe,CAAC,EAAE,CAAC;AAChH,QAAI,CAAC,wBAAQ,OAAO,cAAc,iBAAiB,KAAK,GAAG,QAAQ,2BAA2B,QAAQ,YAAY,GAAG,mBAAmB,EAAG,QAAO;AAAA,EACpJ,QAAQ;AACN,WAAO;AAAA,EACT;AACA,MAAI,OAAO,WAAW,SAAS,sBAAsB,OAAO,gBAAgB,SAAS,wBAAwB,OAAO,WAAW,QAAQ,OAAO,gBAAgB,IAAK,QAAO;AAC1K,MAAI;AACF,UAAM,aAAa,+BAA+B,OAAO,WAAW,eAAe,OAAO,WAAW,GAAG;AACxG,UAAM,kBAAkB,+BAA+B,OAAO,gBAAgB,eAAe,OAAO,gBAAgB,GAAG;AACvH,UAAM,aAAa,WAAW,QAAQ,IAAI,CAAC;AAC3C,UAAM,kBAAkB,gBAAgB,QAAQ,IAAI,CAAC;AACrD,UAAM,SAAS,CAAC,YAAY,YAAY,mBAAmB,aAAa,0BAA0B,4BAA4B,2BAA2B,cAAc;AACvK,UAAM,aAAa,CAAC,GAAG,QAAQ,QAAQ,MAAM;AAC7C,UAAM,kBAAkB,CAAC,GAAG,YAAY,aAAa;AACrD,QAAI,OAAO,KAAK,UAAU,EAAE,WAAW,WAAW,UAAU,WAAW,KAAK,CAAC,QAAQ,EAAE,OAAO,WAAW,KAAK,OAAO,KAAK,eAAe,EAAE,WAAW,gBAAgB,UAAU,gBAAgB,KAAK,CAAC,QAAQ,EAAE,OAAO,gBAAgB,KAAK,WAAW,QAAQ,IAAI,WAAW,KAAK,gBAAgB,QAAQ,IAAI,WAAW,KAAK,WAAW,QAAQ,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC,MAAM,OAAO,YAAY,gBAAgB,QAAQ,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC,MAAM,OAAO,YAAY,WAAW,QAAQ,QAAQ,gBAAgB,QAAQ,OAAO,WAAW,QAAQ,QAAQ,gBAAgB,QAAQ,OAAO,aAAa,WAAW,QAAQ,GAAG,MAAM,aAAa,mBAAmB,KAAK,aAAa,gBAAgB,QAAQ,GAAG,MAAM,aAAa,mBAAmB,KAAK,WAAW,SAAS,sBAAsB,WAAW,SAAS,mBAAmB,iBAAiB,cAAc,gBAAgB,SAAS,wBAAwB,gBAAgB,SAAS,sBAAsB,WAAW,QAAQ,QAAQ,wBAAwB,IAAI,cAAc,CAAC,MAAM,gBAAgB,QAAQ,QAAQ,QAAQ,eAAe,gBAAgB,gBAAgB,QAAQ,eAAe,OAAO,KAAK,CAAC,QAAQ,WAAW,GAAG,MAAM,gBAAgB,GAAG,CAAC,KAAK,WAAW,aAAa,OAAO,YAAY,WAAW,aAAa,OAAO,YAAY,WAAW,oBAAoB,IAAI,cAAc,KAAK,WAAW,cAAc,OAAO,aAAa,WAAW,2BAA2B,OAAO,0BAA0B,WAAW,6BAA6B,4BAA4B,WAAW,4BAA4B,2BAA2B,WAAW,iBAAiB,QAAQ,gBAAgB,WAAW,QAAQ,MAAM,MAAO,KAAK,MAAM,OAAO,MAAM,EAAG,QAAO;AAAA,EACjqD,QAAQ;AACN,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ACtHO,IAAMC,SAAQ,IAAI,WAAW,CAAC;AAW/B,SAAUC,QAAQ,IAAgB,IAAc;AACpD,MAAI,OAAO,IAAI;AAAE,WAAO;EAAK;AAC7B,MAAI,GAAG,eAAe,GAAG,YAAY;AACnC,WAAO;EACT;AAEA,WAAS,KAAK,GAAG,KAAK,GAAG,YAAY,MAAM;AACzC,QAAI,GAAG,EAAE,MAAM,GAAG,EAAE,GAAG;AACrB,aAAO;IACT;EACF;AAEA,SAAO;AACT;AAEM,SAAUC,QAAQ,GAA6C;AACnE,MAAI,aAAa,cAAc,EAAE,YAAY,SAAS,cAAc;AAAE,WAAO;EAAE;AAC/E,MAAI,aAAa,aAAa;AAAE,WAAO,IAAI,WAAW,CAAC;EAAE;AACzD,MAAI,YAAY,OAAO,CAAC,GAAG;AACzB,WAAO,IAAI,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU;EAC5D;AACA,QAAM,IAAI,MAAM,mCAAmC;AACrD;;;ACvBA,SAASC,MAAM,UAAU,MAAI;AAC3B,MAAI,SAAS,UAAU,KAAK;AAAE,UAAM,IAAI,UAAU,mBAAmB;EAAE;AACvE,MAAI,WAAW,IAAI,WAAW,GAAG;AACjC,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,aAAS,CAAC,IAAI;EAChB;AACA,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,QAAI,IAAI,SAAS,OAAO,CAAC;AACzB,QAAI,KAAK,EAAE,WAAW,CAAC;AACvB,QAAI,SAAS,EAAE,MAAM,KAAK;AAAE,YAAM,IAAI,UAAU,IAAI,eAAe;IAAE;AACrE,aAAS,EAAE,IAAI;EACjB;AACA,MAAI,OAAO,SAAS;AACpB,MAAI,SAAS,SAAS,OAAO,CAAC;AAC9B,MAAI,SAAS,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG;AAC1C,MAAI,UAAU,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI;AAI3C,WAASC,QAAQ,QAAM;AAErB,QAAI,kBAAkB;AAAY;aAAW,YAAY,OAAO,MAAM,GAAG;AACvE,eAAS,IAAI,WAAW,OAAO,QAAQ,OAAO,YAAY,OAAO,UAAU;IAC7E,WAAW,MAAM,QAAQ,MAAM,GAAG;AAChC,eAAS,WAAW,KAAK,MAAM;IACjC;AACA,QAAI,EAAE,kBAAkB,aAAa;AAAE,YAAM,IAAI,UAAU,qBAAqB;IAAE;AAClF,QAAI,OAAO,WAAW,GAAG;AAAE,aAAO;IAAG;AAErC,QAAI,SAAS;AACb,QAAIC,UAAS;AACb,QAAI,SAAS;AACb,QAAI,OAAO,OAAO;AAClB,WAAO,WAAW,QAAQ,OAAO,MAAM,MAAM,GAAG;AAC9C;AACA;IACF;AAEA,QAAI,QAAS,OAAO,UAAU,UAAU,MAAO;AAC/C,QAAI,MAAM,IAAI,WAAW,IAAI;AAE7B,WAAO,WAAW,MAAM;AACtB,UAAI,QAAQ,OAAO,MAAM;AAEzB,UAAIC,KAAI;AACR,eAAS,MAAM,OAAO,IAAI,UAAU,KAAKA,KAAID,YAAY,QAAQ,IAAK,OAAOC,MAAK;AAChF,iBAAU,MAAM,IAAI,GAAG,MAAO;AAC9B,YAAI,GAAG,IAAK,QAAQ,SAAU;AAC9B,gBAAS,QAAQ,SAAU;MAC7B;AACA,UAAI,UAAU,GAAG;AAAE,cAAM,IAAI,MAAM,gBAAgB;MAAE;AACrD,MAAAD,UAASC;AACT;IACF;AAEA,QAAI,MAAM,OAAOD;AACjB,WAAO,QAAQ,QAAQ,IAAI,GAAG,MAAM,GAAG;AACrC;IACF;AAEA,QAAI,MAAM,OAAO,OAAO,MAAM;AAC9B,WAAO,MAAM,MAAM,EAAE,KAAK;AAAE,aAAO,SAAS,OAAO,IAAI,GAAG,CAAC;IAAG;AAC9D,WAAO;EACT;AAIA,WAAS,aAAc,QAAM;AAC3B,QAAI,OAAO,WAAW,UAAU;AAAE,YAAM,IAAI,UAAU,iBAAiB;IAAE;AACzE,QAAI,OAAO,WAAW,GAAG;AAAE,aAAO,IAAI,WAAU;IAAG;AACnD,QAAI,MAAM;AAEV,QAAI,OAAO,GAAG,MAAM,KAAK;AAAE;IAAO;AAElC,QAAI,SAAS;AACb,QAAIA,UAAS;AACb,WAAO,OAAO,GAAG,MAAM,QAAQ;AAC7B;AACA;IACF;AAEA,QAAI,QAAU,OAAO,SAAS,OAAO,SAAU,MAAO;AACtD,QAAI,OAAO,IAAI,WAAW,IAAI;AAE9B,WAAO,OAAO,GAAG,GAAG;AAElB,UAAI,QAAQ,SAAS,OAAO,WAAW,GAAG,CAAC;AAE3C,UAAI,UAAU,KAAK;AAAE;MAAO;AAC5B,UAAIC,KAAI;AACR,eAAS,MAAM,OAAO,IAAI,UAAU,KAAKA,KAAID,YAAY,QAAQ,IAAK,OAAOC,MAAK;AAChF,iBAAU,OAAO,KAAK,GAAG,MAAO;AAChC,aAAK,GAAG,IAAK,QAAQ,QAAS;AAC9B,gBAAS,QAAQ,QAAS;MAC5B;AACA,UAAI,UAAU,GAAG;AAAE,cAAM,IAAI,MAAM,gBAAgB;MAAE;AACrD,MAAAD,UAASC;AACT;IACF;AAEA,QAAI,OAAO,GAAG,MAAM,KAAK;AAAE;IAAO;AAElC,QAAI,MAAM,OAAOD;AACjB,WAAO,QAAQ,QAAQ,KAAK,GAAG,MAAM,GAAG;AACtC;IACF;AACA,QAAI,MAAM,IAAI,WAAW,UAAU,OAAO,IAAI;AAC9C,QAAIE,KAAI;AACR,WAAO,QAAQ,MAAM;AACnB,UAAIA,IAAG,IAAI,KAAK,KAAK;IACvB;AACA,WAAO;EACT;AAIA,WAASC,SAAQ,QAAM;AACrB,QAAI,SAAS,aAAa,MAAM;AAChC,QAAI,QAAQ;AAAE,aAAO;IAAO;AAC5B,UAAM,IAAI,MAAM,OAAO,IAAI,YAAY;EACzC;AACA,SAAO;IACL,QAAQJ;IACR;IACA,QAAQI;;AAEZ;AACA,IAAIC,OAAMN;AAEV,IAAIO,mCAAkCD;AAEtC,IAAAE,kBAAeD;;;ACjIf,IAAME,WAAN,MAAa;EACF;EACA;EACA;EAET,YAAa,MAAY,QAAgB,YAAoB;AAC3D,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,aAAa;EACpB;EAEA,OAAQ,OAAiB;AACvB,QAAI,iBAAiB,YAAY;AAC/B,aAAO,GAAG,KAAK,MAAM,GAAG,KAAK,WAAW,KAAK,CAAC;IAChD,OAAO;AACL,YAAM,MAAM,mCAAmC;IACjD;EACF;;AAQF,IAAMC,WAAN,MAAa;EACF;EACA;EACA;EACQ;EAEjB,YAAa,MAAY,QAAgB,YAAoB;AAC3D,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,UAAM,kBAAkB,OAAO,YAAY,CAAC;AAE5C,QAAI,oBAAoB,QAAW;AACjC,YAAM,IAAI,MAAM,0BAA0B;IAC5C;AACA,SAAK,kBAAkB;AACvB,SAAK,aAAa;EACpB;EAEA,OAAQ,MAAY;AAClB,QAAI,OAAO,SAAS,UAAU;AAC5B,UAAI,KAAK,YAAY,CAAC,MAAM,KAAK,iBAAiB;AAChD,cAAM,MAAM,qCAAqC,KAAK,UAAU,IAAI,CAAC,KAAK,KAAK,IAAI,+CAA+C,KAAK,MAAM,EAAE;MACjJ;AACA,aAAO,KAAK,WAAW,KAAK,MAAM,KAAK,OAAO,MAAM,CAAC;IACvD,OAAO;AACL,YAAM,MAAM,mCAAmC;IACjD;EACF;EAEA,GAAgC,SAAmE;AACjG,WAAOC,IAAG,MAAM,OAAO;EACzB;;AAKF,IAAMC,mBAAN,MAAqB;EACV;EAET,YAAa,UAA0B;AACrC,SAAK,WAAW;EAClB;EAEA,GAAiC,SAAmE;AAClG,WAAOD,IAAG,MAAM,OAAO;EACzB;EAEA,OAAQ,OAAa;AACnB,UAAM,SAAS,MAAM,CAAC;AACtB,UAAM,UAAU,KAAK,SAAS,MAAM;AACpC,QAAI,WAAW,MAAM;AACnB,aAAO,QAAQ,OAAO,KAAK;IAC7B,OAAO;AACL,YAAM,WAAW,qCAAqC,KAAK,UAAU,KAAK,CAAC,+BAA+B,OAAO,KAAK,KAAK,QAAQ,CAAC,gBAAgB;IACtJ;EACF;;AAGI,SAAUA,IAAyC,MAA+C,OAA8C;AACpJ,SAAO,IAAIC,iBAAgB;IACzB,GAAI,KAAK,YAAY,EAAE,CAAE,KAA2B,MAAM,GAAG,KAAI;IACjE,GAAI,MAAM,YAAY,EAAE,CAAE,MAA4B,MAAM,GAAG,MAAK;GAClD;AACtB;AAEM,IAAOC,SAAP,MAAY;EACP;EACA;EACA;EACA;EACA;EACA;EAET,YAAa,MAAY,QAAgB,YAAsB,YAAoB;AACjF,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,UAAU,IAAIJ,SAAQ,MAAM,QAAQ,UAAU;AACnD,SAAK,UAAU,IAAIC,SAAQ,MAAM,QAAQ,UAAU;EACrD;EAEA,OAAQ,OAAiB;AACvB,WAAO,KAAK,QAAQ,OAAO,KAAK;EAClC;EAEA,OAAQ,OAAa;AACnB,WAAO,KAAK,QAAQ,OAAO,KAAK;EAClC;;AAGI,SAAUI,MAAmD,EAAE,MAAM,QAAQ,QAAAC,SAAQ,QAAAC,SAAM,GAAsE;AACrK,SAAO,IAAIH,OAAM,MAAM,QAAQE,SAAQC,QAAM;AAC/C;AAEM,SAAUC,OAAoD,EAAE,MAAM,QAAQ,SAAQ,GAAoD;AAC9I,QAAM,EAAE,QAAAF,SAAQ,QAAAC,SAAM,IAAKE,gBAAM,UAAU,IAAI;AAC/C,SAAOJ,MAAK;IACV;IACA;IACA,QAAAC;IACA,QAAQ,CAAC,SAA6BI,QAAOH,SAAO,IAAI,CAAC;GAC1D;AACH;AAEA,SAASA,QAAQ,QAAgB,aAAqC,aAAqB,MAAY;AAErG,MAAI,MAAM,OAAO;AACjB,SAAO,OAAO,MAAM,CAAC,MAAM,KAAK;AAC9B,MAAE;EACJ;AAGA,QAAM,MAAM,IAAI,WAAY,MAAM,cAAc,IAAK,CAAC;AAGtD,MAAI,OAAO;AACX,MAAI,SAAS;AACb,MAAI,UAAU;AACd,WAAS,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAE5B,UAAM,QAAQ,YAAY,OAAO,CAAC,CAAC;AACnC,QAAI,UAAU,QAAW;AACvB,YAAM,IAAI,YAAY,OAAO,IAAI,YAAY;IAC/C;AAGA,aAAU,UAAU,cAAe;AACnC,YAAQ;AAGR,QAAI,QAAQ,GAAG;AACb,cAAQ;AACR,UAAI,SAAS,IAAI,MAAQ,UAAU;IACrC;EACF;AAGA,MAAI,QAAQ,gBAAgB,MAAQ,UAAW,IAAI,UAAY,GAAG;AAChE,UAAM,IAAI,YAAY,wBAAwB;EAChD;AAEA,SAAO;AACT;AAEA,SAASD,QAAQ,MAAkB,UAAkB,aAAmB;AACtE,QAAM,MAAM,SAAS,SAAS,SAAS,CAAC,MAAM;AAC9C,QAAM,QAAQ,KAAK,eAAe;AAClC,MAAI,MAAM;AAEV,MAAI,OAAO;AACX,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AAEpC,aAAU,UAAU,IAAK,KAAK,CAAC;AAC/B,YAAQ;AAGR,WAAO,OAAO,aAAa;AACzB,cAAQ;AACR,aAAO,SAAS,OAAQ,UAAU,IAAK;IACzC;EACF;AAGA,MAAI,SAAS,GAAG;AACd,WAAO,SAAS,OAAQ,UAAW,cAAc,IAAM;EACzD;AAGA,MAAI,KAAK;AACP,YAAS,IAAI,SAAS,cAAe,OAAO,GAAG;AAC7C,aAAO;IACT;EACF;AAEA,SAAO;AACT;AAEA,SAASK,mBAAmB,UAAgB;AAE1C,QAAM,cAAsC,CAAA;AAC5C,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AACxC,gBAAY,SAAS,CAAC,CAAC,IAAI;EAC7B;AACA,SAAO;AACT;AAKM,SAAUC,SAAsD,EAAE,MAAM,QAAQ,aAAa,SAAQ,GAAyE;AAClL,QAAM,cAAcD,mBAAkB,QAAQ;AAC9C,SAAON,MAAK;IACV;IACA;IACA,OAAQ,OAAiB;AACvB,aAAOC,QAAO,OAAO,UAAU,WAAW;IAC5C;IACA,OAAQ,OAAa;AACnB,aAAOC,QAAO,OAAO,aAAa,aAAa,IAAI;IACrD;GACD;AACH;;;AC9OO,IAAMM,UAASC,SAAQ;EAC5B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAMC,eAAcD,SAAQ;EACjC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAME,aAAYF,SAAQ;EAC/B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAMG,kBAAiBH,SAAQ;EACpC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAMI,aAAYJ,SAAQ;EAC/B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAMK,kBAAiBL,SAAQ;EACpC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAMM,gBAAeN,SAAQ;EAClC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAMO,qBAAoBP,SAAQ;EACvC,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;AAEM,IAAMQ,WAAUR,SAAQ;EAC7B,QAAQ;EACR,MAAM;EACN,UAAU;EACV,aAAa;CACd;;;AC7DM,IAAMS,UAASC,OAAM;EAC1B,QAAQ;EACR,MAAM;EACN,UAAU;CACX;AAEM,IAAMC,eAAcD,OAAM;EAC/B,QAAQ;EACR,MAAM;EACN,UAAU;CACX;;;ACVM,IAAME,aAAYC,OAAM;EAC7B,MAAM;EACN,QAAQ;EACR,UAAU;CACX;AAEM,IAAMC,gBAAeD,OAAM;EAChC,MAAM;EACN,QAAQ;EACR,UAAU;CACX;;;ACXD,IAAIE,YAAWC;AAEf,IAAIC,OAAM;AAAV,IACIC,QAAO;AADX,IAEIC,UAAS,CAACD;AAFd,IAGIE,OAAM,KAAK,IAAI,GAAG,EAAE;AAOxB,SAASJ,QAAO,KAAK,KAAK,QAAM;AAC9B,QAAM,OAAO,CAAA;AACb,WAAS,UAAU;AACnB,MAAI,YAAY;AAEhB,SAAM,OAAOI,MAAK;AAChB,QAAI,QAAQ,IAAK,MAAM,MAAQH;AAC/B,WAAO;EACT;AACA,SAAM,MAAME,SAAQ;AAClB,QAAI,QAAQ,IAAK,MAAM,MAAQF;AAC/B,aAAS;EACX;AACA,MAAI,MAAM,IAAI,MAAM;AAGpB,EAAAD,QAAO,QAAQ,SAAS,YAAY;AAEpC,SAAO;AACT;AAEA,IAAIK,UAASC;AAEb,IAAIC,SAAQ;AAAZ,IACIC,UAAS;AAMb,SAASF,MAAK,KAAK,QAAM;AACvB,MAAI,MAAS,GACT,SAAS,UAAU,GACnB,QAAS,GACT,UAAU,QACV,GACA,IAAI,IAAI;AAEZ,KAAG;AACD,QAAI,WAAW,GAAG;AAEhB,MAAAA,MAAK,QAAQ;AACb,YAAM,IAAI,WAAW,yBAAyB;IAChD;AACA,QAAI,IAAI,SAAS;AACjB,WAAO,QAAQ,MACV,IAAIE,YAAW,SACf,IAAIA,WAAU,KAAK,IAAI,GAAG,KAAK;AACpC,aAAS;EACX,SAAS,KAAKD;AAGd,EAAAD,MAAK,QAAQ,UAAU;AAEvB,SAAO;AACT;AAEA,IAAIG,MAAK,KAAK,IAAI,GAAI,CAAC;AACvB,IAAIC,MAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAIC,MAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAIC,MAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAIC,MAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAIC,MAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAIC,MAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAIC,MAAK,KAAK,IAAI,GAAG,EAAE;AACvB,IAAIC,MAAK,KAAK,IAAI,GAAG,EAAE;AAEvB,IAAIC,UAAS,SAAgC,OAAK;AAChD,SACE,QAAQT,MAAK,IACb,QAAQC,MAAK,IACb,QAAQC,MAAK,IACb,QAAQC,MAAK,IACb,QAAQC,MAAK,IACb,QAAQC,MAAK,IACb,QAAQC,MAAK,IACb,QAAQC,MAAK,IACb,QAAQC,MAAK,IACA;AAEjB;AAEA,IAAIE,UAAS;EACT,QAAQpB;EACR,QAAQM;EACR,gBAAgBa;;AAGpB,IAAIE,gBAAeD;AAEnB,IAAAE,kBAAeD;;;ACrGT,SAAUE,QAAQ,MAAkB,SAAS,GAAC;AAClD,QAAMC,QAAOC,gBAAO,OAAO,MAAM,MAAM;AACvC,SAAO,CAACD,OAAMC,gBAAO,OAAO,KAAK;AACnC;AAEM,SAAUC,UAAU,KAAa,QAAoB,SAAS,GAAC;AACnE,EAAAD,gBAAO,OAAO,KAAK,QAAQ,MAAM;AACjC,SAAO;AACT;AAEM,SAAUE,gBAAgB,KAAW;AACzC,SAAOF,gBAAO,eAAe,GAAG;AAClC;;;ACPM,SAAUG,QAA8BC,OAAY,QAAkB;AAC1E,QAAM,OAAO,OAAO;AACpB,QAAM,aAAoBC,gBAAeD,KAAI;AAC7C,QAAM,eAAe,aAAoBC,gBAAe,IAAI;AAE5D,QAAM,QAAQ,IAAI,WAAW,eAAe,IAAI;AAChD,EAAOC,UAASF,OAAM,OAAO,CAAC;AAC9B,EAAOE,UAAS,MAAM,OAAO,UAAU;AACvC,QAAM,IAAI,QAAQ,YAAY;AAE9B,SAAO,IAAIC,QAAOH,OAAM,MAAM,QAAQ,KAAK;AAC7C;AAKM,SAAUI,QAAQ,WAAqB;AAC3C,QAAM,QAAQC,QAAO,SAAS;AAC9B,QAAM,CAACL,OAAM,UAAU,IAAWI,QAAO,KAAK;AAC9C,QAAM,CAAC,MAAM,YAAY,IAAWA,QAAO,MAAM,SAAS,UAAU,CAAC;AACrE,QAAM,SAAS,MAAM,SAAS,aAAa,YAAY;AAEvD,MAAI,OAAO,eAAe,MAAM;AAC9B,UAAM,IAAI,MAAM,kBAAkB;EACpC;AAEA,SAAO,IAAID,QAAOH,OAAM,MAAM,QAAQ,KAAK;AAC7C;AAEM,SAAUM,QAAQ,GAAoB,GAAU;AACpD,MAAI,MAAM,GAAG;AACX,WAAO;EACT,OAAO;AACL,UAAM,OAAO;AAEb,WACE,EAAE,SAAS,KAAK,QAChB,EAAE,SAAS,KAAK,QAChB,KAAK,iBAAiB,cACtBA,QAAW,EAAE,OAAO,KAAK,KAAK;EAElC;AACF;AAMM,IAAOH,UAAP,MAAa;EACR;EACA;EACA;EACA;;;;EAKT,YAAaH,OAAY,MAAY,QAAoB,OAAiB;AACxE,SAAK,OAAOA;AACZ,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,QAAQ;EACf;;;;AC1DI,SAAUO,QAA0F,MAASC,OAAmC;AACpJ,QAAM,EAAE,OAAO,QAAO,IAAK;AAC3B,UAAQ,SAAS;IACf,KAAK;AACH,aAAOC,YACL,OACAC,WAAU,IAAI,GACdF,SAAqCG,WAAU,OAAO;IAE1D;AACE,aAAOC,YACL,OACAF,WAAU,IAAI,GACbF,SAAQK,QAAO,OAAwC;EAE9D;AACF;AAYA,IAAMC,SAAQ,oBAAI,QAAO;AAEzB,SAASC,WAAWC,MAAoB;AACtC,QAAMD,aAAYD,OAAM,IAAIE,IAAG;AAC/B,MAAID,cAAa,MAAM;AACrB,UAAMA,aAAY,oBAAI,IAAG;AACzB,IAAAD,OAAM,IAAIE,MAAKD,UAAS;AACxB,WAAOA;EACT;AACA,SAAOA;AACT;AAEM,IAAOE,OAAP,MAAOC,MAAG;EACL;EACA;EACA;EACA;EACA;;;;;;EAOT,YAAa,SAAkBC,OAAc,WAAqC,OAAiB;AACjG,SAAK,OAAOA;AACZ,SAAK,UAAU;AACf,SAAK,YAAY;AACjB,SAAK,QAAQ;AAIb,SAAK,GAAG,IAAI;EACd;;;;;;;EAQA,IAAI,QAAK;AACP,WAAO;EACT;;EAGA,IAAI,aAAU;AACZ,WAAO,KAAK,MAAM;EACpB;;EAGA,IAAI,aAAU;AACZ,WAAO,KAAK,MAAM;EACpB;EAEA,OAAI;AACF,YAAQ,KAAK,SAAS;MACpB,KAAK,GAAG;AACN,eAAO;MACT;MACA,KAAK,GAAG;AACN,cAAM,EAAE,MAAAA,OAAM,UAAS,IAAK;AAE5B,YAAIA,UAASC,cAAa;AACxB,gBAAM,IAAI,MAAM,0CAA0C;QAC5D;AAGA,YAAI,UAAU,SAASC,eAAc;AACnC,gBAAM,IAAI,MAAM,oDAAoD;QACtE;AAEA,eACEH,MAAI,SACF,SAA6C;MAGnD;MACA,SAAS;AACP,cAAM,MACJ,+BAA+B,KAAK,OAAO,4CAA4C;MAE3F;IACF;EACF;EAEA,OAAI;AACF,YAAQ,KAAK,SAAS;MACpB,KAAK,GAAG;AACN,cAAM,EAAE,MAAAC,OAAM,OAAM,IAAK,KAAK;AAC9B,cAAM,YAAmBG,QAAOH,OAAM,MAAM;AAC5C,eACED,MAAI,SAAS,KAAK,MAAM,SAAS;MAErC;MACA,KAAK,GAAG;AACN,eAAO;MACT;MACA,SAAS;AACP,cAAM,MACJ,+BAA+B,KAAK,OAAO,4CAA4C;MAE3F;IACF;EACF;EAEA,OAAQ,OAAc;AACpB,WAAOA,MAAI,OAAO,MAAM,KAAK;EAC/B;EAEA,OAAO,OAAsF,MAA4C,OAAc;AACrJ,UAAM,UAAU;AAChB,WACE,WAAW,QACX,KAAK,SAAS,QAAQ,QACtB,KAAK,YAAY,QAAQ,WAClBK,QAAO,KAAK,WAAW,QAAQ,SAAS;EAEnD;EAEA,SAAUC,OAAmC;AAC3C,WAAOC,QAAO,MAAMD,KAAI;EAC1B;EAEA,SAAM;AACJ,WAAO,EAAE,KAAKC,QAAO,IAAI,EAAC;EAC5B;EAEA,OAAI;AACF,WAAO;EACT;EAES,CAAC,OAAO,WAAW,IAAI;;EAIhC,CAAC,uBAAO,IAAI,4BAA4B,CAAC,IAAC;AACxC,WAAO,OAAO,KAAK,SAAQ,CAAE;EAC/B;;;;;;;;;;;EAYA,OAAO,MAAwF,OAA+C;AAC5I,QAAI,SAAS,MAAM;AACjB,aAAO;IACT;AAEA,UAAM,QAAQ;AACd,QAAI,iBAAiBP,OAAK;AAExB,aAAO;IACT,WAAY,MAAM,GAAG,KAAK,QAAQ,MAAM,GAAG,MAAM,MAAM,SAAU,MAAM,UAAU,OAAO;AAMtF,YAAM,EAAE,SAAS,MAAAC,OAAM,WAAW,MAAK,IAAK;AAC5C,aAAO,IAAID,MACT,SACAC,OACA,WACA,SAASO,WAAU,SAASP,OAAM,UAAU,KAAK,CAAC;IAEtD,WAAW,MAAMQ,UAAS,MAAM,MAAM;AAIpC,YAAM,EAAE,SAAS,WAAW,MAAAR,MAAI,IAAK;AACrC,YAAM,SAAgBS,QAAO,SAAS;AACtC,aAAOV,MAAI,OAAO,SAASC,OAAM,MAAM;IACzC,OAAO;AAGL,aAAO;IACT;EACF;;;;;;EAOA,OAAO,OAAsF,SAAkBA,OAAc,QAAgC;AAC3J,QAAI,OAAOA,UAAS,UAAU;AAC5B,YAAM,IAAI,MAAM,uCAAuC;IACzD;AAEA,QAAI,EAAE,OAAO,iBAAiB,aAAa;AACzC,YAAM,IAAI,MAAM,gBAAgB;IAClC;AAEA,YAAQ,SAAS;MACf,KAAK,GAAG;AACN,YAAIA,UAASC,cAAa;AACxB,gBAAM,IAAI,MACR,wCAAwCA,YAAW,kBAAkB;QAEzE,OAAO;AACL,iBAAO,IAAIF,MAAI,SAASC,OAAM,QAAQ,OAAO,KAAK;QACpD;MACF;MACA,KAAK,GAAG;AACN,cAAM,QAAQO,WAAU,SAASP,OAAM,OAAO,KAAK;AACnD,eAAO,IAAID,MAAI,SAASC,OAAM,QAAQ,KAAK;MAC7C;MACA,SAAS;AACP,cAAM,IAAI,MAAM,iBAAiB;MACnC;IACF;EACF;;;;EAKA,OAAO,SAAuB,QAAgD;AAC5E,WAAOD,MAAI,OAAO,GAAGE,cAAa,MAAM;EAC1C;;;;;;;EAQA,OAAO,SAAyDD,OAAY,QAAgC;AAC1G,WAAOD,MAAI,OAAO,GAAGC,OAAM,MAAM;EACnC;;;;;;;;EASA,OAAO,OAAoF,OAAuD;AAChJ,UAAM,CAACH,MAAK,SAAS,IAAIE,MAAI,YAAY,KAAK;AAC9C,QAAI,UAAU,WAAW,GAAG;AAC1B,YAAM,IAAI,MAAM,kBAAkB;IACpC;AACA,WAAOF;EACT;;;;;;;;;;EAWA,OAAO,YAA2E,OAAyC;AACzH,UAAM,QAAQE,MAAI,aAAa,KAAK;AACpC,UAAM,aAAa,MAAM,OAAO,MAAM;AACtC,UAAM,iBAAiBW,QACrB,MAAM,SAAS,YAAY,aAAa,MAAM,aAAa,CAAC;AAE9D,QAAI,eAAe,eAAe,MAAM,eAAe;AACrD,YAAM,IAAI,MAAM,kBAAkB;IACpC;AACA,UAAM,cAAc,eAAe,SACjC,MAAM,gBAAgB,MAAM,UAAU;AAExC,UAAM,SAAS,IAAWC,QACxB,MAAM,eACN,MAAM,YACN,aACA,cAAc;AAEhB,UAAMd,OACJ,MAAM,YAAY,IACdE,MAAI,SAAS,MAA0C,IACvDA,MAAI,SAAS,MAAM,OAAO,MAAM;AACtC,WAAO,CAACF,MAAwB,MAAM,SAAS,MAAM,IAAI,CAAC;EAC5D;;;;;;;;;;EAWA,OAAO,aAA4E,cAAgD;AACjI,QAAI,SAAS;AACb,UAAM,OAAO,MAAa;AACxB,YAAM,CAAC,GAAGe,OAAM,IAAWH,QAAO,aAAa,SAAS,MAAM,CAAC;AAC/D,gBAAUG;AACV,aAAO;IACT;AAEA,QAAI,UAAU,KAAI;AAClB,QAAI,QAAQX;AACZ,QAAI,YAAsB,IAAI;AAE5B,gBAAU;AACV,eAAS;IACX,OAAO;AACL,cAAQ,KAAI;IACd;AAEA,QAAI,YAAY,KAAK,YAAY,GAAG;AAClC,YAAM,IAAI,WAAW,uBAAuB,OAAO,EAAE;IACvD;AAEA,UAAM,aAAa;AACnB,UAAM,gBAAgB,KAAI;AAC1B,UAAM,aAAa,KAAI;AACvB,UAAM,OAAO,SAAS;AACtB,UAAM,gBAAgB,OAAO;AAE7B,WAAO,EAAE,SAAS,OAAO,eAAe,YAAY,eAAe,KAAI;EACzE;;;;;;;EAQA,OAAO,MAA0G,QAAkEI,OAAmC;AACpN,UAAM,CAAC,QAAQ,KAAK,IAAIQ,iBAAgB,QAAQR,KAAI;AAEpD,UAAMR,OAAME,MAAI,OAAO,KAAK;AAE5B,QAAIF,KAAI,YAAY,KAAK,OAAO,CAAC,MAAM,KAAK;AAC1C,YAAM,MAAM,wDAAwD;IACtE;AAGA,IAAAD,WAAUC,IAAG,EAAE,IAAI,QAAQ,MAAM;AAEjC,WAAOA;EACT;;AAGF,SAASgB,iBAAqH,QAAkER,OAAmC;AACjO,UAAQ,OAAO,CAAC,GAAG;;IAEjB,KAAK,KAAK;AACR,YAAM,UAAUA,SAAQS;AACxB,aAAO;QACLA,WAAU;QACV,QAAQ,OAAO,GAAGA,WAAU,MAAM,GAAG,MAAM,EAAE;;IAEjD;IACA,KAAKA,WAAU,QAAQ;AACrB,YAAM,UAAUT,SAAQS;AACxB,aAAO,CAACA,WAAU,QAAkB,QAAQ,OAAO,MAAM,CAAC;IAC5D;IACA,KAAKC,QAAO,QAAQ;AAClB,YAAM,UAAUV,SAAQU;AACxB,aAAO,CAACA,QAAO,QAAkB,QAAQ,OAAO,MAAM,CAAC;IACzD;IACA,KAAKC,QAAO,QAAQ;AAClB,YAAM,UAAUX,SAAQW;AACxB,aAAO,CAACA,QAAO,QAAkB,QAAQ,OAAO,MAAM,CAAC;IACzD;IACA,SAAS;AACP,UAAIX,SAAQ,MAAM;AAChB,cAAM,MACJ,yFAAyF;MAE7F;AACA,aAAO,CAAC,OAAO,CAAC,GAAaA,MAAK,OAAO,MAAM,CAAC;IAClD;EACF;AACF;AAEA,SAASY,YAAY,OAAmBtB,QAA4BU,OAA+B;AACjG,QAAM,EAAE,OAAM,IAAKA;AACnB,MAAI,WAAWS,WAAU,QAAQ;AAC/B,UAAM,MAAM,8BAA8BT,MAAK,IAAI,WAAW;EAChE;AAEA,QAAMR,OAAMF,OAAM,IAAI,MAAM;AAC5B,MAAIE,QAAO,MAAM;AACf,UAAMA,OAAMQ,MAAK,OAAO,KAAK,EAAE,MAAM,CAAC;AACtC,IAAAV,OAAM,IAAI,QAAQE,IAAG;AACrB,WAAOA;EACT,OAAO;AACL,WAAOA;EACT;AACF;AAEA,SAASqB,YAAoC,OAAmBvB,QAA4BU,OAAkC;AAC5H,QAAM,EAAE,OAAM,IAAKA;AACnB,QAAMR,OAAMF,OAAM,IAAI,MAAM;AAC5B,MAAIE,QAAO,MAAM;AACf,UAAMA,OAAMQ,MAAK,OAAO,KAAK;AAC7B,IAAAV,OAAM,IAAI,QAAQE,IAAG;AACrB,WAAOA;EACT,OAAO;AACL,WAAOA;EACT;AACF;AAEA,IAAMI,eAAc;AACpB,IAAMC,gBAAe;AAErB,SAASK,WAAW,SAAsBP,OAAc,WAAqB;AAC3E,QAAM,aAAoBmB,gBAAe,OAAO;AAChD,QAAM,aAAa,aAAoBA,gBAAenB,KAAI;AAC1D,QAAM,QAAQ,IAAI,WAAW,aAAa,UAAU,UAAU;AAC9D,EAAOoB,UAAS,SAAS,OAAO,CAAC;AACjC,EAAOA,UAASpB,OAAM,OAAO,UAAU;AACvC,QAAM,IAAI,WAAW,UAAU;AAC/B,SAAO;AACT;AAEA,IAAMQ,aAAY,uBAAO,IAAI,kBAAkB;;;AC7c/C,IAAAa,kBAAwB;;;ACAxB,IAAAC,kBAAwB;AACxB,IAAAC,iBAAuB;;;ACGhB,IAAMC,QAAO;;;ADCpB,IAAMC,eAAc;AAsCpB,IAAM,oBAAoB,MAAM,OAAO;AAChC,IAAM,4BAA4B;AAElC,IAAM,kCAAkC;AAwG/C,SAAS,IAAI,YAAgC;AAC3C,SAAOC,KAAI,SAAaC,OAAMC,QAAaC,kBAAa,uBAAO,UAAU,CAAC,CAAC,EAAE,SAASC,QAAO,OAAO;AACtG;AAgBO,SAAS,cAAc,OAA4B;AACxD,QAAM,SAAmB,CAAC;AAC1B,QAAM,cAAc,CAAC,OAAeC,YAAyB;AAC3D,QAAI,CAAC,OAAO,cAAcA,OAAM,KAAKA,UAAS,EAAG,OAAM,IAAI,MAAM,6BAA6B;AAC9F,QAAIA,UAAS,GAAI,QAAO,KAAM,SAAS,IAAKA,OAAM;AAAA,aACzCA,UAAS,IAAO,QAAO,KAAM,SAAS,IAAK,IAAIA,OAAM;AAAA,aACrDA,UAAS,MAAS,QAAO,KAAM,SAAS,IAAK,IAAIA,WAAU,GAAGA,UAAS,GAAI;AAAA,QAC/E,OAAM,IAAI,MAAM,6BAA6B;AAAA,EACpD;AACA,QAAM,QAAQ,CAAC,SAAwB;AACrC,QAAI,SAAS,MAAM;AAAE,aAAO,KAAK,GAAI;AAAG;AAAA,IAAQ;AAChD,QAAI,SAAS,OAAO;AAAE,aAAO,KAAK,GAAI;AAAG;AAAA,IAAQ;AACjD,QAAI,SAAS,MAAM;AAAE,aAAO,KAAK,GAAI;AAAG;AAAA,IAAQ;AAChD,QAAI,OAAO,SAAS,UAAU;AAC5B,YAAM,UAAU,IAAI,YAAY,EAAE,OAAO,IAAI;AAC7C,kBAAY,GAAG,QAAQ,MAAM;AAAG,aAAO,KAAK,GAAG,OAAO;AAAG;AAAA,IAC3D;AACA,QAAI,OAAO,SAAS,YAAY,OAAO,cAAc,IAAI,GAAG;AAC1D,UAAI,QAAQ,EAAG,aAAY,GAAG,IAAI;AAAA,UAC7B,aAAY,GAAG,KAAK,IAAI;AAC7B;AAAA,IACF;AACA,QAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,kBAAY,GAAG,KAAK,MAAM;AAAG,WAAK,QAAQ,KAAK;AAAG;AAAA,IACpD;AACA,QAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,YAAM,UAAU,OAAO,QAAQ,IAA+B,EAAE,IAAI,CAAC,CAAC,KAAKC,MAAK,MAAM;AACpF,cAAM,WAAW,cAAc,GAAG;AAClC,eAAO,EAAE,KAAK,OAAAA,QAAO,SAAS;AAAA,MAChC,CAAC,EAAE,KAAK,CAAC,MAAM,UAAU;AACvB,YAAI,KAAK,SAAS,WAAW,MAAM,SAAS,OAAQ,QAAO,KAAK,SAAS,SAAS,MAAM,SAAS;AACjG,iBAAS,QAAQ,GAAG,QAAQ,KAAK,SAAS,QAAQ,SAAS,GAAG;AAC5D,gBAAM,WAAW,KAAK,SAAS,KAAK,KAAK;AACzC,gBAAM,YAAY,MAAM,SAAS,KAAK,KAAK;AAC3C,cAAI,aAAa,UAAW,QAAO,WAAW;AAAA,QAChD;AACA,eAAO;AAAA,MACT,CAAC;AACD,kBAAY,GAAG,QAAQ,MAAM;AAC7B,cAAQ,QAAQ,CAAC,EAAE,KAAK,OAAAA,OAAM,MAAM;AAAE,cAAM,GAAG;AAAG,cAAMA,MAAK;AAAA,MAAG,CAAC;AACjE;AAAA,IACF;AACA,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAC9C;AACA,QAAM,KAAK;AACX,SAAO,WAAW,KAAK,MAAM;AAC/B;AA2FO,SAAS,iCAAiC,cAA6E;AAC5H,SAAO,IAAI,IAAI,YAAY,EAAE,OAAO,aAAa,YAAY,CAAC,CAAC;AACjE;;;ADtRA,IAAM,oBAAoB,CAAC,mBAAmB,aAAa,sBAAsB,4BAA4B,YAAY,eAAe,eAAe,WAAW,oBAAoB,UAAU,YAAY,WAAW,iBAAiB,uBAAuB,gBAAgB,WAAW;AAE1R,SAAS,YAAY,OAAgB,MAAkD;AACrF,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,OAAM,IAAI,MAAM,mCAAmC;AAC5H,QAAM,MAAM,OAAO,KAAK,KAAK;AAC7B,MAAI,IAAI,WAAW,KAAK,UAAU,CAAC,KAAK,MAAM,CAAC,QAAQ,IAAI,SAAS,GAAG,CAAC,EAAG,OAAM,IAAI,MAAM,oDAAoD;AAC/I,SAAO;AACT;AAEA,SAAS,cAAc,OAAwB;AAC7C,MAAI,OAAO,UAAU,SAAU,OAAM,IAAI,MAAM,8BAA8B;AAC7E,QAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,MAAI,CAAC,OAAO,SAAS,MAAM,KAAK,IAAI,KAAK,MAAM,EAAE,YAAY,MAAM,MAAO,OAAM,IAAI,MAAM,oCAAoC;AAC9H,SAAO;AACT;AAEA,SAAS,QAAQ,MAAe,OAAyB;AACvD,SAAO,SAAS,UAAa,UAAU,UAAa,aAAa,IAAI,MAAM,aAAa,KAAK;AAC/F;AAGO,SAAS,yBACd,OACA,UAOA,KACA,KACqB;AACrB,QAAM,OAAO,YAAY,OAAO,CAAC,gBAAgB,OAAO,CAAC;AACzD,QAAM,eAAe,YAAY,KAAK,cAAc,iBAAiB;AACrE,QAAM,QAAQ,YAAY,KAAK,OAAO,CAAC,OAAO,OAAO,WAAW,CAAC;AACjE,QAAM,EAAE,QAAQ,kBAAkB,MAAM,IAAI;AAC5C,MAAI,aAAa,cAAc,SAAS,aAAa,aAAa,uBAAuB,SAAS,sBAAsB,aAAa,6BAA6B,SAAS,4BAA4B,aAAa,wBAAwB,OAAO,qBAAqB;AACtQ,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AAEA,QAAM,SAAS,OAAO;AACtB,QAAM,WAAW,OAAO;AACxB,QAAM,qBAAqB,aAAa;AACxC,QAAM,uBAAuB,aAAa;AAC1C,MAAI,OAAO,QAAQ,WAAW,YAAY,OAAO,OAAO,iBAAiB,YAAY,OAAO,OAAO,gBAAgB,YAAY,OAAO,OAAO,YAAY,YACpJ,OAAO,UAAU,SAAS,YAAY,CAAC,CAAC,SAAS,QAAQ,EAAE,SAAS,SAAS,IAAI,KAAK,OAAO,SAAS,SAAS,YAAY,CAAC,MAAM,QAAQ,OAAO,OAAO,KACxJ,uBAAuB,UAAa,yBAAyB,UAC7D,OAAO,aAAa,aAAa,YAAY,OAAO,gBAAgB,aAAa,eAAe,OAAO,YAAY,aAAa,WAChI,CAAC,QAAQ,OAAO,kBAAkB,aAAa,gBAAgB,KAC/D,OAAO,WAAW,mBAAmB,UAAU,OAAO,iBAAiB,mBAAmB,gBAAgB,OAAO,gBAAgB,aAAa,eAAe,OAAO,YAAY,mBAAmB,WACnM,SAAS,SAAS,qBAAqB,QAAQ,SAAS,SAAS,qBAAqB,QACtF,CAAC,QAAQ,OAAO,SAAS,aAAa,OAAO,KAAK,CAAC,QAAQ,OAAO,eAAe,aAAa,aAAa,KAAK,OAAO,cAAc,aAAa,aAClJ,MAAM,uBAAuB,aAAa,sBAAsB,MAAM,cAAc,aAAa,aAAa,MAAM,gBAAgB,aAAa,eAAe,MAAM,gBAAgB,aAAa,eACnM,MAAM,iBAAiB,mBAAmB,gBAAgB,MAAM,YAAY,mBAAmB,WAAW,MAAM,SAAS,qBAAqB,QAC9I,CAAC,QAAQ,MAAM,SAAS,aAAa,OAAO,KAAK,MAAM,cAAc,aAAa,WAAW;AAChG,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AACA,gBAAc,aAAa,YAAY;AACvC,QAAM,YAAY,cAAc,aAAa,SAAS;AACtD,QAAM,EAAE,iBAAiB,GAAG,KAAK,IAAI;AACrC,MAAI,OAAO,oBAAoB,YAAY,iCAAiC,IAAwE,MAAM,gBAAiB,OAAM,IAAI,MAAM,oDAAoD;AAC/O,MAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,IAAI,OAAO,OAAO,MAAM,cAAc,SAAU,OAAM,IAAI,MAAM,uCAAuC;AAClJ,QAAM,YAAY,IAAI,UAAU,WAAW,MAAM,IAAI,UAAU,CAAC,MAAM,OAAQ,IAAI,UAAU,CAAC,MAAM,IAAO,IAAI,UAAU,MAAM,CAAC,IAAI,IAAI;AACvI,MAAI,UAAU,WAAW,GAAI,OAAM,IAAI,MAAM,6BAA6B;AAC1E,QAAM,YAAY,cAAc,MAAM,SAAS;AAC/C,QAAM,SAAS,IAAI,YAAY,EAAE,OAAO,GAAG,+BAA+B,GAAG,aAAa,IAAI,CAAC,EAAE;AACjG,MAAI,UAAU,WAAW,MAAM,CAAC,wBAAQ,OAAO,WAAW,QAAQ,WAAW,EAAE,QAAQ,MAAM,CAAC,EAAG,OAAM,IAAI,MAAM,yCAAyC;AAC1J,SAAO,EAAE,QAAQ,aAAa,IAAI,QAAQ,IAAI,YAAY,SAAS,aAAsE;AAC3I;;;AGlGA,IAAAC,kBAAwB;AAmBxB,eAAsB,kCAAkC,YAA8B,aAAiD;AACrI,MAAI,eAAe,QAAQ,OAAO,eAAe,YAAY,OAAO,WAAW,YAAY,YAAY,OAAO,WAAW,cAAc,YAAY,OAAO,WAAW,QAAQ,YAAY,OAAO,WAAW,cAAc,YAAY,OAAO,WAAW,gBAAgB,YAAY,WAAW,UAAU,QAAQ,OAAO,WAAW,UAAU,UAAU;AACpV,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AACA,QAAM,QAAQ,cAAc,WAAW,OAAO;AAC9C,QAAM,WAAW,EAAE,MAAM,mCAAmC,SAAS,GAAG,WAAW,WAAW,WAAW,aAAa,WAAW,aAAa,OAAO,WAAW,MAAM;AACtK,QAAM,WAAW,cAAc,EAAE,QAAQ,2BAA2B,SAAS,CAAC;AAC9E,MAAI,SAAS,WAAW,MAAM,UAAU,SAAS,KAAK,CAAC,MAAM,UAAU,SAAS,MAAM,KAAK,CAAC,EAAG,OAAM,IAAI,MAAM,wDAAwD;AACvK,QAAM,YAAY,cAAc,WAAW,SAAS;AACpD,QAAM,YAAY,2BAA2B,WAAW,SAAS;AACjE,MAAI,UAAU,WAAW,MAAM,CAAC,wBAAQ,OAAO,WAAW,OAAO,WAAW,EAAE,QAAQ,MAAM,CAAC,EAAG,OAAM,IAAI,MAAM,6CAA6C;AAC7J,QAAMC,OAAM,MAAM,WAAW,KAAK;AAClC,MAAIA,SAAQ,WAAW,OAAQ,gBAAgB,UAAaA,SAAQ,YAAc,OAAM,IAAI,MAAM,qDAAqD;AACvJ,MAAI,WAAW,MAAM,gBAAgB,WAAW,UAAW,OAAM,IAAI,MAAM,uDAAuD;AAClI,SAAO;AACT;;;ACfA,IAAM,YAAY;AAElB,SAASC,QAAO,OAA4B;AAC1C,MAAI,SAAS;AACb,QAAM,OAAO,CAACC,YAA+B;AAC3C,QAAIA,UAAS,MAAM,SAAS,OAAQ,OAAM,IAAI,MAAM,mBAAmB;AACvE,UAAM,MAAM,MAAM,SAAS,QAAQ,SAASA,OAAM;AAClD,cAAUA;AACV,WAAO;AAAA,EACT;AACA,QAAMC,QAAO,CAAC,UAA2B;AACvC,QAAI,QAAQ,UAAW,OAAM,IAAI,MAAM,2BAA2B;AAClE,UAAM,UAAU,KAAK,CAAC,EAAE,CAAC;AACzB,UAAM,QAAQ,WAAW;AACzB,UAAM,OAAO,UAAU;AACvB,QAAI,UAAU,GAAG;AACf,UAAI,SAAS,GAAI,QAAO;AACxB,UAAI,SAAS,GAAI,QAAO;AACxB,UAAI,SAAS,GAAI,QAAO;AACxB,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AACA,QAAI;AACJ,QAAI,OAAO,GAAI,YAAW;AAAA,aACjB,SAAS,GAAI,YAAW,KAAK,CAAC,EAAE,CAAC;AAAA,aACjC,SAAS,IAAI;AAAE,YAAM,IAAI,KAAK,CAAC;AAAG,iBAAY,EAAE,CAAC,KAAM,IAAK,EAAE,CAAC;AAAA,IAAI,WACnE,SAAS,IAAI;AAAE,YAAM,IAAI,KAAK,CAAC;AAAG,kBAAa,EAAE,CAAC,KAAM,OAAQ,MAAM,EAAE,CAAC,KAAM,OAAO,EAAE,CAAC,KAAM,KAAK,EAAE,CAAC;AAAA,IAAI,MAC/G,OAAM,IAAI,MAAM,yBAAyB;AAC9C,YAAQ,OAAO;AAAA,MACb,KAAK;AAAG,eAAO;AAAA,MACf,KAAK;AAAG,eAAO,KAAK;AAAA,MACpB,KAAK;AAAG,eAAO,KAAK,QAAQ;AAAA,MAC5B,KAAK;AAAG,eAAO,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,KAAK,QAAQ,CAAC;AAAA,MAC9E,KAAK;AAAG,eAAO,MAAM,KAAK,EAAE,QAAQ,SAAS,GAAG,MAAMA,MAAK,QAAQ,CAAC,CAAC;AAAA,MACrE,KAAK,GAAG;AACN,cAAM,MAAM,oBAAI,IAAqB;AACrC,iBAAS,QAAQ,GAAG,QAAQ,UAAU,SAAS;AAC7C,gBAAM,MAAMA,MAAK,QAAQ,CAAC;AAC1B,cAAI,OAAO,QAAQ,YAAY,IAAI,IAAI,GAAG,EAAG,OAAM,IAAI,MAAM,yBAAyB;AACtF,cAAI,IAAI,KAAKA,MAAK,QAAQ,CAAC,CAAC;AAAA,QAC9B;AACA,eAAO;AAAA,MACT;AAAA,MACA;AAAS,cAAM,IAAI,MAAM,uBAAuB;AAAA,IAClD;AAAA,EACF;AACA,QAAM,QAAQA,MAAK,CAAC;AACpB,MAAI,WAAW,MAAM,OAAQ,OAAM,IAAI,MAAM,0BAA0B;AACvE,SAAO;AACT;AAEO,SAAS,WAAW,eAAmC;AAC5D,QAAM,OAAOF,QAAO,cAAc,cAAc,QAAQ,OAAO,EAAE,CAAC,CAAC;AACnE,QAAM,UAAU,gBAAgB,MAAM,KAAK,IAAI,GAAG,IAAI;AACtD,MAAI,EAAE,mBAAmB,KAAM,OAAM,IAAI,MAAM,0BAA0B;AACzE,QAAM,OAAO,CAAC,QAAoC;AAChD,UAAM,QAAQ,QAAQ,IAAI,GAAG;AAC7B,QAAI,UAAU,OAAW,QAAO;AAChC,QAAI,OAAO,UAAU,SAAU,OAAM,IAAI,MAAM,SAAS,GAAG,cAAc;AACzE,WAAO;AAAA,EACT;AACA,QAAM,WAAW,KAAK,KAAK;AAC3B,QAAM,YAAY,KAAK,KAAK;AAC5B,SAAO,EAAE,GAAI,aAAa,SAAY,CAAC,IAAI,EAAE,SAAS,GAAI,GAAI,cAAc,SAAY,CAAC,IAAI,EAAE,UAAU,EAAG;AAC9G;;;ACpEA,SAAS,eAAe,QAAgB,OAAwB;AAC9D,QAAM,IAAI,yBAAyB,MAAM;AACzC,QAAM,IAAI,yBAAyB,KAAK;AACxC,MAAI,MAAM,EAAG,QAAO;AACpB,SAAO,EAAE,WAAW,EAAE,SAAS,GAAG,IAAI,IAAI,GAAG,CAAC,GAAG;AACnD;AAEA,SAAS,aAAa,SAAsC;AAC1D,SAAO,QAAQ,MAAM,CAAC,WAAW,WAAW,QAAQ,OAAO,WAAW,YAAY,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,KAAK,MAAM,EAAE,WAAW,CAAC;AAC9I;AAEO,SAAS,kBAAkB,QAAqB,OAA6B;AAClF,QAAM,eAAe,OAAO,QAAQ,KAAK;AACzC,MAAI,aAAa,WAAW,EAAG,QAAO;AACtC,SAAO,aAAa,MAAM,CAAC,CAAC,eAAe,SAAS,MAClD,OAAO,QAAQ,SAAS,EAAE,MAAM,CAAC,CAAC,SAAS,YAAY,MACrD,OAAO,QAAQ,MAAM,EAAE,KAAK,CAAC,CAAC,gBAAgB,eAAe,MAAM;AACjE,UAAM,gBAAgB,OAAO,UAAU,eAAe,KAAK,iBAAiB,OAAO,IAAI,gBAAgB,OAAO,IAAI;AAClH,QAAI,kBAAkB,UAAa,CAAC,eAAe,gBAAgB,aAAa,EAAG,QAAO;AAC1F,WAAO,aAAa,aAAa,KAAK,aAAa,aAAa,MAAM,aAAa,YAAY;AAAA,EACjG,CAAC,CAAC,CAAC;AACT;;;ACnCA,IAAAG,kBAAwB;AACxB,IAAAC,iBAAuB;AA8BvB,IAAM,kBAAkB,KAAK;AAE7B,SAAS,OAAO,OAAkD;AAChE,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAGO,SAAS,YAAY,KAAqB;AAC/C,SAAO,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;AAC5B;AAEO,SAAS,QAAQ,eAA+B;AACrD,SAAOC,KAAI,SAAS,IAAMC,QAAa,QAAM,uBAAO,IAAI,YAAY,EAAE,OAAO,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS;AAC1G;AAEO,SAAS,gBAAgB,eAAuB,aAA4C;AACjG,MAAI,OAAO,kBAAkB,YAAY,cAAc,SAAS,mBAAmB,KAAK,KAAK,aAAa,EAAG,OAAM,IAAI,MAAM,4BAA4B;AACzJ,QAAM,WAAW,cAAc,MAAM,GAAG;AACxC,MAAI,SAAS,WAAW,KAAK,SAAS,KAAK,CAAC,YAAY,QAAQ,WAAW,CAAC,EAAG,OAAM,IAAI,MAAM,+BAA+B;AAC9H,QAAM,CAAC,eAAe,gBAAgB,gBAAgB,IAAI;AAC1D,QAAM,UAAU,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC;AACxD,MAAI;AACJ,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAM,QAAQ,OAAO,cAAc,aAAa,CAAC,CAAC;AAChE,cAAU,KAAK,MAAM,QAAQ,OAAO,cAAc,cAAc,CAAC,CAAC;AAAA,EACpE,QAAQ;AACN,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAC9C;AACA,MAAI,CAAC,OAAO,MAAM,KAAK,CAAC,OAAO,OAAO,GAAG,KAAK,OAAO,QAAQ,WAAW,OAAO,QAAQ,SAAS,OAAO,QAAQ,YAAY,OAAO,IAAI,QAAQ,SAAS,OAAO,IAAI,QAAQ,aAAa,OAAO,OAAO,IAAI,MAAM,SAAU,OAAM,IAAI,MAAM,wBAAwB;AACjQ,MAAI,CAAC,OAAO,OAAO,KAAK,OAAO,QAAQ,QAAQ,YAAY,OAAO,QAAQ,QAAQ,YAAY,QAAQ,IAAI,WAAW,EAAG,OAAM,IAAI,MAAM,oCAAoC;AAC5K,QAAM,SAAS,YAAY,QAAQ,GAAG;AACtC,QAAM,YAAY,2BAA2B,MAAM;AACnD,QAAM,SAAS,cAAc,OAAO,IAAI,CAAC;AACzC,MAAI,OAAO,WAAW,UAAU,UAAU,OAAO,KAAK,CAAC,MAAM,UAAU,SAAS,UAAU,KAAK,CAAC,EAAG,OAAM,IAAI,MAAM,mCAAmC;AACtJ,QAAM,YAAY,cAAc,gBAAgB;AAChD,MAAI,UAAU,WAAW,MAAM,CAAC,wBAAQ,OAAO,WAAW,IAAI,YAAY,EAAE,OAAO,GAAG,aAAa,IAAI,cAAc,EAAE,GAAG,WAAW,EAAE,QAAQ,MAAM,CAAC,EAAG,OAAM,IAAI,MAAM,2BAA2B;AACpM,QAAMC,OAAM,QAAQ,aAAa;AACjC,MAAI,gBAAgB,UAAaA,SAAQ,YAAa,OAAM,IAAI,MAAM,yCAAyC;AAC/G,QAAM,MAAM,QAAQ;AACpB,MAAI,CAAC,OAAO,GAAG,KAAK,OAAO,KAAK,GAAG,EAAE,WAAW,KAAK,CAAC,OAAO,OAAO,GAAG,EAAE,MAAM,CAAC,cAAc,OAAO,SAAS,KAAK,OAAO,KAAK,SAAS,EAAE,SAAS,KAAK,OAAO,OAAO,SAAS,EAAE,MAAM,CAAC,YAAY,MAAM,QAAQ,OAAO,KAAK,QAAQ,SAAS,CAAC,CAAC,EAAG,OAAM,IAAI,MAAM,6BAA6B;AACjS,QAAM,MAAM,QAAQ,OAAO,CAAC;AAC5B,MAAI,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,OAAO,SAAS,QAAQ,EAAG,OAAM,IAAI,MAAM,yBAAyB;AACpH,MAAI,CAAC,OAAO,cAAc,QAAQ,GAAG,KAAM,QAAQ,QAAQ,WAAc,CAAC,OAAO,cAAc,QAAQ,GAAG,KAAM,QAAQ,OAAmB,QAAQ,KAAkB,OAAM,IAAI,MAAM,iCAAiC;AACtN,MAAI,QAAQ,QAAQ,UAAa,CAAC,MAAM,QAAQ,QAAQ,GAAG,EAAG,OAAM,IAAI,MAAM,wBAAwB;AACtG,SAAO;AAAA,IACL,KAAAA;AAAA,IACA;AAAA,IACA,UAAU,YAAY,QAAQ,GAAG;AAAA,IACjC,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,GAAI,QAAQ,QAAQ,SAAY,CAAC,IAAI,EAAE,WAAW,QAAQ,IAAc;AAAA,IACxE,WAAW,QAAQ;AAAA,IACnB,GAAI,QAAQ,QAAQ,SAAY,CAAC,IAAI,EAAE,OAAO,QAAQ,IAAiB;AAAA,EACzE;AACF;;;ACtDO,IAAM,qBAAqB,IAAI,KAAK;AAsB3C,SAAS,OAAO,OAA2B,OAAmC;AAC5E,MAAI,UAAU,OAAW,QAAO;AAChC,QAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,MAAI,CAAC,OAAO,SAAS,MAAM,EAAG,OAAM,IAAI,MAAM,QAAQ,KAAK,qBAAqB;AAChF,SAAO;AACT;AAGA,eAAsB,6BAA6B,OAAyD;AAC1G,QAAM,QAAQ,MAAM,MAAM,MAAM,MAAM,eAAe,MAAM,WAAW;AACtE,MAAI,MAAM,QAAQ,MAAM,YAAa,OAAM,IAAI,MAAM,yBAAyB;AAC9E,MAAI,yBAAyB,MAAM,MAAM,MAAM,yBAAyB,MAAM,eAAe,EAAG,OAAM,IAAI,MAAM,sCAAsC;AACtJ,MAAI,YAAY,MAAM,QAAQ,MAAM,YAAY,MAAM,WAAW,EAAG,OAAM,IAAI,MAAM,4CAA4C;AAChI,MAAI,CAAC,kBAAkB,MAAM,aAAa,MAAM,gBAAgB,EAAG,OAAM,IAAI,MAAM,wCAAwC;AAC3H,QAAM,QAAQ,WAAW,MAAM,aAAa;AAC5C,QAAM,YAAY,OAAO,MAAM,WAAW,YAAY;AACtD,QAAM,YAAY,OAAO,MAAM,WAAW,iBAAiB;AAC3D,MAAI,cAAc,UAAa,cAAc,UAAa,aAAa,UAAW,OAAM,IAAI,MAAM,+BAA+B;AACjI,MAAI,cAAc,UAAa,YAAY,MAAM,IAAI,QAAQ,IAAI,mBAAoB,OAAM,IAAI,MAAM,uBAAuB;AAC5H,QAAM,WAAW,OAAO,MAAM,UAAU,WAAW;AACnD,SAAO;AAAA,IACL,KAAK,MAAM;AAAA,IAAK,YAAY,YAAY,MAAM,QAAQ;AAAA,IAAG,MAAM,cAAc,UAAa,aAAa,MAAM,IAAI,QAAQ,IAAI,YAAY;AAAA,IACzI,GAAI,aAAa,SAAY,CAAC,IAAI,EAAE,SAAS;AAAA,EAC/C;AACF;;;AnBFA,IAAM,eAAN,cAA2B,MAAM;AAAC;AAElC,SAAS,KAAK,QAAuB;AACnC,QAAM,IAAI,aAAa,MAAM;AAC/B;AAGA,SAAS,SAAS,eAA+B;AAC/C,SAAOC,KAAI,SAAS,IAAMC,QAAa,QAAM,uBAAO,cAAc,cAAc,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS;AAClH;AAEA,SAAS,WAAWC,SAAmC;AACrD,SAAO,GAAGA,QAAO,OAAO,OAAO,OAAOA,QAAO,SAAS,IAAI;AAC5D;AAEA,SAAS,yBAAyB,aAA0B,WAAuC;AACjG,QAAM,OAAO,OAAO,KAAK,WAAW,EAAE,IAAI,wBAAwB,EAAE,KAAK;AACzE,QAAM,WAAW,UAAU,IAAI,wBAAwB,EAAE,KAAK;AAC9D,SAAO,KAAK,WAAW,SAAS,UAAU,KAAK,MAAM,CAAC,KAAK,UAAU,QAAQ,SAAS,KAAK,CAAC;AAC9F;AAEA,SAAS,OAAO,UAA0E;AACxF,SAAO,EAAE,UAAU,WAAW,uBAAuB,QAAQ,WAAW,sBAAsB;AAChG;AAEA,eAAe,YAAYA,SAA2B,MAAc,SAA8C;AAChH,MAAIA,QAAO,6BAA6B,OAAW,MAAK,wCAAwC;AAChG,QAAM,OAAO,gBAAgB,MAAMA,QAAO,wBAAwB;AAClE,QAAM,WAAW,WAAWA,OAAM;AAClC,MAAI,CAAC,yBAAyB,KAAK,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC,CAAE,EAAE,MAAM,CAAC,YAAYA,QAAO,QAAQ,SAAS,OAAgB,CAAC,EAAG,MAAK,kDAAkD;AACvO,MAAI,KAAK,cAAc,UAAa,KAAK,YAAY,MAAO,QAAQ,IAAI,QAAQ,IAAI,mBAAoB,MAAK,kCAAkC;AAC/I,MAAI,KAAK,OAAO,WAAW,EAAG,MAAK,8CAA8C;AACjF,QAAM,cAAc,KAAK,YAAY,OAAQ,QAAQ,IAAI,QAAQ;AACjE,QAAM,SAAS,CAAC,KAAK,GAAG;AAExB,QAAM,cAAc,KAAK,cAAc,SAAY,SAAY,OAAO,KAAK,YAAY,GAAI;AAC3F,QAAM,UAAUA,QAAO,QAAQ;AAC/B,MAAI,YAAY,OAAW,QAAO,EAAE,IAAI,MAAM,OAAO,YAAY,SAAS,aAAa,QAAQ,QAAQ,eAAe,EAAE,QAAQ,KAAK,YAAY,IAAK,EAAE;AAExJ,QAAM,SAAS,MAAM,6BAA6B,EAAE,eAAe,SAAS,aAAa,KAAK,OAAO,CAAC,GAAI,iBAAiB,QAAQ,iBAAiB,aAAa,KAAK,QAAQ,kBAAkB,KAAK,aAAa,KAAK,QAAQ,KAAK,OAAO,QAAQ,eAAe,CAAC;AACnQ,QAAM,SAAS,eAAe,EAAE,GAAI,OAAO,aAAa,SAAY,CAAC,IAAI,EAAE,UAAU,OAAO,WAAW,sBAAsB,GAAI,QAAQ,KAAK,YAAY,IAAK;AAC/J,SAAO,EAAE,IAAI,MAAM,OAAO,KAAK,WAAW,YAAY,QAAQ,QAAQ,IAAI,WAAW,WAAW,SAAS,eAAe,OAAO,SAAS,WAAW,QAAQ,OAAO;AACpK;AAEA,eAAe,cAAcA,SAA2B,eAAwB,SAA8C;AAC5H,QAAM,SAAS,sBAAsB,UAAU,aAAa;AAC5D,MAAI,CAAC,OAAO,QAAS,MAAK,iCAAiC;AAC3D,QAAM,WAAW,OAAO;AACxB,QAAM,WAAW,SAAS,OAAO;AACjC,QAAM,UAAU,SAAS;AAEzB,MAAI,CAAC,MAAM,mBAAmB,UAAU,UAAU,KAAK,MAAM,QAAQ,QAAQ,CAAC,EAAG,MAAK,iCAAiC;AACvH,MAAI,SAAS,cAAcA,QAAO,aAAa,SAAS,WAAW,QAAQA,QAAO,sBAAsB,SAAS,gBAAgB,QAAQA,QAAO,4BAA4B,SAAS,YAAYA,QAAO,WACnM,yBAAyB,SAAS,OAAO,OAAO,MAAM,yBAAyBA,QAAO,OAAO,OAAO,KAAK,SAAS,SAAS,SAASA,QAAO,SAAS,QAAQ,SAAS,SAAS,SAASA,QAAO,SAAS,QACtMA,QAAO,aAAa,UAAaA,QAAO,aAAa,SAAW,MAAK,sCAAsC;AACjH,QAAM,OAAO,gBAAgB,SAAS,WAAW,eAAe,SAAS,WAAW,GAAG;AACvF,QAAM,SAAS,KAAK,IAAI,KAAK,MAAM,QAAQ,SAAS,GAAG,KAAK,YAAY,KAAM,KAAK,MAAM,SAAS,MAAM,CAAC;AACzG,QAAM,UAAU,UAAU,QAAQ,IAAI,QAAQ;AAC9C,QAAM,SAAS,CAAC,SAAS,WAAW,SAAS,WAAW,KAAK,SAAS,gBAAgB,GAAG;AACzF,QAAM,UAAUA,QAAO,QAAQ;AAC/B,QAAM,SAAS,OAAO,KAAK,MAAM,QAAQ,QAAQ,CAAC;AAClD,MAAI,YAAY,OAAW,QAAO,EAAE,IAAI,MAAM,OAAO,YAAY,SAAS,QAAQ,OAAO;AAEzF,QAAM,SAAS,MAAM,6BAA6B,EAAE,eAAe,SAAS,aAAa,SAAS,OAAO,GAAG,iBAAiB,QAAQ,iBAAiB,aAAa,KAAK,QAAQ,kBAAkB,KAAK,aAAa,KAAK,QAAQ,KAAK,OAAO,QAAQ,eAAe,CAAC;AACrQ,SAAO,EAAE,IAAI,MAAM,OAAO,YAAY,QAAQ,MAAM,YAAY,QAAQ,QAAQ,IAAI,WAAW,WAAW,SAAS,WAAW,OAAO,SAAS,WAAW,QAAQ,OAAO;AAC1K;AAEA,eAAe,mBAAmBA,SAA2B,SAA8C;AACzG,QAAM,SAASA,QAAO;AACtB,MAAI,OAAO,oBAAoB,UAAa,OAAO,0BAA0B,UAAaA,QAAO,cAAc,UAAaA,QAAO,uBAAuB,UAAaA,QAAO,6BAA6B,OAAW,MAAK,+BAA+B;AAC1P,QAAM,cAAc,cAAc,OAAO,WAAY;AACrD,MAAI,MAAM,WAAW,WAAW,MAAMA,QAAO,UAAW,MAAK,+CAA+C;AAC5G,MAAI;AACJ,MAAI;AAAE,eAAW,KAAK,MAAM,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,WAAW,CAAC;AAAA,EAAsB,QAAQ;AAAE,SAAK,8BAA8B;AAAA,EAAG;AAC/J,QAAM,SAAS,SAAS;AACxB,QAAM,SAAS,QAAQ;AACvB,QAAM,WAAW,QAAQ;AACzB,MAAI,SAAS,WAAW,qCAAqC,WAAW,UAAa,OAAO,OAAO,gBAAgB,YAAY,OAAO,OAAO,aAAa,YAAY,OAAO,OAAO,wBAAwB,YACvM,OAAO,YAAYA,QAAO,WAAW,OAAO,QAAQ,YAAY,YAAY,yBAAyB,OAAO,OAAO,MAAM,yBAAyBA,QAAO,OAAO,OAAO,KACvK,UAAU,SAASA,QAAO,SAAS,QAAQ,UAAU,SAASA,QAAO,SAAS,QAC9E,yBAAyB,OAAO,QAAQ,MAAM,yBAAyB,QAAQ,eAAe,EAAG,MAAK,uCAAuC;AAClJ,QAAM,cAAc,OAAO;AAC3B,QAAM,cAAc,MAAM,kCAAkC,OAAO,uBAAuBA,QAAO,wBAAwB;AACzH,QAAM,QAAQ,YAAY;AAC1B,MAAI,YAAY,cAAc,eAAe,MAAM,cAAcA,QAAO,aAAa,MAAM,uBAAuBA,QAAO,sBAAsB,MAAM,YAAYA,QAAO,WACnK,OAAO,MAAM,YAAY,YAAY,yBAAyB,MAAM,OAAO,MAAM,yBAAyBA,QAAO,OAAO,OAAO,KAAK,MAAM,SAASA,QAAO,SAAS,QAAQ,OAAO,MAAM,cAAc,SAAU,MAAK,6CAA6C;AACvQ,QAAM,QAAQ,MAAM,6BAA6B;AAAA,IAC/C,eAAe,OAAO;AAAA,IAAiB,aAAaA,QAAO;AAAA,IAAoB,iBAAiB,QAAQ;AAAA,IAAiB,aAAa;AAAA,IACtI,kBAAkB,EAAE,CAAC,WAAWA,OAAM,CAAC,GAAG,OAAO,YAAYA,QAAO,QAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAAA,IAAG,KAAK,QAAQ;AAAA,IAAK,OAAO,QAAQ;AAAA,EACnJ,CAAC;AACD,MAAI,UAAU,MAAM,SAAS,aAAa,KAAK,MAAM,MAAM,SAAmB,KAAK,QAAQ,IAAI,QAAQ;AACvG,QAAM,SAAS,CAACA,QAAO,WAAWA,QAAO,oBAAoBA,QAAO,wBAAwB;AAC5F,MAAI,SAAmE,EAAE,QAAQ,KAAK,MAAM,MAAM,SAAmB,EAAE;AACvH,QAAM,MAAM,QAAQ,kBAAkBA,QAAO,OAAO,YAAY;AAChE,MAAIA,QAAO,oBAAoB,UAAa,OAAO,iBAAiB,UAAa,QAAQ,QAAW;AAClG,QAAI;AACJ,QAAI;AACF,gBAAU,yBAAyB,OAAO,cAAc,EAAE,WAAWA,QAAO,WAAW,oBAAoBA,QAAO,oBAAoB,0BAA0BA,QAAO,0BAA0B,QAAQ,kBAAkB,MAAM,GAAG,KAAK,QAAQ,GAAG;AAAA,IACtP,QAAQ;AACN,WAAK,iCAAiC;AAAA,IACxC;AACA,UAAM,eAAe,QAAQ;AAC7B,QAAI,aAAa,oBAAoBA,QAAO,mBAAmB,aAAa,YAAYA,QAAO,WAAW,aAAa,aAAa,OAAO,YAAY,aAAa,gBAAgB,eAAe,aAAa,gBAAgB,YAAY,YAAa,MAAK,2CAA2C;AACzS,gBAAY,QAAQ,WAAW;AAC/B,WAAO,KAAKA,QAAO,eAAe;AAClC,aAAS,OAAO,KAAK,MAAM,aAAa,YAAY,CAAC;AAAA,EACvD;AACA,SAAO,EAAE,IAAI,MAAM,OAAO,WAAW,SAAS,QAAQ,OAAO;AAC/D;AAGA,eAAsB,uBAAuBA,SAA2B,SAA8C;AACpH,MAAI;AACF,UAAM,SAASA,QAAO;AACtB,QAAI,QAAQ,gBAAgB,OAAW,QAAO,MAAM,mBAAmBA,SAAQ,OAAO;AACtF,QAAIA,QAAO,eAAe,UAAaA,QAAO,eAAe,UAAU;AACrE,YAAM,WAAWA,QAAO;AACxB,UAAI,aAAa,OAAW,MAAK,+CAA+C;AAEhF,UAAKA,QAAO,aAAa,UAAaA,QAAO,aAAa,SAAS,YAAcA,QAAO,gBAAgB,UAAaA,QAAO,gBAAgB,SAAS,SAAW,MAAK,gDAAgD;AACrN,UAAI;AACJ,UAAI;AAAE,mBAAW,MAAM,qBAAqB,QAAQ;AAAA,MAAG,QAAQ;AAAE,aAAK,2DAA2D;AAAA,MAAG;AACpI,aAAO,MAAM,cAAcA,SAAQ,UAAU,OAAO;AAAA,IACtD;AACA,QAAI,QAAQ,SAAS,OAAW,QAAO,MAAM,YAAYA,SAAQ,OAAO,MAAM,OAAO;AACrF,WAAO,EAAE,IAAI,OAAO,QAAQ,0BAA0B;AAAA,EACxD,SAAS,OAAO;AACd,WAAO,EAAE,IAAI,OAAO,QAAQ,iBAAiB,eAAe,MAAM,UAAU,wBAAwB;AAAA,EACtG;AACF;;;AoBvKO,IAAM,mBAAN,cAA+B,MAAM;AAAA,EACjC;AAAA;AAAA,EAET,YAAYC,OAA4B;AACtC,UAAMA,KAAI;AACV,SAAK,OAAO;AACZ,SAAK,OAAOA;AAAA,EACd;AACF;AAuCO,SAAS,oBAAoB,UAA0E;AAC5G,SAAO;AAAA,IACL,GAAI,SAAS,gBAAgB,SAAY,CAAC,IAAI,EAAE,aAAa,SAAS,YAAY;AAAA,IAClF,QAAQ,SAAS;AAAA,IACjB,eAAe,SAAS;AAAA,IACxB,UAAU,SAAS;AAAA,IACnB,SAAS,SAAS;AAAA,IAClB,iBAAiB,SAAS,OAAO,kBAAkB,QAAQ,CAAC,eAAe,WAAW,SAAS,OAAO,WAAW,UAAU,CAAC,CAAC;AAAA,EAC/H;AACF;AAEA,SAAS,WAAW,MAAmC;AACrD,QAAM,WAAW,KAAK,cAAc;AACpC,QAAM,SAAS;AACf,QAAM,KAAK,SAAS,QAAQ,MAAM;AAClC,MAAI,MAAM,KAAK,SAAS,MAAM,GAAG,EAAE,MAAM,KAAK,OAAO,SAAS;AAC5D,UAAM,IAAI,iBAAiB,qBAAqB;AAAA,EAClD;AACA,SAAO,SAAS,MAAM,KAAK,OAAO,MAAM;AAC1C;AAOO,SAAS,sBAAsB,MAA2B,WAA6B,CAAC,GAA4B;AACzH,QAAM,MAAM,KAAK;AACjB,QAAM,OAAO,WAAW,IAAI;AAC5B,QAAM,cAAc,SAAS,iBAAiB,KAAK,WAAW,GAAG,aAAa,GAAG;AACjF,MAAI,CAAC,aAAa;AAChB,QAAI,QAAQ,OAAW,OAAM,IAAI,iBAAiB,qBAAqB;AACvE,WAAO;AAAA,EACT;AACA,MAAI,QAAQ,OAAW,OAAM,IAAI,iBAAiB,aAAa;AAC/D,QAAM,SAAS,yBAAyB,IAAI;AAC5C,MAAI,WAAW,OAAW,OAAM,IAAI,iBAAiB,2BAA2B;AAChF,QAAM,OAAO,IAAI,MAAM,CAAC;AACxB,QAAM,SAAS,KAAK;AACpB;AAAA;AAAA,IAEE,KAAK,QAAQ,MAAM,OAAO,QACvB,IAAI,eAAe,OAAO,cAC1B,IAAI,YAAY,OAAO,WACvB,KAAK,SAAS,OAAO,QACrB,KAAK,SAAS,SAAS,WACvB,KAAK,SAAS,SAAS,QACvB,OAAO,aAAa,WACpB,OAAO,SAAS,eAChB,OAAO,+BAA+B,KAAK;AAAA,IAC9C;AACA,UAAM,IAAI,iBAAiB,qBAAqB;AAAA,EAClD;AAEA,MAAI,KAAK,QAAQ,SAAS,MAAM,KAAK,KAAK,gBAAgB,SAAS,kBAAkB,GAAG;AACtF,UAAM,IAAI,iBAAiB,uBAAuB;AAAA,EACpD;AACA,MACG,SAAS,eAAe,UAAa,SAAS,eAAe,IAAI,cAC9D,SAAS,YAAY,UAAa,SAAS,YAAY,IAAI,SAC/D;AACA,UAAM,IAAI,iBAAiB,sBAAsB;AAAA,EACnD;AACA,SAAO;AACT;AASO,SAAS,oBAAoB,UAA2B,SAA8D;AAC3H,MAAI,SAAS,UAAU,cAAc,QAAQ,kBAAkB;AAC7D,UAAM,IAAI,iBAAiB,cAAc;AAAA,EAC3C;AACA,MAAI;AACJ,MAAI;AAAE,YAAQ,8BAA8B,QAAQ,KAAK,SAAS,OAAO,aAAa,QAAQ;AAAA,EAAkB,QAC1G;AAAE,YAAQ;AAAA,EAAO;AACvB,MAAI,CAAC,MAAO,OAAM,IAAI,iBAAiB,eAAe;AACtD,SAAO,sBAAsB,oBAAoB,QAAQ,GAAG,QAAQ,QAAQ;AAC9E;;;AC/HA,IAAM,SAAS,KAAK,KAAK,KAAK;AAEvB,IAAM,6BAA+C;AAAA,EAC1D,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,wBAAwB;AAAA,EACxB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,eAAe;AAAA,EACf,cAAc,OAAO;AAAA,EACrB,aAAa,KAAK;AAAA,EAClB,qBAAqB;AAAA,EACrB,gBAAgB,KAAK;AAAA,EACrB,cAAc,KAAK;AAAA,EACnB,qBAAqB;AACvB;AAkBO,IAAM,yBAAN,MAAyD;AAAA,EAC7C,MAAM,oBAAI,IAA0B;AAAA,EACrD,MAAM,OAAyC;AAAE,WAAO,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC;AAAA,EAAG;AAAA,EAChF,MAAM,IAAI,IAAiC;AAAE,SAAK,IAAI,IAAI,GAAG,IAAI,EAAE;AAAA,EAAG;AAAA,EACtE,MAAM,OAAO,KAAuC;AAAE,eAAW,MAAM,IAAK,MAAK,IAAI,OAAO,EAAE;AAAA,EAAG;AACnG;AA4GA,SAASC,SAAQ,OAAwB;AACvC,SAAO,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,KAAK,CAAC,EAAE;AACzD;AAGO,SAAS,YAAY,KAAiC;AAC3D,QAAM,EAAE,MAAM,OAAO,GAAG,OAAO,IAAI;AACnC,SAAOA,SAAQ,MAAM;AACvB;AAEA,SAAS,YAAY,MAA0B,OAAoC;AACjF,QAAM,QAAQ,CAAC,EAAE,WAAW,IAAI,WAAW,IAAI,GAAG,KAAK,MAA0B;AACjF,SAAO,aAAa,MAAM,IAAI,CAAC,MAAM,aAAa,MAAM,KAAK,CAAC;AAChE;AAEA,SAAS,SAAS,KAAqB;AACrC,SAAO,IAAI,MAAM,IAAI,YAAY,GAAG,IAAI,CAAC;AAC3C;AAEA,SAAS,QAAQ,KAAwC;AACvD,SAAO,IAAI,IAAI,WAAW,QAAQ,IAAI,IAAI,IAAI,MAAM,SAAS,MAAM,IAAI;AACzE;AAEA,SAASC,UAAS,MAAgD;AAChE,SAAO,SAAS,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI;AACzE;AAGA,SAAS,YAAY,OAA4C;AAC/D,MAAI,CAACA,UAAS,KAAK,EAAG,QAAO;AAC7B,QAAM,EAAE,SAAS,QAAQ,UAAU,SAAS,kBAAkB,cAAc,UAAU,IAAI;AAC1F,SAAO,OAAO,YAAY,YAAYA,UAAS,MAAM,KAAK,OAAO,OAAO,YAAY,YAC/EA,UAAS,QAAQ,KAAK,OAAO,SAAS,SAAS,YAAY,MAAM,QAAQ,OAAO,KAAK,QAAQ,MAAM,CAAC,SAAS,OAAO,SAAS,QAAQ,KACrIA,UAAS,gBAAgB,KAAK,OAAO,iBAAiB,SAAS,YAC/D,OAAO,iBAAiB,YAAY,OAAO,cAAc;AAChE;AAEA,SAAS,cAAc,KAA0B;AAC/C,QAAM,KAAK,IAAI,YAAY;AAC3B,SAAO,EAAE,GAAG,oBAAoB,GAAG,QAAQ,IAAI,UAAU,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,OAAO,IAAI,KAAK;AACzH;AAEO,IAAM,mBAAN,MAAuB;AAAA,EAM5B,YAA6B,SAAkC;AAAlC;AAC3B,SAAK,UAAU,QAAQ;AACvB,SAAK,SAAS,EAAE,GAAG,4BAA4B,GAAG,QAAQ,OAAO;AACjE,SAAK,MAAM,EAAE,GAAG,oBAAoB,GAAG,QAAQ,IAAI;AACnD,SAAK,MAAM,QAAQ,QAAQ,MAAM,oBAAI,KAAK;AAAA,EAC5C;AAAA,EAViB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAUjB,MAAM,OAAgC;AACpC,UAAMC,QAAO,MAAM,KAAK,QAAQ,UAAU,cAAc;AACxD,QAAIA,MAAK,WAAW,eAAeA,MAAK,WAAW,cAAe,QAAO,EAAE,QAAQA,MAAK,OAAO;AAC/F,QAAIA,MAAK,WAAW,UAAW,QAAO,EAAE,QAAQ,UAAU;AAC1D,UAAM,SAAS,mBAAmBA,MAAK,KAAK;AAC5C,QAAI,OAAO,WAAW,QAAS,QAAO,EAAE,QAAQ,aAAa,GAAG,OAAO,EAAE;AACzE,WAAO,OAAO,WAAW,OAAO,EAAE,QAAQ,MAAM,KAAK,OAAO,IAAI,IAAI,EAAE,QAAQ,UAAU;AAAA,EAC1F;AAAA,EAEA,MAAM,QAAQ,IAAiC;AAC7C,UAAM,KAAK,QAAQ,OAAO,IAAI,EAAE;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,cAAmC;AAC/C,UAAM,MAAM,KAAK,SAAS;AAC1B,UAAM,OAAO,MAAM,KAAK,QAAQ,SAAS,SAAS;AAClD,QAAI,KAAK,WAAW,KAAM,QAAO;AACjC,eAAW,OAAO,KAAK,MAAM;AAC3B,YAAM,aAAa,kBAAkB,GAAG;AACxC,UAAI,WAAW,SAAS,WAAW,WAAW,SAAS,OAAQ;AAC/D,YAAMA,QAAO,MAAM,KAAK,QAAQ,UAAU,GAAG;AAC7C,YAAM,UAAUA,MAAK,WAAW,OAAO,qBAAqBA,MAAK,KAAK,IAAI;AAC1E,UAAI,YAAY,OAAW,KAAI,SAAS,KAAK,EAAE,MAAM,WAAW,MAAM,KAAK,OAAO,KAAK,QAAQ,IAAI,EAAE,CAAC;AAAA,IACxG;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,WAAuB;AAC7B,WAAO,mBAAmB,EAAE,UAAU,KAAK,QAAQ,UAAU,SAAS,KAAK,QAAQ,SAAS,QAAQ,KAAK,QAAQ,QAAQ,KAAK,KAAK,IAAI,EAAE,CAAC;AAAA,EAC5I;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,OAAO,QAAoF;AACvG,WAAO,OAA+B,gBAAgB,KAAK,KAAK,YAAY;AAC1E,YAAMA,QAAO,MAAM,KAAK,QAAQ,UAAU,cAAc;AACxD,UAAIC;AACJ,UAAI;AACJ,UAAI,UAAU;AACd,UAAID,MAAK,WAAW,cAAe,QAAO,EAAE,MAAM,EAAE,QAAQ,cAAuB,EAAE;AACrF,UAAIA,MAAK,WAAW,aAAa;AAC/B,QAAAC,QAAO,KAAK,SAAS;AACrB,oBAAY,EAAE,aAAa,IAAI;AAC/B,kBAAU;AAAA,MACZ,WAAWD,MAAK,WAAW,WAAW;AACpC,YAAIA,MAAK,SAAS,OAAW,QAAO,EAAE,MAAM,EAAE,QAAQ,cAAuB,EAAE;AAC/E,QAAAC,QAAO,MAAM,KAAK,YAAY;AAC9B,oBAAY,EAAE,SAASD,MAAK,KAAK;AACjC,kBAAU;AAAA,MACZ,OAAO;AACL,cAAM,SAAS,mBAAmBA,MAAK,KAAK;AAC5C,YAAI,OAAO,WAAW,QAAS,QAAO,EAAE,MAAM,EAAE,QAAQ,YAAqB,EAAE;AAC/E,QAAAC,QAAO,OAAO,WAAW,OAAO,gBAAgB,OAAO,GAAG,IAA6B,MAAM,KAAK,YAAY;AAC9G,kBAAU,OAAO,WAAW;AAC5B,oBAAY,EAAE,SAASD,MAAK,KAAK;AAAA,MACnC;AACA,YAAM,SAAS,gBAAgBC,KAAI;AACnC,YAAM,OAAOA,KAAI;AACjB,YAAM,OAAOA;AACb,UAAI,WAAW,YAAY,QAAQ,IAAI,EAAG,QAAO,EAAE,MAAM,EAAE,QAAQ,aAAsB,KAAK,OAAO,EAAE;AACvG,MAAAA,MAAK,YAAY,KAAK,IAAI,EAAE,YAAY;AACxC,MAAAA,MAAK,YAAY,KAAK,QAAQ;AAC9B,aAAO,EAAE,OAAO,MAAM,KAAK,QAAQ,WAAW,gBAAgB,MAAM,SAAS,GAAG,WAAW,OAAO,EAAE,QAAQ,WAAoB,KAAK,KAAK,GAAG;AAAA,IAC/I,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAMQ,aAAa;AAAA,EAEb,YAAY,KAAiB,SAA2C;AAC9E,UAAM,WAAW,IAAI,OAAO,OAAO;AACnC,QAAI,aAAa,UAAa,CAAC,KAAK,WAAY,QAAO;AACvD,UAAM,UAAwB,EAAE,KAAK,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,cAAc,CAAC,GAAG,QAAQ,OAAO,WAAW,KAAK,IAAI,EAAE,YAAY,EAAE;AACvI,QAAI,OAAO,OAAO,IAAI;AACtB,WAAO;AAAA,EACT;AAAA;AAAA,EAGQ,gBAAgB,KAAiB,SAAiB,QAAgB,QAAsB;AAC9F,UAAM,QAAQ,KAAK,YAAY,KAAK,OAAO;AAC3C,UAAM,WAAW,iBAAiB,MAAM;AACxC,QAAI,UAAU,UAAa,CAAC,KAAK,cAAc,MAAM,aAAa,SAAS,QAAQ,EAAG;AACtF,UAAM,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,KAAK,KAAK;AACzD,QAAI,MAAM,aAAa,SAAS,KAAK,OAAO,sBAAuB,OAAM,aAAa,KAAK,QAAQ;AACnG,UAAM,QAAQ,OAAO,OAAO,MAAM,QAAQ,EAAE,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC;AACjF,QAAI,MAAM,WAAW,SAAS,SAAS,KAAK,OAAO,sBAAuB,OAAM,SAAS,EAAE,QAAQ,cAAc,IAAI,KAAK,IAAI,EAAE,YAAY,EAAE;AAAA,EAChJ;AAAA;AAAA,EAGQ,SAAS,KAAiB,KAAmB;AACnD,UAAM,MAAM,IAAI,KAAK,GAAG;AACxB,QAAI,QAAQ,OAAW;AACvB,WAAO,IAAI,KAAK,GAAG;AACnB,UAAM,UAAU,QAAQ,GAAG;AAC3B,QAAI,YAAY,OAAW;AAC3B,UAAM,QAAQ,KAAK,YAAY,KAAK,OAAO;AAC3C,QAAI,UAAU,OAAW,OAAM,OAAO,KAAK,IAAI,GAAG,MAAM,OAAO,CAAC;AAChE,SAAK,gBAAgB,KAAK,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,EAC3D;AAAA,EAEQ,UAAU,KAAiB,KAAsB;AACvD,WAAO,IAAI,WAAW,KAAK,CAAC,cAAc,UAAU,QAAQ,GAAG,KAAK,IAAI,SAAS,KAAK,CAAC,YAAY,QAAQ,IAAI,SAAS,GAAG,CAAC;AAAA,EAC9H;AAAA;AAAA;AAAA,EAKQ,QAAQ,KAAiB,IAAyC;AACxE,UAAM,MAAM,KAAK,IAAI;AACrB,QAAI,GAAG,SAAS,SAAS;AACvB,YAAM,QAAQ,IAAI,OAAO,GAAG,OAAO;AACnC,UAAI,UAAU,OAAW,QAAO;AAChC,YAAM,SAAS;AACf,UAAI,GAAG,WAAW,WAAW;AAC3B,cAAM,WAAW,CAAC;AAClB,cAAM,eAAe,CAAC;AACtB,eAAO,MAAM;AACb,eAAO,MAAM;AAAA,MACf;AACA,aAAO;AAAA,IACT;AACA,UAAM,WAAW,IAAI,KAAK,GAAG,GAAG;AAChC,QAAI,GAAG,SAAS,UAAU;AACxB,UAAI,KAAK,UAAU,KAAK,GAAG,GAAG,EAAG,QAAO;AACxC,UAAI,aAAa,OAAW,QAAO;AACnC,YAAM,WAAW,YAAY,IAAI,MAAM,GAAG,KAAK,GAAG,GAAG;AACrD,UAAI,CAAC,SAAS,MAAO,QAAO;AAC5B,iBAAW,OAAO,SAAS,UAAW,MAAK,SAAS,KAAK,GAAG;AAC5D,UAAI,KAAK,GAAG,GAAG,IAAI,GAAG;AACtB,aAAO;AAAA,IACT;AACA,QAAI,GAAG,SAAS,UAAU;AACxB,UAAI,aAAa,OAAW,QAAO,KAAK,UAAU,KAAK,GAAG,GAAG,IAAI,YAAY;AAC7E,YAAM,KAAK,SAAS,MAAM,UAAa,KAAK,MAAM,GAAG,EAAE,IAAI,KAAK,MAAM,SAAS,EAAE,EAAE,IAAI,GAAG,KAAK,SAAS,EAAE;AAC1G,UAAI,KAAK,GAAG,GAAG,IAAI,EAAE,GAAG,UAAU,GAAG,EAAE,IAAI,WAAW,SAAS,GAAG,cAAc,QAAQ,GAAG,UAAU,EAAE;AACvG,aAAO;AAAA,IACT;AACA,QAAI,aAAa,OAAW,QAAO,IAAI,WAAW,KAAK,CAAC,cAAc,UAAU,QAAQ,GAAG,GAAG,IAAI,YAAY;AAC9G,QAAI,SAAS,MAAM,UAAa,KAAK,MAAM,SAAS,CAAC,IAAI,IAAI,QAAQ,KAAK,SAAS,OAAO,KAAM,QAAO;AACvG,SAAK,kBAAkB,KAAK,GAAG,KAAK,QAAQ;AAC5C,QAAI,WAAW,KAAK,EAAE,KAAK,GAAG,KAAK,IAAI,IAAI,YAAY,EAAE,CAAC;AAC1D,WAAO;AAAA,EACT;AAAA,EAEQ,kBAAkB,KAAiB,KAAa,KAA0B;AAChF,WAAO,IAAI,KAAK,GAAG;AACnB,UAAM,UAAU,QAAQ,GAAG;AAC3B,UAAM,QAAQ,YAAY,SAAY,SAAY,IAAI,OAAO,OAAO;AACpE,QAAI,UAAU,OAAW,OAAM,OAAO,KAAK,IAAI,GAAG,MAAM,OAAO,CAAC;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,QAAwC;AAC5C,UAAM,MAAM,MAAM,KAAK,QAAQ,OAAO,KAAK;AAC3C,QAAI,IAAI,WAAW,EAAG,QAAO,EAAE,QAAQ,SAAS,SAAS,CAAC,EAAE;AAC5D,QAAI,UAAoB,CAAC;AACzB,UAAM,SAAS,MAAM,KAAK,OAAO,CAAC,QAAQ;AACxC,gBAAU,CAAC;AACX,iBAAW,MAAM,IAAK,KAAI,KAAK,QAAQ,KAAK,EAAE,MAAM,UAAW,SAAQ,KAAK,GAAG,EAAE;AAAA,IACnF,CAAC;AACD,QAAI,OAAO,WAAW,aAAa,OAAO,WAAW,YAAa,OAAM,KAAK,QAAQ,OAAO,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AACzH,WAAO,EAAE,QAAQ,OAAO,QAAQ,QAAQ;AAAA,EAC1C;AAAA;AAAA;AAAA,EAKA,MAAc,mBAAmB,KAAa,SAAiB,SAAiB,UAAyE;AACvJ,UAAM,SAAS,KAAK,QAAQ;AAC5B,QAAI,WAAW,OAAW,QAAO,EAAE,MAAM,OAAO;AAEhD,UAAM,MAAM,MAAM,KAAK,QAAQ,QAAQ,KAAK,KAAK,OAAO,mBAAmB;AAC3E,QAAI,IAAI,WAAW,YAAa,QAAO,EAAE,MAAM,UAAU,QAAQ,OAAO;AACxE,QAAI,IAAI,WAAW,KAAM,QAAO,EAAE,MAAM,OAAO;AAC/C,QAAI,IAAI,MAAM,aAAa,KAAK,OAAO,oBAAqB,QAAO,EAAE,MAAM,UAAU,QAAQ,OAAO;AAEpG,QAAI;AACJ,QAAI;AACF,eAAS,uBAAuB,IAAI,OAAO,EAAE,gBAAgB,KAAK,QAAQ,eAAe,CAAC;AAAA,IAC5F,SAAS,OAAO;AACd,UAAI,iBAAiB,oBAAoB,MAAM,WAAW,QAAS,QAAO,EAAE,MAAM,SAAS,SAAS,KAAK,YAAY,IAAI,KAAK,EAAE;AAChI,aAAO,EAAE,MAAM,UAAU,QAAQ,iBAAiB,oBAAoB,MAAM,WAAW,WAAW,WAAW,QAAQ;AAAA,IACvH;AACA,QAAI;AACJ,QAAI;AAAE,gBAAU,eAAe,OAAO,IAAI,QAAQ;AAAA,IAAG,QAAQ;AAAE,aAAO,EAAE,MAAM,UAAU,QAAQ,SAAS;AAAA,IAAG;AAC5G,QAAI,YAAY,QAAS,QAAO,EAAE,MAAM,UAAU,QAAQ,SAAS;AAEnE,QAAI;AACJ,QAAI;AACF,kBAAY,MAAM,uBAAuB,QAAQ,EAAE,SAAS,KAAK,QAAQ,SAAS,UAAU,GAAG,0BAA0B,GAAG,GAAG,GAAG,GAAG,MAAM;AAAA,IAC7I,SAAS,OAAO;AACd,UAAI,iBAAiB,4BAA6B,QAAO,EAAE,MAAM,OAAO;AACxE,aAAO,EAAE,MAAM,UAAU,QAAQ,UAAU;AAAA,IAC7C;AACA,QAAI;AACJ,QAAI;AAAE,cAAQ,KAAK,MAAM,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC;AAAA,IAAG,QAAQ;AAAE,aAAO,EAAE,MAAM,UAAU,QAAQ,SAAS;AAAA,IAAG;AAC9I,UAAM,UAAU,MAAM,KAAK,YAAY,OAAO,EAAE,KAAK,SAAS,KAAK,SAAS,OAAO,IAAI,QAAQ,SAAS,UAAU,OAAO,IAAI,UAAU,SAAS,OAAO,IAAI,QAAQ,GAAG,QAAQ;AAC9K,WAAO,QAAQ,SAAS,UAAU,EAAE,MAAM,SAAS,KAAK,OAAO,IAAI,UAAU,KAAK,QAAQ,IAAI,IAAI;AAAA,EACpG;AAAA;AAAA,EAGA,MAAc,YACZ,OACA,OACA,UACoI;AAEpI,QAAIC;AACJ,QAAI;AACF,MAAAA,UAAS,uBAAuB,OAAO;AAAA,QACrC,SAAS,MAAM;AAAA,QAAS,SAAS,MAAM;AAAA,QAAS,iBAAiB,KAAK,QAAQ;AAAA,QAAU,UAAU,MAAM;AAAA,QAAU,QAAQ,MAAM;AAAA,MAClI,CAAC;AAAA,IACH,SAAS,OAAO;AACd,aAAO,EAAE,MAAM,UAAU,QAAQ,iBAAiB,0BAA0B,MAAM,WAAW,eAAe,eAAe,SAAS;AAAA,IACtI;AAEA,QAAI;AACJ,QAAI;AAAE,aAAO,MAAM,uBAAuBA,SAAQ,KAAK,QAAQ,YAAY;AAAA,IAAG,QAAQ;AAAE,aAAO,EAAE,MAAM,UAAU,QAAQ,OAAO;AAAA,IAAG;AACnI,QAAI,SAAS,UAAa,CAAC,kBAAkB,MAAM,KAAK,QAAQ,YAAY,EAAE,GAAI,QAAO,EAAE,MAAM,UAAU,QAAQ,OAAO;AAC1H,QAAI,SAAS,UAAaA,QAAO,qBAAqB,QAAW;AAC/D,UAAI;AAAE,kCAA0B,MAAMA,QAAO,gBAAgB;AAAA,MAAG,QAAQ;AAAE,eAAO,EAAE,MAAM,UAAU,QAAQ,OAAO;AAAA,MAAG;AAAA,IACvH;AAEA,UAAM,UAAU,MAAM,uBAAuBA,SAAQ;AAAA,MACnD,iBAAiB,KAAK,QAAQ;AAAA,MAAU,UAAU,MAAM;AAAA,MAAU,KAAK,KAAK,IAAI;AAAA,MAAG,gBAAgB,KAAK,QAAQ;AAAA,MAChH,GAAI,KAAK,QAAQ,oBAAoB,SAAY,CAAC,IAAI,EAAE,iBAAiB,KAAK,QAAQ,gBAAgB;AAAA,IACxG,CAAC;AACD,QAAI,CAAC,QAAQ,GAAI,QAAO,EAAE,MAAM,UAAU,QAAQ,QAAQ;AAC1D,QAAI,yBAAyBA,QAAO,SAAS,IAAI,MAAM,UAAaA,QAAO,qBAAqB,QAAW;AACzG,UAAI;AACF,cAAM,WAAW,sBAAsB,MAAM,MAAM,qBAAqBA,QAAO,gBAAgB,CAAC;AAChG,YAAI,oBAAoB,UAAU,EAAE,kBAAkB,SAAS,OAAO,SAAS,CAAC,MAAM,OAAW,QAAO,EAAE,MAAM,UAAU,QAAQ,QAAQ;AAAA,MAC5I,QAAQ;AAAE,eAAO,EAAE,MAAM,UAAU,QAAQ,QAAQ;AAAA,MAAG;AAAA,IACxD;AAGA,UAAM,SAAS,MAAM,WAAW,aAAa,EAAE,GAAI,QAAQ,OAAO,WAAW,SAAY,CAAC,IAAI,EAAE,QAAQ,QAAQ,OAAO,OAAO,EAAG,IAAI,QAAQ;AAC7I,QAAI,CAAC,iBAAiBA,QAAO,cAAc,QAAQ,KAAK,IAAI,CAAC,EAAG,QAAO,EAAE,MAAM,UAAU,QAAQ,SAAS;AAC1G,UAAM,MAAM,QAAQA,SAAQ,EAAE,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,QAAQ,QAAQ,QAAQ,OAAO,EAAE,OAAO,QAAQ,OAAO,SAAS,QAAQ,QAAQ,EAAE,CAAC;AACjJ,QAAI,QAAQ,UAAU,UAAU;AAC9B,YAAM,iBAAiB,MAAM,SAAS;AACtC,UAAI,QAAQ,OAAO,KAAK,CAACC,UAAS,eAAe,IAAIA,IAAG,KAAK,OAAO,UAAU,GAAG,CAAC,EAAG,QAAO,EAAE,MAAM,UAAU,QAAQ,QAAQ;AAAA,IAChI;AACA,WAAO,EAAE,MAAM,SAAS,IAAI;AAAA,EAC9B;AAAA,EAEQ,YAAY,OAA2B;AAC7C,QAAI;AACF,YAAM,QAAiB,KAAK,MAAM,IAAI,YAAY,EAAE,OAAO,KAAK,CAAC;AACjE,YAAM,UAAUJ,UAAS,KAAK,KAAKA,UAAS,MAAM,GAAG,IAAI,MAAM,IAAI,UAAU;AAC7E,aAAO,OAAO,YAAY,YAAY,OAAO,cAAc,OAAO,IAAI,UAAU,2BAA2B;AAAA,IAC7G,QAAQ;AACN,aAAO,2BAA2B;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,MAAc,eAAe,KAAuD;AAClF,UAAM,SAAS,oBAAI,IAAoB;AACvC,eAAW,WAAW,IAAI,UAAU;AAClC,YAAMC,QAAO,MAAM,KAAK,QAAQ,UAAU,UAAU,QAAQ,IAAI,EAAE;AAClE,YAAM,SAASA,MAAK,WAAW,OAAO,qBAAqBA,MAAK,KAAK,IAAI;AACzE,iBAAW,OAAO,OAAO,OAAO,QAAQ,QAAQ,CAAC,CAAC,EAAG,YAAWG,QAAO,IAAI,MAAM,CAAC,EAAG,QAAO,IAAIA,MAAK,KAAK,IAAI,OAAO,IAAIA,IAAG,KAAK,IAAI,UAAU,GAAG,CAAC,CAAC;AAAA,IACtJ;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAgD;AACpD,UAAM,SAAS,MAAM,KAAK,KAAK;AAC/B,QAAI,OAAO,WAAW,eAAe,OAAO,WAAW,cAAe,QAAO,EAAE,QAAQ,OAAO,QAAQ,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC,GAAG,UAAU,GAAG,eAAe,OAAO,YAAY,MAAM;AAC5M,UAAM,MAAM,OAAO,WAAW,OAAO,OAAO,MAAO,KAAK,SAAS;AACjE,UAAM,QAAQ,oBAAI,IAAY,CAAC,GAAG,OAAO,KAAK,IAAI,IAAI,GAAG,GAAG,IAAI,WAAW,IAAI,CAAC,cAAc,UAAU,GAAG,GAAG,GAAG,IAAI,SAAS,QAAQ,CAAC,YAAY,QAAQ,GAAG,CAAC,CAAC;AAChK,UAAM,WAAsB,CAAC;AAC7B,UAAM,cAAc,oBAAI,IAA0G;AAClI,UAAM,aAAa,CAAC,YAAkH;AACpI,YAAM,QAA0C,IAAI,OAAO,OAAO;AAClE,UAAI,QAAQ,YAAY,IAAI,OAAO;AACnC,UAAI,UAAU,QAAW;AACvB,gBAAQ;AAAA,UACN,OAAO,oBAAI,IAAI,CAAC,GAAI,OAAO,gBAAgB,CAAC,GAAI,GAAI,OAAO,aAAa,CAAC,CAAE,CAAC;AAAA,UAC5E,WAAW;AAAA,UACX,YAAY,OAAO,OAAO,OAAO,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC;AAAA,UACtF,QAAQ,UAAU,UAAa,MAAM,WAAW;AAAA,UAChD,MAAM,OAAO,QAAQ;AAAA,QACvB;AACA,oBAAY,IAAI,SAAS,KAAK;AAAA,MAChC;AACA,aAAO;AAAA,IACT;AACA,QAAI;AACJ,UAAM,eAAe,MAAO,aAAa,KAAK,eAAe,GAAG;AAChE,QAAI,QAAQ;AACZ,QAAI,UAAU;AACd,QAAI,WAAW;AACf,UAAM,iBAAyC,CAAC;AAChD,UAAM,SAAS,CAAC,SAAiB,QAAgB,WAAoC;AACnF,YAAM,QAAQ,WAAW,OAAO;AAChC,YAAM,MAAM,IAAI,iBAAiB,MAAM,CAAC;AACxC,YAAM;AACN,UAAI,MAAM,cAAc,KAAK,OAAO,sBAAuB,OAAM,SAAS;AAC1E,qBAAe,MAAM,KAAK,eAAe,MAAM,KAAK,KAAK;AACzD,eAAS,KAAK,EAAE,MAAM,UAAU,SAAS,QAAQ,OAAO,CAAC;AAAA,IAC3D;AAEA,QAAI,SAAS,IAAI,UAAU;AAC3B,QAAI,gBAAgB;AACpB,QAAI,YAAY;AAChB,aAAU,QAAO,QAAQ,KAAK,OAAO,kBAAkB;AACrD,UAAI,OAAO,MAAM,KAAK,QAAQ,SAAS,IAAI,MAAM;AACjD;AAEA,UAAI,KAAK,WAAW,QAAQ,WAAW,UAAa,UAAU,GAAG;AAC/D,iBAAS;AACT,eAAO,MAAM,KAAK,QAAQ,SAAS,EAAE;AACrC;AAAA,MACF;AACA,UAAI,KAAK,WAAW,KAAM;AAC1B,iBAAW,OAAO,KAAK,MAAM;AAC3B,cAAM,aAAa,kBAAkB,GAAG;AACxC,YAAI,WAAW,SAAS,QAAS;AACjC,YAAI,WAAW,SAAS,YAAY;AAClC,cAAI,WAAW,YAAY,UAAa,WAAW,WAAW,OAAW;AACzE,gBAAMC,SAAQ,WAAW,WAAW,OAAO;AAC3C,cAAIA,OAAM,UAAUA,OAAM,MAAM,IAAI,iBAAiB,WAAW,MAAM,CAAC,EAAG;AAC1E,iBAAO,WAAW,SAAS,WAAW,QAAQ,OAAO;AACrD;AAAA,QACF;AACA,YAAI,MAAM,IAAI,GAAG,EAAG;AACpB,YAAI,WAAW,KAAK,OAAO,gBAAgB;AAAE,sBAAY;AAAM,gBAAM;AAAA,QAAU;AAC/E,YAAI,WAAW,SAAS,OAAO;AAC7B;AACA,gBAAMJ,QAAO,MAAM,KAAK,QAAQ,UAAU,GAAG;AAC7C,cAAIA,MAAK,WAAW,QAAQD,UAASC,MAAK,KAAK,KAAKA,MAAK,MAAM,eAAe,YAAY;AAExF,kBAAM,UAAU,MAAM,KAAK,YAAYA,MAAK,OAAO,EAAE,KAAK,SAAS,WAAW,SAAS,KAAK,OAAO,QAAQ,YAAY,UAAU,IAAI,SAAS,yBAAyB,GAAG,YAAY;AACtL,qBAAS,KAAK,EAAE,MAAM,OAAO,KAAK,KAAK,QAAQ,SAAS,UAAU,QAAQ,MAAM,EAAE,GAAG,cAAc,KAAK,IAAI,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC;AAAA,UACpI,WAAWA,MAAK,WAAW,MAAM;AAC/B,gBAAI;AACJ,gBAAI;AAAE,oBAAM,YAAYA,MAAK,KAAK,IAAI,QAAQA,MAAK,OAAO,EAAE,KAAK,KAAK,MAAM,CAAC,IAAI,cAAc,KAAK,IAAI,CAAC;AAAA,YAAG,QAAQ;AAAE,oBAAM,cAAc,KAAK,IAAI,CAAC;AAAA,YAAG;AACvJ,qBAAS,KAAK,EAAE,MAAM,OAAO,KAAK,IAAI,CAAC;AAAA,UACzC,WAAWA,MAAK,WAAW,WAAW;AACpC,qBAAS,KAAK,EAAE,MAAM,OAAO,KAAK,KAAK,cAAc,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,UACpE;AACA;AAAA,QACF;AAEA,cAAM,QAAQ,WAAW,WAAW,OAAO;AAC3C,YAAI,MAAM,UAAU,MAAM,MAAM,IAAI,iBAAiB,WAAW,OAAO,CAAC,EAAG;AAE3E,YAAI,MAAM,aAAa,KAAK,OAAO,0BAA0B,MAAM,OAAO,MAAM,aAAa,KAAK,OAAO,kBAAkB;AAAE;AAAY;AAAA,QAAU;AACnJ;AACA,cAAM;AACN,cAAM,WAAW,MAAM,KAAK,mBAAmB,KAAK,WAAW,SAAS,WAAW,SAAS,YAAY;AACxG,YAAI,SAAS,SAAS,SAAS;AAC7B,mBAAS,KAAK,EAAE,MAAM,SAAS,KAAK,SAAS,WAAW,SAAS,KAAK,SAAS,KAAK,KAAK,SAAS,IAAI,CAAC;AAAA,QACzG,WAAW,SAAS,SAAS,UAAU;AACrC,iBAAO,WAAW,SAAS,WAAW,SAAS,SAAS,MAAM;AAAA,QAChE,WAAW,SAAS,SAAS,SAAS;AACpC,gBAAM,MAAM,IAAI,iBAAiB,WAAW,OAAO,CAAC;AACpD,mBAAS,KAAK,EAAE,MAAM,SAAS,SAAS,WAAW,SAAS,QAAQ,WAAW,SAAS,SAAS,SAAS,QAAQ,CAAC;AAAA,QACrH;AAAA,MACF;AACA,eAAS,KAAK;AACd,UAAI,WAAW,QAAW;AAAE,wBAAgB;AAAM;AAAA,MAAO;AAAA,IAC3D;AACA,UAAM,aAAa,YAAY,IAAI,UAAU,SAAS;AAGtD,eAAW,CAAC,SAAS,KAAK,KAAK,OAAO,QAAQ,IAAI,MAAM,GAAG;AACzD,UAAI,MAAM,cAAc,UAAa,MAAM,WAAW,UAAa,MAAM,UAAU,yBAA0B,UAAS,KAAK,EAAE,MAAM,eAAe,QAAQ,CAAC;AAC3J,UAAI,MAAM,SAAS,KAAK,YAAY,IAAI,OAAO,GAAG,aAAa,SAAS,KAAK,OAAO,iBAAkB;AACtG,YAAM,aAAa,MAAM,KAAK,QAAQ,SAAS,kBAAkB,OAAO,CAAC;AACzE;AACA,UAAI,WAAW,WAAW,QAAQ,WAAW,KAAK,WAAW,EAAG,UAAS,KAAK,EAAE,MAAM,MAAM,QAAQ,CAAC;AAAA,IACvG;AAEA,QAAI,WAAW;AACf,QAAI,aAAa;AACjB,UAAM,SAAS,MAAM,KAAK,OAAO,CAAC,YAAY;AAG5C,YAAM,QAAQ,gBAAgB,OAAO;AACrC,WAAK,cAAc,OAAO,UAAU,MAAM;AAAA,MAAC,CAAC;AAC5C,mBAAa,YAAY,KAAsC,IAAI,KAAK,OAAO,eAAe,YAAY,KAAsC,IAAI,YAAY,OAAwC;AACxM,iBAAW;AACX,WAAK,aAAa,CAAC;AACnB,UAAI;AACF,aAAK,cAAc,SAAS,UAAU,MAAM;AAAE;AAAA,QAAY,CAAC;AAAA,MAC7D,UAAE;AACA,aAAK,aAAa;AAAA,MACpB;AACA,UAAI,eAAe,OAAW,QAAO,QAAQ,UAAU;AAAA,UAClD,SAAQ,UAAU,SAAS;AAAA,IAClC,CAAC;AACD,WAAO,EAAE,QAAQ,OAAO,QAAQ,OAAO,SAAS,UAAU,UAAU,gBAAgB,UAAU,eAAe,WAAW;AAAA,EAC1H;AAAA,EAEQ,cAAc,KAAiB,UAA8B,SAA2B;AAC9F,UAAM,cAAc,KAAK,OAAO,eAAe,KAAK,OAAO;AAC3D,QAAI,aAAa,OAAO,OAAO,IAAI,IAAI,EAAE,OAAO,CAAC,QAAQ,QAAQ,GAAG,MAAM,MAAS,EAAE,OAAO,CAAC,KAAK,QAAQ,MAAMF,SAAQ,GAAG,GAAG,CAAC;AAC/H,eAAW,WAAW,UAAU;AAC9B,UAAI,QAAQ,SAAS,UAAU;AAAE,aAAK,gBAAgB,KAAK,QAAQ,SAAS,QAAQ,QAAQ,QAAQ,MAAM;AAAG;AAAA,MAAU;AACvH,UAAI,QAAQ,SAAS,MAAM;AACzB,cAAM,QAAQ,IAAI,OAAO,QAAQ,OAAO;AACxC,YAAI,UAAU,UAAa,MAAM,SAAS,EAAG,QAAO,IAAI,OAAO,QAAQ,OAAO;AAC9E;AAAA,MACF;AACA,UAAI,QAAQ,SAAS,eAAe;AAClC,cAAM,QAAQ,IAAI,OAAO,QAAQ,OAAO;AACxC,YAAI,UAAU,QAAW;AAAE,iBAAO,MAAM;AAAW,iBAAO,MAAM;AAAQ,cAAI,MAAM,WAAW,SAAS,MAAM,OAAO,WAAW,QAAS,OAAM,SAAS;AAAA,QAAO;AAC7J;AAAA,MACF;AACA,UAAI,QAAQ,SAAS,SAAS;AAC5B,cAAM,QAAQ,KAAK,YAAY,KAAK,QAAQ,OAAO;AACnD,YAAI,UAAU,UAAa,CAAC,KAAK,WAAY;AAC7C,cAAM,OAAO,MAAM,cAAc,MAAM,YAAY,CAAC;AACpD,cAAM,SAAS,iBAAiB,QAAQ,MAAM;AAC9C,YAAI,KAAK,SAAS,MAAM,EAAG;AAC3B,YAAI,KAAK,UAAU,KAAK,OAAO,uBAAuB;AAAE,cAAI,MAAM,WAAW,MAAO,OAAM,SAAS,EAAE,QAAQ,SAAS,IAAI,KAAK,IAAI,EAAE,YAAY,EAAE;AAAG;AAAA,QAAU;AAChK,aAAK,KAAK,MAAM;AAChB,cAAM,SAAS,KAAK,IAAI,MAAM,UAAU,GAAG,QAAQ,OAAO;AAC1D;AAAA,MACF;AACA,UAAI,IAAI,KAAK,QAAQ,GAAG,MAAM,UAAa,KAAK,UAAU,KAAK,QAAQ,GAAG,EAAG;AAC7E,UAAI,QAAQ,SAAS,SAAS;AAC5B,cAAM,QAAQ,KAAK,YAAY,KAAK,QAAQ,OAAO;AACnD,YAAI,UAAU,UAAa,MAAM,WAAW,SAAS,MAAM,aAAa,SAAS,iBAAiB,SAAS,QAAQ,GAAG,CAAC,CAAC,EAAG;AAC3H,YAAI,MAAM,QAAQ,KAAK,OAAO,kBAAkB;AAAE,gBAAM,SAAS,EAAE,QAAQ,WAAW,IAAI,KAAK,IAAI,EAAE,YAAY,EAAE;AAAG;AAAA,QAAU;AAChI,cAAM,OAAOA,SAAQ,QAAQ,GAAG;AAChC,YAAI,aAAa,OAAO,YAAa;AACrC,cAAMO,YAAW,YAAY,IAAI,MAAM,QAAQ,KAAK,QAAQ,GAAG;AAC/D,YAAI,CAACA,UAAS,OAAO;AAAE,eAAK,gBAAgB,KAAK,QAAQ,SAAS,SAAS,QAAQ,GAAG,GAAG,OAAO;AAAG;AAAA,QAAU;AAC7G,mBAAW,OAAOA,UAAS,WAAW;AAAE,wBAAcP,SAAQ,IAAI,KAAK,GAAG,CAAC;AAAG,eAAK,SAAS,KAAK,GAAG;AAAA,QAAG;AACvG,YAAI,KAAK,QAAQ,GAAG,IAAI,QAAQ;AAChC,cAAM;AACN,cAAM,QAAQ,QAAQ;AACtB,sBAAc;AACd,YAAI,MAAM,QAAQ,KAAK,OAAO,oBAAoB,MAAM,WAAW,MAAO,OAAM,SAAS,EAAE,QAAQ,WAAW,IAAI,KAAK,IAAI,EAAE,YAAY,EAAE;AAC3I,gBAAQ;AACR;AAAA,MACF;AACA,YAAM,WAAW,YAAY,IAAI,MAAM,QAAQ,KAAK,QAAQ,GAAG;AAC/D,UAAI,CAAC,SAAS,OAAO;AAEnB,YAAI,QAAQ,IAAI,OAAO,YAAY;AACjC,gBAAM,EAAE,KAAK,MAAM,IAAI,KAAK,GAAG,UAAU,IAAI,QAAQ;AACrD,cAAI,KAAK,QAAQ,GAAG,IAAI,EAAE,GAAG,WAAW,IAAI,KAAK;AAAA,QACnD;AACA;AAAA,MACF;AACA,iBAAW,OAAO,SAAS,WAAW;AAAE,sBAAcA,SAAQ,IAAI,KAAK,GAAG,CAAC;AAAG,aAAK,SAAS,KAAK,GAAG;AAAA,MAAG;AACvG,UAAI,KAAK,QAAQ,GAAG,IAAI,QAAQ;AAChC,cAAQ;AAAA,IACV;AAAA,EACF;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,MAAsG;AACrH,UAAM,SAAS,MAAM,KAAK,KAAK;AAC/B,QAAI,OAAO,WAAW,KAAM,QAAO,EAAE,QAAQ,OAAO,WAAW,cAAc,cAAc,eAAe,SAAS,EAAE;AACrH,UAAM,UAAU,oBAAI,IAAkC;AACtD,QAAI,UAAU;AACd,eAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,OAAO,IAAI,IAAI,GAAG;AACxD,UAAI,WAAW,KAAK,OAAO,oBAAqB;AAChD,UAAI,IAAI,OAAO,UAAU,IAAI,GAAG,cAAc,KAAM;AACpD;AACA,YAAM,SAAS,MAAM,KAAK,OAAO,KAAK,GAAG;AACzC,UAAI,WAAW,UAAW,SAAQ,IAAI,KAAK,MAAM;AAAA,IACnD;AACA,UAAM,SAAS,MAAM,KAAK,OAAO,CAAC,QAAQ;AACxC,iBAAW,CAAC,KAAK,MAAM,KAAK,SAAS;AACnC,cAAM,MAAM,IAAI,KAAK,GAAG;AACxB,YAAI,QAAQ,UAAa,IAAI,GAAG,cAAc,KAAM;AACpD,YAAI,WAAW,UAAW,KAAI,KAAK,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,EAAE,IAAI,IAAI,GAAG,MAAM,KAAK,IAAI,EAAE,YAAY,GAAG,WAAW,KAAK,EAAE;AAAA,iBAC7G,IAAI,MAAM,QAAW;AAAE,gBAAM,EAAE,GAAG,IAAI,GAAG,KAAK,IAAI;AAAK,cAAI,KAAK,GAAG,IAAI;AAAA,QAAuB;AAAA,MACzG;AAAA,IACF,CAAC;AACD,WAAO,EAAE,QAAQ,OAAO,QAAQ,QAAQ;AAAA,EAC1C;AAAA;AAAA;AAAA,EAKA,MAAM,UAA0F;AAC9F,UAAM,SAAS,MAAM,KAAK,KAAK;AAC/B,QAAI,OAAO,WAAW,KAAM,QAAO,EAAE,QAAQ,OAAO,WAAW,cAAc,cAAc,eAAe,UAAU,EAAE;AACtH,UAAM,MAAM,OAAO;AACnB,UAAM,MAAM,KAAK,IAAI,EAAE,QAAQ;AAC/B,UAAM,QAAQ,IAAI,IAAI,OAAO,QAAQ,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,KAAKA,SAAQ,GAAG,CAAC,CAAU,CAAC;AAChG,QAAI,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,CAAC,KAAK,SAAS,MAAM,MAAM,CAAC;AACnE,QAAI,aAAa,OAAO,QAAQ,IAAI,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,MAAM,QAAQ,GAAG,MAAM,MAAS,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,MAAM,MAAM,IAAI,GAAG,GAAI,CAAC;AACzI,UAAM,QAAQ,OAAO,QAAQ,IAAI,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC,IAAI,KAAK,MAAM,MAAM,CAAC,CAAC;AAC7G,UAAM,SAAS,oBAAI,IAAY;AAC/B,UAAM,OAAO,CAAC,QAAsB;AAClC,UAAI,OAAO,IAAI,GAAG,EAAG;AACrB,aAAO,IAAI,GAAG;AACd,eAAS,MAAM,IAAI,GAAG;AACtB,UAAI,QAAQ,IAAI,KAAK,GAAG,CAAE,MAAM,OAAW,eAAc,MAAM,IAAI,GAAG;AAAA,IACxE;AACA,QAAI,QAAQ,KAAK,OAAO,cAAc;AACpC,iBAAW,CAAC,KAAK,GAAG,KAAK,OAAO;AAC9B,YAAI,SAAS,KAAK,OAAO,aAAc;AACvC,cAAM,OAAO,IAAI,MAAM,UAAa,KAAK,MAAM,IAAI,CAAC,KAAK;AACzD,YAAI,QAAQ,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI,KAAK,OAAO,aAAc,MAAK,GAAG;AAAA,MAC1E;AACA,iBAAW,CAAC,KAAK,GAAG,KAAK,OAAO;AAC9B,YAAI,SAAS,KAAK,OAAO,gBAAgB,cAAc,KAAK,OAAO,eAAe,KAAK,OAAO,cAAe;AAC7G,YAAI,QAAQ,GAAG,MAAM,OAAW,MAAK,GAAG;AAAA,MAC1C;AACA,iBAAW,CAAC,GAAG,KAAK,OAAO;AACzB,YAAI,SAAS,KAAK,OAAO,aAAc;AACvC,aAAK,GAAG;AAAA,MACV;AAAA,IACF;AAEA,UAAM,SAAS,oBAAI,IAA2C;AAC9D,eAAW,OAAO,QAAQ;AACxB,YAAM,MAAM,IAAI,KAAK,GAAG;AACxB,YAAM,OAAO,WAAW,IAAI,KAAK,KAAK,MAAM,IAAI,CAAC,KAAK,GAAG,EAAE,eAAe,CAAC;AAC3E,YAAM,QAAQ,OAAO,IAAI,IAAI,KAAK,CAAC;AACnC,YAAM,GAAG,IAAI;AACb,aAAO,IAAI,MAAM,KAAK;AAAA,IACxB;AACA,eAAW,CAAC,MAAM,IAAI,KAAK,QAAQ;AACjC,YAAM,OAAO,UAAU,IAAI,IAAI,KAAK,KAAK,YAAY;AACnD,cAAME,QAAO,MAAM,KAAK,QAAQ,UAAU,UAAU,IAAI,EAAE;AAC1D,YAAIA,MAAK,WAAW,iBAAkBA,MAAK,WAAW,aAAaA,MAAK,SAAS,OAAY,OAAM,IAAI,MAAM,iCAAiC;AAC9I,cAAM,WAAWA,MAAK,WAAW,OAAO,qBAAqBA,MAAK,KAAK,IAAI;AAC3E,cAAM,SAAS,EAAE,GAAI,YAAY,EAAE,GAAG,EAAE,GAAI,MAAM,EAAE,GAAI,UAAU,QAAQ,CAAC,GAAI,GAAG,KAAK,EAAE;AACzF,cAAM,YAAYA,MAAK,WAAW,QAAQA,MAAK,WAAW,YAAY,EAAE,SAASA,MAAK,KAAM,IAAI,EAAE,aAAa,IAAa;AAC5H,eAAO,EAAE,OAAO,MAAM,KAAK,QAAQ,WAAW,UAAU,IAAI,IAAI,QAAQ,SAAS,GAAG,WAAW,MAAM,OAAU;AAAA,MACjH,CAAC;AAAA,IACH;AAEA,UAAM,oBAA8B,CAAC;AACrC,eAAW,aAAa,IAAI,YAAY;AACtC,UAAI,MAAM,KAAK,MAAM,UAAU,EAAE,KAAK,KAAK,OAAO,eAAgB;AAClE,YAAM,aAAa,kBAAkB,UAAU,GAAG;AAClD,YAAM,OAAO,WAAW,SAAS,WAAW,MAAM,KAAK,QAAQ,QAAQ,UAAU,GAAG,GAAG,WAAW,eAAe,MAAM,KAAK,QAAQ,UAAU,UAAU,GAAG,GAAG,WAAW;AACzK,UAAI,KAAM,mBAAkB,KAAK,UAAU,GAAG;AAAA,IAChD;AACA,UAAM,SAAS,MAAM,KAAK,OAAO,CAAC,YAAY;AAC5C,iBAAW,CAAC,MAAM,IAAI,KAAK,QAAQ;AACjC,YAAI,UAAU,QAAQ,SAAS,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI;AAChE,YAAI,YAAY,OAAW,SAAQ,SAAS,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;AAC5E,mBAAW,OAAO,OAAO,KAAK,IAAI,GAAG;AACnC,gBAAM,MAAM,QAAQ,KAAK,GAAG;AAC5B,cAAI,QAAQ,OAAW,MAAK,kBAAkB,SAAS,KAAK,GAAG;AAC/D,cAAI,CAAC,QAAQ,IAAI,SAAS,GAAG,EAAG,SAAQ,IAAI,KAAK,GAAG;AAAA,QACtD;AAAA,MACF;AACA,cAAQ,aAAa,QAAQ,WAAW,OAAO,CAAC,cAAc,CAAC,kBAAkB,SAAS,UAAU,GAAG,CAAC;AAAA,IAC1G,CAAC;AACD,WAAO,EAAE,QAAQ,OAAO,QAAQ,UAAU,OAAO,KAAK;AAAA,EACxD;AACF;","names":["import_sha256","util","object","objectUtil","errorUtil","errorMap","base64","ctx","result","issues","elements","processed","base","result","r","ZodFirstPartyTypeKind","import_ed25519","coerce","encode","length","i","j","decode","code","equals","base","cid","baseCache","cache","headerBytes","ed25519","cid","ED25519_VERIFY_OPTS","ed25519","sha256","ED25519_VERIFY_OPTS","KEY_LENGTH","cid","KEY_LENGTH","subtle","base","record","decryptEnvelope","code","import_links","record","record","read","isObject","record","basename","fail","cid","import_blake3","import_ed25519","import_sha256","empty","equals","coerce","base","encode","length","i","j","decode","src","_brrp__multiformats_scope_baseX","base_x_default","Encoder","Decoder","or","ComposedDecoder","Codec","from","encode","decode","baseX","base_x_default","coerce","createAlphabetIdx","rfc4648","base32","rfc4648","base32upper","base32pad","base32padupper","base32hex","base32hexupper","base32hexpad","base32hexpadupper","base32z","base36","baseX","base36upper","base58btc","baseX","base58flickr","encode_1","encode","MSB","REST","MSBALL","INT","decode","read","MSB$1","REST$1","N1","N2","N3","N4","N5","N6","N7","N8","N9","length","varint","_brrp_varint","varint_default","decode","code","varint_default","encodeTo","encodingLength","create","code","encodingLength","encodeTo","Digest","decode","coerce","equals","format","base","toStringV0","baseCache","base58btc","toStringV1","base32","cache","baseCache","cid","CID","_CID","code","DAG_PB_CODE","SHA_256_CODE","create","equals","base","format","encodeCID","cidSymbol","decode","coerce","Digest","length","parseCIDtoBytes","base58btc","base32","base36","toStringV0","toStringV1","encodingLength","encodeTo","import_ed25519","import_ed25519","import_sha256","code","SHA256_CODE","CID","code","create","SHA256_CODE","base32","length","value","import_ed25519","cid","decode","length","read","import_ed25519","import_blake3","CID","create","cid","CID","create","record","code","bytesOf","isObject","read","base","record","cid","state","decision"]}
|