@ai-matrx/content-ir 0.24.5 → 0.24.7

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../source/fence-nesting.ts","../source/code-ranges.ts","../source/xml-tag.ts","../surfaces/json-kind-signal.ts","../surfaces/embedded-kind-json.ts","../core/kind-schema.types.ts","../surfaces/instance-title.ts","../surfaces/kind-markdown-utils.ts","../surfaces/kind-value-markdown.ts","../surfaces/kind-text-to-markdown.ts","../surfaces/kind-one-line.ts","../surfaces/quoted-kind-lift.ts","../surfaces/markdown-escaped-kind.ts","../surfaces/kind-image-alt.ts","../surfaces/kind-text-label.ts","../surfaces/legacy-quiz-envelope.ts","../core/ir-types.ts","../core/envelope-value.ts","../surfaces/envelope-parity.ts","../surfaces/decision-answers-ids.ts"],"names":["state","quoteDepth","inside","KIND_KEY","humanizeIdentifier","isKindValue","isRecord","JSON_FENCE_LANGS","last","QUOTE_PREFIX","prefix","rest","HAS_ZERO_WIDTH"],"mappings":"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","file":"surfaces.cjs","sourcesContent":["// ─────────────────────────────────────────────────────────────────────────\n// THE ONE NESTED-FENCE RULE for a ```markdown / ```md / ```mdx fence.\n//\n// Source of truth (moved here from matrx-frontend\n// components/markdown-core/fence-nesting.ts, 2026-09-25). Consumers: the\n// source tokenizer (source/tokenize.ts), matrx-frontend's static splitter and\n// live StreamBlockAccumulator, and — by conformance, since Python cannot\n// import this — aidream matrx-ai `processing/blocks/fence_nesting.py`, which\n// runs the SAME generated vectors (`__tests__/fence-nesting-vectors.json`,\n// byte-identical copy at packages/matrx-ai/tests/fixtures/).\n//\n// Models write a markdown document inside a ```markdown fence and put their\n// own ```python … ``` blocks inside it with the SAME three backticks. Under\n// strict CommonMark the first inner bare ``` closes the outer fence: the\n// document ends mid-way, the rest leaks out as prose, and the outer closing\n// ``` opens a phantom code block that swallows everything after it.\n//\n// The rule, for MARKDOWN-language fences only (every other language keeps\n// strict CommonMark — a ```bash heredoc is code, not a document):\n// - a fence line WITH an info string (```python) opens a nested fence;\n// - a bare fence line (``` with at least the opener's tick count) closes\n// the innermost nested fence while one is open, and closes the outer\n// fence only when none is;\n// - a longer outer fence (````markdown) keeps working exactly as before —\n// an inner ``` is shorter than the opener, so it is plain content;\n// - if the text ENDS with a nested fence still open, the extraction is\n// redone under strict CommonMark (an unclosed inner fence must not eat\n// the outer closer and the rest of the message).\n// ─────────────────────────────────────────────────────────────────────────\n\n/** Fence languages whose body is itself a markdown document. */\nexport const NESTING_FENCE_LANGUAGES: ReadonlySet<string> = new Set([\n \"markdown\",\n \"md\",\n \"mdx\",\n]);\n\n/** True when a fence opened with this info-string language nests inner fences. */\nexport function fenceNestsInnerFences(language: string | undefined | null): boolean {\n return !!language && NESTING_FENCE_LANGUAGES.has(language.toLowerCase());\n}\n\nexport type InnerFenceLine =\n /** Not a fence line — ordinary content of the outer fence. */\n | \"content\"\n /** ```lang inside a markdown fence — content, and one level deeper. */\n | \"open-nested\"\n /** Bare ``` that closes the innermost nested fence — content, one level up. */\n | \"close-nested\"\n /** Bare ``` that closes the OUTER fence. */\n | \"close-outer\";\n\n/**\n * Classify one line inside an open backtick fence, already trimmed with\n * {@link trimFenceLine} (never a language's own `trim()`).\n *\n * @param trimmed the line with surrounding whitespace removed\n * @param openTicks backtick count of the outer fence's opener\n * @param nests whether the outer fence follows the nesting rule\n * @param nestedDepth how many nested fences are open right now\n */\n/**\n * The whitespace a fence line may carry around its backticks and info string:\n * CommonMark's ASCII whitespace — space, tab, LF, CR, form feed, vertical tab.\n * Defined HERE, not by a language's `trim()`: JavaScript's `trim()` also strips\n * U+FEFF, U+00A0 and the Unicode spaces, while Python's `strip()` also strips\n * U+0085 and U+001C–U+001F — which made the two twins disagree on lines such\n * as ```` ```\\uFEFF ```` (verify-RC-B3 residual R4). Every caller trims a line\n * with `trimFenceLine` before classifying it; the Python twin mirrors both.\n */\nexport const FENCE_WHITESPACE = \" \\t\\n\\r\\f\\v\";\n\nfunction isFenceWhitespace(ch: string | undefined): boolean {\n return ch !== undefined && ch !== \"\" && FENCE_WHITESPACE.includes(ch);\n}\n\n/** Strip {@link FENCE_WHITESPACE} (and nothing else) from both ends of a line. */\nexport function trimFenceLine(line: string): string {\n let start = 0;\n let end = line.length;\n while (start < end && isFenceWhitespace(line[start])) start++;\n while (end > start && isFenceWhitespace(line[end - 1])) end--;\n return start === 0 && end === line.length ? line : line.slice(start, end);\n}\n\n/**\n * The whitespace around a fence OPENER and inside its info string. The\n * renderer finds openers with JavaScript's `String#trim()` and splits the info\n * string on `/\\s/`; this set IS that definition, written out so the Python\n * twin can match it exactly — ECMAScript WhiteSpace + LineTerminator. It\n * differs from Python's `str.split()` on U+0085 and U+001C–U+001F (not JS\n * whitespace) and U+FEFF (JS whitespace) — verify-RC-B3 residual R4′.\n */\nexport const FENCE_OPENER_WHITESPACE =\n \"\\t\\n\\v\\f\\r \\u00a0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff\";\n\nfunction isOpenerWhitespace(ch: string | undefined): boolean {\n return ch !== undefined && ch !== \"\" && FENCE_OPENER_WHITESPACE.includes(ch);\n}\n\n/**\n * Parse a backtick fence OPENER line the way the renderer does: trim the line,\n * count the backtick run (3+), trim the rest, and take the first\n * whitespace-separated word as the language. null when the line opens nothing —\n * including when the info string holds a backtick (GFM / CommonMark 4.5:\n * \"```` code ````\" and \"``` `x` | b\" are code spans, never fences).\n */\nexport function parseFenceOpener(line: string): { ticks: number; lang: string } | null {\n let start = 0;\n let end = line.length;\n while (start < end && isOpenerWhitespace(line[start])) start++;\n while (end > start && isOpenerWhitespace(line[end - 1])) end--;\n let ticks = 0;\n while (start + ticks < end && line[start + ticks] === \"`\") ticks++;\n if (ticks < 3) return null;\n if (line.slice(start + ticks, end).includes(\"`\")) return null;\n let infoStart = start + ticks;\n while (infoStart < end && isOpenerWhitespace(line[infoStart])) infoStart++;\n let langEnd = infoStart;\n while (langEnd < end && !isOpenerWhitespace(line[langEnd])) langEnd++;\n return { ticks, lang: line.slice(infoStart, langEnd) };\n}\n\nexport function classifyInnerFenceLine(\n trimmed: string,\n openTicks: number,\n nests: boolean,\n nestedDepth: number,\n): InnerFenceLine {\n let ticks = 0;\n while (ticks < trimmed.length && trimmed[ticks] === \"`\") ticks++;\n if (ticks < 3) return \"content\";\n const info = trimFenceLine(trimmed.slice(ticks));\n if (info === \"\") {\n if (ticks < openTicks) return \"content\";\n if (nests && nestedDepth > 0) return \"close-nested\";\n return \"close-outer\";\n }\n // A fence line with an info string never closes anything (CommonMark).\n // Inside a markdown fence it opens a nested one — unless the outer opener is\n // LONGER, in which case CommonMark already treats the inner fence as content\n // and its bare closer can never reach the outer fence.\n if (nests && ticks >= openTicks && !info.includes(\"`\")) return \"open-nested\";\n return \"content\";\n}\n","/**\n * THE ONE CODE-RANGE RULE — where code is in markdown source, for every surface.\n *\n * Ruling (RC-B10, 2026-09-25, REGISTER rulings ledger): the rule is the\n * RENDERER's rule — what the chat renderer's splitter, the source tokenizer\n * and the Python block detector already agree on — made container-aware only\n * where the renderer hands a block to remark:\n * - a BACKTICK fence opens on a line whose whitespace-trimmed text starts\n * with ``` at ANY indent (so a fence inside a list item opens at any\n * depth), after stripping blockquote `>` prefixes;\n * - a TILDE fence opens at ≤ 3 spaces relative to its container (a list\n * item's content column, inside any `>` prefixes);\n * - a backtick fence closes by THE nested-fence rule (`fence-nesting.ts`,\n * with the strict-CommonMark retry when a nested fence is left open) or by\n * the renderer's line-end closer (`code```` with nothing after it); inside\n * a ```json fence a backtick run inside a JSON string is text;\n * - a fence inside a blockquote ends where the blockquote ends;\n * - strict CommonMark's \"4+ spaces is not a fence\" is rejected on purpose:\n * users see what the renderer's splitter draws.\n * Inline code spans pair equal-length backtick runs inside one paragraph.\n *\n * Order is the renderer's: phase 1 is the splitter — every raw line whose\n * trimmed text starts with ``` opens a block, before remark sees anything\n * (so `- ```` can never close on a later raw ``` line; that line opens a\n * splitter block instead). Phase 2 is remark inside each prose segment the\n * splitter left: blockquote fences, fences on a list-marker line, tilde\n * fences, and code spans — none can run past its segment. A ``` line inside a\n * tilde fence is therefore drawn as code up to ITS closer (remark's reading\n * here in `findCodeRanges`); the tokenizer's tilde island ends at its closer.\n *\n * Consumers: `findCodeRanges` (math pairing, kit's delimiter guard, chat's\n * speakable text, print, every matrx-frontend walker), and the line-level\n * primitives `fenceOpenerOf` / `closeFence`, which the tokenizer and the\n * renderer's splitters drive line by line. A private copy of fence or\n * code-span detection anywhere fails `__tests__/one-code-range-rule.test.ts`.\n */\nimport { classifyInnerFenceLine, fenceNestsInnerFences, parseFenceOpener, trimFenceLine } from \"./fence-nesting\";\n\nexport interface CodeRange {\n /** UTF-16 offset of the first character (the fence line start, or the opening backtick run). */\n start: number;\n /** Offset just past the closing fence line's content / closing backtick run (the fence's last line when unclosed). */\n end: number;\n kind: \"fence\" | \"span\";\n}\n\nexport interface FenceOpener {\n char: \"`\" | \"~\";\n /** Length of the opening run. */\n ticks: number;\n /** The info string's first word (\"\" when none). */\n lang: string;\n}\n\n/**\n * THE opener rule for one line's content (container prefixes already\n * removed; for a tilde fence, `content` starts at the container's column).\n */\nexport function fenceOpenerOf(content: string): FenceOpener | null {\n const t = content.trimStart();\n if (t.startsWith(\"```\")) {\n // THE opener parse: a backtick in the info string opens nothing (CommonMark 4.5).\n const parsed = parseFenceOpener(t);\n if (!parsed) return null;\n return { char: \"`\", ticks: parsed.ticks, lang: parsed.lang };\n }\n if (content.length - t.length <= 3 && t.startsWith(\"~~~\")) {\n const open = /^(~{3,})(.*)$/.exec(t);\n if (!open) return null;\n return { char: \"~\", ticks: (open[1] as string).length, lang: (open[2] as string).trim().split(/\\s/)[0] ?? \"\" };\n }\n return null;\n}\n\n/**\n * Does this line START a fenced code block? THE opener rule (`fenceOpenerOf`),\n * which follows CommonMark 4.5: a `~~~` run, or a backtick run whose info string\n * holds no backtick. Kept as a named predicate for block-boundary readers (a\n * table's end, source/gfm-table.ts).\n */\nexport function opensStrictFence(line: string): boolean {\n return fenceOpenerOf(line) !== null;\n}\n\n/** The lines a fence is read from. */\nexport interface FenceLines {\n count: number;\n /** Line `k`'s content (no terminator), or null when the fence's container has ended before it. */\n line(k: number): string | null;\n /** Streaming: line `k` has not ended yet, so it closes nothing. */\n openTail?(k: number): boolean;\n /**\n * Streaming: more lines may still arrive. The strict-CommonMark retry\n * applies only while the nested reading ends inside a nested fence — a\n * later line can close that nested fence, so a retry's closer is\n * undecided and the fence stays open (verify-RC-B3 F3).\n */\n streaming?: boolean;\n}\n\nexport interface FenceEnd {\n /** The closing line when `closed`; otherwise the fence's last line (text end, or the line before its container ended). */\n line: number;\n closed: boolean;\n}\n\n/**\n * THE closer rule, read line by line — the one implementation behind\n * `closeFence` and every streaming walker. Feed each following line\n * (container prefixes removed); `feed` returns true on the line that closes\n * the fence. A backtick fence closes by the nested-fence rule or the\n * renderer's line-end closer (`code````), and inside ```json a backtick run in\n * a JSON string is text; a tilde fence closes on `~~~` (≥ its length, ≤ 3\n * spaces). `nesting: false` forces strict CommonMark (the retry `closeFence`\n * makes when a nested fence is left open at the end; a streaming reader\n * cannot look ahead, so it reads with nesting and never retries).\n */\nconst LINE_START = { inString: false, escaped: false } as const;\n\nexport class FenceReader {\n readonly opener: FenceOpener;\n private depth = 0;\n /** A nested fence was opened at some point. */\n sawNested = false;\n private readonly isJson: boolean;\n private readonly nesting: boolean;\n private readonly tildeCloser: RegExp | null;\n\n constructor(\n opener: FenceOpener,\n options: { nesting?: boolean } = {},\n ) {\n this.opener = opener;\n this.isJson = opener.char === \"`\" && opener.lang === \"json\";\n this.nesting = opener.char === \"`\" && (options.nesting ?? fenceNestsInnerFences(opener.lang));\n this.tildeCloser = opener.char === \"~\" ? new RegExp(`^ {0,3}~{${opener.ticks},}[ \\\\t]*$`) : null;\n }\n\n /** How many nested fences are open right now. */\n get nestedDepth(): number {\n return this.depth;\n }\n\n feed(line: string): boolean {\n if (this.tildeCloser) return this.tildeCloser.test(line);\n const trimmedLine = trimFenceLine(line);\n const at = line.indexOf(\"```\");\n if (at === -1) return false;\n // Inside ```json a backtick run in a JSON string is text. The string state\n // is read per line: a JSON string never holds a raw newline, so a line that\n // ends inside one (`{\\\"__kind\\\":…}`, a cut value) ends it — carrying it on\n // swallowed the closer and everything after (never-raw R11 H2).\n if (this.isJson && jsonStringState(line, 0, at, LINE_START).inString) return false;\n if (trimmedLine.startsWith(\"```\")) {\n const kind = classifyInnerFenceLine(trimmedLine, this.opener.ticks, this.nesting, this.depth);\n if (kind === \"close-outer\") return true;\n if (kind === \"open-nested\") {\n this.depth++;\n this.sawNested = true;\n }\n if (kind === \"close-nested\") this.depth--;\n } else {\n // The renderer's line-end closer: `code```` with nothing after the run.\n const closeTicks = backtickRunLength(line, at);\n const after = trimFenceLine(line.slice(at + closeTicks));\n if (closeTicks >= this.opener.ticks && after === \"\" && this.depth === 0) return true;\n }\n return false;\n }\n}\n\n/** Where the fence opened on line `open` ends. */\nexport function closeFence(src: FenceLines, open: number, opener: FenceOpener): FenceEnd {\n const first = readFence(src, open, new FenceReader(opener));\n if (first.closed || !first.reader.sawNested || first.reader.nestedDepth <= 0) return { line: first.line, closed: first.closed };\n if (src.streaming) return { line: first.line, closed: false };\n const strict = readFence(src, open, new FenceReader(opener, { nesting: false }));\n return { line: strict.line, closed: strict.closed };\n}\n\nfunction readFence(src: FenceLines, open: number, reader: FenceReader): FenceEnd & { reader: FenceReader } {\n for (let k = open + 1; k < src.count; k++) {\n // Streaming: a bare ``` on the unfinished last line may still grow into ```bash.\n if (src.openTail?.(k)) continue;\n const line = src.line(k);\n if (line === null) return { line: k - 1, closed: false, reader };\n if (reader.feed(line)) return { line: k, closed: true, reader };\n }\n return { line: src.count - 1, closed: false, reader };\n}\n\n/** JSON-string state after scanning `line[from, upTo)` from the given state. */\nexport function jsonStringState(\n line: string,\n from: number,\n upTo: number,\n state: { inString: boolean; escaped: boolean },\n): { inString: boolean; escaped: boolean } {\n let { inString, escaped } = state;\n for (let idx = from; idx < upTo; idx++) {\n const ch = line[idx];\n if (escaped) {\n escaped = false;\n continue;\n }\n if (ch === \"\\\\\" && inString) {\n escaped = true;\n continue;\n }\n if (ch === '\"') inString = !inString;\n }\n return { inString, escaped };\n}\n\nexport function backtickRunLength(str: string, pos: number): number {\n let n = 0;\n while (pos + n < str.length && str[pos + n] === \"`\") n++;\n return n;\n}\n\n// ── the whole-text scan ────────────────────────────────────────────────────\n\n/** Blockquote prefix: how many `>` markers open the line, and where its content starts. */\nfunction quotePrefix(line: string): { depth: number; offset: number } {\n let depth = 0;\n let offset = 0;\n for (;;) {\n const m = /^ {0,3}> ?/.exec(line.slice(offset));\n if (!m) return { depth, offset };\n depth++;\n offset += m[0].length;\n }\n}\n\n/** Strip exactly `depth` blockquote markers; null when the line has fewer (the blockquote ended). */\nfunction stripQuotes(line: string, depth: number): string | null {\n let offset = 0;\n for (let d = 0; d < depth; d++) {\n const m = /^ {0,3}> ?/.exec(line.slice(offset));\n if (!m) return null;\n offset += m[0].length;\n }\n return line.slice(offset);\n}\n\nconst LIST_ITEM = /^( *)([-*+]|\\d{1,9}[.)])( +|\\t|$)/;\n\nfunction leadingSpaces(s: string): number {\n let i = 0;\n while (i < s.length && s[i] === \" \") i++;\n return i;\n}\n\ninterface Scan {\n ranges: CodeRange[];\n /** Every fence as lines: [opener line, last line, closed]. */\n fences: Array<[number, number, boolean]>;\n /** Paragraph runs outside fences, [start, end), for code-span pairing. */\n paragraphs: Array<[number, number]>;\n /** Text ends inside an open fence. */\n endsInFence: boolean;\n /** Start of the final, still-growing paragraph (streaming rule), -1 if none. */\n pendingPara: number;\n}\n\nfunction scan(text: string): Scan {\n const starts: number[] = [];\n const ends: number[] = [];\n for (let pos = 0; ; ) {\n const nl = text.indexOf(\"\\n\", pos);\n const lineEnd = nl === -1 ? text.length : nl;\n starts.push(pos);\n ends.push(lineEnd > pos && text.charCodeAt(lineEnd - 1) === 13 ? lineEnd - 1 : lineEnd);\n if (nl === -1) break;\n pos = nl + 1;\n }\n const count = starts.length;\n const raw = (k: number) => text.slice(starts[k] as number, ends[k] as number);\n const out: Scan = { ranges: [], fences: [], paragraphs: [], endsInFence: false, pendingPara: -1 };\n\n // Phase 1 — the renderer's splitter: every line whose trimmed text starts\n // with ``` opens a code block at ANY indent, before remark sees anything.\n const rawLines: FenceLines = { count, line: raw };\n let segment = 0;\n for (let k = 0; k < count; k++) {\n const opener = fenceOpenerOf(raw(k));\n if (!opener || opener.char !== \"`\") continue;\n prose(text, starts, ends, raw, segment, k, out);\n const end = closeFence(rawLines, k, opener);\n out.ranges.push({ start: starts[k] as number, end: ends[end.line] as number, kind: \"fence\" });\n out.fences.push([k, end.line, end.closed]);\n out.pendingPara = -1;\n if (!end.closed && end.line === count - 1) out.endsInFence = true;\n k = end.line;\n segment = k + 1;\n }\n prose(text, starts, ends, raw, segment, count, out);\n return out;\n}\n\n/**\n * Phase 2 — remark, inside one prose segment [from, to) the splitter left:\n * fences in blockquotes, on a list-marker line, and tilde fences (relative to\n * their container), plus the paragraphs whose backtick runs pair as spans. A\n * fence here can never run past its segment: the splitter's block begins there.\n */\nfunction prose(\n text: string,\n starts: number[],\n ends: number[],\n raw: (k: number) => string,\n from: number,\n to: number,\n out: Scan,\n): void {\n let para = -1;\n let quoteDepth = 0;\n let lists: number[] = []; // content columns of the open list items (inside the quote prefix)\n const closePara = (at: number) => {\n if (para !== -1) out.paragraphs.push([para, at]);\n para = -1;\n };\n for (let k = from; k < to; k++) {\n const line = raw(k);\n const { depth, offset } = quotePrefix(line);\n if (depth !== quoteDepth) {\n quoteDepth = depth;\n lists = [];\n }\n let content = line.slice(offset);\n if (content.trim() === \"\") {\n closePara(starts[k] as number);\n // The empty \"line\" after a final newline is not a blank line: the next\n // line may still join this paragraph.\n if (!(k === starts.length - 1 && line === \"\")) out.pendingPara = -1;\n continue;\n }\n const indent = leadingSpaces(content);\n while (lists.length && indent < (lists[lists.length - 1] as number)) lists.pop();\n const item = LIST_ITEM.exec(content);\n let column = lists.length ? (lists[lists.length - 1] as number) : 0;\n if (item) {\n const gap = (item[3] as string).length;\n column = (item[1] as string).length + (item[2] as string).length + (gap >= 1 && gap <= 4 ? gap : 1);\n lists.push(column);\n content = content.slice(Math.min(column, content.length));\n } else {\n content = content.slice(Math.min(indent, column));\n }\n const opener = fenceOpenerOf(content);\n if (!opener) {\n if (para === -1) para = starts[k] as number;\n if (out.pendingPara === -1) out.pendingPara = starts[k] as number;\n continue;\n }\n closePara(starts[k] as number);\n out.pendingPara = -1;\n const col = column;\n const src: FenceLines = {\n count: to,\n line: (j) => {\n const inner = stripQuotes(raw(j), depth);\n if (inner === null) return null;\n if (opener.char === \"~\" && col > 0) {\n const ind = leadingSpaces(inner);\n if (inner.trim() !== \"\" && ind < col) return null; // the list item ended\n return inner.slice(Math.min(ind, col));\n }\n return inner;\n },\n };\n const end = closeFence(src, k, opener);\n out.ranges.push({ start: starts[k] as number, end: ends[end.line] as number, kind: \"fence\" });\n out.fences.push([k, end.line, end.closed]);\n if (!end.closed && end.line === starts.length - 1) out.endsInFence = true;\n k = end.line;\n }\n closePara(to < starts.length ? (starts[to] as number) : text.length);\n}\n\n/**\n * THE code-span pairing table for one paragraph, text[from, to): a backtick\n * run closes at the first LATER run of exactly its length; a run with none is\n * literal text. `findCodeRanges` pairs runs in order; the tokenizer's inline\n * scanner asks `next` in the renderer's leftmost-first inline order.\n */\nexport class BacktickRuns {\n /** Every run, in order: [start, length]. */\n readonly all: Array<[number, number]> = [];\n private readonly byLength = new Map<number, number[]>();\n private readonly indexOf = new Map<number, number>();\n\n constructor(text: string, from: number, to: number) {\n for (let k = from; k < to; ) {\n if (text.charCodeAt(k) !== 96) {\n k++;\n continue;\n }\n let len = 1;\n while (k + len < to && text.charCodeAt(k + len) === 96) len++;\n this.indexOf.set(k, this.all.length);\n this.all.push([k, len]);\n const list = this.byLength.get(len);\n if (list) list.push(k);\n else this.byLength.set(len, [k]);\n k += len;\n }\n }\n\n /** Start of the first run of exactly `n` backticks at or after `after`, or -1. */\n next(n: number, after: number): number {\n const list = this.byLength.get(n);\n if (!list) return -1;\n let lo = 0;\n let hi = list.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if ((list[mid] as number) < after) lo = mid + 1;\n else hi = mid;\n }\n return list[lo] ?? -1;\n }\n\n /** Index of the run starting at `start` in `all`. */\n index(start: number): number {\n return this.indexOf.get(start) ?? -1;\n }\n}\n\nfunction codeSpans(text: string, from: number, to: number, out: CodeRange[]): void {\n // Left to right, exactly as the renderer (remark) and the tokenizer's inline\n // scanner read: a backslash escapes the next character, so an escaped\n // backtick opens nothing; a run closes at the first LATER run of exactly its\n // length (inside code a backslash is literal, so a closer may follow one).\n let runs: BacktickRuns | null = null;\n for (let i = from; i < to; ) {\n const ch = text.charCodeAt(i);\n if (ch === 92) {\n i += 2;\n continue;\n }\n if (ch !== 96) {\n i++;\n continue;\n }\n const n = backtickRunLength(text, i);\n const len = Math.min(n, to - i);\n runs ??= new BacktickRuns(text, from, to);\n const close = runs.next(len, i + len);\n if (close === -1) {\n i += len;\n continue;\n }\n out.push({ start: i, end: close + len, kind: \"span\" });\n i = close + len;\n }\n}\n\n/**\n * Every code range in the text — fences (by the renderer's rule above) and\n * inline code spans — sorted by start. Linear: one pass over lines, one over\n * each paragraph's backtick runs.\n */\nexport function findCodeRanges(text: string): CodeRange[] {\n const s = scan(text);\n const ranges = [...s.ranges];\n for (const [from, to] of s.paragraphs) codeSpans(text, from, to, ranges);\n return ranges.sort((a, b) => a.start - b.start);\n}\n\n/**\n * Rewrite every code range (fences and spans, by THE rule) through `fn`; text\n * outside code is kept byte for byte. The one way to strip, replace or\n * placeholder code in markdown — never a private /```…```/ regex.\n */\nexport function mapCodeRanges(text: string, fn: (range: CodeRange, raw: string) => string): string {\n let out = \"\";\n let at = 0;\n for (const r of findCodeRanges(text)) {\n if (r.start < at) continue;\n out += text.slice(at, r.start) + fn(r, text.slice(r.start, r.end));\n at = r.end;\n }\n return out + text.slice(at);\n}\n\n/**\n * The code SPANS in one piece of INLINE content — a table cell, a heading's\n * text, a link label — where no block structure exists, so a line opening with\n * three or more backticks is a code span, never a fence (```` `` code `` ```` in a\n * GFM cell). Same scanner and escape rules as `findCodeRanges`' span pass.\n */\nexport function findInlineCodeSpans(text: string): CodeRange[] {\n const ranges: CodeRange[] = [];\n codeSpans(text, 0, text.length, ranges);\n return ranges.sort((a, b) => a.start - b.start);\n}\n\n/** Rewrite every code SPAN of inline content through `fn` (see `findInlineCodeSpans`); other text is kept byte for byte. */\nexport function mapInlineCodeSpans(text: string, fn: (range: CodeRange, raw: string) => string): string {\n let out = \"\";\n let at = 0;\n for (const r of findInlineCodeSpans(text)) {\n if (r.start < at) continue;\n out += text.slice(at, r.start) + fn(r, text.slice(r.start, r.end));\n at = r.end;\n }\n return out + text.slice(at);\n}\n\n/** A code span's text (CommonMark): the backtick runs off, then one padding space each side when both are there and the content is not all spaces. */\nexport function codeSpanText(raw: string): string {\n const ticks = backtickRunLength(raw, 0);\n const inner = raw.slice(ticks, raw.length - ticks);\n return inner.length >= 2 && inner.startsWith(\" \") && inner.endsWith(\" \") && inner.trim() !== \"\" ? inner.slice(1, -1) : inner;\n}\n\n/**\n * A fence range's parts: its opener, its body (the lines between the opener\n * and the closer, blockquote prefixes kept), and whether it closed. Reads\n * `raw` exactly as `findCodeRanges` returned it.\n */\nexport function fenceParts(raw: string): { opener: FenceOpener; body: string; closed: boolean } | null {\n const lines = raw.split(\"\\n\").map((l) => (l.endsWith(\"\\r\") ? l.slice(0, -1) : l));\n const { offset } = quotePrefix(lines[0] ?? \"\");\n const opener = fenceOpenerOf((lines[0] ?? \"\").slice(offset).replace(/^ *(?:[-*+]|\\d{1,9}[.)])(?= |\\t|$) ?/, \"\"));\n if (!opener) return null;\n const rest = lines.slice(1);\n const closed = rest.length > 0 && new FenceReader(opener, { nesting: false }).feed(rest[rest.length - 1] as string);\n if (!closed) return { opener, body: rest.join(\"\\n\"), closed };\n const last = rest[rest.length - 1] as string;\n // The renderer's line-end closer (`code````): the text before the run is code.\n const before = trimFenceLine(last).startsWith(\"```\") ? \"\" : last.slice(0, last.indexOf(\"```\"));\n return { opener, body: [...rest.slice(0, -1), ...(before.trim() ? [before] : [])].join(\"\\n\"), closed };\n}\n\nexport type FenceLineKind = \"prose\" | \"open\" | \"body\" | \"close\";\n\n/**\n * Where each line (the text split on \"\\n\") sits relative to the fences\n * `findCodeRanges` finds: its opener, its body, its closer, or prose. For a\n * line walker that must skip code — one rule, never a private `inFence` toggle.\n */\nexport function fenceLineKinds(text: string): FenceLineKind[] {\n const s = scan(text);\n let count = 1;\n for (let i = text.indexOf(\"\\n\"); i !== -1; i = text.indexOf(\"\\n\", i + 1)) count++;\n const kinds = new Array<FenceLineKind>(count).fill(\"prose\");\n for (const [open, last, closed] of s.fences) {\n kinds[open] = \"open\";\n for (let k = open + 1; k <= last; k++) kinds[k] = \"body\";\n if (closed && last > open) kinds[last] = \"close\";\n }\n return kinds;\n}\n\n/**\n * STREAMING: where the last, still-growing paragraph (no blank line or fence\n * after it) holds a backtick run that a later run could still close — a run\n * with no later run of its length, or the run touching the end of the text\n * (it may still lengthen). Such a code span can yet swallow any `$$` after it,\n * so a streaming tokenizer treats text from there as provisional. -1 if none.\n */\nexport function pendingCodeSpanStart(text: string): number {\n const n = text.length;\n if (n === 0 || /\\n[ \\t]*\\n[ \\t]*$/.test(text)) return -1;\n // An open last line that is only whitespace or blockquote markers SO FAR is\n // not a blank line yet: its next byte may continue the paragraph\n // (verify-RC-B3 F3: `\\n ` + `and\\``, `\\n>` + `<\\`\\`\\``).\n const lastLine = text.slice(text.lastIndexOf(\"\\n\") + 1);\n if (lastLine && /^(?: {0,3}>[ \\t]?)*[ \\t\\r]*$/.test(lastLine)) return pendingCodeSpanStart(`${text}x`);\n const s = scan(text);\n const para = s.pendingPara;\n if (s.endsInFence || para === -1) return -1;\n const runs: Array<[number, number]> = [];\n for (let k = para; k < n; ) {\n if (text.charCodeAt(k) !== 96) {\n k++;\n continue;\n }\n let len = 1;\n while (k + len < n && text.charCodeAt(k + len) === 96) len++;\n runs.push([k, len]);\n k += len;\n }\n // Pair runs the way findCodeRanges does, treating a run that touches the end\n // as still growing (it matches nothing yet); the first run left open is pending.\n const growing = (r: number) => {\n const [start, len] = runs[r] as [number, number];\n return start + len === n;\n };\n for (let r = 0; r < runs.length; ) {\n if (growing(r)) return (runs[r] as [number, number])[0];\n const len = (runs[r] as [number, number])[1];\n let j = r + 1;\n while (j < runs.length && ((runs[j] as [number, number])[1] !== len || growing(j))) j++;\n if (j >= runs.length) return (runs[r] as [number, number])[0];\n r = j + 1;\n }\n return -1;\n}\n","/**\n * XML tag reading + the generic-container balance scanner.\n *\n * Ported VERBATIM (behaviour) from matrx-frontend\n * `components/mardown-display/blocks/xml/readXmlTag.ts` and the\n * `XmlContainerTracker` in\n * `components/mardown-display/markdown-classification/processors/utils/content-splitter-v2.ts`\n * so the source tokenizer ends a generic XML section exactly where the\n * renderer does. Fences inside the section are found by THE one code-range\n * rule (source/code-ranges.ts `fenceOpenerOf` + `FenceReader`), which the\n * renderer's splitter imports too (RC-B10).\n */\nimport { FenceReader, fenceOpenerOf } from \"./code-ranges\";\n\nexport interface ReadXmlTag {\n tagName: string;\n raw: string;\n isClosing: boolean;\n isSelfClosing: boolean;\n attributes: Array<{ name: string; value: string }>;\n}\n\nconst XML_NAME_START = /[A-Za-z_]/;\nconst XML_NAME_CHARACTER = /[\\w.:-]/;\nconst WHITESPACE = /\\s/;\n\n/**\n * `find(needle, from)` must behave like `content.indexOf(needle, from)`; the\n * tokenizer passes a cached occurrence index so a text full of unclosed\n * attribute quotes stays linear. Behaviour is identical either way.\n */\nexport function readXmlTag(\n content: string,\n start: number,\n find: (needle: string, from: number) => number = (needle, from) => content.indexOf(needle, from),\n): ReadXmlTag | null {\n // A tag starts with `<` — without this, `description: >-` read as a tag\n // named \"escription:\" (RC-B3r).\n if (content[start] !== \"<\") return null;\n let cursor = start + 1;\n const isClosing = content[cursor] === \"/\";\n if (isClosing) cursor++;\n if (!XML_NAME_START.test(content[cursor] ?? \"\")) return null;\n const nameStart = cursor;\n while (XML_NAME_CHARACTER.test(content[cursor] ?? \"\")) cursor++;\n const tagName = content.slice(nameStart, cursor);\n const attributes: Array<{ name: string; value: string }> = [];\n if (isClosing) {\n while (WHITESPACE.test(content[cursor] ?? \"\")) cursor++;\n if (content[cursor] !== \">\") return null;\n return {\n tagName,\n raw: content.slice(start, cursor + 1),\n isClosing,\n isSelfClosing: false,\n attributes,\n };\n }\n while (cursor < content.length) {\n while (WHITESPACE.test(content[cursor] ?? \"\")) cursor++;\n if (content[cursor] === \">\")\n return {\n tagName,\n raw: content.slice(start, cursor + 1),\n isClosing,\n isSelfClosing: false,\n attributes,\n };\n if (content[cursor] === \"/\") {\n cursor++;\n while (WHITESPACE.test(content[cursor] ?? \"\")) cursor++;\n if (content[cursor] !== \">\") return null;\n return {\n tagName,\n raw: content.slice(start, cursor + 1),\n isClosing,\n isSelfClosing: true,\n attributes,\n };\n }\n if (!XML_NAME_START.test(content[cursor] ?? \"\")) return null;\n const attributeStart = cursor;\n while (XML_NAME_CHARACTER.test(content[cursor] ?? \"\")) cursor++;\n const name = content.slice(attributeStart, cursor);\n while (WHITESPACE.test(content[cursor] ?? \"\")) cursor++;\n if (content[cursor] !== \"=\") return null;\n cursor++;\n while (WHITESPACE.test(content[cursor] ?? \"\")) cursor++;\n const quote = content[cursor];\n if (quote !== '\"' && quote !== \"'\") return null;\n const valueStart = ++cursor;\n const valueEnd = find(quote, valueStart);\n if (valueEnd === -1) return null;\n cursor = valueEnd;\n attributes.push({ name, value: content.slice(valueStart, cursor) });\n cursor++;\n }\n return null;\n}\n\nfunction isEscapedBacktick(line: string, offset: number): boolean {\n let slashes = 0;\n for (let i = offset - 1; line[i] === \"\\\\\"; i--) slashes++;\n return slashes % 2 === 1;\n}\n\n/**\n * Balances ONE unknown root tag line by line, ignoring lookalike tags inside\n * fenced code, inline code spans, comments and CDATA. `consumeLine` returns\n * the offset (within that line) just past the root's closing tag, or null.\n */\nexport class XmlContainerTracker {\n readonly rootTag: string;\n private depth = 0;\n private inComment = false;\n private inCdata = false;\n private inlineTicks = 0;\n /** The open fence, read by THE one closer (source/code-ranges.ts). */\n private fence: FenceReader | null = null;\n\n constructor(rootTag: string) {\n this.rootTag = rootTag;\n }\n\n consumeLine(line: string, startOffset = 0): number | null {\n if (this.fence) {\n if (this.fence.feed(line)) this.fence = null;\n return null;\n }\n if (!this.inComment && !this.inCdata && this.inlineTicks === 0) {\n const opener = fenceOpenerOf(line);\n if (opener) {\n this.fence = new FenceReader(opener);\n return null;\n }\n }\n\n for (let i = startOffset; i < line.length; i++) {\n if (this.inlineTicks > 0) {\n if (line[i] === \"`\") {\n let end = i;\n while (line[end] === \"`\") end++;\n if (end - i === this.inlineTicks) this.inlineTicks = 0;\n i = end - 1;\n }\n continue;\n }\n if (this.inComment) {\n const end = line.indexOf(\"-->\", i);\n if (end === -1) return null;\n this.inComment = false;\n i = end + 2;\n continue;\n }\n if (this.inCdata) {\n const end = line.indexOf(\"]]>\", i);\n if (end === -1) return null;\n this.inCdata = false;\n i = end + 2;\n continue;\n }\n if (line.startsWith(\"<!--\", i)) {\n this.inComment = true;\n i += 3;\n continue;\n }\n if (line.startsWith(\"<![CDATA[\", i)) {\n this.inCdata = true;\n i += 8;\n continue;\n }\n if (line[i] === \"`\" && !isEscapedBacktick(line, i)) {\n let end = i;\n while (line[end] === \"`\") end++;\n this.inlineTicks = end - i;\n i = end - 1;\n continue;\n }\n if (line[i] !== \"<\") continue;\n const tag = readXmlTag(line, i);\n if (!tag) continue;\n const tagEnd = i + tag.raw.length;\n if (tag.tagName === this.rootTag) {\n if (tag.isClosing) this.depth--;\n else if (!tag.isSelfClosing) this.depth++;\n if (this.depth === 0) return tagEnd;\n }\n i = tagEnd - 1;\n }\n return null;\n }\n}\n","/**\n * THE KIND SIGNAL of a JSON region's text — the one answer to \"could this\n * still be a kind?\" (Arman, 2026-09-30):\n *\n * 1. The moment it COULD be a kind → display as a kind (its loader).\n * 2. The moment we know WHICH kind → that kind (the parser's job).\n * 3. The moment we know it is not a kind → it is JSON, and JSON is fine.\n *\n * \"Could\" is decided by the FIRST KEY. Until the first key has fully arrived\n * the region is `undecided` and nothing raw is shown. A first key of `__kind`\n * — or a `__kind` key anywhere in the text, at any depth, at any time — is\n * `kind`. A complete first key that is anything else, with no `__kind` seen,\n * is `not_kind`: the region streams live as JSON, and flips to `kind` the\n * instant a `__kind` key shows up later.\n *\n * Pure and text-only on purpose: it must answer for every frame of every\n * region, including ones whose parser never opened (an unlabelled fence, a\n * reload, a plain markdown fence).\n */\n\nimport { fenceOpenerOf, findCodeRanges } from \"../source\";\n\nexport type JsonKindSignal = \"undecided\" | \"kind\" | \"not_kind\";\n\n/**\n * A pathological first key (or a region that is only whitespace and brackets)\n * must not hold a loader forever — past this, an undecided region is treated\n * as JSON so its content is never hidden behind a lid.\n */\nconst UNDECIDED_LIMIT_CHARS = 2000;\n\n/**\n * The key `__kind` as JSON may spell it: every character literal or as its\n * `\\uXXXX` escape (`\"\\u005f_kind\"` IS the key `__kind` to `JSON.parse` — V7).\n */\nconst KIND_KEY_BODY = [...\"__kind\"]\n .map((ch) => {\n const hex = ch.charCodeAt(0).toString(16).padStart(4, \"0\");\n const escaped = [...hex]\n .map((d) => (/[a-f]/.test(d) ? `[${d}${d.toUpperCase()}]` : d))\n .join(\"\");\n return `(?:${ch}|\\\\\\\\u${escaped})`;\n })\n .join(\"\");\n\n/** A `\"__kind\"` KEY (not an escaped occurrence inside a string value). */\nconst KIND_KEY = new RegExp(String.raw`(?<!\\\\)\"${KIND_KEY_BODY}\"\\s*:`);\n\n/**\n * JSON5 lets a key go unquoted (`{__kind: \"flashcard_set\"}`) or single-quoted.\n * Accepted ONLY in a ```json5 context (X-minor, round 3) — plain JSON never\n * has such a key, and prose that says `__kind:` is not one.\n */\nconst JSON5_KIND_KEY = /(?:^|[{,]\\s*|\\n\\s*)(?:__kind|'__kind')\\s*:/;\nconst JSON5_KIND_SLUG = /(?:^|[{,]\\s*|\\n\\s*)(?:__kind|'__kind'|\"__kind\")\\s*:\\s*(\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')/;\n\n/**\n * The key as MARKDOWN may spell it (P8, round 4): `\"\\_\\_kind\"` — the renderer\n * un-escapes it to `\"__kind\"` on screen. Text contexts only.\n */\n// Half-escaped (`\"\\__kind\"`, `\"_\\_kind\"`) draws as the literal key too (round 10).\nconst MARKDOWN_KIND_KEY = /(?<!\\\\)\"(?:\\\\_\\\\_|\\\\__|_\\\\_)kind\"\\s*:/;\n\n/**\n * The key as a STRING-HELD kind spells it once serialized again (R3, round 6):\n * `{\\\"__kind\\\":…}` — what `JSON.stringify` of an object holding kind JSON in a\n * string value prints, at any nesting (`\\\\\\\"`). On screen that is raw kind\n * JSON (ruling c). Rendered-text / stored-text contexts only — inside parsed\n * JSON it is a string VALUE, never a key, so `hasKindKey` alone ignores it.\n */\nconst ESCAPED_KIND_KEY = /\\\\+\"__kind\\\\+\"\\s*:/;\nconst ESCAPED_KIND_SLUG = /\\\\+\"__kind\\\\+\"\\s*:\\s*\\\\+\"([A-Za-z0-9_.:-]+)\\\\+\"/;\n\n/**\n * Options for the JSON-text readers: `json5` widens the key rule to JSON5's;\n * `markdown` also reads the markdown-escaped key (`\"\\_\\_kind\"`, P8);\n * `escaped` also reads the backslash-escaped key of a string-held kind\n * (`\\\"__kind\\\"`, R3 round 6 — screen and search text only).\n */\nexport interface KindTextOptions {\n json5?: boolean;\n markdown?: boolean;\n escaped?: boolean;\n /** Also read a Python-repr key (`{'__kind': 'flashcard_set'}`) — text contexts only (K4). */\n python?: boolean;\n /** Also read a typographic-quoted key (`“__kind”`, `‘__kind’`) — text contexts only (round 8). */\n smart?: boolean;\n /** Also read an HTML-entity key (`&quot;__kind&quot;`, `&#34;__kind&#34;`) — text contexts only (round 8). */\n entity?: boolean;\n /**\n * Also read a JavaScript object-literal key (`{ __kind: 'flashcard_set' }` —\n * what Node's console prints, a sandbox tool's output) — key position with a\n * quoted value, text contexts only (L-2, round 9).\n */\n js?: boolean;\n}\n\n/**\n * EVERY spelling of the key a reader still sees as `__kind` (owner ruling,\n * round 8): literal, `\\u005f`-escaped, markdown-escaped `\\_\\_kind`,\n * backslash-escaped quotes `\\\"__kind\\\"`, zero-width characters anywhere in\n * the key, Python repr `'__kind'`, typographic quotes `“__kind”` and HTML\n * entities `&quot;__kind&quot;`. THE options every TEXT context (prose,\n * titles, exports, previews, the screen scan) passes; JSON contexts keep the\n * default, where those spellings are string VALUES (and `valueCarriesKind`\n * reads the strings with this set).\n */\nexport const ALL_KIND_SPELLINGS: Readonly<KindTextOptions> = Object.freeze({\n markdown: true,\n escaped: true,\n python: true,\n smart: true,\n entity: true,\n js: true,\n});\n\n/**\n * THE CONVERSION BOUNDARY (owner ruling, round 10): only REAL JSON is ever\n * converted — the literal key, its `\\u005f` escapes, the markdown-escaped\n * `\"\\_\\_kind\"` (markdown draws it as the literal key) and zero-width characters\n * inside the key. Every other spelling in free text (backslash-escaped\n * `\\\"__kind\\\"` in prose, Python repr, a JavaScript literal, typographic quotes,\n * entities) is DETECTION ONLY: the leak sentinel reports it, every renderer,\n * converter, label and export leaves it exactly as written. Real output emits\n * JSON; guessing at free text dropped and reordered people's words (rounds 8–9).\n * A kind held as a JSON STRING inside JSON is read by parsing (`textCarriesKind`).\n */\nexport const JSON_KIND_SPELLINGS: Readonly<KindTextOptions> = Object.freeze({ markdown: true });\n\n/** Whether text holds the key spelled as real JSON (`JSON_KIND_SPELLINGS`). */\nexport function hasJsonKindKey(source: string): boolean {\n return hasKindKey(source, JSON_KIND_SPELLINGS);\n}\n\n/**\n * Whether text holds the key ONLY in a detection-only spelling (round 10):\n * a spelling the sentinel reports and no renderer converts.\n */\nexport function hasDetectionOnlyKindKey(source: string): boolean {\n return !hasJsonKindKey(source) && (hasKindKey(source, ALL_KIND_SPELLINGS) || hasExoticKindKey(source));\n}\n\n/**\n * Invisible characters a model, a copy-paste or a sanitizer can leave INSIDE\n * the key (`\"__\\u200Bkind\"`): the screen still reads `\"__kind\"`, so the\n * detector reads through them (K4, round 7). Zero-width space / non-joiner /\n * joiner, word joiner, BOM / zero-width no-break space, soft hyphen.\n */\nconst ZERO_WIDTH = /[\\u200B-\\u200D\\u2060\\uFEFF\\u00AD]/g;\nconst HAS_ZERO_WIDTH = /[\\u200B-\\u200D\\u2060\\uFEFF\\u00AD]/;\n\n/** The text without zero-width characters (unchanged — same string — when it has none). */\nexport function withoutZeroWidth(text: string): string {\n return HAS_ZERO_WIDTH.test(text) ? text.replace(ZERO_WIDTH, \"\") : text;\n}\n\n/**\n * The key as a PYTHON REPR spells it (K4, round 7): `{'__kind': 'flashcard_set'}`\n * — what `str(dict)` prints into a server error or a tool's string result.\n * Text contexts only, and only in key position (after `{` or `,`) with a\n * quoted value, so prose that says `'__kind':` is never one.\n */\nconst PYTHON_KIND_KEY = /[{,]\\s*'__kind'\\s*:\\s*['\"]/;\nconst PYTHON_KIND_SLUG = /[{,]\\s*'__kind'\\s*:\\s*(?:'([A-Za-z0-9_.:-]+)'|\"([A-Za-z0-9_.:-]+)\")/;\n\n/** Typographic quotes a smart-quoting editor or model writes for `\"` and `'`. */\nconst SMART_DOUBLE = \"\\u201C\\u201D\\u201E\\u201F\\u2033\";\nconst SMART_SINGLE = \"\\u2018\\u2019\\u201A\\u201B\\u2032\";\n/** The key in typographic quotes (`“__kind”:`, `‘__kind’:`) — key position only. */\nconst SMART_KIND_KEY = new RegExp(`[${SMART_DOUBLE}${SMART_SINGLE}]__kind[${SMART_DOUBLE}${SMART_SINGLE}\"']\\\\s*:`);\n/** The key in HTML entities (`&quot;__kind&quot;:`, `&#34;`, `&#x22;`, `&#39;`, `&apos;`). */\nconst ENTITY_QUOTE = \"&(?:[qQ][uU][oO][tT]|[aA][pP][oO][sS]|#0*3[49]|#[xX]0*2[27]);\";\nconst ENTITY_KIND_KEY = new RegExp(`${ENTITY_QUOTE}__kind${ENTITY_QUOTE}\\\\s*:`);\n\n/** Whether a fence language is JSON5 (the one context that widens the key rule). */\nexport function isJson5Language(lang: string | null | undefined): boolean {\n return (lang ?? \"\").trim().toLowerCase() === \"json5\";\n}\n\nexport function hasKindKey(source: string, options: KindTextOptions = {}): boolean {\n const text = withoutZeroWidth(source);\n return (\n KIND_KEY.test(text) ||\n (options.python === true && PYTHON_KIND_KEY.test(text)) ||\n (options.json5 === true && JSON5_KIND_KEY.test(text)) ||\n (options.markdown === true && MARKDOWN_KIND_KEY.test(text)) ||\n (options.escaped === true && ESCAPED_KIND_KEY.test(text)) ||\n (options.smart === true && SMART_KIND_KEY.test(text)) ||\n (options.entity === true && ENTITY_KIND_KEY.test(text)) ||\n (options.js === true && JS_KIND_KEY.test(text)) ||\n // Every realistic spelling COMBINED in one key (escaped + zero-width,\n // repr + zero-width, `\"\\__kind\"`, `{\\\"\\\\_\\\\_kind\\\"…}` — L-1, round 9).\n (options.escaped === true && options.python === true && options.smart === true && options.markdown === true &&\n hasSpelledKey(source))\n );\n}\n\n/** The key as a JavaScript object literal spells it: unquoted, key position, quoted value (L-2). */\nconst JS_KIND_KEY = /[{,]\\s*__kind\\s*:\\s*['\"]/;\n\n/**\n * EXOTIC spellings (owner ruling, round 9): double HTML entities\n * (`&amp;quot;`), `&#95;` underscores, upper-case / padded entities, fullwidth\n * quotes, bidi marks, invisible operators and combining joiners inside the key.\n * DETECTION ONLY — the leak sentinel and the frame judge report them; no\n * renderer converts them (an adversarial spelling is a defect to see, not a\n * shape to guess at).\n */\nexport function hasExoticKindKey(text: string): boolean {\n if (!/kind|&#|&amp;|\\uFF3F/i.test(text)) return false;\n let plain = text\n .replace(EXOTIC_INVISIBLE, \"\")\n .replace(/\\uFF02/g, '\"')\n .replace(/\\uFF07/g, \"'\")\n .replace(/\\uFF3F/g, \"_\");\n for (let pass = 0; pass < 3 && plain.includes(\"&\"); pass++) plain = plain.replace(LOOSE_ENTITY, looseEntity);\n return plain !== text && hasKindKey(plain, ALL_KIND_SPELLINGS);\n}\n\nconst EXOTIC_INVISIBLE = /[\\p{Cf}\\u034F\\u115F\\u1160\\u17B4\\u17B5\\u180E\\u3164\\uFFA0]/gu;\nconst LOOSE_ENTITY = /&(#[xX][0-9a-fA-F]{1,8}|#\\d{1,8}|[A-Za-z]{2,8});/g;\nconst LOOSE_NAMED: Record<string, string> = { quot: '\"', apos: \"'\", amp: \"&\", lt: \"<\", gt: \">\", lowbar: \"_\" };\nfunction looseEntity(whole: string, body: string): string {\n if (body.startsWith(\"#\")) {\n const code = body[1] === \"x\" || body[1] === \"X\" ? Number.parseInt(body.slice(2), 16) : Number.parseInt(body.slice(1), 10);\n return Number.isFinite(code) && code > 0 && code < 0x110000 ? String.fromCodePoint(code) : whole;\n }\n return LOOSE_NAMED[body.toLowerCase()] ?? whole;\n}\n\n/** Whether TEXT holds the key in ANY spelling a reader sees as `__kind` (round 8). */\nexport function hasKindKeyAnySpelling(source: string): boolean {\n return hasKindKey(source, ALL_KIND_SPELLINGS);\n}\n\n/** The key, then its string value (escapes allowed), captured whole. */\nconst KIND_SLUG = new RegExp(\n String.raw`(?<!\\\\)\"${KIND_KEY_BODY}\"\\s*:\\s*(\"(?:[^\"\\\\]|\\\\.)*\")`,\n);\n\n/** A slug the loader may name: letters, digits and `_.:-` only. */\nconst SLUG_TEXT = /^[A-Za-z0-9_.:-]+$/;\n\n/** Whether a `__kind` value is a readable slug (ruling (c): anything else is broken output). */\nexport function isKindSlug(value: unknown): value is string {\n return typeof value === \"string\" && SLUG_TEXT.test(value);\n}\n\n/**\n * The first complete `__kind` slug in the text, or null. For a LOADER only —\n * which kind's skeleton to show while the region arrives. Never an identity:\n * the parser owns which kind a region actually is.\n */\nexport function firstKindSlug(source: string, options: KindTextOptions = {}): string | null {\n const text = withoutZeroWidth(source);\n let literal = KIND_SLUG.exec(text)?.[1];\n if (!literal && (options.json5 || options.js)) {\n const json5 = JSON5_KIND_SLUG.exec(text)?.[1];\n literal = json5?.startsWith(\"'\") ? JSON.stringify(json5.slice(1, -1)) : json5;\n }\n if (!literal && options.escaped) {\n const escaped = ESCAPED_KIND_SLUG.exec(text)?.[1];\n if (escaped) return escaped;\n }\n if (!literal && options.python) {\n const python = PYTHON_KIND_SLUG.exec(text);\n if (python) return python[1] ?? python[2] ?? null;\n }\n if (!literal && (options.smart || options.entity || options.markdown)) {\n const canonical = normalizeKindSpellings(text);\n if (canonical !== text) return firstKindSlug(canonical, { ...options, smart: false, entity: false, markdown: false });\n }\n if (!literal) return null;\n let slug: unknown;\n try {\n slug = JSON.parse(literal);\n } catch {\n return null;\n }\n return typeof slug === \"string\" && SLUG_TEXT.test(slug) ? slug : null;\n}\n\n/**\n * A text that ENDS in an object key that has reached `\"__k` and is still a\n * prefix of `\"__kind\"` (or is `\"__kind\"` waiting for its colon) — V6: the\n * frames before the colon of a LATER `__kind` key (`[{\"x\":1}, {\"__kind`,\n * `{\"data\":{\"__kind`) could be a kind, so they hold the loader instead of\n * flashing raw. Key position only (after `{` or `,` inside an object): a\n * string VALUE that starts `\"__k` is never a key. `\"_id\"`, `\"__type\"` never\n * reach the threshold; `\"__key\"` holds for the one frame before its `e`.\n */\nconst PARTIAL_KIND_KEY_TAIL = /\"__k(?:i(?:n(?:d(?:\"\\s*)?)?)?)?$/;\n\nexport function endsInPartialKindKey(text: string): boolean {\n const tail = PARTIAL_KIND_KEY_TAIL.exec(text);\n if (!tail) return false;\n return isObjectKeyPosition(text, tail.index);\n}\n\n/** Whether the `\"` at `quoteAt` opens an object key (structural scan, strings opaque). */\nfunction isObjectKeyPosition(text: string, quoteAt: number): boolean {\n const stack: string[] = [];\n let expectKey = false;\n let inString = false;\n let escaped = false;\n for (let i = 0; i < quoteAt; i++) {\n const ch = text[i];\n if (inString) {\n if (escaped) escaped = false;\n else if (ch === \"\\\\\") escaped = true;\n else if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') {\n inString = true;\n expectKey = false;\n } else if (ch === \"{\" || ch === \"[\") {\n stack.push(ch);\n expectKey = ch === \"{\";\n } else if (ch === \"}\" || ch === \"]\") {\n stack.pop();\n expectKey = false;\n } else if (ch === \",\") {\n expectKey = stack[stack.length - 1] === \"{\";\n } else if (ch === \":\") {\n expectKey = false;\n }\n }\n return !inString && expectKey;\n}\n\n/**\n * The text after any LEADING JSONC comments and whitespace (`// note`,\n * `/* … *\\/`) — a ```jsonc / ```json / unlabelled fence that opens with a\n * comment still decides on its first key (X3). An unterminated leading\n * comment (still arriving) leaves nothing: undecided, never raw.\n */\nexport function withoutLeadingJsonComments(text: string): string {\n let i = 0;\n for (;;) {\n i = skipWs(text, i);\n if (text.startsWith(\"//\", i)) {\n const end = text.indexOf(\"\\n\", i);\n if (end === -1) return \"\";\n i = end + 1;\n } else if (text.startsWith(\"/*\", i)) {\n const end = text.indexOf(\"*/\", i + 2);\n if (end === -1) return \"\";\n i = end + 2;\n } else {\n return i === 0 ? text : text.slice(i);\n }\n }\n}\n\nexport function jsonKindSignal(\n text: string | null | undefined,\n options: KindTextOptions = {},\n): JsonKindSignal {\n const source = withoutLeadingJsonComments(text ?? \"\");\n if (hasKindKey(source, options)) return \"kind\";\n\n let i = skipWs(source, 0);\n if (i >= source.length) return \"undecided\";\n\n // A list of objects: decide on the first element's first key.\n if (source[i] === \"[\") {\n i = skipWs(source, i + 1);\n if (i >= source.length) return capped(source);\n if (source[i] !== \"{\") return notKindUnlessPartialKey(source);\n }\n if (source[i] !== \"{\") return notKindUnlessPartialKey(source);\n\n i = skipWs(source, i + 1);\n if (i >= source.length) return capped(source);\n // `{}` or not an object key\n if (source[i] !== '\"') return notKindUnlessPartialKey(source);\n\n // Read the first key, honouring escapes; unterminated → still arriving.\n let j = i + 1;\n while (j < source.length) {\n const ch = source[j];\n if (ch === \"\\\\\") {\n j += 2;\n continue;\n }\n if (ch === '\"') {\n return withoutZeroWidth(decodedKey(source.slice(i, j + 1))) === \"__kind\"\n ? \"kind\"\n : notKindUnlessPartialKey(source);\n }\n j++;\n }\n return capped(source);\n}\n\n/** A first key decided against `__kind` — unless a later key is arriving as one (V6). */\nfunction notKindUnlessPartialKey(source: string): JsonKindSignal {\n return endsInPartialKindKey(source) ? \"undecided\" : \"not_kind\";\n}\n\n/** A complete JSON key literal (quotes included), decoded; the raw body if it will not parse. */\nfunction decodedKey(literal: string): string {\n try {\n const key: unknown = JSON.parse(literal);\n return typeof key === \"string\" ? key : literal.slice(1, -1);\n } catch {\n return literal.slice(1, -1);\n }\n}\n\nfunction capped(source: string): JsonKindSignal {\n return source.length > UNDECIDED_LIMIT_CHARS ? \"not_kind\" : \"undecided\";\n}\n\nfunction skipWs(source: string, from: number): number {\n let i = from;\n while (i < source.length && /\\s/.test(source[i] ?? \"\")) i++;\n return i;\n}\n\n/**\n * A ```json5 body as plain JSON, when the difference is only what JSON5 adds\n * that models actually write: comments, unquoted identifier keys, single-quoted\n * keys/strings and trailing commas. Null when the result still will not parse.\n */\nexport function json5AsJson(text: string): string | null {\n let out = \"\";\n let i = 0;\n while (i < text.length) {\n const ch = text[i]!;\n if (ch === '\"' || ch === \"'\") {\n let j = i + 1;\n let body = \"\";\n while (j < text.length && text[j] !== ch) {\n if (text[j] === \"\\\\\") {\n body += text[j]! + (text[j + 1] ?? \"\");\n j += 2;\n continue;\n }\n body += ch === \"'\" && text[j] === '\"' ? '\\\\\"' : text[j]!;\n j++;\n }\n out += `\"${body}\"`;\n i = j + 1;\n continue;\n }\n if (text.startsWith(\"//\", i)) {\n const end = text.indexOf(\"\\n\", i);\n i = end === -1 ? text.length : end;\n continue;\n }\n if (text.startsWith(\"/*\", i)) {\n const end = text.indexOf(\"*/\", i + 2);\n i = end === -1 ? text.length : end + 2;\n continue;\n }\n const key = /^[A-Za-z_$][\\w$]*(?=\\s*:)/.exec(text.slice(i));\n if (key && /[{,]\\s*$/.test(out)) {\n out += `\"${key[0]}\"`;\n i += key[0].length;\n continue;\n }\n out += ch;\n i++;\n }\n out = out.replace(/,(\\s*[}\\]])/g, \"$1\");\n try {\n JSON.parse(out);\n return out;\n } catch {\n return null;\n }\n}\n\n/**\n * A Python repr of a dict/list (`{'__kind': 'flashcard_set', 'ok': True}`) as\n * JSON text, or null when it is not one. Strings may be single- or\n * double-quoted; `True` / `False` / `None` become JSON literals.\n */\nexport function pythonReprAsJson(text: string): string | null {\n let out = \"\";\n let i = 0;\n while (i < text.length) {\n const ch = text[i]!;\n if (ch === \"'\" || ch === '\"') {\n let j = i + 1;\n let body = \"\";\n while (j < text.length && text[j] !== ch) {\n if (text[j] === \"\\\\\") {\n const next = text[j + 1] ?? \"\";\n body += next === \"'\" ? \"'\" : `\\\\${next}`;\n j += 2;\n continue;\n }\n body += text[j] === '\"' ? '\\\\\"' : text[j]!;\n j++;\n }\n if (j >= text.length) return null;\n out += `\"${body}\"`;\n i = j + 1;\n continue;\n }\n const word = /^(?:True|False|None)\\b/.exec(text.slice(i, i + 5));\n if (word) {\n out += word[0] === \"True\" ? \"true\" : word[0] === \"False\" ? \"false\" : \"null\";\n i += word[0].length;\n continue;\n }\n out += ch;\n i++;\n }\n try {\n JSON.parse(out);\n return out;\n } catch {\n return null;\n }\n}\n\n/** Whether text holds a Python-repr `'__kind'` key (key position, quoted value). */\nexport function hasPythonKindKey(text: string): boolean {\n return PYTHON_KIND_KEY.test(withoutZeroWidth(text));\n}\n\n/** Where the Python-repr value opening at `start` (`{` or `[`) closes (exclusive), or null. */\nexport function pythonBalancedEnd(text: string, start: number): number | null {\n let depth = 0;\n let quote: string | null = null;\n for (let i = start; i < text.length; i++) {\n const ch = text[i]!;\n if (quote) {\n if (ch === \"\\\\\") i++;\n else if (ch === quote) quote = null;\n continue;\n }\n if (ch === \"'\" || ch === '\"') quote = ch;\n else if (ch === \"{\" || ch === \"[\") depth++;\n else if (ch === \"}\" || ch === \"]\") {\n depth--;\n if (depth === 0) return i + 1;\n }\n }\n return null;\n}\n\n/**\n * THE ONE SPELLING NORMALIZER (K4 round 7, widened round 8, rebuilt round 9).\n * Every text detector, converter and label function runs it (directly, or\n * through `hasKindKeyAnySpelling`) so a kind spelled any REALISTIC way the\n * screen still reads as a kind converts like any other. Each spelled region —\n * from the `{` that owns the key to where its own grammar ends — is rewritten\n * as canonical JSON:\n *\n * zero-width in the key · HTML entities · typographic quotes ·\n * backslash-escaped quotes (any depth) · markdown-escaped `\\_` · Python repr ·\n * JavaScript object literal — and any combination of them in one key\n *\n * DO NO HARM (owner ruling, round 9): only characters INSIDE a matched region\n * change (a zero-width character only inside the key itself), a region never\n * reaches past the point where its grammar breaks (an unclosed region in prose\n * ends there and the text after it stays), and the scan is one linear pass.\n * Quoted source (inline code, non-JSON fences) stays as written, and a WHOLE\n * JSON text is never rewritten (a spelling inside it is a string VALUE).\n * Text with no non-canonical spelling comes back as the same string.\n */\nexport function normalizeKindSpellings(source: string): string {\n if (!mayHoldKindKey(source)) return source;\n // Whole JSON text: a spelling in it is a string VALUE, never rewritten.\n if (/^[{[]/.test(source.trimStart())) {\n try {\n JSON.parse(source);\n // Its own keys still read through a zero-width character (only the keys).\n return withoutZeroWidthInKeys(source);\n } catch {\n // Not JSON: read on.\n }\n }\n let out = \"\";\n let cursor = 0;\n for (const region of scanKindSpellingRegions(source)) {\n const rewritten = canonicalRegionText(source, region);\n if (rewritten === null) continue;\n out += source.slice(cursor, region.rewriteStart) + rewritten;\n cursor = region.rewriteEnd;\n }\n return cursor === 0 ? source : out + source.slice(cursor);\n}\n\n/** The canonical JSON a region is rewritten to by the normalizer, or null to leave it. */\nfunction canonicalRegionText(source: string, region: KindSpellingRegion): string | null {\n if (region.family === \"lifted\") {\n // A literal / `_` key: only a zero-width character INSIDE the key, or\n // the markdown `\\_` the stream ingress also reads, is rewritten.\n if (region.markdown) return region.status === \"broken\" ? closedJson(region) ?? region.decoded : region.decoded;\n const key = source.slice(region.rewriteStart, region.rewriteEnd);\n return region.keyText === undefined || key === region.keyText ? null : region.keyText;\n }\n if (region.status === \"complete\") {\n const json = regionJson(region);\n if (json !== null) return json;\n return region.family === \"python\" || region.family === \"js\" ? null : region.decoded;\n }\n if (region.status === \"broken\") return closedJson(region) ?? region.decoded;\n return region.family === \"python\" || region.family === \"js\" ? null : region.decoded;\n}\n\n/** How a kind key is spelled — which decoders turn its region into JSON. */\nexport type KindSpellingFamily = \"lifted\" | \"escaped\" | \"markdown\" | \"python\" | \"smart\" | \"entity\" | \"js\";\n\n/**\n * A kind region in a REALISTIC spelling (round 9). `[start, end)` is the raw\n * region (`{` to where its grammar ended); `[rewriteStart, rewriteEnd)` is what\n * the normalizer replaces (the key alone for a literal key holding only a\n * zero-width character). `status`: `complete` (balanced), `prefix` (still\n * arriving — runs to the end of the text) or `broken` (its grammar failed at\n * `end`; the text after it is NOT part of it). `decoded` is the region's text\n * with its spelling undone (still Python / JS for those families).\n */\nexport interface KindSpellingRegion {\n start: number;\n end: number;\n rewriteStart: number;\n rewriteEnd: number;\n family: KindSpellingFamily;\n status: \"complete\" | \"prefix\" | \"broken\";\n decoded: string;\n /** Whether the key carried the markdown `\\_` (the region was markdown-decoded). */\n markdown: boolean;\n /** A literal key's canonical text (the normalizer's whole rewrite for that family). */\n keyText?: string;\n}\n\nconst ZW = \"[\\\\u200B-\\\\u200D\\\\u2060\\\\uFEFF\\\\u00AD]\";\n/** One underscore of the key: literal, backslash-escaped at any depth, or `_`. */\nconst KEY_UNDERSCORE = String.raw`(?:\\\\*_|\\\\u005[fF]|&#0*95;|&#[xX]0*5[fF];|&lowbar;|&UnderBar;)`;\nconst KEY_CORE = `${ZW}*${KEY_UNDERSCORE}${ZW}*${KEY_UNDERSCORE}${ZW}*k${ZW}*i${ZW}*n${ZW}*d${ZW}*`;\nconst SMART_ANY = `[${SMART_DOUBLE}${SMART_SINGLE}]`;\n\n/**\n * EVERY REALISTIC SPELLING of the key, and any combination of them (L-1,\n * round 9). Groups: 1 backslashes + 2 core (the JSON family: literal,\n * escaped at any depth, markdown-escaped, zero-width), 3 Python repr core\n * (key position, quoted value), 4 typographic-quote core, 5 HTML-entity core,\n * 6 JavaScript object-literal core (unquoted, key position, quoted value).\n */\nconst SPELLED_KEY_SOURCE = [\n String.raw`(\\\\*)\"(${KEY_CORE})\\\\*\"\\s*:`,\n String.raw`(?<=[{,]\\s*)'(${KEY_CORE})'\\s*:(?=\\s*['\"])`,\n `${SMART_ANY}(${KEY_CORE})[${SMART_DOUBLE}${SMART_SINGLE}\"']\\\\s*:`,\n `${ENTITY_QUOTE}(${KEY_CORE})${ENTITY_QUOTE}\\\\s*:`,\n String.raw`(?<=[{,]\\s*)(${KEY_CORE})\\s*:(?=\\s*['\"])`,\n].join(\"|\");\nconst SPELLED_KEY = new RegExp(SPELLED_KEY_SOURCE);\nconst SPELLED_KEY_G = new RegExp(SPELLED_KEY_SOURCE, \"g\");\n\n/** Whether text holds the key in any realistic spelling or combination (detection, round 9). */\nfunction hasSpelledKey(text: string): boolean {\n return mayHoldKindKey(text) && SPELLED_KEY.test(text);\n}\n\n/**\n * A cheap pre-check every scanner runs first: no key spelling can exist\n * without `kind` (or a zero-width character splitting it). Linear, no regex\n * restarts — the plain text of every frame pays only this.\n */\nexport function mayHoldKindKey(text: string): boolean {\n return text.includes(\"kind\") || (text.includes(\"_\") && HAS_ZERO_WIDTH.test(text));\n}\n\n/** Per call: past this many regions the rest of the text is left as written (hard budget). */\nconst MAX_REGIONS_PER_CALL = 2000;\n/** How far before a `kind` the key's opening quote may sit (backslashes + zero-width + `__`). */\nconst KEY_LOOKBEHIND = 64;\n\n/** Where `kind` (or `k`+zero-width…`d`) occurs at or after `from`, or -1. */\nfunction nextKindHit(text: string, from: number, zeroWidth: boolean): number {\n if (!zeroWidth) return text.indexOf(\"kind\", from);\n KIND_LETTERS_G.lastIndex = from;\n const m = KIND_LETTERS_G.exec(text);\n return m ? m.index : -1;\n}\nconst KIND_LETTERS_G = new RegExp(`k${ZW}*i${ZW}*n${ZW}*d`, \"g\");\n\n/** The family a matched key belongs to, and its escape depth. */\nfunction keyFamily(m: RegExpExecArray): { family: KindSpellingFamily; core: string; levels: number } {\n if (m[3] !== undefined) return { family: \"python\", core: m[3], levels: 0 };\n if (m[4] !== undefined) return { family: \"smart\", core: m[4], levels: 0 };\n if (m[5] !== undefined) return { family: \"entity\", core: m[5], levels: 0 };\n if (m[6] !== undefined) return { family: \"js\", core: m[6], levels: 0 };\n const backslashes = m[1]!.length;\n const core = m[2]!;\n // An entity-spelled underscore (`&#95;`) is markdown-decoded to a real key on\n // screen but is not JSON: exotic, detection only, drawn as written.\n if (core.includes(\"&\")) return { family: \"entity\", core, levels: 0 };\n if (backslashes > 0) {\n // `\\\"` is one level, `\\\\\\\"` two, `\\\\\\\\\\\\\\\"` three: 2^levels − 1 backslashes.\n return { family: \"escaped\", core, levels: Math.min(4, Math.ceil(Math.log2(backslashes + 1))) };\n }\n const plain = core.replace(ZERO_WIDTH, \"\");\n if (plain === \"__kind\" || /^\\\\u005[fF]_kind$/.test(plain)) return { family: \"lifted\", core, levels: 0 };\n if (plain === \"\\\\_\\\\_kind\") return { family: \"lifted\", core, levels: 0 };\n return { family: \"markdown\", core, levels: 0 };\n}\n\n/**\n * THE ONE LINEAR SCAN for kind regions in a realistic spelling (round 9):\n * every candidate is found from a `kind` occurrence, its owning `{` from a\n * forward-only brace cursor, quoted source once, and each region is decoded\n * and bounded by its own grammar in work proportional to its length. Regions\n * are returned in order and never overlap; a region's inner keys belong to it.\n * A key whose `{` grammar fails BEFORE the key is not a region (prose braces).\n */\nexport function scanKindSpellingRegions(\n text: string,\n options: { families?: \"json\" | \"all\"; from?: number } = {},\n): KindSpellingRegion[] {\n const jsonOnly = options.families !== \"all\";\n // Resume point: a region end (or 0). Scanning from a region end is exactly\n // what the full scan does after that region, so a caller holding the regions\n // before it may rescan only the rest (streaming frames, round 10).\n const from = options.from ?? 0;\n const regions: KindSpellingRegion[] = [];\n if (!mayHoldKindKey(text)) return regions;\n const zeroWidth = HAS_ZERO_WIDTH.test(text);\n let quoted: Array<[number, number]> | null = null;\n const inQuoted = (at: number) => {\n quoted ??= quotedSourceRanges(text);\n let lo = 0;\n let hi = quoted.length - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >> 1;\n const [a, b] = quoted[mid]!;\n if (at < a) hi = mid - 1;\n else if (at >= b) lo = mid + 1;\n else return true;\n }\n return false;\n };\n let cursor = from;\n let braceScan = from;\n let lastBrace = -1;\n // A `{` whose grammar already ended before a key can own no later key: it is\n // never re-read (round 10, linear time — one early brace, many mentions).\n let deadBraceFloor = from;\n // Round 11 (F2): looking past a broken region for its balanced close is the\n // one step whose cost is not the region's own length — capped per call so\n // many broken regions never each read to the end of the text.\n const reach: ReachBudget = { left: REACH_BUDGET_FACTOR * text.length + REACH_BUDGET_FLOOR };\n let hit = nextKindHit(text, from, zeroWidth);\n while (hit >= 0 && regions.length < MAX_REGIONS_PER_CALL) {\n const windowStart = Math.max(cursor, hit - KEY_LOOKBEHIND);\n const windowEnd = Math.min(text.length, hit + KEY_LOOKBEHIND);\n SPELLED_KEY_G.lastIndex = 0;\n const window = text.slice(windowStart, windowEnd);\n let m: RegExpExecArray | null = null;\n for (let candidate = SPELLED_KEY_G.exec(window); candidate; candidate = SPELLED_KEY_G.exec(window)) {\n if (windowStart + candidate.index + candidate[0].length > hit) {\n m = candidate;\n break;\n }\n }\n if (!m) {\n hit = nextKindHit(text, hit + 1, zeroWidth);\n continue;\n }\n const keyAt = windowStart + m.index;\n const keyEnd = keyAt + m[0].length;\n const next = () => nextKindHit(text, keyEnd, zeroWidth);\n while (braceScan < keyAt) {\n if (text.charCodeAt(braceScan) === 123 /* { */) lastBrace = braceScan;\n braceScan++;\n }\n const brace = lastBrace >= Math.max(cursor, deadBraceFloor) ? lastBrace : -1;\n if (brace < 0 || inQuoted(keyAt) || inQuoted(brace)) {\n hit = next();\n continue;\n }\n const { family, core, levels } = keyFamily(m);\n // Round 10: a non-JSON spelling is detection only — never a converted region.\n if (jsonOnly && family !== \"lifted\" && family !== \"markdown\") {\n hit = next();\n continue;\n }\n const markdown = /\\\\_/.test(core) || (family === \"escaped\" && /\\\\{2}_/.test(core));\n const plan = decodePlan(family, levels, markdown);\n const region = boundRegion(text, brace, keyAt, plan, reach);\n if (!region) {\n deadBraceFloor = brace + 1;\n hit = next();\n continue;\n }\n if (family === \"lifted\" && !markdown) {\n // Literal key: the region is only scanned (so its inner keys belong to\n // it); the normalizer rewrites the key alone when it holds a zero-width.\n regions.push({\n start: brace,\n end: region.end,\n rewriteStart: keyAt,\n rewriteEnd: keyEnd,\n keyText: m[0].replace(ZERO_WIDTH, \"\"),\n family,\n status: region.status,\n decoded: withoutZeroWidthInKeys(region.decoded),\n markdown: false,\n });\n } else {\n regions.push({\n start: brace,\n end: region.end,\n rewriteStart: brace,\n rewriteEnd: region.end,\n family,\n status: region.status,\n decoded: withoutZeroWidthInKeys(region.decoded),\n markdown,\n });\n }\n cursor = region.end;\n if (region.status === \"prefix\") break;\n hit = nextKindHit(text, cursor, zeroWidth);\n }\n return regions;\n}\n\n/** Inside decoded text, a key spelled `__kind` with zero-width characters → `__kind` (keys only). */\nconst ZW_KEY_IN_DECODED = new RegExp(`([\"'])${ZW}*_${ZW}*_${ZW}*k${ZW}*i${ZW}*n${ZW}*d${ZW}*\\\\1(?=\\\\s*:)`, \"g\");\nfunction withoutZeroWidthInKeys(decoded: string): string {\n return HAS_ZERO_WIDTH.test(decoded) ? decoded.replace(ZW_KEY_IN_DECODED, (key) => key.replace(ZERO_WIDTH, \"\")) : decoded;\n}\n\ninterface DecodePlan {\n steps: SpellingStep[];\n grammar: GrammarDialect;\n}\n\nfunction decodePlan(family: KindSpellingFamily, levels: number, markdown: boolean): DecodePlan {\n const steps: SpellingStep[] = [];\n if (family === \"entity\") steps.push(entityStep);\n if (family === \"smart\") steps.push(smartStep);\n for (let level = 0; level < levels; level++) steps.push(escapeStep);\n if (markdown) steps.push(markdownStep);\n const grammar: GrammarDialect =\n family === \"js\" ? \"js\" : family === \"python\" || family === \"smart\" || family === \"entity\" ? \"python\" : \"json\";\n return { steps, grammar };\n}\n\n/** One decoded text and, per decoded character, the raw index it came from (plus the raw end). */\ninterface DecodedText {\n text: string;\n map: number[];\n}\n\ntype SpellingStep = (raw: string, i: number) => [string, number];\n\nfunction decodeWith(raw: string, step: SpellingStep): DecodedText {\n let text = \"\";\n const map: number[] = [];\n for (let i = 0; i < raw.length; ) {\n const [out, consumed] = step(raw, i);\n for (let k = 0; k < out.length; k++) map.push(i);\n text += out;\n i += Math.max(1, consumed);\n }\n map.push(raw.length);\n return { text, map };\n}\n\n/** Every step in order, the maps composed back to the raw input. */\nfunction decodeChain(raw: string, steps: SpellingStep[]): DecodedText {\n if (steps.length === 0) {\n const map = new Array<number>(raw.length + 1);\n for (let i = 0; i <= raw.length; i++) map[i] = i;\n return { text: raw, map };\n }\n let current = decodeWith(raw, steps[0]!);\n for (let s = 1; s < steps.length; s++) {\n const next = decodeWith(current.text, steps[s]!);\n const prior = current.map;\n current = { text: next.text, map: next.map.map((at) => prior[at]!) };\n }\n return current;\n}\n\nconst ENTITY_STEP_RE = /^&(?:(quot|apos|amp|lt|gt|lowbar|UnderBar)|#(\\d{1,6})|#[xX]([0-9a-fA-F]{1,6}));/i;\nconst NAMED_ENTITIES: Record<string, string> = { quot: '\"', apos: \"'\", amp: \"&\", lt: \"<\", gt: \">\", lowbar: \"_\", underbar: \"_\" };\nconst ESCAPE_CHARS: Record<string, string> = { '\"': '\"', \"\\\\\": \"\\\\\", \"/\": \"/\", n: \"\\n\", t: \"\\t\", r: \"\\r\", b: \"\", f: \"\" };\n\nconst entityStep: SpellingStep = (raw, i) => {\n if (raw[i] !== \"&\") return [raw[i]!, 1];\n const m = ENTITY_STEP_RE.exec(raw.slice(i, i + 12));\n if (!m) return [\"&\", 1];\n const ch = m[1] ? NAMED_ENTITIES[m[1].toLowerCase()]! : String.fromCodePoint(Number.parseInt(m[2] ?? m[3]!, m[2] ? 10 : 16));\n return [ch, m[0].length];\n};\nconst smartStep: SpellingStep = (raw, i) => {\n const ch = raw[i]!;\n if (SMART_DOUBLE.includes(ch)) return ['\"', 1];\n if (SMART_SINGLE.includes(ch)) return [\"'\", 1];\n return [ch, 1];\n};\nconst escapeStep: SpellingStep = (raw, i) => {\n if (raw[i] !== \"\\\\\") return [raw[i]!, 1];\n const next = raw[i + 1] ?? \"\";\n if (next in ESCAPE_CHARS) return [ESCAPE_CHARS[next]!, 2];\n if (next === \"u\" && /^[0-9a-fA-F]{4}$/.test(raw.slice(i + 2, i + 6))) return [raw.slice(i, i + 6), 6];\n return [raw.slice(i, i + 2), 2];\n};\nconst markdownStep: SpellingStep = (raw, i) => (raw[i] === \"\\\\\" && raw[i + 1] === \"_\" ? [\"_\", 2] : [raw[i]!, 1]);\n\n/** Smallest decode window; it grows ×4 until the region's grammar settles inside it. */\nconst FIRST_WINDOW = 128;\n\n/**\n * Characters one scan may read BEYOND broken regions' grammar breaks, looking\n * for their balanced closes (round 11, F2): `4 × text + 64 KB`. A real message\n * holds a few malformed objects and never comes near it; '{\"a\":[1,{\"__kind\":\"x\" 1 [ '\n * × 6 000 read the rest of the text per region (23.5 s). Once spent, a broken\n * region ends at its own break (its honest broken bound).\n */\nconst REACH_BUDGET_FACTOR = 4;\nconst REACH_BUDGET_FLOOR = 65_536;\ninterface ReachBudget {\n left: number;\n}\n\n/**\n * Decode and bound the region whose `{` is at `brace`: windowed, so the work is\n * proportional to the region, never to the rest of the text. Null when the\n * grammar fails before the key (the `{` is not the key's object).\n */\nfunction boundRegion(\n text: string,\n brace: number,\n keyAt: number,\n plan: DecodePlan,\n reach: ReachBudget = { left: Number.POSITIVE_INFINITY },\n): { end: number; status: KindSpellingRegion[\"status\"]; decoded: string } | null {\n for (let width = FIRST_WINDOW; ; width *= 4) {\n const hi = Math.min(text.length, brace + width);\n const atEnd = hi === text.length;\n const decoded = decodeChain(text.slice(brace, hi), plan.steps);\n const keyDecoded = firstAtOrAfter(decoded.map, keyAt - brace);\n const verdict = kindGrammar(decoded.text, plan.grammar);\n if (verdict.status === \"complete\") {\n if (verdict.end <= keyDecoded) return null;\n return { end: brace + decoded.map[verdict.end]!, status: \"complete\", decoded: decoded.text.slice(0, verdict.end) };\n }\n if (verdict.status === \"broken\") {\n // A break at the window edge may be a cut escape: look further.\n if (!atEnd && decoded.map[verdict.at]! >= hi - brace - 16) continue;\n if (!verdict.prose) {\n // Malformed JSON, not prose: its balanced close bounds it ONLY when that\n // span reads as JSON once trailing commas go (round 10 — a stray `}`\n // later in the prose never extends it); otherwise it ends at its cut.\n const end = balancedEnd(decoded.text, plan.grammar !== \"json\");\n if (end === null && !atEnd) {\n // Each wider window re-reads the span past the break: charge it.\n const past = hi - brace - verdict.at;\n if (reach.left > past) {\n reach.left -= past;\n continue;\n }\n }\n if (end !== null && end > keyDecoded && lenientlyParses(decoded.text.slice(0, end), plan.grammar)) {\n return { end: brace + decoded.map[end]!, status: \"complete\", decoded: decoded.text.slice(0, end) };\n }\n }\n // At the end of the text, a half-typed escape or entity (`\\`, `&quo`)\n // is still arriving, not broken.\n if (atEnd && ARRIVING_SPELLING_TAIL.test(text.slice(brace + decoded.map[verdict.at]!))) {\n if (verdict.at <= keyDecoded) return null;\n return { end: text.length, status: \"prefix\", decoded: decoded.text };\n }\n if (verdict.cut <= keyDecoded) return null;\n return { end: brace + decoded.map[verdict.cut]!, status: \"broken\", decoded: decoded.text.slice(0, verdict.cut) };\n }\n if (!atEnd) continue;\n return { end: text.length, status: \"prefix\", decoded: decoded.text };\n }\n}\n\n/**\n * Past this many characters an open bare-JSON region is not re-read for a\n * prose break (a hot-path budget: the check is linear in the region, run per\n * line / fragment). A fragment that breaks into prose does so within its first\n * lines; a long region is real JSON streaming.\n */\nexport const BARE_REGION_GRAMMAR_BUDGET = 16_384;\n\n/**\n * Whether an open bare-JSON region's text has BROKEN INTO PROSE by its own JSON\n * grammar (round 10, C1): `{\"status\": \"ok\", \"items\": [` then a line of words,\n * `{\\\"__kind\\\":…} and the rest`, `{ some code`. Such a region was never JSON:\n * it reads as text. THE one answer the live accumulator (per line, budgeted)\n * and the reload splitter (whole region, `firstBudget` — the same first 16 KB\n * the live check reads) share, so live ≡ reload (round 11, H1). A region still\n * validly open (or complete) is not broken.\n */\nexport function bareRegionBreaksIntoProse(text: string, options: { firstBudget?: boolean } = {}): boolean {\n let region = text;\n if (region.length > BARE_REGION_GRAMMAR_BUDGET) {\n if (!options.firstBudget) return false;\n region = region.slice(0, BARE_REGION_GRAMMAR_BUDGET);\n }\n const start = region.search(/\\S/);\n if (start < 0) return false;\n const verdict = kindGrammar(region, \"json\", start);\n return verdict.status === \"broken\" && verdict.prose;\n}\n\n/** Whether a balanced span reads as JSON (or as its dialect) once trailing commas are dropped. */\nfunction lenientlyParses(span: string, grammar: GrammarDialect): boolean {\n const body = span.replace(/,(\\s*[}\\]])/g, \"$1\");\n if (grammar !== \"json\") return true;\n try {\n JSON.parse(body);\n return true;\n } catch {\n return false;\n }\n}\n\n/** The end (exclusive) of the quote-aware balanced value opening at 0, or null. */\nfunction balancedEnd(text: string, singleQuotes: boolean): number | null {\n let depth = 0;\n let quote = \"\";\n for (let i = 0; i < text.length; i++) {\n const ch = text[i]!;\n if (quote) {\n if (ch === \"\\\\\") i++;\n else if (ch === quote) quote = \"\";\n continue;\n }\n if (ch === '\"' || (singleQuotes && ch === \"'\")) quote = ch;\n else if (ch === \"{\" || ch === \"[\") depth++;\n else if (ch === \"}\" || ch === \"]\") {\n depth--;\n if (depth === 0) return i + 1;\n }\n }\n return null;\n}\n\n/**\n * Where a LITERAL kind object (`text` opens at its `{`) breaks into prose —\n * `{\"__kind\":\"note\",\"title\":\"Hi\" and then…` — after its key: the end of the\n * region, or null (complete, still arriving, or merely malformed). THE one\n * answer the converters, the prose leaf and the live accumulator share, so a\n * settled unclosed object reads the same live and reloaded (L-4, round 9).\n */\nexport function kindObjectProseBreak(text: string): number | null {\n const key = text.search(LITERAL_KIND_KEY);\n if (key < 0) return null;\n const verdict = kindGrammar(text);\n return verdict.status === \"broken\" && verdict.prose && verdict.cut > key ? verdict.cut : null;\n}\nconst LITERAL_KIND_KEY = new RegExp(String.raw`(?<!\\\\)\"${KIND_KEY_BODY}\"\\s*:`);\n\n/** The text's tail after a break that is a spelling still typing: a lone `\\` run or a partial entity. */\nconst ARRIVING_SPELLING_TAIL = /^(?:\\\\+\"?|&#?[A-Za-z0-9]{0,6})$/;\n\n/** The first index whose map value is at least `raw` (maps are non-decreasing). */\nfunction firstAtOrAfter(map: number[], raw: number): number {\n let lo = 0;\n let hi = map.length - 1;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (map[mid]! < raw) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\n/** Which JSON-like grammar bounds a region: strict JSON, Python repr, or a JavaScript literal. */\nexport type GrammarDialect = \"json\" | \"python\" | \"js\";\n\nexport type KindGrammarVerdict =\n | { status: \"complete\"; end: number }\n | { status: \"prefix\" }\n | { status: \"broken\"; at: number; cut: number; prose: boolean };\n\n/**\n * Where a JSON-like value opening at 0 ends by its OWN grammar (H-1, round 9):\n * `complete` at its balanced close, `prefix` when the text ends while it is\n * still valid (arriving), or `broken` at the first character that cannot\n * continue it — `cut` is the end of the last whole token before that (after a\n * value, a `,`, or an opener), so the text after `cut` is never part of it.\n * A raw newline inside a string breaks it (JSON strings never hold one), so an\n * unclosed string never runs past its line. One pass, no allocation per char.\n */\nexport function kindGrammar(\n s: string,\n dialect: GrammarDialect = \"json\",\n from = 0,\n): KindGrammarVerdict {\n const closers: number[] = [];\n const singleQuotes = dialect !== \"json\";\n const bareKeys = dialect === \"js\";\n const trailingCommas = dialect !== \"json\";\n // 0 value, 1 value-or-close, 2 key-or-close, 3 colon, 4 after-value\n let expect = 0;\n let lastGood = from;\n const n = s.length;\n // A break is PROSE when what stops the value is a word (or a newline inside\n // a string) — text after an unclosed object — not JSON punctuation, which is\n // malformed JSON (a trailing comma, a missing comma) and keeps its old reading.\n const broken = (at: number): KindGrammarVerdict => ({\n status: \"broken\",\n at,\n cut: lastGood,\n prose: !/^[{}[\\]:,\"'0-9.+-]$/.test(s[at] ?? \"\"),\n });\n let i = from;\n while (i < n) {\n const c = s.charCodeAt(i);\n if (c === 32 || c === 9 || c === 10 || c === 13) {\n i++;\n continue;\n }\n if (expect === 4 || expect === 1 || expect === 2) {\n if (c === 125 /* } */ || c === 93 /* ] */) {\n if (closers.length === 0 || closers[closers.length - 1] !== c) return broken(i);\n if (expect === 4 || trailingCommas || lastCharWasOpener(s, i)) {\n closers.pop();\n i++;\n lastGood = i;\n if (closers.length === 0) return { status: \"complete\", end: i };\n expect = 4;\n continue;\n }\n return broken(i);\n }\n if (expect === 4) {\n if (c !== 44 /* , */) return broken(i);\n i++;\n lastGood = i;\n expect = closers[closers.length - 1] === 125 ? 2 : 1;\n continue;\n }\n }\n if (expect === 3) {\n if (c !== 58 /* : */) return broken(i);\n i++;\n expect = 0;\n continue;\n }\n const keyPosition = expect === 2;\n if (c === 34 /* \" */ || (singleQuotes && c === 39) /* ' */) {\n let j = i + 1;\n for (;;) {\n if (j >= n) return { status: \"prefix\" };\n const d = s.charCodeAt(j);\n if (d === 92 /* \\ */) {\n j += 2;\n continue;\n }\n if (d === 10 || d === 13) return broken(j);\n if (d === c) break;\n j++;\n }\n i = j + 1;\n if (keyPosition) expect = 3;\n else {\n expect = 4;\n lastGood = i;\n }\n continue;\n }\n if (keyPosition) {\n if (!bareKeys || !isIdentStart(c)) return broken(i);\n let j = i + 1;\n while (j < n && isIdentPart(s.charCodeAt(j))) j++;\n if (j >= n) return { status: \"prefix\" };\n i = j;\n expect = 3;\n continue;\n }\n if (c === 123 /* { */ || c === 91 /* [ */) {\n closers.push(c === 123 ? 125 : 93);\n i++;\n lastGood = i;\n expect = c === 123 ? 2 : 1;\n continue;\n }\n if (c === 45 /* - */ || (c >= 48 && c <= 57)) {\n let j = i + 1;\n while (j < n && /[0-9eE.+-]/.test(s[j]!)) j++;\n if (j >= n) return { status: \"prefix\" };\n i = j;\n lastGood = i;\n expect = 4;\n continue;\n }\n if (isIdentStart(c)) {\n let j = i + 1;\n while (j < n && isIdentPart(s.charCodeAt(j))) j++;\n const word = s.slice(i, j);\n if (j >= n) return VALUE_WORDS[dialect].some((w) => w.startsWith(word)) ? { status: \"prefix\" } : broken(i);\n if (!VALUE_WORDS[dialect].includes(word)) return broken(i);\n i = j;\n lastGood = i;\n expect = 4;\n continue;\n }\n return broken(i);\n }\n return { status: \"prefix\" };\n}\n\nconst VALUE_WORDS: Record<GrammarDialect, string[]> = {\n json: [\"true\", \"false\", \"null\"],\n python: [\"True\", \"False\", \"None\", \"true\", \"false\", \"null\"],\n js: [\"true\", \"false\", \"null\", \"undefined\", \"NaN\", \"Infinity\"],\n};\n\nfunction isIdentStart(c: number): boolean {\n return (c >= 65 && c <= 90) || (c >= 97 && c <= 122) || c === 95 || c === 36;\n}\nfunction isIdentPart(c: number): boolean {\n return isIdentStart(c) || (c >= 48 && c <= 57);\n}\n/** Whether the last non-space character before `at` opens a container (`{}` / `[]` are always fine). */\nfunction lastCharWasOpener(s: string, at: number): boolean {\n for (let k = at - 1; k >= 0; k--) {\n const c = s.charCodeAt(k);\n if (c === 32 || c === 9 || c === 10 || c === 13) continue;\n return c === 123 || c === 91;\n }\n return false;\n}\n\nconst JSON_ONLY_FAMILIES = new Set<KindSpellingFamily>([\"lifted\", \"escaped\", \"markdown\"]);\n\n/** A complete region as JSON text (Python / JS converted), or null when it will not read. */\nexport function regionJson(region: Pick<KindSpellingRegion, \"family\" | \"decoded\">): string | null {\n const text = region.decoded;\n if (region.family === \"js\") return json5AsJson(text);\n if (region.family !== \"python\") {\n try {\n JSON.parse(text);\n return text;\n } catch {\n // A repr-shaped body (single quotes, True/None) reads below.\n }\n }\n return pythonReprAsJson(text);\n}\n\n/**\n * A BROKEN (settled, unclosed) region closed where its grammar ended: a\n * dangling `,` or `key:` dropped, every open container closed — the reading\n * the label is drawn from. Null when even that will not read.\n */\nexport function closedJson(region: Pick<KindSpellingRegion, \"family\" | \"decoded\">): string | null {\n let body = region.decoded.replace(/\\s+$/, \"\");\n body = body.replace(/,?\\s*(?:\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|[A-Za-z_$][\\w$]*)\\s*:\\s*$/, \"\");\n body = body.replace(/,\\s*$/, \"\");\n const closers: string[] = [];\n let quote = \"\";\n for (let i = 0; i < body.length; i++) {\n const ch = body[i]!;\n if (quote) {\n if (ch === \"\\\\\") i++;\n else if (ch === quote) quote = \"\";\n continue;\n }\n if (ch === '\"' || (ch === \"'\" && !JSON_ONLY_FAMILIES.has(region.family))) quote = ch;\n else if (ch === \"{\") closers.push(\"}\");\n else if (ch === \"[\") closers.push(\"]\");\n else if (ch === \"}\" || ch === \"]\") closers.pop();\n }\n if (quote) return null;\n return regionJson({ family: region.family, decoded: body + closers.reverse().join(\"\") });\n}\n\n/**\n * The VALUE form of the same question, for renderers handed parsed data\n * instead of text (the value grid, the JSON viewers): does this value carry a\n * kind anywhere — an object with a string `__kind`, at any depth, or a string\n * that holds a kind REGION (`textCarriesKind`: whole kind JSON, or prose with\n * a kind in it — a ```json fence, inline JSON — outside quoted source)? A raw\n * renderer that answers yes renders the value through the one value door\n * (`AnswerValueView`) instead.\n */\nexport function valueCarriesKind(value: unknown): boolean {\n return carriesKind(value, 0, new Set());\n}\n\n/** Past this depth a value is not searched further (cycles and pathological nesting). */\nconst VALUE_SEARCH_DEPTH = 64;\n\nfunction carriesKind(value: unknown, depth: number, seen: Set<object>): boolean {\n if (typeof value === \"string\") return textCarriesKind(value);\n if (value === null || typeof value !== \"object\") return false;\n if (depth > VALUE_SEARCH_DEPTH || seen.has(value)) return false;\n seen.add(value);\n if (Array.isArray(value)) {\n return value.some((item) => carriesKind(item, depth + 1, seen));\n }\n const record = value as Record<string, unknown>;\n if (typeof record.__kind === \"string\" && record.__kind.trim()) return true;\n for (const item of Object.values(record)) {\n if (carriesKind(item, depth + 1, seen)) return true;\n }\n return false;\n}\n\n/**\n * A STRING value that holds a kind region (H1, round 5): text that is kind\n * JSON, or prose with a kind region in it by THE markdown definition\n * (`markdownCarriesKind` — outside quoted source, markdown-escaped key too).\n * `{answer: \"Here are your cards: ```json {…kind…}```\"}` carries its kind.\n */\nexport function textCarriesKind(text: string): boolean {\n if (isKindJsonText(text) || markdownCarriesKind(text)) return true;\n // A WHOLE JSON text whose kind is held in a string value at any depth\n // (`{\"result\":\"{\\\"__kind\\\":…}\"}` — tool / workflow data): parse it and read\n // the strings (round 10: real JSON, never a free-text guess).\n if (!mayHoldKindKey(text) || !/^[{[]/.test(text.trimStart())) return false;\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n return false;\n }\n return typeof parsed === \"object\" && parsed !== null && valueCarriesKind(parsed);\n}\n\n/**\n * Text that IS a JSON object/array carrying a `__kind` key (not prose\n * mentioning one) — the gate before a `JSON.parse` of the whole text. For\n * \"does this string hold a kind anywhere\", read `textCarriesKind`.\n */\nexport function isKindJsonText(text: string): boolean {\n const first = text.trimStart()[0];\n return (first === \"{\" || first === \"[\") && hasKindKey(text);\n}\n\n/** The kind slug a value claims for itself at its root, or null. */\nexport function rootKindSlug(value: unknown): string | null {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return null;\n const kind = (value as Record<string, unknown>).__kind;\n return typeof kind === \"string\" && kind.trim() ? kind : null;\n}\n\n/** Fence languages whose body is a JSON region (an unlabelled fence included). */\nconst JSON_FENCE_LANGS = new Set([\"\", \"json\", \"jsonc\", \"json5\"]);\n\n/** Whether a fence's language makes its body a JSON region (any case; none counts). */\nexport function isJsonFenceLanguage(lang: string | null | undefined): boolean {\n return JSON_FENCE_LANGS.has((lang ?? \"\").trim().toLowerCase());\n}\n\n/**\n * Where a kind in markdown is the model QUOTING SOURCE, never data (the\n * owner's ruling, 2026-09-30): inside an inline code span, or inside a fence\n * whose language is not JSON (```ts, ```xml, ```markdown …). Everything else\n * — prose, a blockquote, a list item, a table cell, a 4-space indented block,\n * a JSON fence — is data. [start, end) spans, in order. THE one definition:\n * the splitter, the live accumulator and the leaf gate all read it, so a leaf\n * and the pipeline can never disagree about what is a kind region.\n */\nexport function quotedSourceRanges(text: string): Array<[number, number]> {\n const ranges: Array<[number, number]> = [];\n for (const range of findCodeRanges(text)) {\n if (range.kind === \"span\") {\n ranges.push([range.start, range.end]);\n continue;\n }\n const raw = text.slice(range.start, range.end);\n const newline = raw.indexOf(\"\\n\");\n const firstLine = (newline === -1 ? raw : raw.slice(0, newline)).replace(/^ {0,3}(?:> ?)*/, \"\");\n const opener = fenceOpenerOf(firstLine.trimStart());\n if (!opener || !isJsonFenceLanguage(opener.lang)) {\n ranges.push([range.start, range.end]);\n }\n }\n return ranges;\n}\n\n/**\n * Whether an XML card SHOWS SOURCE (the owner's rulings, round 3): a ```xml\n * FENCE is the model quoting source — a kind inside it stays as written (a).\n * An XML TAG the model wraps content in (`<answer>`, `<output>`, any generic\n * tag, closed or not) is STRUCTURE (b): the splitter and the accumulator mark\n * every piece of it `genericXmlContainer`, and a kind inside its prose renders\n * as the kind. THE one answer — XmlBlock's callers and the frame judge read it.\n */\nexport function isQuotedSourceXmlBlock(block: {\n metadata?: Record<string, unknown> | null;\n}): boolean {\n return block.metadata?.genericXmlContainer !== true;\n}\n\n/**\n * Where the front matter that opens `source` ends (0 when none): an optional\n * byte-order mark, a first line that is exactly `---` or `+++`, through the\n * same fence (YAML also `...`). Front matter is document properties, never\n * content — a `{\"__kind\":…}` VALUE inside it is never a kind block, in the\n * static splitter or the live accumulator (RC-B3r round 3, C1).\n */\nexport function frontMatterEnd(source: string): number {\n const body = source.charCodeAt(0) === 0xfeff ? 1 : 0;\n const firstBreak = source.indexOf(\"\\n\", body);\n if (firstBreak < 0) return 0;\n const opener = source.slice(body, firstBreak).replace(/\\r$/, \"\");\n if (opener !== \"---\" && opener !== \"+++\") return 0;\n for (let pos = firstBreak + 1; pos < source.length; ) {\n const next = source.indexOf(\"\\n\", pos);\n const end = next < 0 ? source.length : next;\n const line = source.slice(pos, end).replace(/\\r$/, \"\");\n if (line === opener || (opener === \"---\" && line === \"...\")) return end;\n if (next < 0) break;\n pos = next + 1;\n }\n return 0;\n}\n\n/**\n * The MARKDOWN form: does this prose hold a kind REGION — a `__kind` key\n * anywhere outside quoted source (see `quotedSourceRanges`)? A leaf that\n * answers yes hands the text to the pipeline (`MarkdownStream`), which lifts\n * the region by the same definition — prose, table cell, indented block,\n * blockquote, JSON fence, or the whole text being kind JSON.\n */\nexport function markdownCarriesKind(source: string): boolean {\n // Front matter is document properties, hidden on screen and never lifted\n // (X-minor, round 3): a kind there is not a region of the text.\n const text = source.slice(frontMatterEnd(source));\n if (!hasKindKey(text, JSON_KIND_SPELLINGS)) return false;\n if (isKindJsonText(text)) return true;\n const quoted = quotedSourceRanges(text);\n if (quoted.length === 0) return true;\n let outside = \"\";\n let cursor = 0;\n for (const [start, end] of quoted) {\n if (start < cursor) continue;\n outside += text.slice(cursor, start) + \" \";\n cursor = end;\n }\n outside += text.slice(cursor);\n return hasKindKey(outside, JSON_KIND_SPELLINGS);\n}\n","/**\n * Recover complete self-described kind objects from ANY containing text.\n *\n * Markdown, code fences, and XML are arrival containers, not type authority.\n * Once a complete JSON object directly declares a non-empty `__kind`, that\n * object is its own Content IR region even when an outer parser already\n * classified the surrounding bytes as code, XML, or prose.\n *\n * Generic XML opts into literal-context exclusion so tag attributes, code,\n * comments, and CDATA remain examples owned by their container. Otherwise the\n * scanner is syntax-agnostic about the outer container. It only promotes candidates that independently pass JSON.parse and carry a\n * direct string discriminator. Failed/malformed candidates remain untouched.\n */\n\nimport { readXmlTag } from \"../source/xml-tag\";\nimport { fenceOpenerOf, findCodeRanges } from \"../source\";\nimport { frontMatterEnd, isJsonFenceLanguage, kindGrammar, quotedSourceRanges } from \"./json-kind-signal\";\n\nexport interface EmbeddedKindJsonRegion {\n start: number;\n end: number;\n content: string;\n kind: string;\n}\n\nexport type EmbeddedKindJsonPiece =\n | { type: \"container\"; content: string }\n | { type: \"kind\"; content: string; kind: string }\n /**\n * JSON punctuation that only held kinds together — the `[`, `,` and `]` of\n * an array of kinds. Kept so the partition stays lossless; never rendered\n * (a lone `[` drawn as a JSON card is noise, not content — A6).\n */\n | { type: \"chrome\"; content: string }\n /**\n * The non-kind DATA of a JSON wrapper around kinds (`{\"result\":{…kind…},\n * \"note\":\"x\"}`, A7): `content` is the source span it replaces (lossless),\n * `json` is the wrapper's value with every kind removed — valid JSON, drawn\n * as genuine JSON. A wrapper that holds only kinds has no residual piece.\n */\n | { type: \"residual\"; content: string; json: string };\n\nfunction matchingJsonObjectEnd(source: string, start: number): number | null {\n if (source[start] !== \"{\" && source[start] !== \"[\") return null;\n\n const stack: string[] = [source[start]];\n let inString = false;\n let escaped = false;\n\n for (let index = start + 1; index < source.length; index++) {\n const char = source[index];\n\n if (inString) {\n if (escaped) {\n escaped = false;\n } else if (char === \"\\\\\") {\n escaped = true;\n } else if (char === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (char === '\"') {\n inString = true;\n continue;\n }\n if (char === \"{\" || char === \"[\") {\n stack.push(char);\n continue;\n }\n if (char !== \"}\" && char !== \"]\") continue;\n\n const opening = stack.pop();\n if (\n (char === \"}\" && opening !== \"{\") ||\n (char === \"]\" && opening !== \"[\")\n ) {\n return null;\n }\n if (stack.length === 0) return index + 1;\n }\n\n return null;\n}\n\n/**\n * For every `{` / `[` in `text`: the end (exclusive) of the string-aware\n * balanced JSON value opening there, or -1 (never balances). Each opener's\n * reading starts outside a string, exactly as if read alone; one right-to-left\n * pass reuses each nested opener's own answer (its reading from inside an\n * enclosing value is the same reading), so the whole table is linear — a\n * reading per opener was quadratic on thousands of unclosed `{` (round 11, P5).\n */\nexport function balancedEnds(text: string): Int32Array {\n const ends = new Int32Array(text.length).fill(-1);\n const stack: string[] = [];\n for (let start = text.length - 1; start >= 0; start--) {\n const open = text[start];\n if (open !== \"{\" && open !== \"[\") continue;\n stack.length = 0;\n stack.push(open === \"{\" ? \"}\" : \"]\");\n let inString = false;\n for (let i = start + 1; i < text.length; i++) {\n const ch = text[i]!;\n if (inString) {\n if (ch === \"\\\\\") i++;\n else if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') inString = true;\n else if (ch === \"{\" || ch === \"[\") {\n const end = ends[i]!;\n if (end < 0) break;\n i = end - 1;\n } else if (ch === \"}\" || ch === \"]\") {\n if (stack.pop() !== ch) break;\n ends[start] = i + 1;\n break;\n }\n }\n }\n return ends;\n}\n\n/** `matchingJsonObjectEnd` answered from ONE linear table, built on first use (a reading per opener is quadratic on thousands of unclosed `{`). */\nfunction lazyJsonEnds(source: string): (start: number) => number | null {\n let table: Int32Array | undefined;\n return (start) => {\n if (source[start] !== \"{\" && source[start] !== \"[\") return null;\n table ??= balancedEnds(source);\n const end = table[start]!;\n return end < 0 ? null : end;\n };\n}\n\nfunction skipWhitespace(source: string, cursor: number): number {\n while (/\\s/.test(source[cursor] ?? \"\")) cursor++;\n return cursor;\n}\n\nfunction jsonStringEnd(source: string, start: number): number | null {\n if (source[start] !== '\"') return null;\n\n let escaped = false;\n for (let cursor = start + 1; cursor < source.length; cursor++) {\n const char = source[cursor];\n if (escaped) {\n escaped = false;\n } else if (char === \"\\\\\") {\n escaped = true;\n } else if (char === '\"') {\n return cursor + 1;\n }\n }\n return null;\n}\n\nfunction jsonValueEnd(source: string, start: number): number | null {\n const char = source[start];\n if (char === '\"') return jsonStringEnd(source, start);\n if (char === \"{\" || char === \"[\") return matchingJsonObjectEnd(source, start);\n\n const end = source.slice(start).search(/[\\s,}\\]]/);\n const tokenEnd = end === -1 ? source.length : start + end;\n const token = source.slice(start, tokenEnd);\n return /^(?:true|false|null|-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)$/.test(\n token,\n )\n ? tokenEnd\n : null;\n}\n\n/**\n * Returns the structural boundary of an unfinished or malformed object whose\n * root directly declares `__kind`. That root owns all of its descendants even\n * though it cannot be promoted as a renderable JSON region itself.\n */\nfunction malformedKindOwnerEnd(\n source: string,\n start: number,\n boundary = source.length,\n): number | null {\n let cursor = skipWhitespace(source, start + 1);\n let kindFound = false;\n const ownerEnd = () => (kindFound ? boundary : null);\n\n while (cursor < boundary) {\n const keyStart = cursor;\n const keyEnd = jsonStringEnd(source, keyStart);\n if (keyEnd === null || keyEnd > boundary) return ownerEnd();\n\n let key: unknown;\n try {\n key = JSON.parse(source.slice(keyStart, keyEnd));\n } catch {\n return ownerEnd();\n }\n\n cursor = skipWhitespace(source, keyEnd);\n if (cursor >= boundary || source[cursor] !== \":\") return ownerEnd();\n cursor = skipWhitespace(source, cursor + 1);\n\n const valueStart = cursor;\n const valueEnd = jsonValueEnd(source, valueStart);\n if (valueEnd === null || valueEnd > boundary) return ownerEnd();\n\n if (key === \"__kind\") {\n try {\n const value = JSON.parse(source.slice(valueStart, valueEnd));\n kindFound ||= typeof value === \"string\" && value.trim().length > 0;\n } catch {\n return ownerEnd();\n }\n }\n\n cursor = skipWhitespace(source, valueEnd);\n if (source[cursor] === \"}\") return kindFound ? cursor + 1 : null;\n if (cursor >= boundary || source[cursor] !== \",\") return ownerEnd();\n cursor = skipWhitespace(source, cursor + 1);\n }\n\n return ownerEnd();\n}\n\n/** String literals in a valid anonymous JSON wrapper are never regions. */\nfunction jsonStringRanges(\n source: string,\n start: number,\n end: number,\n): Array<[number, number]> {\n const ranges: Array<[number, number]> = [];\n for (let cursor = start; cursor < end; cursor++) {\n if (source[cursor] !== '\"') continue;\n const stringEnd = jsonStringEnd(source, cursor);\n if (stringEnd === null || stringEnd > end) break;\n ranges.push([cursor, stringEnd]);\n cursor = stringEnd - 1;\n }\n return ranges;\n}\n\nfunction declaredKind(candidate: string): string | null {\n try {\n const parsed: unknown = JSON.parse(candidate);\n if (\n typeof parsed !== \"object\" ||\n parsed === null ||\n Array.isArray(parsed)\n ) {\n return null;\n }\n const kind = (parsed as Record<string, unknown>).__kind;\n return typeof kind === \"string\" && kind.trim() ? kind : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Literal markdown/XML regions do not grant embedded JSON a new render owner:\n * code (fences and spans, by THE one code-range rule — @ai-matrx/content-ir/\n * source; an unpaired backtick is text, never \"literal to the end\"), HTML\n * comments, CDATA and XML tags.\n */\nfunction literalRanges(\n source: string,\n liftJsonFences = false,\n): Array<[number, number]> {\n const ranges: Array<[number, number]> = [];\n // A JSON-family fence inside an XML TAG is data, not an example (ruling (b),\n // round 3): its body is searched; its fence lines become chrome around a kind.\n const code = liftJsonFences\n ? findCodeRanges(source).filter((range) => !isJsonFenceRange(source, range))\n : findCodeRanges(source);\n let next = 0;\n let cursor = 0;\n while (cursor < source.length) {\n while (next < code.length && code[next]!.start < cursor) next++;\n const range = code[next];\n if (range && range.start === cursor) {\n ranges.push([range.start, range.end]);\n cursor = range.end;\n next++;\n continue;\n }\n if (source.startsWith(\"<!--\", cursor)) {\n const end = source.indexOf(\"-->\", cursor + 4);\n const rangeEnd = end === -1 ? source.length : end + 3;\n ranges.push([cursor, rangeEnd]);\n cursor = rangeEnd;\n continue;\n }\n if (source.startsWith(\"<![CDATA[\", cursor)) {\n const end = source.indexOf(\"]]>\", cursor + 9);\n const rangeEnd = end === -1 ? source.length : end + 3;\n ranges.push([cursor, rangeEnd]);\n cursor = rangeEnd;\n continue;\n }\n if (source[cursor] === \"<\") {\n const tag = readXmlTag(source, cursor);\n if (tag) {\n const end = cursor + tag.raw.length;\n ranges.push([cursor, end]);\n cursor = end;\n continue;\n }\n // An opening tag still arriving (`<custom value='{…` — no `>` yet): its\n // attributes are literal to the end of the source, never a kind.\n if (/^<[A-Za-z_][\\w.:-]*\\s/.test(source.slice(cursor, cursor + 64)) && !tagCloses(source, cursor)) {\n ranges.push([cursor, source.length]);\n break;\n }\n }\n cursor++;\n }\n return ranges;\n}\n\n/** Whether the tag opening at `start` reaches its `>` (quoted attribute values honoured). */\nfunction tagCloses(source: string, start: number): boolean {\n let quote: string | null = null;\n for (let i = start + 1; i < source.length; i++) {\n const ch = source[i];\n if (quote) {\n if (ch === quote) quote = null;\n } else if (ch === \"'\" || ch === '\"') quote = ch;\n else if (ch === \">\") return true;\n }\n return false;\n}\n\n/** Whether a code range is a fence whose language makes its body JSON (unlabelled included). */\nfunction isJsonFenceRange(\n source: string,\n range: { start: number; end: number; kind: string },\n): boolean {\n if (range.kind !== \"fence\") return false;\n const raw = source.slice(range.start, range.end);\n const newline = raw.indexOf(\"\\n\");\n const opener = fenceOpenerOf((newline === -1 ? raw : raw.slice(0, newline)).trimStart());\n return opener !== null && isJsonFenceLanguage(opener.lang);\n}\n\n/**\n * The fence lines around a kind that is the WHOLE body of a JSON-family fence\n * (`liftJsonFences`): opener through the object, and the object through the\n * closer, as chrome spans — never rendered, kept so the partition is lossless.\n */\nfunction jsonFenceChromeSpans(\n source: string,\n regions: EmbeddedKindJsonRegion[],\n): Array<[number, number]> {\n const spans: Array<[number, number]> = [];\n for (const range of findCodeRanges(source)) {\n if (!isJsonFenceRange(source, range)) continue;\n const inside = regions.filter((r) => r.start >= range.start && r.end <= range.end);\n if (inside.length !== 1) continue;\n const region = inside[0]!;\n const head = source.slice(range.start, region.start);\n const tail = source.slice(region.end, range.end);\n // Opener line, then only whitespace; only whitespace, then the closer (or nothing yet).\n if (!/^[^\\n]*\\n\\s*$/.test(head) || !/^\\s*(?:[`~]{3,}[ \\t]*)?$/.test(tail)) continue;\n spans.push([range.start, region.start]);\n if (region.end < range.end) spans.push([region.end, range.end]);\n }\n return spans;\n}\n\n/** Outermost complete self-described objects, in source order. */\n// Front matter is document properties (`frontMatterEnd`) — one definition,\n// in the detector's module, so the leaf gate and the frame judge read it too.\nexport { frontMatterEnd } from \"./json-kind-signal\";\n\nexport interface EmbeddedKindSearchOptions {\n /** Generic XML: code, comments, CDATA and tags are literal (the XML card shows them). */\n excludeLiteralContexts?: boolean;\n /**\n * With `excludeLiteralContexts` (an XML TAG — structure, ruling (b) round 3):\n * a ```json / ```jsonc / ```json5 / unlabelled fence is NOT literal. A kind\n * that is its whole body leaves with the fence's own lines as chrome, so\n * the XML pieces around it hold no orphan fence marker.\n */\n liftJsonFences?: boolean;\n /**\n * Markdown: inline code spans and non-JSON fences are the model quoting\n * source (`quotedSourceRanges`, the owner's ruling 2026-09-30) — never lifted.\n */\n excludeQuotedSource?: boolean;\n}\n\nexport function findEmbeddedKindJsonRegions(\n source: string,\n options: EmbeddedKindSearchOptions = {},\n): EmbeddedKindJsonRegion[] {\n const regions: EmbeddedKindJsonRegion[] = [];\n const endOf = lazyJsonEnds(source);\n const excluded = [\n ...(options.excludeLiteralContexts\n ? literalRanges(source, options.liftJsonFences === true)\n : []),\n ...(options.excludeQuotedSource ? quotedSourceRanges(source) : []),\n ].sort((a, b) => a[0] - b[0]);\n const jsonStrings: Array<[number, number]> = [];\n let excludedIndex = 0;\n let jsonStringIndex = 0;\n\n for (let start = frontMatterEnd(source); start < source.length; start++) {\n while (\n excludedIndex < excluded.length &&\n excluded[excludedIndex]![1] <= start\n ) {\n excludedIndex++;\n }\n while (\n jsonStringIndex < jsonStrings.length &&\n jsonStrings[jsonStringIndex]![1] <= start\n ) {\n jsonStringIndex++;\n }\n if (\n excludedIndex < excluded.length &&\n start >= excluded[excludedIndex]![0] &&\n start < excluded[excludedIndex]![1]\n )\n continue;\n if (\n jsonStringIndex < jsonStrings.length &&\n start >= jsonStrings[jsonStringIndex]![0] &&\n start < jsonStrings[jsonStringIndex]![1]\n )\n continue;\n if (source[start] !== \"{\") continue;\n const end = endOf(start);\n if (end === null) {\n // An unclosed object owns text only as far as its JSON grammar holds —\n // to the end while still validly open, else to its cut (round 10, C1):\n // a later kind in prose after it is still found.\n const verdict = kindGrammar(source, \"json\", start);\n const bound = verdict.status === \"broken\" ? verdict.cut : source.length;\n const ownerEnd = bound > start ? malformedKindOwnerEnd(source, start, bound) : null;\n if (ownerEnd !== null) start = ownerEnd - 1;\n continue;\n }\n\n const content = source.slice(start, end);\n const kind = declaredKind(content);\n if (!kind) {\n const ownerEnd = malformedKindOwnerEnd(source, start, end);\n if (ownerEnd !== null) {\n start = ownerEnd - 1;\n continue;\n }\n // A loop, never a spread: a JSON value with ~100k strings overflowed the\n // call stack (RangeError on a stored chat row — the splitter crashed).\n for (const range of jsonStringRanges(source, start, end)) jsonStrings.push(range);\n continue;\n }\n\n regions.push({ start, end, content, kind });\n start = end - 1;\n }\n\n return regions;\n}\n\n/**\n * The array punctuation around runs of kinds: for every run of regions joined\n * only by commas, opened by a `[` (the last non-space byte before the run) and\n * closed by a `]` (the first one after it), the spans `[…`, `,` and `…]` are\n * chrome. Returned as [start, end) spans, in order.\n */\nfunction kindArrayChromeSpans(\n source: string,\n regions: EmbeddedKindJsonRegion[],\n): Array<[number, number]> {\n const spans: Array<[number, number]> = [];\n let first = 0;\n while (first < regions.length) {\n let last = first;\n while (\n last + 1 < regions.length &&\n /^\\s*,\\s*$/.test(source.slice(regions[last]!.end, regions[last + 1]!.start))\n ) {\n last++;\n }\n const before = source.slice(0, regions[first]!.start);\n const open = /\\[\\s*$/.exec(before);\n const after = source.slice(regions[last]!.end);\n const close = /^\\s*\\]/.exec(after);\n if (open && close) {\n spans.push([open.index, regions[first]!.start]);\n for (let k = first; k < last; k++) {\n spans.push([regions[k]!.end, regions[k + 1]!.start]);\n }\n spans.push([regions[last]!.end, regions[last]!.end + close[0].length]);\n }\n first = last + 1;\n }\n return spans;\n}\n\n/** True when a value is a JSON object that directly declares a non-empty `__kind`. */\nfunction isKindValue(value: unknown): boolean {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const kind = (value as Record<string, unknown>).__kind;\n return typeof kind === \"string\" && kind.trim().length > 0;\n}\n\n/** The value with every kind object removed (array items and object members). */\nfunction withoutKinds(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.filter((item) => !isKindValue(item)).map(withoutKinds);\n }\n if (typeof value === \"object\" && value !== null) {\n const out: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) {\n if (!isKindValue(item)) out[key] = withoutKinds(item);\n }\n return out;\n }\n return value;\n}\n\n/** Whether anything but empty containers is left. */\nfunction carriesData(value: unknown): boolean {\n if (Array.isArray(value)) return value.some(carriesData);\n if (typeof value === \"object\" && value !== null) {\n return Object.values(value).some(carriesData);\n }\n return true;\n}\n\n/** Only braces, brackets, commas, colons, whitespace and object KEYS. */\nfunction isPureJsonStructure(span: string): boolean {\n return /^[\\s{}[\\],:]*$/.test(\n span.replace(/\"(?:[^\"\\\\]|\\\\.)*\"\\s*:/g, \"\"),\n );\n}\n\n/**\n * A container that is, as a whole, a JSON object or array holding kinds (A7):\n * every non-kind span is chrome, and the wrapper's own data — the value with\n * its kinds removed — rides ONE residual piece at the first span that carries\n * any. Null when the source is not a parseable JSON wrapper.\n */\nfunction wrapperPieces(\n source: string,\n regions: EmbeddedKindJsonRegion[],\n): EmbeddedKindJsonPiece[] | null {\n const trimmed = source.trim();\n if (!/^[[{]/.test(trimmed)) return null;\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed);\n } catch {\n return null;\n }\n if (typeof parsed !== \"object\" || parsed === null || isKindValue(parsed)) {\n return null;\n }\n const residual = withoutKinds(parsed);\n const residualJson = carriesData(residual) ? JSON.stringify(residual, null, 2) : null;\n\n const pieces: EmbeddedKindJsonPiece[] = [];\n let residualPlaced = residualJson === null;\n const pushSpan = (content: string) => {\n if (!content) return;\n if (!residualPlaced && !isPureJsonStructure(content)) {\n pieces.push({ type: \"residual\", content, json: residualJson as string });\n residualPlaced = true;\n return;\n }\n pieces.push({ type: \"chrome\", content });\n };\n let cursor = 0;\n for (const region of regions) {\n pushSpan(source.slice(cursor, region.start));\n pieces.push({ type: \"kind\", content: region.content, kind: region.kind });\n cursor = region.end;\n }\n pushSpan(source.slice(cursor));\n if (!residualPlaced) {\n // Data the scan could not pin to a span (it sits between keys only):\n // still shown, after the kinds.\n pieces.push({ type: \"residual\", content: \"\", json: residualJson as string });\n }\n return pieces;\n}\n\n/** Losslessly partition a container around every recovered kind region. */\nexport function splitAroundEmbeddedKindJson(\n source: string,\n options: EmbeddedKindSearchOptions = {},\n): EmbeddedKindJsonPiece[] {\n const regions = findEmbeddedKindJsonRegions(source, options);\n if (regions.length === 0) return [{ type: \"container\", content: source }];\n\n const wrapped = wrapperPieces(source, regions);\n if (wrapped) return wrapped;\n\n // Every boundary in order: kind regions and chrome spans never overlap.\n const marks: Array<\n { start: number; end: number } & (\n | { type: \"kind\"; kind: string }\n | { type: \"chrome\" }\n )\n > = [\n ...regions.map((r) => ({ start: r.start, end: r.end, type: \"kind\" as const, kind: r.kind })),\n ...[\n ...kindArrayChromeSpans(source, regions),\n ...(options.excludeLiteralContexts && options.liftJsonFences\n ? jsonFenceChromeSpans(source, regions)\n : []),\n ].map(([start, end]) => ({\n start,\n end,\n type: \"chrome\" as const,\n })),\n ].sort((a, b) => a.start - b.start);\n\n const pieces: EmbeddedKindJsonPiece[] = [];\n let cursor = 0;\n for (const mark of marks) {\n if (mark.start > cursor) {\n pieces.push({\n type: \"container\",\n content: source.slice(cursor, mark.start),\n });\n }\n if (mark.end > mark.start) {\n pieces.push(\n mark.type === \"kind\"\n ? { type: \"kind\", content: source.slice(mark.start, mark.end), kind: mark.kind }\n : { type: \"chrome\", content: source.slice(mark.start, mark.end) },\n );\n }\n cursor = Math.max(cursor, mark.end);\n }\n if (cursor < source.length) {\n pieces.push({ type: \"container\", content: source.slice(cursor) });\n }\n return pieces;\n}\n\n/**\n * A recovered PROSE piece, shaped exactly as the live stream shapes the same\n * bytes (A5, 2026-09-30): the stream splits `Here: {\"__kind\":…} after` into\n * three lines as it arrives, so its prose blocks are trimmed at the end (every\n * text block is) and, after a kind, start where the next character does — the\n * spaces after the object and the one line break that ended its line are the\n * boundary, not content. Both hosts call this on every text piece, so a live\n * message and its reload draw the same blocks.\n */\nexport function normalizeRecoveredProsePiece(\n content: string,\n followsKind: boolean,\n): string {\n const start = followsKind ? content.replace(/^[ \\t]*(?:\\r?\\n)?/, \"\") : content;\n return start.trimEnd();\n}\n\n/**\n * Every recovered container piece, by its container's block type: prose by\n * the rule above, code byte-verbatim, and a SECTION (`thinking`, `info`, …)\n * trimmed — the live stream splits a kind out of a section as it arrives\n * (A8) and each part is a section body, which is trimmed like a whole one.\n */\nexport function normalizeRecoveredContainerPiece(\n content: string,\n containerType: string,\n followsKind: boolean,\n): string {\n if (containerType === \"text\") {\n return normalizeRecoveredProsePiece(content, followsKind);\n }\n if (containerType === \"code\") return content;\n return content.trim();\n}\n\n/**\n * A complete JSON value (object or array) that holds at least one kind, as\n * one region: a recovered kind region widened to the OUTERMOST complete,\n * parseable JSON value that contains it — a kindless wrapper\n * (`{\"result\":{…kind…},\"note\":…}`, A7) or an array of kinds and plain values.\n * For DESTINATION transforms (export, copy, speech) that convert the value\n * whole; the renderer partitions the same bytes with\n * {@link splitAroundEmbeddedKindJson}. Built on THE region finder above.\n */\nexport interface KindCarryingJsonRegion {\n start: number;\n end: number;\n content: string;\n value: unknown;\n}\n\nexport function findKindCarryingJsonValues(\n source: string,\n options: { excludeLiteralContexts?: boolean } = {},\n): KindCarryingJsonRegion[] {\n const kinds = findEmbeddedKindJsonRegions(source, options);\n if (kinds.length === 0) return [];\n const excluded = options.excludeLiteralContexts ? literalRanges(source) : [];\n const inLiteral = (index: number) =>\n excluded.some(([start, end]) => index >= start && index < end);\n // One linear table of every opener's balanced end: a reading per opener was\n // quadratic on thousands of unclosed `{` (round 11, P5).\n const ends = balancedEnds(source);\n\n const regions: KindCarryingJsonRegion[] = [];\n let floor = frontMatterEnd(source);\n for (const region of kinds) {\n if (region.start < floor) continue; // inside a wrapper already taken\n let best = { start: region.start, end: region.end, value: JSON.parse(region.content) as unknown };\n for (let open = floor; open < region.start; open++) {\n const char = source[open];\n if ((char !== \"{\" && char !== \"[\") || inLiteral(open)) continue;\n const found = ends[open]!;\n if (found < 0 || found < region.end) continue;\n const end = found;\n try {\n best = { start: open, end, value: JSON.parse(source.slice(open, end)) };\n break; // the earliest opener that encloses it is the outermost\n } catch {\n continue;\n }\n }\n regions.push({ ...best, content: source.slice(best.start, best.end) });\n floor = best.end;\n }\n return regions;\n}\n\n/**\n * A kind that can never complete as written: [start, end) and the text of\n * its region. Two shapes, by the same ownership rule as the finder above:\n * - a CLOSED object whose root declares `__kind` but does not parse (the\n * finder's malformed owner) — bounded;\n * - an UNCLOSED JSON object or array at the tail (a stream cut off, a\n * truncated store) holding a `\"__kind\"` key anywhere — runs to the end,\n * from its outermost opener (a kindless wrapper is cut with its kind).\n * For destinations that must say \"<Kind> did not finish\" instead of printing\n * the fragment. Complete values (kind or not) are skipped whole.\n */\nexport interface BrokenKindJsonRegion {\n start: number;\n end: number;\n content: string;\n}\n\nconst KIND_KEY_TEXT = /(?<!\\\\)\"__kind\"\\s*:/;\nconst KIND_KEY_TEXT_G = /(?<!\\\\)\"__kind\"\\s*:/g;\n\n/**\n * Round 10 (C1): a broken region is bounded by its OWN JSON grammar. An opener\n * owns a kind key only when its grammar reaches the key; it runs to the end of\n * the text only while it is still validly open, else it ends at its cut. A\n * stray `[[`, `{\"`, `{{`, `[\"`, an unrelated earlier object or a pasted\n * schema never extends a region over the prose after it. A balanced span that\n * does not parse is a region only when it reads once trailing commas go.\n * Linear: key positions once, each opener's grammar stops at its break.\n */\nexport function findBrokenKindJsonRegions(\n source: string,\n options: { excludeLiteralContexts?: boolean } = {},\n): BrokenKindJsonRegion[] {\n const broken: BrokenKindJsonRegion[] = [];\n if (!KIND_KEY_TEXT.test(source)) return broken;\n // A malformed region can only be widened to a lenient balanced value when\n // the source contains a possible closer. Do not allocate the whole balance\n // table for a truncated stream of openers: every lookup would be -1.\n const mayHaveBalancedValue = source.includes(\"}\") || source.includes(\"]\");\n const endOf = mayHaveBalancedValue ? lazyJsonEnds(source) : null;\n const keys: number[] = [];\n KIND_KEY_TEXT_G.lastIndex = 0;\n for (let m = KIND_KEY_TEXT_G.exec(source); m; m = KIND_KEY_TEXT_G.exec(source)) keys.push(m.index);\n let keyIndex = 0;\n const excluded = options.excludeLiteralContexts ? literalRanges(source) : [];\n let excludedIndex = 0;\n\n for (let start = frontMatterEnd(source); start < source.length; start++) {\n while (excludedIndex < excluded.length && excluded[excludedIndex]![1] <= start) {\n excludedIndex++;\n }\n if (\n excludedIndex < excluded.length &&\n start >= excluded[excludedIndex]![0] &&\n start < excluded[excludedIndex]![1]\n ) {\n start = excluded[excludedIndex]![1] - 1;\n continue;\n }\n const char = source[start];\n if (char !== \"{\" && char !== \"[\") continue;\n while (keyIndex < keys.length && keys[keyIndex]! < start) keyIndex++;\n if (keyIndex >= keys.length) break;\n const key = keys[keyIndex]!;\n\n const verdict = kindGrammar(source, \"json\", start);\n if (verdict.status === \"complete\") {\n try {\n JSON.parse(source.slice(start, verdict.end));\n start = verdict.end - 1; // complete: nothing broken inside it\n } catch {\n // A JSON-shaped span JSON.parse still refuses: leave it as written.\n }\n continue;\n }\n if (verdict.status === \"prefix\") {\n // Still validly open to the end of the text and holding a key: arriving.\n broken.push({ start, end: source.length, content: source.slice(start) });\n break;\n }\n // Broken: the opener owns the key only when its grammar reached it.\n if (verdict.at <= key) continue;\n const end = endOf?.(start) ?? null;\n if (end !== null && lenientJson(source.slice(start, end))) {\n broken.push({ start, end, content: source.slice(start, end) });\n start = end - 1;\n continue;\n }\n if (verdict.cut <= key) continue;\n broken.push({ start, end: verdict.cut, content: source.slice(start, verdict.cut) });\n start = verdict.cut - 1;\n }\n return broken;\n}\n\n/** Whether a balanced span reads as JSON once its trailing commas go. */\nfunction lenientJson(span: string): boolean {\n try {\n JSON.parse(span.replace(/,(\\s*[}\\]])/g, \"$1\"));\n return true;\n } catch {\n return false;\n }\n}\n","/**\n * KindSchema — the data-defined field model for a registered kind.\n *\n * `__kind` (KIND_KEY) is the carried discriminator: it is NOT part of a\n * kind's field map; the parser enforces it via `KindSchema.kind` and stamps\n * it onto every compliant snapshot.\n *\n * Moved from app/(dev)/demos/json-block-detector/kind-schemas.ts.\n *\n * 2026-07-15 expressivity extension (A2) — four constructs the Python-owned\n * pydantic schemas need that the v1 vocabulary could not express:\n * - `{type:\"json\"}` / `{type:\"json[]\"}` — any JSON value / array of any\n * JSON values (pydantic bare `Any` fields, `items: {}` arrays, `{}`\n * schemas). A `json` value is implicitly nullable — `null` IS a JSON\n * value — so `nullable` is meaningless (and ignored) on it.\n * - `record` values widened to `\"json\"` (pydantic `dict[str, Any]` /\n * `additionalProperties: true`).\n * - `union` may now carry `kinds` (object unions — anyOf over kind refs,\n * optionally mixed with scalars). Refs externalize to `kind_edge` rows\n * exactly like `array.itemKinds`.\n * - `KindSchema.root` — a NON-OBJECT root form: the kind's VALUE is the\n * root field itself (scalar / array / json / open object), not a `__kind`\n * object with fields. Root-form kinds are data-only: the streaming\n * `__kind` parser cannot type them (a scalar cannot carry a\n * discriminator) and refuses them loudly; validation goes through the\n * emitted JSON Schema (ajv / Pydantic). `root` and a non-empty `fields`\n * are mutually exclusive.\n * - `inline_object.open` — `additionalProperties: true`; fixes the\n * open-empty-object defect where an open `inline_object{fields:{}}`\n * materialized as CLOSED (schema_proposal / item_presentation class).\n *\n * 2026-07-15 input-semantics extension (W3-A, agent-input bridge) — the\n * constructs the Wave-1 sufficiency survey of all 1,529 live agent variables\n * showed FieldSchema could not carry, added so `AgentVariable` ⇄ kind\n * conversion is faithful:\n * - `FieldBase.description` — human guidance; round-trips JSON Schema\n * `description` and VariableDefinition `helpText`.\n * - `FieldBase.default` — the field's default VALUE (JSON Schema `default`,\n * VariableDefinition `defaultValue`). Annotation-level: validators never\n * apply it; emitters carry it verbatim.\n * - `enum.open` — \"one of these options OR any string\" (the FE's\n * `allowOther`). Emits as `anyOf: [{type:\"string\", enum}, {type:\"string\"}]`\n * so the option set survives instead of widening to bare `string`.\n * - `number` bounds `min`/`max`/`step` — JSON Schema\n * `minimum`/`maximum`/`multipleOf` (number/slider components).\n * - `string[].values` (+ `open`) — an items-enum: array of strings drawn\n * from an option set (checkbox components), `open` meaning the set is\n * advisory (`allowOther` on a multi-select).\n * Picklist bindings, scope bindings, and media component identity are\n * PROVENANCE, not structure — they never enter FieldSchema; the bridge\n * carries them out-of-band (see convert/kind-variable-bridge.ts sidecar).\n */\n\n/** System discriminator — hardcoded, not part of per-kind field schemas. */\nexport const KIND_KEY = \"__kind\";\n\nexport type ScalarFieldType = \"string\" | \"number\" | \"boolean\";\n\nexport type ArrayItemScalarType = \"string\" | \"number\" | \"boolean\";\n\n/** Value domain of a `record` field — typed scalars, or any JSON value. */\nexport type RecordValueType = ArrayItemScalarType | \"json\";\n\ntype FieldBase = {\n required?: boolean;\n nullable?: boolean;\n /** Human guidance — JSON Schema `description` / variable `helpText`. */\n description?: string;\n /**\n * Default VALUE (JSON Schema `default` / variable `defaultValue`).\n * Annotation-level: validators never apply it; emitters carry it verbatim.\n */\n default?: unknown;\n};\n\nexport type FieldSchema =\n | (FieldBase & { type: \"string\" | \"boolean\" })\n | (FieldBase & {\n type: \"number\";\n /** Inclusive lower bound — JSON Schema `minimum`. */\n min?: number;\n /** Inclusive upper bound — JSON Schema `maximum`. */\n max?: number;\n /** Increment — JSON Schema `multipleOf`. Annotation-level in the parser. */\n step?: number;\n })\n | (FieldBase & {\n type: \"string[]\";\n /** Items-enum: each item must be one of these values (checkbox option sets). */\n values?: string[];\n /** With `values`: the set is advisory — any string item is also legal (`allowOther`). */\n open?: boolean;\n })\n | (FieldBase & { type: \"number[]\" | \"boolean[]\" })\n | (FieldBase & { type: \"json\" })\n | (FieldBase & { type: \"json[]\" })\n | (FieldBase & { type: \"array\"; itemKinds: string[] })\n | (FieldBase & { type: \"object\"; kind: string })\n | (FieldBase & {\n type: \"inline_object\";\n fields: Record<string, FieldSchema>;\n /** additionalProperties: true — unknown keys are legal, not residue-only. */\n open?: boolean;\n })\n | (FieldBase & { type: \"record\"; values: RecordValueType })\n | (FieldBase & {\n type: \"enum\";\n values: string[];\n /** \"One of these OR any string\" — the option set is advisory (`allowOther`). */\n open?: boolean;\n })\n | (FieldBase & {\n type: \"union\";\n scalars: Array<\"string\" | \"number\" | \"boolean\">;\n /** Object union members — kind refs (anyOf of $refs), may mix with scalars. */\n kinds?: string[];\n });\n\n/**\n * Domain fields only — __kind is enforced by the parser via KindSchema.kind\n * (block slug). A kind with `root` set has NO field map (fields stays `{}`):\n * its value is the root field's type at the top level. See the module header.\n */\nexport type KindSchema = {\n kind: string;\n fields: Record<string, FieldSchema>;\n /** Non-object root form — mutually exclusive with a non-empty `fields`. */\n root?: FieldSchema;\n};\n\nexport function readObjectKind(value: Record<string, unknown>): string | null {\n const kind = value[KIND_KEY];\n return typeof kind === \"string\" ? kind : null;\n}\n\nexport function isScalarArrayType(\n type: FieldSchema[\"type\"],\n): type is \"string[]\" | \"number[]\" | \"boolean[]\" {\n return type === \"string[]\" || type === \"number[]\" || type === \"boolean[]\";\n}\n\nexport function scalarArrayItemType(\n type: \"string[]\" | \"number[]\" | \"boolean[]\",\n): ArrayItemScalarType {\n if (type === \"number[]\") return \"number\";\n if (type === \"boolean[]\") return \"boolean\";\n return \"string\";\n}\n\n/**\n * Does this field's value domain accept ANY JSON shape (object/array/scalar/\n * null alike)? True for `json` and `json[]` ITEMS — the parser treats the\n * subtree under such a field as opaque (no kind identification, no raw_object\n * degradation: unknown structure is the declared contract, not a failure).\n */\nexport function isJsonAnyField(field: FieldSchema): boolean {\n return field.type === \"json\" || field.type === \"json[]\";\n}\n","/**\n * Instance TITLE derivation — pure, importable from server and client code\n * (no supabase import; `instance-service.ts` consumes it on the write path).\n *\n * CROSS-REPO MIRROR: aidream `kind_instance.py` (`_TITLE_KEYS` +\n * `derive_title` + `kind_shared.kind_title_key`) implements the SAME\n * derivation order — explicit title → the kind's `metadata.title_key` field\n * (per-kind override, non-empty scalar) → the shared key list → null.\n * Change BOTH sides together.\n */\n\n/** Mirrors aidream `kind_instance._TITLE_KEYS` — keep the two in lockstep. */\nexport const INSTANCE_TITLE_KEYS = [\n \"title\",\n \"name\",\n \"label\",\n \"heading\",\n \"subject\",\n \"customer\",\n] as const;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * The kind's per-kind instance-title override —\n * `kind_definition.metadata.title_key` (a single data key naming the title\n * field, e.g. `wine_name`). Set by the creator agent via `kind_create`;\n * null when absent/blank/non-string. Server parity: `kind_shared.kind_title_key`.\n */\nexport function kindTitleKeyFromMetadata(metadata: unknown): string | null {\n if (!isRecord(metadata)) return null;\n const value = metadata[\"title_key\"];\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\n/**\n * A non-empty scalar rendered as a title string; null for anything else.\n * Mirrors the server `_scalar_title` exactly (booleans → \"true\"/\"false\").\n */\nfunction scalarTitle(value: unknown): string | null {\n if (typeof value === \"string\") return value.trim() || null;\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n if (typeof value === \"number\") return Number.isFinite(value) ? String(value) : null;\n return null;\n}\n\n/**\n * Explicit title wins; else the kind's `metadata.title_key` field when it\n * holds a non-empty scalar; else the first non-empty string under a shared\n * title/name-ish key. The ORDER is a cross-repo contract — mirrored verbatim\n * by aidream `kind_instance.derive_title`.\n */\nexport function deriveInstanceTitle(\n data: Record<string, unknown>,\n explicit?: string | null,\n titleKey?: string | null,\n): string | null {\n if (explicit && explicit.trim()) return explicit.trim();\n if (titleKey) {\n const override = scalarTitle(data[titleKey]);\n if (override) return override;\n }\n for (const key of INSTANCE_TITLE_KEYS) {\n const value = data[key];\n if (typeof value === \"string\" && value.trim()) return value.trim();\n }\n return null;\n}\n","/**\n * Shared plumbing for kind → markdown export facets (`toMarkdown`).\n *\n * The FORWARD leg of the artifact ⇄ markdown two-way layer: every facet\n * turns a kind's ZERO-LOSS value object into clean human-readable markdown\n * (headings / lists / bold — never a JSON dump), following two laws:\n *\n * 1. `__kind` discriminators are transport metadata — never rendered.\n * 2. Nothing silently vanishes: keys a facet doesn't understand (plus the\n * declared `additionalDetails` bag every top-level kind schema carries)\n * are appended under a small \"Additional details\" key: value section via\n * `collectExtras` + `additionalDetailsSection`.\n *\n * `genericKindMarkdown` is the fallback for kinds WITHOUT a `toMarkdown`\n * facet (and for unregistered kinds): readable markdown built from the value\n * itself — headings, bold-label lists, tables — never a JSON dump.\n */\n\nimport { KIND_KEY } from \"../core/kind-schema.types\";\nimport {\n deriveInstanceTitle,\n INSTANCE_TITLE_KEYS,\n} from \"./instance-title\";\nimport { humanizeIdentifier } from \"@ai-matrx/kit/text-case\";\n\nexport function isRecordValue(\n value: unknown,\n): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isScalar(value: unknown): value is string | number | boolean {\n return (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n );\n}\n\n/**\n * One-line rendering of an arbitrary value for key: value lists. Scalars\n * render as text, scalar arrays join with \", \", anything structural falls\n * back to inline JSON in a code span (zero loss, still one line).\n */\nexport function formatInlineValue(value: unknown): string {\n if (value === null || value === undefined) return \"—\";\n if (isScalar(value)) return String(value);\n if (Array.isArray(value) && value.every(isScalar)) {\n return value.map(String).join(\", \");\n }\n try {\n return `\\`${JSON.stringify(stripKindForDisplay(value))}\\``;\n } catch {\n return String(value);\n }\n}\n\n/** Deep-copy with every `__kind` discriminator removed (display only). */\nfunction stripKindForDisplay(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stripKindForDisplay);\n if (isRecordValue(value)) {\n const out: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n if (key === KIND_KEY) continue;\n out[key] = stripKindForDisplay(child);\n }\n return out;\n }\n return value;\n}\n\n/**\n * Collect the keys a facet does NOT understand. Skips `__kind`,\n * null/undefined, and the facet's known keys; merges the contents of a\n * declared `additionalDetails` object bag (the schema-blessed extras\n * channel) into the same flat map so both extra channels surface together.\n */\nexport function collectExtras(\n value: Record<string, unknown>,\n knownKeys: Iterable<string>,\n): Record<string, unknown> {\n const known = new Set(knownKeys);\n known.add(KIND_KEY);\n known.add(\"additionalDetails\");\n\n const extras: Record<string, unknown> = {};\n\n const details = value.additionalDetails;\n if (isRecordValue(details)) {\n for (const [key, child] of Object.entries(details)) {\n if (key === KIND_KEY || child === null || child === undefined) continue;\n extras[key] = child;\n }\n } else if (details !== null && details !== undefined) {\n extras.additionalDetails = details;\n }\n\n for (const [key, child] of Object.entries(value)) {\n if (known.has(key) || child === null || child === undefined) continue;\n extras[key] = child;\n }\n\n return extras;\n}\n\n/**\n * A field's own name, as words — `violations_not_fixed` → \"Violations not\n * fixed\", `wordCountAfter` → \"Word count after\".\n *\n * 🚨 WALK 18, DEFECT D. The finished Masterwork deliverable an Expert hands a\n * customer carried `violations_not_fixed: []` — a key out of a schema we\n * declared, printed at a person. A label is the one place a field name is\n * GUARANTEED to reach a reader, so the resolution lives here, beside the\n * extras plumbing, for every RENDERER that puts a structured field on a\n * screen: underscores and camel humps become spaces, the first letter is\n * capitalised, and nothing else changes.\n *\n * Deliberately NOT applied inside {@link extrasList}. That list is the\n * markdown/EXPORT leg (`features/canvas/export/exportArtifactMarkdown.ts`\n * writes a file somebody — or something — reads back), and a key spelled as\n * prose cannot be read back as a key. A screen resolves; a file keeps the key.\n */\nexport function plainFieldLabel(key: string): string {\n const words = key\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .trim()\n .toLowerCase();\n if (!words) return key;\n return words.charAt(0).toUpperCase() + words.slice(1);\n}\n\n/** Render extras as a key: value bullet list (no heading). Null when empty. */\nexport function extrasList(extras: Record<string, unknown>): string | null {\n const entries = Object.entries(extras);\n if (entries.length === 0) return null;\n return entries\n .map(([key, value]) => `- **${key}:** ${formatInlineValue(value)}`)\n .join(\"\\n\");\n}\n\n/**\n * The canonical \"Additional details\" section — appended at the END of a\n * kind's markdown so nothing silently vanishes. Null when there is nothing\n * to say (callers filter with `joinBlocks`).\n */\nexport function additionalDetailsSection(\n extras: Record<string, unknown>,\n headingLevel: \"##\" | \"###\" | \"####\" = \"##\",\n): string | null {\n const list = extrasList(extras);\n if (!list) return null;\n return `${headingLevel} Additional details\\n\\n${list}`;\n}\n\n/** Join markdown blocks with blank lines, dropping empty/null ones. */\nexport function joinBlocks(\n blocks: Array<string | null | undefined>,\n): string {\n return blocks\n .map((block) => (typeof block === \"string\" ? block.trim() : \"\"))\n .filter((block) => block.length > 0)\n .join(\"\\n\\n\");\n}\n\n/** \"flashcard_set\" → \"Flashcard Set\"; \"Artifact\" when there is nothing to say. */\nexport function humanizeKind(kind: string): string {\n return humanizeIdentifier(kind) || \"Artifact\";\n}\n\n/** Renders a nested kind value as markdown (the registry's converter). */\nexport type NestedKindMarkdown = (value: Record<string, unknown>) => string;\n\nfunction isKindValue(value: unknown): value is Record<string, unknown> {\n return (\n isRecordValue(value) &&\n typeof value[KIND_KEY] === \"string\" &&\n (value[KIND_KEY] as string).trim().length > 0\n );\n}\n\nfunction scalarText(value: unknown): string {\n if (typeof value === \"boolean\") return value ? \"Yes\" : \"No\";\n return String(value);\n}\n\nfunction cellText(value: unknown): string {\n return scalarText(value).replace(/\\r?\\n/g, \" \").replace(/\\|/g, \"\\\\|\");\n}\n\n/** Visible fields of a record: never `__kind`, never empty. */\nfunction visibleEntries(value: Record<string, unknown>): [string, unknown][] {\n return Object.entries(value).filter(\n ([key, child]) =>\n key !== KIND_KEY &&\n child !== null &&\n child !== undefined &&\n !(typeof child === \"string\" && child.trim() === \"\") &&\n !(Array.isArray(child) && child.length === 0),\n );\n}\n\n/** A table when every element is a non-kind record of scalars over one key set. */\nfunction uniformTable(items: unknown[]): string | null {\n if (items.length === 0) return null;\n let columns: string[] | null = null;\n for (const item of items) {\n if (!isRecordValue(item) || isKindValue(item)) return null;\n const keys = Object.keys(item).filter((key) => key !== KIND_KEY);\n if (keys.length === 0) return null;\n if (!keys.every((key) => item[key] === null || isScalar(item[key]))) return null;\n if (columns === null) columns = keys;\n else if (keys.length !== columns.length || !keys.every((k, i) => k === columns![i]))\n return null;\n }\n const cols = columns!;\n const head = `| ${cols.map(plainFieldLabel).join(\" | \")} |`;\n const rule = `| ${cols.map(() => \"---\").join(\" | \")} |`;\n const rows = items.map(\n (item) =>\n `| ${cols\n .map((key) => {\n const cell = (item as Record<string, unknown>)[key];\n return cell === null || cell === undefined ? \"—\" : cellText(cell);\n })\n .join(\" | \")} |`,\n );\n return [head, rule, ...rows].join(\"\\n\");\n}\n\nfunction indentBlock(text: string, indent: string): string {\n return text\n .split(\"\\n\")\n .map((line) => (line.trim() ? indent + line : line))\n .join(\"\\n\");\n}\n\n/** Nested bullet lines for any value (lists inside lists, kinds as blocks). */\nfunction listLines(value: unknown, indent: string, nested: NestedKindMarkdown): string[] {\n if (Array.isArray(value)) {\n const lines: string[] = [];\n for (const item of value) {\n if (item === null || item === undefined) continue;\n if (isScalar(item)) lines.push(`${indent}- ${scalarText(item)}`);\n else if (isKindValue(item)) {\n lines.push(`${indent}-`);\n lines.push(indentBlock(nested(item), indent + \" \"));\n } else if (Array.isArray(item)) {\n lines.push(`${indent}-`);\n lines.push(...listLines(item, indent + \" \", nested));\n } else if (isRecordValue(item)) {\n const fields = listLines(item, indent + \" \", nested);\n // The record's first field rides on the bullet itself.\n if (fields.length > 0) {\n lines.push(`${indent}- ${fields[0]!.trimStart().replace(/^- /, \"\")}`);\n lines.push(...fields.slice(1));\n }\n }\n }\n return lines;\n }\n if (isRecordValue(value)) {\n if (isKindValue(value)) return [indentBlock(nested(value), indent)];\n const lines: string[] = [];\n for (const [key, child] of visibleEntries(value)) {\n const label = `**${plainFieldLabel(key)}:**`;\n if (isScalar(child)) lines.push(`${indent}- ${label} ${scalarText(child)}`);\n else if (Array.isArray(child) && child.every(isScalar))\n lines.push(`${indent}- ${label} ${child.map(scalarText).join(\", \")}`);\n else {\n lines.push(`${indent}- ${label}`);\n lines.push(...listLines(child, indent + \" \", nested));\n }\n }\n return lines;\n }\n return isScalar(value) ? [`${indent}- ${scalarText(value)}`] : [];\n}\n\nfunction headingFor(depth: number): string {\n return \"#\".repeat(Math.min(Math.max(depth, 1), 6));\n}\n\n/** The body of a record: scalar list first, then one section per structure. */\nfunction recordBody(\n value: Record<string, unknown>,\n depth: number,\n nested: NestedKindMarkdown,\n skipKey: string | null,\n): string[] {\n const scalars: string[] = [];\n const sections: string[] = [];\n for (const [key, child] of visibleEntries(value)) {\n if (key === skipKey) continue;\n const label = plainFieldLabel(key);\n if (isScalar(child)) {\n scalars.push(`- **${label}:** ${scalarText(child)}`);\n } else if (Array.isArray(child) && child.every(isScalar)) {\n scalars.push(`- **${label}:** ${child.map(scalarText).join(\", \")}`);\n } else if (isKindValue(child)) {\n sections.push(joinBlocks([`${headingFor(depth + 1)} ${label}`, nested(child)]));\n } else if (Array.isArray(child)) {\n sections.push(\n joinBlocks([\n `${headingFor(depth + 1)} ${label}`,\n uniformTable(child) ?? listLines(child, \"\", nested).join(\"\\n\"),\n ]),\n );\n } else if (isRecordValue(child)) {\n sections.push(\n joinBlocks([\n `${headingFor(depth + 1)} ${label}`,\n ...recordBody(child, depth + 1, nested, null),\n ]),\n );\n }\n }\n return [scalars.length ? scalars.join(\"\\n\") : null, ...sections].filter(\n (block): block is string => block !== null,\n );\n}\n\n/** Which key the derived title was read from, so it is not repeated below. */\nfunction titleSourceKey(value: Record<string, unknown>, title: string | null): string | null {\n if (!title) return null;\n for (const key of INSTANCE_TITLE_KEYS) {\n const v = value[key];\n if (typeof v === \"string\" && v.trim() === title) return key;\n }\n return null;\n}\n\n/**\n * Fallback markdown for kinds with no `toMarkdown` facet (or unregistered\n * kinds): READABLE markdown built from the value itself (kind-never-raw,\n * Arman 2026-09-30 — a kind is never shown as raw JSON, an export included).\n * Heading = the instance title (`deriveInstanceTitle`), then the kind's\n * name; scalar fields as a bold-label list; arrays of uniform scalar records\n * as a table, other arrays as nested lists; nested plain objects as\n * sections; nested KINDS through `nested` (the registry converter —\n * `kindValueToMarkdown` passes itself; default: this function). Never the\n * `__kind` key, never a JSON fence. Every field still appears (zero loss in\n * content; the discriminator is named in words by the subtitle).\n */\nexport function genericKindMarkdown(\n kind: string,\n value: Record<string, unknown>,\n nested?: NestedKindMarkdown,\n): string {\n const renderNested: NestedKindMarkdown =\n nested ??\n ((child) =>\n genericKindMarkdown(String(child[KIND_KEY] ?? \"artifact\"), child));\n const title = deriveInstanceTitle(value);\n return joinBlocks([\n `# ${title ?? humanizeKind(kind)}`,\n `*${humanizeKind(kind)}*`,\n ...recordBody(value, 1, renderNested, titleSourceKey(value, title)),\n ]);\n}\n\n/**\n * Readable markdown for a value that is NOT itself a kind — a kindless JSON\n * wrapper around kinds, or a run of plain values beside kinds in an array —\n * so a destination (export, copy) never prints it as JSON. Same rendering as\n * a kind's body in {@link genericKindMarkdown} (bold-label scalars, tables for\n * uniform records, nested lists, sections), nested kinds through `nested`.\n */\nexport function plainValueMarkdown(value: unknown, nested?: NestedKindMarkdown): string {\n const renderNested: NestedKindMarkdown =\n nested ??\n ((child) => genericKindMarkdown(String(child[KIND_KEY] ?? \"artifact\"), child));\n if (value === null || value === undefined) return \"\";\n if (isKindValue(value)) return renderNested(value);\n if (Array.isArray(value)) {\n return uniformTable(value) ?? listLines(value, \"\", renderNested).join(\"\\n\");\n }\n if (isRecordValue(value)) return joinBlocks(recordBody(value, 1, renderNested, null));\n return isScalar(value) ? scalarText(value) : String(value);\n}\n","/**\n * kind-value-markdown — a kind-carrying value object → markdown, through the host's\n * kind registry when it registers one (`registerKindValueMarkdown`), else the package's\n * generic readable rendering (never a JSON dump, never the `__kind` key).\n *\n * The registration lives on `globalThis` (dual-loader graphs split module state). An\n * unregistered host is announced once on the console, never silently.\n */\nimport { readObjectKind } from \"../core/kind-schema.types\";\nimport { genericKindMarkdown } from \"./kind-markdown-utils\";\n\nexport type KindValueToMarkdown = (value: Record<string, unknown>, fallbackKind?: string) => string;\n\ninterface KindValueMarkdownState {\n impl: KindValueToMarkdown | null;\n announced: boolean;\n}\n\nconst STATE_KEY = Symbol.for(\"ai-matrx.content-ir.kind-value-markdown\");\n\nfunction state(): KindValueMarkdownState {\n const g = globalThis as unknown as Record<symbol, KindValueMarkdownState | undefined>;\n let s = g[STATE_KEY];\n if (!s) {\n s = { impl: null, announced: false };\n g[STATE_KEY] = s;\n }\n return s;\n}\n\n/** The host's registry-backed converter (matrx-frontend: `features/canvas/export/exportArtifactMarkdown`). */\nexport function registerKindValueMarkdown(impl: KindValueToMarkdown | null): void {\n state().impl = impl;\n}\n\nexport function kindValueToMarkdown(\n value: Record<string, unknown>,\n fallbackKind = \"artifact\",\n): string {\n const s = state();\n if (s.impl) return s.impl(value, fallbackKind);\n if (!s.announced) {\n s.announced = true;\n console.warn(\n '[@ai-matrx/content-ir] No \"kindValueMarkdown\" registered, so kind values render through the generic readable form, not the host\\'s kind registry.',\n );\n }\n const nested = (child: Record<string, unknown>) => kindValueToMarkdown(child);\n return genericKindMarkdown(readObjectKind(value) ?? fallbackKind, value, nested);\n}\n","/**\n * Answer TEXT → the readable markdown a person meant, for DISPLAY and EXPORT\n * destinations only (a note, a task, a file, a print, a clipboard copy, the\n * speaker, a plain-text slot). Rule (Arman, 2026-09-30): a kind is never shown\n * as raw JSON — every `{\"__kind\":…}` region in the text (bare, or the whole\n * body of a ```json / unlabelled fence) becomes that kind's markdown through\n * the ONE kind → markdown converter (`kindValueToMarkdown`: the registry's\n * `toMarkdown` facet, else `genericKindMarkdown`).\n *\n * 🚨 Never call this on data that is STORED or PASSED to a machine: `__kind`\n * is part of the data. This is a destination transform, the same as\n * `unwrapKindEnvelopes`. Kindless text returns byte for byte.\n *\n * Regions come from the one embedded-kind region finder\n * (`findEmbeddedKindJsonRegions`); the signal is the one detector\n * (`hasKindKey`). Nobody writes a second one.\n */\n\nimport { findCodeRanges, fenceParts } from \"../source\";\nimport { kindValueToMarkdown } from \"./kind-value-markdown\";\nimport { humanizeKind, plainValueMarkdown } from \"./kind-markdown-utils\";\nimport {\n balancedEnds,\n findBrokenKindJsonRegions,\n findKindCarryingJsonValues,\n frontMatterEnd,\n} from \"./embedded-kind-json\";\nimport { firstKindSlug, hasKindKey, isKindJsonText, normalizeKindSpellings, valueCarriesKind } from \"./json-kind-signal\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isKindObject(value: unknown): value is Record<string, unknown> {\n return (\n isRecord(value) &&\n typeof value.__kind === \"string\" &&\n value.__kind.trim().length > 0\n );\n}\n\n/**\n * The one-line broken state of a kind that never completed (≤60 chars) — the\n * SAME words the compact preview shows (`AnswerTextPreview`), so an export of\n * a cut-off answer says what the screen said.\n */\nexport function unfinishedKindLabel(kind: string | null): string {\n return kind ? `${humanizeKind(kind)} did not finish` : \"Result did not finish\";\n}\n\n/** The one-line note for structured output whose `__kind` cannot name a kind. */\nexport const UNREADABLE_KIND_NOTE = \"Structured output could not be read\";\n\n/** A slug the kind loader may name: letters, digits and `_.:-` only. */\nconst KIND_SLUG_TEXT = /^[A-Za-z0-9_.:-]+$/;\n\n/** Does this parsed value hold an object whose `__kind` is not a readable slug, at any depth? */\nfunction carriesBrokenKind(value: unknown, depth = 0): boolean {\n if (depth > 64 || value === null || typeof value !== \"object\") return false;\n if (Array.isArray(value)) return value.some((item) => carriesBrokenKind(item, depth + 1));\n const record = value as Record<string, unknown>;\n if (Object.prototype.hasOwnProperty.call(record, \"__kind\")) {\n const kind = record.__kind;\n // An object / array under `__kind` is a shape (a pasted JSON schema's\n // `properties`), not a kind — left as written (round 10).\n // A list under `__kind` is broken output, not a shape (round 11, L2).\n const shape = typeof kind === \"object\" && kind !== null && !Array.isArray(kind);\n if (!shape && (typeof kind !== \"string\" || !KIND_SLUG_TEXT.test(kind))) return true;\n }\n return Object.values(record).some((item) => carriesBrokenKind(item, depth + 1));\n}\n\n\n/** Sorted, non-overlapping ranges → for each position, whether it lies inside one (a cursor, linear over a forward walk). */\nfunction rangeCursor(ranges: Array<[number, number]>): (at: number) => [number, number] | undefined {\n const sorted = [...ranges].sort((a, b) => a[0] - b[0]);\n let k = 0;\n return (at) => {\n while (k < sorted.length && sorted[k]![1] <= at) k++;\n for (let j = k; j < sorted.length && sorted[j]![0] <= at; j++) if (at < sorted[j]![1]) return sorted[j];\n return undefined;\n };\n}\n\n/** Ranges whose text is quoted SOURCE (inline code, non-JSON fences) — never converted. */\nfunction quotedCodeRanges(text: string): Array<[number, number]> {\n return findCodeRanges(text)\n .filter((range) => {\n if (range.kind !== \"fence\") return true;\n const parts = fenceParts(text.slice(range.start, range.end));\n return !parts || !JSON_FENCE_LANGS.has(parts.opener.lang.toLowerCase());\n })\n .map((range): [number, number] => [range.start, range.end]);\n}\n\n/**\n * Complete JSON values holding a `__kind` that cannot name a kind (a number,\n * null, empty, a non-slug) — broken structured output — become the one-line\n * unreadable note. A JSON fence that held only such a value goes with it.\n */\nfunction noteUnreadableKinds(text: string): string {\n if (!hasKindKey(text)) return text;\n // An unreadable kind must be a COMPLETE JSON value. Avoid building code\n // ranges and a balance table for an arriving/malformed stream that has no\n // possible JSON closer at all; this is common in truncated exports and was\n // still several full walks for every `{ \"__kind\"` opener.\n if (!text.includes(\"}\") && !text.includes(\"]\")) return text;\n const quoted = quotedCodeRanges(text);\n const fences = findCodeRanges(text).filter((range) => range.kind === \"fence\");\n const spans: Array<[number, number]> = [];\n const ends = balancedEnds(text);\n const quotedAt = rangeCursor(quoted);\n for (let i = 0; i < text.length; i++) {\n const ch = text[i];\n if (ch !== \"{\" && ch !== \"[\") continue;\n const range = quotedAt(i);\n if (range) {\n i = range[1] - 1;\n continue;\n }\n const end = ends[i]!;\n if (end < 0) continue;\n let value: unknown;\n try {\n value = JSON.parse(text.slice(i, end));\n } catch {\n continue;\n }\n if (carriesBrokenKind(value)) spans.push([i, end]);\n i = end - 1;\n }\n // `out` is `text.slice(0, kept) + tail`: spans are replaced last to first, so\n // the prefix is always the original text and only the tail is rebuilt (no\n // whole-text copy per span — linear in the text, round 11 P5).\n let kept = text.length;\n let tail = \"\";\n let tailHead = \"\";\n for (let k = spans.length - 1; k >= 0; k--) {\n let [start, end] = spans[k]!;\n const fence = fences.find((range) => start >= range.start && end <= range.end);\n if (fence) {\n const parts = fenceParts(text.slice(fence.start, fence.end));\n const inner = parts\n ? text\n .slice(fence.start, fence.end)\n .split(\"\\n\")\n .slice(1, parts.closed ? -1 : undefined)\n .join(\"\\n\")\n .trim()\n : \"\";\n if (parts && inner === text.slice(start, end).trim()) {\n start = fence.start;\n end = fence.end;\n }\n }\n const before = closeBeforeAt(text, start);\n const following = end <= kept ? text.slice(end, kept) : \"\";\n const after = end <= kept ? openAfterJoined(following, tail, tailHead) : openAfter(tail.slice(end - kept));\n kept = before.cut;\n tailHead = before.add + UNREADABLE_KIND_NOTE;\n tail = tailHead + after;\n }\n return text.slice(0, kept) + tail;\n}\n\n/** A string field whose text is kind JSON → its parsed value (so it converts too). */\nfunction liftKindStrings(value: unknown, depth = 0): unknown {\n if (depth > 64) return value;\n if (typeof value === \"string\") {\n if (!isKindJsonText(value)) return value;\n try {\n const parsed: unknown = JSON.parse(value);\n return valueCarriesKind(parsed) ? parsed : value;\n } catch {\n return value;\n }\n }\n if (Array.isArray(value)) return value.map((item) => liftKindStrings(item, depth + 1));\n if (isRecord(value)) {\n const out: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) out[key] = liftKindStrings(item, depth + 1);\n return out;\n }\n return value;\n}\n\n/**\n * Any parsed value that carries a kind → markdown: a kind through the ONE\n * converter (`kindValueToMarkdown`), a list element by element (runs of plain\n * values as readable markdown beside the kinds), a kindless wrapper as its\n * data in markdown with its kinds converted in place.\n */\nfunction valueMarkdown(raw: unknown): string {\n const value = liftKindStrings(raw);\n const nested = (child: Record<string, unknown>) => kindValueToMarkdown(child);\n if (isKindObject(value)) return kindValueToMarkdown(value);\n if (Array.isArray(value)) {\n const blocks: string[] = [];\n let run: unknown[] = [];\n const flush = () => {\n if (run.length) blocks.push(plainValueMarkdown(run, nested));\n run = [];\n };\n for (const item of value) {\n if (isKindObject(item)) {\n flush();\n blocks.push(kindValueToMarkdown(item));\n } else if (Array.isArray(item) || isRecord(item)) {\n if (valueCarriesKind(item)) {\n flush();\n blocks.push(valueMarkdown(item));\n } else run.push(item);\n } else run.push(item);\n }\n flush();\n return blocks.filter((block) => block.trim()).join(\"\\n\\n\");\n }\n return plainValueMarkdown(value, nested);\n}\n\n/** JSON text that parses to a value carrying a kind → markdown; else null. */\nfunction jsonKindValueMarkdown(text: string): string | null {\n const trimmed = text.trim();\n if (!trimmed.startsWith(\"{\") && !trimmed.startsWith(\"[\")) return null;\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed);\n } catch {\n return null;\n }\n return valueCarriesKind(parsed) ? valueMarkdown(parsed) : null;\n}\n\n/** Text before a block: the block starts on its own line, after a blank line. */\nfunction closeBefore(text: string): string {\n const { cut, add } = closeBeforeAt(text, text.length);\n return text.slice(0, cut) + add;\n}\n\nconst isLineSpace = (ch: string | undefined) => ch === \" \" || ch === \"\\t\" || ch === \"\\r\";\n\n/** `closeBefore(text.slice(0, at))` as where the kept text ends and what is added (a backward walk, never a regex over the prefix). */\nfunction closeBeforeAt(text: string, at: number): { cut: number; add: string } {\n let cut = at;\n while (cut > 0 && isLineSpace(text[cut - 1])) cut--;\n if (cut === 0) return { cut, add: \"\" };\n if (text[cut - 1] !== \"\\n\") return { cut, add: \"\\n\\n\" };\n return { cut, add: cut > 1 && text[cut - 2] === \"\\n\" ? \"\" : \"\\n\" };\n}\n\n/**\n * `openAfter(head + tail)` without flattening `tail`: `tailHead` is the start\n * of `tail` (a note, after its newlines), which never starts with a line space.\n */\nfunction openAfterJoined(head: string, tail: string, tailHead: string): string {\n let from = 0;\n while (from < head.length && isLineSpace(head[from])) from++;\n const rest = head.slice(from);\n const lead = rest + tailHead.slice(0, 4);\n if (!lead) return \"\";\n const joined = rest + tail;\n if (lead.startsWith(\"\\n\\n\") || lead.startsWith(\"\\r\\n\\r\\n\")) return joined;\n if (lead.startsWith(\"\\n\")) return `\\n${joined}`;\n return `\\n\\n${joined}`;\n}\n\n/** Text after a block: whatever follows starts after a blank line. */\nfunction openAfter(text: string): string {\n const out = text.replace(/^[ \\t\\r]+/, \"\");\n if (!out) return out;\n if (out.startsWith(\"\\n\\n\") || out.startsWith(\"\\r\\n\\r\\n\")) return out;\n if (out.startsWith(\"\\n\")) return `\\n${out}`;\n return `\\n\\n${out}`;\n}\n\ninterface ConvertOptions {\n /** A kind that can never complete → its one-line note (exports), or left for the caller (previews). */\n broken: \"note\" | \"keep\";\n}\n\n/**\n * Every kind region in `text` → markdown: complete kind-carrying JSON values\n * (THE region finder, widened to their outermost JSON value) and — when\n * `broken: \"note\"` — broken/cut-off kinds as their one-line note. `leftover`\n * reshapes the text between regions (identity for prose). Null when the text\n * holds no region.\n */\nfunction convertRegions(\n text: string,\n excludeLiteralContexts: boolean,\n options: ConvertOptions,\n leftover: (piece: string) => string = (piece) => piece,\n): string | null {\n type Span = { start: number; end: number; md: string };\n // A complete JSON kind value necessarily has a JSON closer. Broken-kind\n // recovery below still runs without one, but the complete-region finder\n // would otherwise build another balance table that cannot produce a span.\n const completeRegions = text.includes(\"}\") || text.includes(\"]\")\n ? findKindCarryingJsonValues(text, { excludeLiteralContexts })\n : [];\n const spans: Span[] = completeRegions.map(\n (region) => ({ start: region.start, end: region.end, md: valueMarkdown(region.value) }),\n );\n if (options.broken === \"note\") {\n for (const region of findBrokenKindJsonRegions(text, { excludeLiteralContexts })) {\n spans.push({\n start: region.start,\n end: region.end,\n md: unfinishedKindLabel(firstKindSlug(region.content)),\n });\n }\n }\n if (spans.length === 0) return null;\n spans.sort((a, b) => a.start - b.start);\n\n // Built as parts: `closeBefore` of the whole output per span copied the growing\n // string each time (quadratic on thousands of regions, round 11 P5).\n const parts: string[] = [];\n const push = (piece: string) => {\n if (piece) parts.push(piece);\n };\n const closeBeforeParts = () => {\n while (parts.length > 0) {\n const last = parts[parts.length - 1]!;\n const trimmed = last.replace(/[ \\t\\r]+$/, \"\");\n if (trimmed) {\n parts[parts.length - 1] = trimmed;\n break;\n }\n parts.pop();\n }\n if (parts.length === 0) return;\n const last = parts[parts.length - 1]!;\n if (last[last.length - 1] !== \"\\n\") {\n parts.push(\"\\n\\n\");\n return;\n }\n const before = last.length > 1 ? last[last.length - 2] : parts.length > 1 ? parts[parts.length - 2]!.slice(-1) : \"\";\n if (before !== \"\\n\") parts.push(\"\\n\");\n };\n let cursor = 0;\n let afterBlock = false;\n for (const span of spans) {\n if (span.start < cursor) continue; // inside a span already taken\n const between = leftover(text.slice(cursor, span.start));\n push(afterBlock ? openAfter(between) : between);\n closeBeforeParts();\n push(span.md);\n cursor = span.end;\n afterBlock = true;\n }\n const tail = leftover(text.slice(cursor));\n push(afterBlock ? openAfter(tail) : tail);\n return parts.join(\"\");\n}\n\n/** Fence languages whose body is a JSON region (an unlabelled fence included). */\nconst JSON_FENCE_LANGS = new Set([\"\", \"json\", \"jsonc\", \"json5\"]);\n\n/** Blockquote markers that open a line (`> `, `>> `, `> > `). */\nconst QUOTE_PREFIX = /^(?: {0,3}> ?)*/;\n\n/**\n * A json / jsonc / json5 / unlabelled fence (THE code-range rule, CRLF and\n * blockquote-safe) holding kind regions → its markdown, quoted again when the\n * fence sat in a blockquote. Fences of any other language, and inline code\n * spans, are quoted SOURCE and stay as written (owner ruling, 2026-09-30).\n */\nfunction convertKindFences(text: string, options: ConvertOptions): string {\n // Fences only use backticks or tildes. The shared source scanner is\n // intentionally thorough, so do not invoke it for ordinary prose or a\n // malformed JSON stream that cannot contain a fence.\n if (!text.includes(\"`\") && !text.includes(\"~\")) return text;\n const fences = findCodeRanges(text).filter((range) => range.kind === \"fence\");\n let out = text;\n for (let i = fences.length - 1; i >= 0; i--) {\n const range = fences[i]!;\n const raw = text.slice(range.start, range.end);\n if (!hasKindKey(raw)) continue;\n const parts = fenceParts(raw);\n if (!parts || !JSON_FENCE_LANGS.has(parts.opener.lang.toLowerCase())) continue;\n\n const lines = raw.split(\"\\n\").map((line) => line.replace(/\\r$/, \"\"));\n const prefix = QUOTE_PREFIX.exec(lines[0] ?? \"\")?.[0] ?? \"\";\n const strip = (line: string) => (prefix ? line.replace(QUOTE_PREFIX, \"\") : line);\n const opener = strip(lines[0] ?? \"\").trim();\n const fence = parts.opener.char.repeat(parts.opener.ticks);\n const body = lines.slice(1, parts.closed ? -1 : undefined).map(strip).join(\"\\n\");\n\n const md =\n jsonKindValueMarkdown(body) ??\n convertRegions(body, false, options, (piece) =>\n /^[\\s,[\\]{}]*$/.test(piece) ? \"\" : `${opener}\\n${piece.trim()}\\n${fence}`,\n );\n if (md === null) continue;\n const block = prefix\n ? md\n .split(\"\\n\")\n .map((line) => (line ? `${prefix}${line}` : prefix.trimEnd()))\n .join(\"\\n\")\n : md;\n out = closeBefore(out.slice(0, range.start)) + block + openAfter(out.slice(range.end));\n }\n return out;\n}\n\nfunction convertKindText(text: string, options: ConvertOptions): string {\n // 0. Front matter holding a kind, and kinds that cannot name themselves.\n text = noteUnreadableKinds(convertFrontMatterKind(text, options));\n\n // 1. The whole text is a value carrying kinds (a structured answer's stored JSON).\n const whole = jsonKindValueMarkdown(text);\n if (whole !== null) return whole;\n\n // 2. JSON fences holding kinds.\n let out = convertKindFences(text, options);\n\n // 3. Bare kind values in prose (code fences and spans stay quoted source).\n if (!hasKindKey(out)) return out;\n out = convertRegions(out, true, options) ?? out;\n\n // 4. HTML comments are literal to the region finder, but a person reading\n // plain text sees what is inside them.\n out = convertCommentKinds(out, options);\n\n // 5. A cut-off kind whose key is written escaped (`\"\\u005f_kind\"`).\n return noteEscapedCutOffKind(out, options);\n}\n\n/** Front matter (`---` … `---`) whose body holds a kind → that kind's markdown. */\nfunction convertFrontMatterKind(text: string, options: ConvertOptions): string {\n const end = frontMatterEnd(text);\n if (end === 0 || !hasKindKey(text.slice(0, end))) return text;\n const block = text.slice(0, end);\n const lines = block.split(\"\\n\");\n const body = lines.slice(1, -1).join(\"\\n\").replace(/\\r$/, \"\");\n const md = convertRegions(body, false, options, (piece) =>\n /^[\\s,[\\]{}]*$/.test(piece) ? \"\" : piece.trim(),\n );\n if (md === null) return text;\n return md + openAfter(text.slice(end));\n}\n\n/** HTML comments (outside code) holding a kind → the kind's markdown; other comment text stays a comment. */\nfunction convertCommentKinds(text: string, options: ConvertOptions): string {\n if (!text.includes(\"<!--\")) return text;\n const quoted = quotedCodeRanges(text);\n const comments = [...text.matchAll(/<!--[\\s\\S]*?(?:-->|$)/g)].filter(\n (m) =>\n hasKindKey(m[0]) && !quoted.some(([a, b]) => m.index! >= a && m.index! < b),\n );\n let out = text;\n for (let i = comments.length - 1; i >= 0; i--) {\n const m = comments[i]!;\n const body = m[0].replace(/^<!--/, \"\").replace(/-->$/, \"\");\n const md = convertRegions(body, false, options, (piece) =>\n piece.trim() ? `<!-- ${piece.trim()} -->` : \"\",\n );\n if (md === null) continue;\n const start = m.index!;\n const end = start + m[0].length;\n out = closeBefore(out.slice(0, start)) + md + openAfter(out.slice(end));\n }\n return out;\n}\n\nconst KIND_KEY_PLAIN = /(?<!\\\\)\"__kind\"\\s*:/;\n\n/** An unclosed JSON value at the tail whose `__kind` key is written escaped → its one-line note. */\nfunction noteEscapedCutOffKind(text: string, options: ConvertOptions): string {\n if (options.broken !== \"note\" || !hasKindKey(text) || KIND_KEY_PLAIN.test(text)) return text;\n const quotedAt = rangeCursor(quotedCodeRanges(text));\n const ends = balancedEnds(text);\n for (let i = 0; i < text.length; i++) {\n const ch = text[i];\n if (ch !== \"{\" && ch !== \"[\") continue;\n const range = quotedAt(i);\n if (range) {\n i = range[1] - 1;\n continue;\n }\n const end = ends[i]!;\n if (end >= 0) {\n i = end - 1;\n continue;\n }\n const tail = text.slice(i);\n if (/^[{[]\\s*[\"{[]/.test(tail) && hasKindKey(tail)) {\n return closeBefore(text.slice(0, i)).trimEnd() + (i > 0 ? \"\\n\\n\" : \"\") + unfinishedKindLabel(firstKindSlug(tail));\n }\n }\n return text;\n}\n\n/**\n * The export transform. Kindless text returns byte for byte; every kind\n * region becomes readable markdown, and a kind that can never complete (cut\n * off, malformed) becomes its one-line \"<Kind> did not finish\" note — never\n * the fragment.\n */\nexport function kindTextToMarkdown(raw: string | null | undefined): string {\n if (!raw) return \"\";\n // A Python-repr or zero-width-spelled kind converts like any other (K4).\n const text = normalizeKindSpellings(raw);\n if (!hasKindKey(text)) return text;\n return convertKindText(text, { broken: \"note\" });\n}\n\nexport interface KindTextPreview {\n /** The readable text: complete kinds as markdown, an arriving kind cut off. */\n text: string;\n /** The slug of a kind still arriving at the end of the text (its loader), else null. */\n pendingKind: string | null;\n /** True when a kind is arriving but its slug has not been read yet. */\n pendingUnnamed: boolean;\n}\n\n/**\n * Where the object that OWNS the first `\"__kind\"` key starts — the outermost\n * `{` still open at that key — or -1. String contents are skipped.\n */\nfunction owningObjectStart(text: string, keyIndex: number): number {\n const open: number[] = [];\n let inString = false;\n for (let i = 0; i < keyIndex; i++) {\n const ch = text[i];\n if (inString) {\n if (ch === \"\\\\\") i++;\n else if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') inString = true;\n else if (ch === \"{\") open.push(i);\n else if (ch === \"}\") open.pop();\n }\n return open[0] ?? -1;\n}\n\n/**\n * Where the first `__kind` KEY starts (its opening quote), or -1 — found with\n * the shared detector (`hasKindKey`, which also sees the `\\u005f_kind` spelling):\n * the shortest prefix the detector accepts ends at the key's colon.\n */\nfunction kindKeyIndex(text: string): number {\n if (!hasKindKey(text)) return -1;\n let lo = 0;\n let hi = text.length;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (hasKindKey(text.slice(0, mid))) hi = mid;\n else lo = mid + 1;\n }\n let i = lo - 1; // the colon\n while (i > 0 && /\\s/.test(text[i - 1]!)) i--;\n const closing = i - 1; // the key's closing quote\n return text.lastIndexOf('\"', closing - 1);\n}\n\n/**\n * A COMPACT, possibly still-streaming preview of answer text (a toast, a\n * hover card, a list row): complete kinds read as their markdown; a kind\n * still arriving is cut from the text and named in `pendingKind` so the\n * caller shows that kind's loader — the raw JSON never shows mid-stream.\n */\nexport function kindTextPreview(raw: string | null | undefined): KindTextPreview {\n const text = raw ? normalizeKindSpellings(raw) : raw;\n // An arriving kind is the caller's loader, not a note: keep it to cut below.\n const md = !text ? \"\" : hasKindKey(text) ? convertKindText(text, { broken: \"keep\" }) : text;\n const keyIndex = kindKeyIndex(md);\n if (keyIndex < 0) return { text: md, pendingKind: null, pendingUnnamed: false };\n const start = owningObjectStart(md, keyIndex);\n const cutAt = start < 0 ? keyIndex : start;\n // Drop an opening fence line that only introduces the arriving kind.\n const head = md.slice(0, cutAt).replace(/(^|\\n)[ \\t]*(`{3,}|~{3,})[^\\n]*\\n?[ \\t]*$/, \"$1\");\n const slug = firstKindSlug(md.slice(keyIndex));\n return { text: head.trimEnd(), pendingKind: slug, pendingUnnamed: slug === null };\n}\n","/**\n * THE ONE-LINE FORM of a kind — what an INLINE surface shows where a kind\n * region sits in its text (P6, round 4): a collapsed card preview, a\n * notification body, an extraction cell, a table cell. An inline/preview level\n * cannot mount a kind component, so a kind reads as its instance title and\n * kind name (`**Cells** · Flashcard Set`), an unfinished one as its kind name\n * alone, and an unreadable one as \"Structured output\". Never the JSON.\n *\n * LIGHT on purpose — the inline level must not pull the kind registry or the\n * block pipeline: the region finder (`embedded-kind-json.ts`), the detector\n * and the title derivation (`studio/instance-title.ts`) only.\n */\n\nimport { humanizeIdentifier } from \"@ai-matrx/kit/text-case\";\nimport { deriveInstanceTitle } from \"./instance-title\";\nimport { UNREADABLE_KIND_NOTE } from \"./kind-text-to-markdown\";\nimport {\n findBrokenKindJsonRegions,\n findEmbeddedKindJsonRegions,\n} from \"./embedded-kind-json\";\nimport {\n closedJson,\n firstKindSlug,\n hasKindKey,\n kindGrammar,\n mayHoldKindKey,\n hasJsonKindKey,\n normalizeKindSpellings,\n quotedSourceRanges,\n regionJson,\n scanKindSpellingRegions,\n type KindSpellingRegion,\n} from \"./json-kind-signal\";\n\nconst UNNAMED = \"Structured output\";\n\nfunction kindName(slug: string | null | undefined): string {\n return (slug && humanizeIdentifier(slug)) || UNNAMED;\n}\n\n/**\n * One line for a kind VALUE: `**Title** · Kind Name`, or the kind name alone.\n * `plain` drops the markdown emphasis (`Title · Kind Name`) for slots that\n * draw text as written — a tooltip, a `title` attribute, a clamped caption.\n */\nexport function kindOneLine(value: unknown, options: { plain?: boolean } = {}): string {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return UNNAMED;\n const record = value as Record<string, unknown>;\n const slug = typeof record.__kind === \"string\" ? record.__kind : null;\n const title = deriveInstanceTitle(record);\n const name = kindName(slug);\n if (!(title && title !== name)) return name;\n const clean = title.replace(/[*_`[\\]]/g, \"\");\n return options.plain ? `${clean} · ${name}` : `**${clean}** · ${name}`;\n}\n\nfunction inside(ranges: Array<[number, number]>, at: number): boolean {\n return ranges.some(([start, end]) => at >= start && at < end);\n}\n\n/**\n * The text with every kind region (complete, unfinished or unreadable) in\n * prose replaced by its one-line form. Quoted source (inline code, non-JSON\n * fences) stays as written. Text with no kind key comes back unchanged.\n */\nexport function inlineKindText(raw: string, options: { plain?: boolean } = {}): string {\n // A zero-width or markdown-escaped key converts like the literal one; every\n // non-JSON spelling stays exactly as written (round 10).\n const source = raw ? normalizeKindSpellings(raw) : raw;\n if (!source || !hasKindKey(source)) return source;\n type Span = { start: number; end: number; line: string };\n const spans: Span[] = [];\n for (const region of findEmbeddedKindJsonRegions(source, { excludeQuotedSource: true })) {\n let value: unknown = null;\n try {\n value = JSON.parse(region.content);\n } catch {\n value = { __kind: region.kind };\n }\n spans.push({ start: region.start, end: region.end, line: kindOneLine(value, options) });\n }\n const quoted = quotedSourceRanges(source);\n for (const region of findBrokenKindJsonRegions(source)) {\n if (inside(quoted, region.start)) continue;\n spans.push({ start: region.start, end: region.end, line: kindName(firstKindSlug(region.content)) });\n }\n spans.sort((a, b) => a.start - b.start);\n let out = \"\";\n let cursor = 0;\n for (const span of spans) {\n if (span.start < cursor) continue;\n out += source.slice(cursor, span.start) + span.line;\n cursor = span.end;\n }\n out += source.slice(cursor);\n // Anything the finders could not bound: the `{` right before the first\n // remaining key, ONLY when its own JSON grammar reaches the key — to the end\n // of the text while it is still validly open, else to where it breaks. A\n // stray or unrelated earlier `{` (prose braces, a pasted schema) never owns\n // it, and nothing past a grammar failure is ever touched (round 10, C1).\n if (hasKindKey(out)) {\n const key = out.search(/(?<!\\\\)\"(?:__kind|\\\\u005[fF]_kind)\"\\s*:/);\n const brace = key >= 0 ? out.lastIndexOf(\"{\", key) : -1;\n if (brace >= 0 && !inside(quotedSourceRanges(out), brace)) {\n const verdict = kindGrammar(out, \"json\", brace);\n const end =\n verdict.status === \"prefix\" ? out.length : verdict.status === \"broken\" && verdict.at > key ? verdict.cut : -1;\n if (end > key) out = out.slice(0, brace) + kindName(firstKindSlug(out.slice(key, end))) + out.slice(end);\n }\n }\n return unreadableKindsAsNote(out);\n}\n\n/**\n * Whether parsed JSON text is an object whose `__kind` is not a string — a\n * list, number, boolean or null: broken structured output (round 11, L2). An\n * object under `__kind` is a shape (a pasted schema), not a kind (round 10).\n */\nfunction holdsUnreadableKind(json: string): boolean {\n let value: unknown;\n try {\n value = JSON.parse(json);\n } catch {\n return false;\n }\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return false;\n if (!Object.prototype.hasOwnProperty.call(value, \"__kind\")) return false;\n const kind = (value as Record<string, unknown>).__kind;\n if (typeof kind === \"string\") return false;\n return !(typeof kind === \"object\" && kind !== null && !Array.isArray(kind));\n}\n\n/**\n * A complete JSON kind region whose `__kind` cannot name a kind (`{\"__kind\":\n * [\"x\"], …}`, `{\"__kind\": 5}`) → the one-line unreadable note, the words the\n * export writes (`UNREADABLE_KIND_NOTE`), instead of raw JSON (round 11, L2).\n */\nexport function unreadableKindsAsNote(text: string): string {\n if (!text || !mayHoldKindKey(text) || !hasJsonKindKey(text)) return text;\n let out = \"\";\n let cursor = 0;\n for (const region of scanKindSpellingRegions(text)) {\n if (region.status !== \"complete\") continue;\n const json = regionJson(region);\n if (json === null || !holdsUnreadableKind(json)) continue;\n out += text.slice(cursor, region.start) + UNREADABLE_KIND_NOTE;\n cursor = region.end;\n }\n return cursor === 0 ? text : out + text.slice(cursor);\n}\n\n/**\n * CATALOG PROSE as a person reads it (ruling (a), round 6): a skill / agent /\n * tool description that shows an example kind JSON (`emit a\n * {\"__kind\": \"math_problem\"} block`) is documentation — the example reads as\n * its kind's one-line label, never the JSON. Plain text out, for text AND\n * attribute slots (`title`, tooltips). Display transform only: the stored\n * description is never rewritten.\n */\nexport function catalogProseText(text: string | null | undefined): string {\n if (!text) return \"\";\n return inlineKindText(text, { plain: true });\n}\n\n/** The one-line form of one broken JSON region (settled, unclosed — cut where its grammar broke). */\nfunction regionOneLine(region: KindSpellingRegion): string {\n const json =\n region.status === \"complete\" ? regionJson(region) : region.status === \"broken\" ? closedJson(region) : null;\n if (json !== null) {\n try {\n const value: unknown = JSON.parse(json);\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) return kindOneLine(value);\n } catch {\n // The kind's name alone, below.\n }\n }\n return kindName(firstKindSlug(json ?? region.decoded));\n}\n\n/** Frames repeat (two leaves read every frame): the last few answers, by text. */\nconst ONE_LINE_CACHE = new Map<string, string>();\nconst ONE_LINE_CACHE_SIZE = 16;\n\n/**\n * THE PROSE LEAF's kind reading (round 10 boundary): a REAL JSON kind region\n * the pipeline cannot lift — a settled object whose grammar BROKE in prose\n * (`{\"__kind\":\"note\",\"title\":\"Hi\" and then…`), or a markdown-escaped key\n * (`\"\\_\\_kind\"`) — reads as its one-line label, then every character after\n * its cut as written. A complete literal kind is the pipeline's (lifted).\n * Every NON-JSON spelling (`{\\\"__kind\\\":…}` in prose, repr, a JS literal,\n * typographic quotes, entities) is left EXACTLY as written — detection only.\n * Called by the one prose leaf live and reloaded text both pass through, so\n * live ≡ reload. One linear pass, memoized per text; text with no such region\n * comes back as the same string.\n */\nexport function spelledKindsAsOneLine(text: string): string {\n if (!text || !mayHoldKindKey(text)) return text;\n const cached = ONE_LINE_CACHE.get(text);\n if (cached !== undefined) return cached;\n const out = computeSpelledKindsAsOneLine(text);\n if (ONE_LINE_CACHE.size >= ONE_LINE_CACHE_SIZE) ONE_LINE_CACHE.delete(ONE_LINE_CACHE.keys().next().value!);\n ONE_LINE_CACHE.set(text, out);\n return out;\n}\n\nfunction computeSpelledKindsAsOneLine(text: string): string {\n let out = \"\";\n let cursor = 0;\n for (const region of scanKindSpellingRegions(text)) {\n // A literal key is lifted by the pipeline — unless it broke in prose, or\n // its `__kind` cannot name a kind (round 11, L2: the unreadable note).\n if (region.family === \"lifted\" && !region.markdown && region.status !== \"broken\") {\n const json = region.status === \"complete\" ? regionJson(region) : null;\n if (json === null || !holdsUnreadableKind(json)) continue;\n out += text.slice(cursor, region.start) + UNREADABLE_KIND_NOTE;\n cursor = region.end;\n continue;\n }\n out += text.slice(cursor, region.start) + regionOneLine(region);\n cursor = region.end;\n }\n return cursor === 0 ? text : out + text.slice(cursor);\n}\n\n\nconst AS_CODE_CACHE = new Map<string, string>();\n\n/**\n * Round 10, detection-only spellings drawn EXACTLY as written: a non-JSON\n * kind spelling in prose (`{\\\"__kind\\\":…}`, repr, a JS literal, typographic\n * quotes, entities) becomes an inline code span, so markdown neither eats its\n * backslashes nor decodes its entities — the screen shows the source byte for\n * byte, as quoted source. Nothing outside a region changes; text with no such\n * region comes back as the same string. One linear pass, memoized per text.\n * (A markdown-escaping pass did the same job and hung the renderer on nested\n * escapes — never reintroduce it.)\n */\nexport function nonJsonKindsAsCode(text: string): string {\n if (!text || !mayHoldKindKey(text)) return text;\n const cached = AS_CODE_CACHE.get(text);\n if (cached !== undefined) return cached;\n let out = \"\";\n let cursor = 0;\n let paragraphs: CodeSpanParagraph[] | null = null;\n let p = 0;\n for (const region of scanKindSpellingRegions(text, { families: \"all\" })) {\n if (region.family === \"lifted\" || region.family === \"markdown\") continue;\n paragraphs ??= codeSpanParagraphs(text);\n while (p < paragraphs.length - 1 && paragraphs[p]!.end <= region.start) p++;\n const fence = safeCodeSpanFence(text, region.start, region.end, paragraphs[p]!);\n if (fence === null) continue; // detection only: left exactly as it was\n out += text.slice(cursor, region.start) + fence + text.slice(region.start, region.end) + fence;\n cursor = region.end;\n }\n const result = cursor === 0 ? text : out + text.slice(cursor);\n if (AS_CODE_CACHE.size >= ONE_LINE_CACHE_SIZE) AS_CODE_CACHE.delete(AS_CODE_CACHE.keys().next().value!);\n AS_CODE_CACHE.set(text, result);\n return result;\n}\n\n/** One blank-line-bounded paragraph of the text, read once per call (round 11, H3). */\ninterface CodeSpanParagraph {\n start: number;\n end: number;\n /** A line opening raw HTML: CommonMark draws an HTML block's text verbatim, backticks included. */\n html: boolean;\n /** A GFM table row in it: a `|` inside a code span would still split the cell. */\n table: boolean;\n /** Lengths of every backtick run in it. */\n runs: Set<number>;\n}\n\n/** A line that can start (or interrupt with) an HTML block; inline tags mid-line keep markdown. */\nconst HTML_TAG = /^ {0,3}<\\/?[A-Za-z][A-Za-z0-9-]*(?:[\\s/>]|$)/m;\nconst TABLE_ROW = /^[ \\t]*\\|/m;\n\nfunction codeSpanParagraphs(text: string): CodeSpanParagraph[] {\n const out: CodeSpanParagraph[] = [];\n const blank = /\\n[ \\t]*\\n/g;\n let start = 0;\n for (;;) {\n const m = blank.exec(text);\n const end = m ? m.index + 1 : text.length;\n const body = text.slice(start, end);\n const runs = new Set<number>();\n for (let i = 0; i < body.length; ) {\n if (body[i] !== \"`\") {\n i++;\n continue;\n }\n let n = 0;\n while (body[i + n] === \"`\") n++;\n runs.add(n);\n i += n;\n }\n out.push({ start, end, html: HTML_TAG.test(body), table: TABLE_ROW.test(body), runs });\n if (!m) break;\n start = m.index + m[0].length - 1;\n }\n return out;\n}\n\n/**\n * The backtick fence that draws `text[start, end)` as an inline code span\n * WITHOUT changing anything around it — or null when no fence can (round 11,\n * H3): the region crosses a blank line (a span cannot), sits in raw HTML (its\n * backticks would show), holds a backtick or a table pipe, or touches a\n * backtick (the runs would merge). The fence length is one no backtick run in\n * the paragraph has, so no stray backtick there can pair with it.\n */\nfunction safeCodeSpanFence(text: string, start: number, end: number, paragraph: CodeSpanParagraph): string | null {\n const source = text.slice(start, end);\n if (/\\n[ \\t]*\\n/.test(source) || source.includes(\"`\")) return null;\n if (paragraph.html || (paragraph.table && source.includes(\"|\"))) return null;\n if (text[start - 1] === \"`\" || text[end] === \"`\") return null;\n let ticks = 1;\n while (paragraph.runs.has(ticks)) ticks++;\n return \"`\".repeat(ticks);\n}\n","/**\n * A JSON REGION INSIDE A BLOCKQUOTE leaves the quote (V1, the never-raw law).\n *\n * A model sometimes quotes its whole answer — `> ```json` / `> {\"__kind\":…}` —\n * and every line then starts with `>`. Neither host could see the region: the\n * live accumulator classifies a `>` line as prose, the static splitter keeps\n * the quote as one text block, so the kind was drawn as raw JSON inside a\n * blockquote in chat, on reload, on public shared pages and in tool results.\n *\n * THE RULE: a blockquote holds prose, never a data region. A JSON-family\n * fence (```json / ```jsonc / ```json5 / unlabelled, any case, ``` or ~~~)\n * opening on a quoted line, or a quoted line whose JSON could be a kind (the\n * first-key rule, `jsonKindSignal`), is LIFTED: its quote prefix is removed\n * from every line of the region, so the region becomes an ordinary top-level\n * fence / bare JSON object between two quotes. The quote before it renders as\n * a quote, the region as its kind, the quote after it as a new quote. Quoted\n * text that is not a JSON region is never touched — and a fence of another\n * language (```ts, ```xml, ```markdown, quoted or not) is the model quoting\n * SOURCE, so nothing inside it is lifted (the owner's ruling, 2026-09-30).\n *\n * ONE transform, both hosts: the live accumulator pushes every delta through\n * a `QuotedKindLift` before its line machine; the static splitter runs\n * `liftQuotedKindRegions` on the whole text first. The transform is\n * chunk-invariant (decisions are taken only at points every chunking reaches\n * with the same bytes), so live = reload byte for byte.\n */\n\nimport { FenceReader, fenceOpenerOf } from \"../source\";\nimport { jsonKindSignal } from \"./json-kind-signal\";\n\n/** Fence languages whose body is a JSON region (an unlabelled fence included). */\nconst JSON_FENCE_LANGS = new Set([\"\", \"json\", \"jsonc\", \"json5\"]);\n\n/** A blockquote prefix: up to three spaces, then one or more `>` (each with an optional space). */\nconst QUOTE_PREFIX = /^ {0,3}>(?: ?>)* ?/;\n\n/** How deep a matched quote prefix nests (`> >` is 2). */\nfunction quoteDepth(prefix: string): number {\n return (prefix.match(/>/g) ?? []).length;\n}\n\n/** A prefix of exactly `depth` levels, or null. */\nfunction prefixOfDepth(line: string, depth: number): string | null {\n const match = new RegExp(`^ {0,3}>(?: ?>){${depth - 1}} ?`).exec(line);\n return match ? match[0] : null;\n}\n\ntype Mode =\n /** Between regions. */\n | { kind: \"none\" }\n /** Inside an unquoted (or quoted, non-JSON) fence: everything passes as written. */\n | { kind: \"source_fence\"; reader: FenceReader; depth: number }\n /** Quoted JSON-ish lines held while the first key decides (multi-line `> {`). */\n | { kind: \"candidate\"; depth: number; raw: string[]; stripped: string[] }\n /** A lifted JSON-family fence: prefix stripped until its closing line. */\n | { kind: \"lifted_fence\"; reader: FenceReader; depth: number }\n /** A lifted bare JSON value: prefix stripped until its brackets balance. */\n | { kind: \"lifted_bare\"; depth: number; balance: number };\n\n/** Structural bracket balance of one line (JSON strings are opaque; none spans a line). */\nfunction bracketDelta(line: string): number {\n let delta = 0;\n let inString = false;\n let escaped = false;\n for (const ch of line) {\n if (inString) {\n if (escaped) escaped = false;\n else if (ch === \"\\\\\") escaped = true;\n else if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') inString = true;\n else if (ch === \"{\" || ch === \"[\") delta++;\n else if (ch === \"}\" || ch === \"]\") delta--;\n }\n return delta;\n}\n\n/**\n * The streaming lift. `push` returns the bytes that are safe to hand on now;\n * a line whose fate is not known yet (a quoted line that may open a JSON\n * region) is held — never shown raw — until it is. `flush` releases what is\n * held, as written, at the end of the stream (or a hard boundary).\n */\nexport class QuotedKindLift {\n private mode: Mode = { kind: \"none\" };\n /** The current line's bytes not yet handed on (held while undecided). */\n private held = \"\";\n /** The current line's bytes so far (handed on or not), as received. */\n private line = \"\";\n /** Whether the rest of the current line passes straight through. */\n private passing = false;\n /** Prefix stripped from the current line's handed-on bytes (passing lines). */\n private stripping = 0;\n\n push(text: string): string {\n let out = \"\";\n for (const ch of text) out += this.pushChar(ch);\n return out;\n }\n\n flush(): string {\n let out = \"\";\n if (this.mode.kind === \"candidate\") {\n out += this.mode.raw.join(\"\\n\") + (this.mode.raw.length ? \"\\n\" : \"\");\n this.mode = { kind: \"none\" };\n }\n out += this.held;\n this.held = \"\";\n this.line = \"\";\n this.passing = false;\n this.stripping = 0;\n return out;\n }\n\n private pushChar(ch: string): string {\n if (ch === \"\\n\") return this.endLine();\n this.line += ch;\n if (this.passing) {\n if (this.stripping > 0) {\n // Still inside the prefix being removed.\n this.stripping--;\n return \"\";\n }\n return ch;\n }\n this.held += ch;\n return this.decideMidLine();\n }\n\n /** Try to decide the current line before it ends; returns bytes released. */\n private decideMidLine(): string {\n const mode = this.mode;\n if (mode.kind === \"source_fence\") {\n // Pass as written; the closer is judged at line end.\n return this.release(this.held, 0);\n }\n if (mode.kind === \"lifted_fence\" || mode.kind === \"lifted_bare\") {\n const prefix = prefixOfDepth(this.held, mode.depth);\n if (prefix !== null && (this.held.length > prefix.length || /> $/.test(prefix))) {\n // The prefix is known and complete: strip it, pass the rest live.\n // A lifted fence's closing line is judged at line end, so a fragment\n // that may be that closer (it opens with a backtick or tilde) waits.\n const rest = this.held.slice(prefix.length);\n if (mode.kind === \"lifted_fence\" && /^\\s*[`~]/.test(rest)) return \"\";\n return this.release(rest, 0);\n }\n if (!/^ {0,3}(?:> ?)*$/.test(this.held)) {\n // A lazy line (no quote prefix) inside the region: passes as written.\n return this.release(this.held, 0);\n }\n return \"\";\n }\n if (mode.kind === \"candidate\") return \"\";\n // none: is this line a quote at all?\n if (!/^ {0,3}(?:>|$)/.test(this.held) && !/^ {0,3}$/.test(this.held)) {\n return this.release(this.held, 0);\n }\n const prefix = QUOTE_PREFIX.exec(this.held)?.[0];\n if (!prefix) return \"\";\n const rest = this.held.slice(prefix.length);\n if (!rest.trim()) return \"\";\n const first = rest.trimStart()[0];\n if (first === \"`\" || first === \"~\") return \"\"; // decided at line end\n if (first === \"{\" || first === \"[\") {\n // Lift the moment the first key says kind (monotonic — a `__kind` key\n // never un-arrives); anything else waits for the line to end.\n if (jsonKindSignal(rest) === \"kind\") {\n this.mode = { kind: \"lifted_bare\", depth: quoteDepth(prefix), balance: 0 };\n return this.release(rest, 0);\n }\n return \"\";\n }\n // Quoted prose.\n return this.release(this.held, 0);\n }\n\n /** Hand on `bytes` and let the rest of the line pass straight through. */\n private release(bytes: string, strip: number): string {\n this.held = \"\";\n this.passing = true;\n this.stripping = strip;\n return bytes;\n }\n\n private endLine(): string {\n const line = this.line;\n const held = this.held;\n this.line = \"\";\n this.held = \"\";\n this.passing = false;\n this.stripping = 0;\n const mode = this.mode;\n\n if (mode.kind === \"source_fence\") {\n const content = mode.depth > 0 ? line.replace(QUOTE_PREFIX, \"\") : line;\n if (mode.reader.feed(content)) this.mode = { kind: \"none\" };\n return held + \"\\n\";\n }\n\n if (mode.kind === \"lifted_fence\") {\n const prefix = prefixOfDepth(line, mode.depth);\n const content = prefix !== null ? line.slice(prefix.length) : line;\n if (mode.reader.feed(content)) this.mode = { kind: \"none\" };\n // What was not handed on yet (a held closer, or a prefix-only line).\n const sent = line.length - held.length;\n const contentSent = Math.max(0, sent - (prefix?.length ?? 0));\n return content.slice(contentSent) + \"\\n\";\n }\n\n if (mode.kind === \"lifted_bare\") {\n const prefix = prefixOfDepth(line, mode.depth);\n const content = prefix !== null ? line.slice(prefix.length) : line;\n mode.balance += bracketDelta(content);\n if (mode.balance <= 0) this.mode = { kind: \"none\" };\n const sent = line.length - held.length;\n const contentSent = Math.max(0, sent - (prefix?.length ?? 0));\n return content.slice(contentSent) + \"\\n\";\n }\n\n if (mode.kind === \"candidate\") {\n const prefix = prefixOfDepth(line, mode.depth);\n if (prefix === null) {\n // The quote ended before the first key decided: it was prose.\n const out = mode.raw.join(\"\\n\") + \"\\n\";\n this.mode = { kind: \"none\" };\n return out + this.lineFromNone(line);\n }\n mode.raw.push(line);\n mode.stripped.push(line.slice(prefix.length));\n return this.settleCandidate(mode);\n }\n\n return this.lineFromNone(line, held);\n }\n\n /**\n * A complete line met with no region open. `held` is what was not handed\n * on yet: the whole line when it was held to the end, otherwise \"\" (it was\n * released mid-line as prose or as an unquoted line).\n */\n private lineFromNone(line: string, held = line): string {\n const prefix = QUOTE_PREFIX.exec(line)?.[0];\n if (held.length < line.length || !prefix) {\n // Released mid-line (or never a quote). An unquoted fence opener starts\n // a source region: nothing inside it is lifted.\n if (!prefix) {\n const opener = fenceOpenerOf(line);\n if (opener) {\n this.mode = { kind: \"source_fence\", reader: new FenceReader(opener), depth: 0 };\n }\n }\n return held + \"\\n\";\n }\n const rest = line.slice(prefix.length);\n const depth = quoteDepth(prefix);\n const trimmed = rest.trimStart();\n if (trimmed.startsWith(\"`\") || trimmed.startsWith(\"~\")) {\n const opener = fenceOpenerOf(rest);\n if (opener && JSON_FENCE_LANGS.has(opener.lang.toLowerCase())) {\n this.mode = { kind: \"lifted_fence\", reader: new FenceReader(opener), depth };\n return rest + \"\\n\";\n }\n if (opener) {\n this.mode = { kind: \"source_fence\", reader: new FenceReader(opener), depth };\n }\n return held + \"\\n\";\n }\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\")) {\n const candidate: Mode = { kind: \"candidate\", depth, raw: [line], stripped: [rest] };\n this.mode = candidate;\n return this.settleCandidate(candidate);\n }\n return held + \"\\n\";\n }\n\n /** A held quoted JSON start, re-judged after each complete line. */\n private settleCandidate(mode: Extract<Mode, { kind: \"candidate\" }>): string {\n const signal = jsonKindSignal(mode.stripped.join(\"\\n\"));\n if (signal === \"undecided\") return \"\";\n if (signal === \"not_kind\") {\n this.mode = { kind: \"none\" };\n return mode.raw.join(\"\\n\") + \"\\n\";\n }\n const balance = mode.stripped.reduce((sum, l) => sum + bracketDelta(l), 0);\n this.mode =\n balance > 0\n ? { kind: \"lifted_bare\", depth: mode.depth, balance }\n : { kind: \"none\" };\n return mode.stripped.join(\"\\n\") + \"\\n\";\n }\n}\n\n/** The whole-text form, for the static splitter (identical bytes to any streaming of `source`). */\nexport function liftQuotedKindRegions(source: string): string {\n if (!source.includes(\">\")) return source;\n const lift = new QuotedKindLift();\n return lift.push(source) + lift.flush();\n}\n\n","/**\n * THE MARKDOWN-ESCAPED KIND (P8, round 4). A model that escapes markdown in\n * its whole answer writes `{\"\\_\\_kind\":\"flashcard\\_set\",…}`. No JSON reader\n * sees a kind there (`\\_` is not even a JSON escape), but the markdown\n * renderer un-escapes it, so the reader saw `{\"__kind\":…}` drawn raw.\n *\n * THE RULE: the key `\"\\_\\_kind\"` IS the key `\"__kind\"` (the detector reads it\n * in text contexts, `hasKindKey(…, { markdown: true })`), and inside the JSON\n * object that holds it every `\\_` is `_`. ONE transform, both hosts: the live\n * accumulator pushes every delta through a `MarkdownEscapedKindJson` before\n * its line machine; the static splitter runs `unescapeMarkdownKindJson` on the\n * whole text first. Character-driven and chunk-invariant, so live = reload.\n *\n * Also here (decided, round 4): a DOUBLE-ENCODED kind — the whole answer is a\n * JSON string literal whose value is kind JSON (`\"{\\\"__kind\\\":…}\"`) — reads as\n * that kind (`decodeDoubleEncodedKindText`, whole text, settled readers only).\n */\n\nimport { isKindJsonText, withoutZeroWidth } from \"./json-kind-signal\";\n\nconst TARGET = '\"\\\\_\\\\_kind\"';\nconst KEY = '\"__kind\"';\nconst HAS_ZERO_WIDTH = /[\\u200B-\\u200D\\u2060\\uFEFF\\u00AD]/;\n\n/**\n * A ZERO-WIDTH character inside the key (`\"__\\u200Bkind\"`, round 8): the\n * screen reads `\"__kind\"`, so the key is rewritten as `\"__kind\"` before\n * anything else reads the text, and the normal kind route (fence, standalone,\n * prose) takes it. Only a complete key is rewritten — a zero-width character\n * anywhere else stays. Character-driven and chunk-invariant (live = reload).\n */\nexport class ZeroWidthKindKey {\n /** Bytes that may still become the key — held, never shown. */\n private pending = \"\";\n\n push(text: string): string {\n let out = \"\";\n for (const ch of text) out += this.pushChar(ch);\n return out;\n }\n\n flush(): string {\n const out = this.pending;\n this.pending = \"\";\n return out;\n }\n\n private pushChar(ch: string): string {\n let candidate = this.pending + ch;\n let out = \"\";\n while (candidate && !(candidate.startsWith('\"') && KEY.startsWith(withoutZeroWidth(candidate)))) {\n const next = candidate.indexOf('\"', 1);\n if (next < 0) {\n out += candidate;\n candidate = \"\";\n } else {\n out += candidate.slice(0, next);\n candidate = candidate.slice(next);\n }\n }\n if (withoutZeroWidth(candidate) === KEY) {\n this.pending = \"\";\n return out + KEY;\n }\n this.pending = candidate;\n return out;\n }\n}\n\nexport class MarkdownEscapedKindJson {\n /** The zero-width key spelling is read first (round 8) — one transform, both hosts. */\n private zeroWidth = new ZeroWidthKindKey();\n /** Bytes that may still become the escaped key — held, never shown. */\n private pending = \"\";\n /** Inside the object holding a rewritten key: bracket depth (0 = outside). */\n private depth = 0;\n private inString = false;\n /** A held backslash inside the object (its fate depends on the next char). */\n private escape = false;\n\n push(text: string): string {\n return this.pushUnescape(this.zeroWidth.push(text));\n }\n\n private pushUnescape(text: string): string {\n let out = \"\";\n for (const ch of text) out += this.pushChar(ch);\n return out;\n }\n\n flush(): string {\n const held = this.pushUnescape(this.zeroWidth.flush());\n const out = held + this.pending + (this.escape ? \"\\\\\" : \"\");\n this.pending = \"\";\n this.escape = false;\n this.depth = 0;\n this.inString = false;\n return out;\n }\n\n private pushChar(ch: string): string {\n if (this.depth > 0) return this.insideObject(ch);\n let candidate = this.pending + ch;\n let out = \"\";\n // A zero-width character inside the escaped key reads through (L-1, round 9).\n while (candidate && !(candidate.startsWith('\"') && TARGET.startsWith(withoutZeroWidth(candidate)))) {\n const next = candidate.indexOf('\"', 1);\n if (next < 0) {\n out += candidate;\n candidate = \"\";\n } else {\n out += candidate.slice(0, next);\n candidate = candidate.slice(next);\n }\n }\n if (withoutZeroWidth(candidate) === TARGET) {\n this.pending = \"\";\n this.depth = 1;\n this.inString = false;\n return out + KEY;\n }\n this.pending = candidate;\n return out;\n }\n\n private insideObject(ch: string): string {\n if (this.escape) {\n this.escape = false;\n return ch === \"_\" ? \"_\" : `\\\\${ch}`;\n }\n if (ch === \"\\\\\") {\n this.escape = true;\n return \"\";\n }\n if (this.inString) {\n if (ch === '\"') this.inString = false;\n return ch;\n }\n if (ch === '\"') this.inString = true;\n else if (ch === \"{\" || ch === \"[\") this.depth += 1;\n else if (ch === \"}\" || ch === \"]\") this.depth -= 1;\n return ch;\n }\n}\n\n/** The whole-text form, for the static splitter (identical bytes to any streaming of `source`). */\nexport function unescapeMarkdownKindJson(source: string): string {\n if (!source.includes(TARGET) && !HAS_ZERO_WIDTH.test(source)) return source;\n const transform = new MarkdownEscapedKindJson();\n return transform.push(source) + transform.flush();\n}\n\n/**\n * A whole answer that is a JSON STRING literal holding kind JSON → that kind\n * JSON; anything else unchanged.\n */\nexport function decodeDoubleEncodedKindText(source: string): string {\n const trimmed = source.trim();\n if (!trimmed.startsWith('\"') || !trimmed.endsWith('\"') || !trimmed.includes('\\\\\"__kind\\\\\"')) return source;\n try {\n const inner: unknown = JSON.parse(trimmed);\n return typeof inner === \"string\" && isKindJsonText(inner.trim()) ? inner.trim() : source;\n } catch {\n return source;\n }\n}\n","/**\n * A KIND AS AN IMAGE'S ALT TEXT (P9, round 4): `![{\"__kind\":…}](url)`. The\n * prose split lifted the object out and left `!` and `(url)` behind as two\n * stray prose blocks after reload (and live). The model meant the kind: the\n * image wrapper is chrome — `![` before the object and `](url)` after it are\n * dropped, the object stays where it was and renders as its kind. A kindless\n * object in alt text (first key decided not `__kind`) is left as written.\n *\n * ONE transform, both hosts (like `quoted-kind-lift.ts`): the live accumulator\n * pushes every delta through a `KindImageAltUnwrap`; the static splitter runs\n * `unwrapKindImageAlt` on the whole text. Character-driven and chunk-invariant.\n */\n\nimport { jsonKindSignal } from \"./json-kind-signal\";\n\ntype Mode = \"scan\" | \"head\" | \"body\" | \"tail\";\n\n/** Past this, an alt text whose first key never arrived is left as written. */\nconst HEAD_LIMIT = 2000;\n\nexport class KindImageAltUnwrap {\n private mode: Mode = \"scan\";\n /** Held: `!` / `![` (scan), the object so far (head), `](…` (tail). */\n private held = \"\";\n private depth = 0;\n private inString = false;\n private escape = false;\n\n push(text: string): string {\n let out = \"\";\n for (const ch of text) out += this.pushChar(ch);\n return out;\n }\n\n flush(): string {\n const out = this.mode === \"head\" ? `![${this.held}` : this.held;\n this.mode = \"scan\";\n this.held = \"\";\n this.depth = 0;\n this.inString = false;\n this.escape = false;\n return out;\n }\n\n /** Track JSON structure; returns true when the object just closed. */\n private track(ch: string): boolean {\n if (this.escape) {\n this.escape = false;\n return false;\n }\n if (this.inString) {\n if (ch === \"\\\\\") this.escape = true;\n else if (ch === '\"') this.inString = false;\n return false;\n }\n if (ch === '\"') this.inString = true;\n else if (ch === \"{\" || ch === \"[\") this.depth += 1;\n else if (ch === \"}\" || ch === \"]\") {\n this.depth -= 1;\n return this.depth === 0;\n }\n return false;\n }\n\n private pushChar(ch: string): string {\n switch (this.mode) {\n case \"scan\": {\n if (this.held === \"\" && ch === \"!\") {\n this.held = \"!\";\n return \"\";\n }\n if (this.held === \"!\" && ch === \"[\") {\n this.held = \"![\";\n return \"\";\n }\n if (this.held === \"![\" && ch === \"{\") {\n this.mode = \"head\";\n this.held = \"{\";\n this.depth = 1;\n this.inString = false;\n this.escape = false;\n return \"\";\n }\n if (this.held === \"\") return ch;\n const out = this.held;\n this.held = \"\";\n return out + this.pushChar(ch);\n }\n case \"head\": {\n this.held += ch;\n const closed = this.track(ch);\n const signal = jsonKindSignal(this.held);\n if (signal === \"kind\") {\n const out = this.held;\n this.held = \"\";\n if (closed) {\n this.mode = \"tail\";\n return out;\n }\n this.mode = \"body\";\n return out;\n }\n if (signal === \"not_kind\" || closed || this.held.length > HEAD_LIMIT) {\n const out = `![${this.held}`;\n this.held = \"\";\n this.mode = \"scan\";\n return out;\n }\n return \"\";\n }\n case \"body\": {\n if (this.track(ch)) this.mode = \"tail\";\n return ch;\n }\n case \"tail\": {\n this.held += ch;\n if (/^\\]\\([^)\\n]*\\)$/.test(this.held)) {\n this.held = \"\";\n this.mode = \"scan\";\n return \"\";\n }\n if (/^\\](?:\\([^)\\n]*)?$/.test(this.held)) return \"\";\n // Not an image tail: hand it on as written.\n const out = this.held;\n this.held = \"\";\n this.mode = \"scan\";\n return out;\n }\n }\n }\n}\n\n/** The whole-text form, for the static splitter (identical bytes to any streaming of `source`). */\nexport function unwrapKindImageAlt(source: string): string {\n if (!source.includes(\"![{\")) return source;\n const transform = new KindImageAltUnwrap();\n return transform.push(source) + transform.flush();\n}\n","/**\n * Answer TEXT → ONE readable line, for a person's compact label (a card\n * subtitle, a rule name, a link-preview description, a list row). A kind is\n * never shown as raw JSON (Arman, 2026-09-30): a kind answer reads as\n * \"<Kind> · <instance title>\" (`deriveInstanceTitle`, the derivation saved\n * instances use); prose with a kind in it reads as the prose's first line;\n * a kind that never completed reads as its one-line broken note.\n * Kindless text is whitespace-collapsed and clipped, nothing else.\n *\n * Destination transform only — never call it on stored or machine-bound text.\n */\n\nimport { humanizeKind } from \"./kind-markdown-utils\";\nimport { deriveInstanceTitle } from \"./instance-title\";\nimport { firstKindSlug, hasJsonKindKey, hasKindKey, normalizeKindSpellings } from \"./json-kind-signal\";\nimport { kindTextToMarkdown } from \"./kind-text-to-markdown\";\n\nfunction clip(text: string, max: number): string {\n return text.length > max ? `${text.slice(0, Math.max(0, max - 1)).trimEnd()}…` : text;\n}\n\nfunction wholeKindLabel(text: string): string | null {\n let body = text.trim();\n const fence = body.match(/^(?:`{3,}|~{3,})[a-zA-Z0-9]*\\s*\\n([\\s\\S]*?)\\n?(?:`{3,}|~{3,})$/);\n if (fence) body = fence[1]!.trim();\n if (!body.startsWith(\"{\")) return null;\n try {\n const parsed: unknown = JSON.parse(body);\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return null;\n const record = parsed as Record<string, unknown>;\n if (typeof record.__kind !== \"string\" || !record.__kind.trim()) return null;\n const name = humanizeKind(record.__kind.trim());\n const title = deriveInstanceTitle(record);\n return title ? `${name} · ${title}` : name;\n } catch {\n return null;\n }\n}\n\nfunction firstReadableLine(markdown: string): string {\n for (const raw of markdown.split(\"\\n\")) {\n const line = raw\n .replace(/^\\s*(?:#{1,6}\\s+|>\\s*|[-*+]\\s+|\\d+[.)]\\s+)/, \"\")\n // A wrapper tag (`<artifact …>`, `<answer>`) names nothing.\n .replace(/<\\/?[A-Za-z][\\w:-]*(\\s[^<>]*)?\\/?>/g, \"\")\n .replace(/[*_`]+/g, \"\")\n .replace(/\\s+/g, \" \")\n .trim();\n if (line) return line;\n }\n return \"\";\n}\n\n/** One line, at most `max` characters, never containing a `__kind` key. */\nexport function kindTextLabel(raw: string | null | undefined, max = 90): string {\n if (!raw) return \"\";\n // A real JSON spelling (zero-width / markdown-escaped key) reads as the literal one (round 10).\n const text = normalizeKindSpellings(raw);\n if (!hasKindKey(text)) return clip(text.replace(/\\s+/g, \" \").trim(), max);\n const whole = wholeKindLabel(text);\n if (whole) return clip(whole, max);\n const line = firstReadableLine(kindTextToMarkdown(text));\n // Nothing readable around the kind (a kind wrapped in an `<artifact>` tag,\n // a kind that never completed): the kind's name, never \"\" (R4, round 6).\n if (line) return clip(line, max);\n const slug = firstKindSlug(text);\n return clip(slug ? humanizeKind(slug) : \"Structured output\", max);\n}\n\n/**\n * A conversation TITLE as a person reads it (R4, round 6): a title that holds\n * kind JSON reads as its one-line kind label; any other title — and null —\n * comes back as it is. Read boundaries and title renderers call this; the\n * stored title is never rewritten.\n */\nexport function conversationTitleText(title: string | null | undefined): string | null {\n if (title == null) return null;\n return hasJsonKindKey(title) ? kindTextLabel(title, 200) : title;\n}\n","import type { CanonicalBlockIR } from \"../core/ir-types\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** Mirror the server's legacy quiz adapter while keeping source aliases in IR residue. */\nexport function canonicalizeCompletedLegacyQuizEnvelope(\n envelope: CanonicalBlockIR,\n sourceText: string,\n): CanonicalBlockIR {\n if (envelope.root.kind !== \"quiz_set\" || envelope.root.status !== \"complete\") {\n return envelope;\n }\n\n let source: unknown;\n try {\n source = JSON.parse(sourceText);\n } catch {\n return envelope;\n }\n if (!isRecord(source)) return envelope;\n\n // A declared modern kind already owns canonical fields and can legitimately\n // contain nullable answers or future schema fields. Only the old root-key\n // vocabulary gets translated.\n const hasLegacyAliases =\n typeof source.quiz_title === \"string\" ||\n typeof source.quizTitle === \"string\" ||\n Array.isArray(source.multiple_choice) ||\n Array.isArray(source.multipleChoice);\n if (source.__kind !== undefined || !hasLegacyAliases) return envelope;\n\n const title =\n typeof source.quiz_title === \"string\"\n ? source.quiz_title\n : typeof source.quizTitle === \"string\"\n ? source.quizTitle\n : null;\n const sourceQuestions = source.questions ?? source.multiple_choice ?? source.multipleChoice;\n if (title === null || !Array.isArray(sourceQuestions)) return envelope;\n const questions = sourceQuestions.flatMap((candidate) => {\n if (!isRecord(candidate)) return [];\n // Legacy root-key quiz questions are scalar payload records, not declared\n // nested kind instances. Python's adapter intentionally leaves their\n // source vocabulary marker-free; do the same without affecting modern\n // `quiz_set` documents (which return before this adapter runs).\n const { __kind: _legacyKind, ...legacyQuestion } = candidate;\n const options = Array.isArray(candidate.options) ? candidate.options : [];\n const answer = candidate.correct_answer ?? candidate.correctAnswer ?? \"\";\n const correctAnswer =\n typeof answer === \"number\" &&\n Number.isInteger(answer) &&\n answer >= 0 &&\n answer < options.length\n ? options[answer]\n : answer;\n return [{\n ...legacyQuestion,\n type: typeof candidate.type === \"string\" ? candidate.type : \"multiple_choice\",\n question: typeof candidate.question === \"string\" ? candidate.question : \"\",\n options,\n correct_answer:\n typeof correctAnswer === \"string\" ? correctAnswer : String(correctAnswer),\n explanation:\n typeof candidate.explanation === \"string\" ? candidate.explanation : null,\n }];\n });\n\n return {\n ...envelope,\n root: {\n ...envelope.root,\n value: { ...envelope.root.value, title, questions },\n },\n };\n}\n","/**\n * The canonical IR contract for structured content.\n *\n * Every source (live agent stream, DB reload, Python-preprocessed results,\n * notes, any future surface) is normalized into these shapes exactly once.\n * Anything already carrying this IR passes through downstream layers by\n * reference — see `core/normalize.ts` for the idempotence law.\n *\n * This file is pure types + path helpers. No React, no Redux, no IO.\n */\n\n/** Path of a value inside a parsed region (object keys + array indices). */\nexport type IrPath = Array<string | number>;\n\n/**\n * How a node's kind was (or wasn't) established.\n *\n * 🚨 `unverified` IS NOT `raw`, AND THE DIFFERENCE IS LOAD-BEARING (Arman's\n * ruling, 2026-08-29). \"We checked it and it is wrong\" and \"we had nothing to\n * check it with\" are opposite facts about a payload, and collapsing them cost\n * ~221 live kinds their component overnight: a kind whose schema never loaded\n * degraded to `raw`, the render route read `raw` as \"broken instance\", and\n * perfectly valid payloads were dumped as key/value lists instead of reaching\n * the component the user built. A consumer that treats `unverified` as a\n * failure is reintroducing that outage — the data is intact and MAY be\n * entirely valid; all that is missing is the schema that would prove it.\n */\nexport type IrKindState =\n | \"resolved\" // __kind seen + schema validated\n | \"speculative\" // committed from parent itemKinds before __kind arrived\n | \"pending_kind\" // object open, no __kind yet, no speculation possible\n | \"pending_schema\" // kind known, registry cold-fetch in flight\n | \"unverified\" // kind known, NO schema was ever available — never checked\n | \"raw\"; // checked and FAILED, or structurally broken\n\n/**\n * System-level zero-data-loss channel. Unknown keys are NEVER merged into a\n * node's `value` (they'd be indistinguishable from schema fields); they are\n * carried here verbatim — Protobuf unknown-fields discipline. Distinct from\n * any domain-level `additionalDetails` field, which is an ordinary schema\n * field inside `value`.\n */\nexport interface IrResidue {\n /** Keys present in the source object but absent from the kind schema. */\n extra: Record<string, unknown> | null;\n /** Optional schema fields the source never provided. */\n optionalMissing: string[] | null;\n /** Structured warnings attached during parsing (speculation backtracks, truncation, …). */\n notices: Array<{ code: string; message: string; at?: number }> | null;\n}\n\n/** Which wire syntax carried the kind discriminator for a node. */\nexport type IrDiscriminator =\n | { format: \"json\"; key: \"__kind\" }\n | { format: \"xml\"; tag: string }\n | { format: \"fence\"; language: string };\n\n/** A schema-shaped structured node. Children live inside `value` (and carry their own metadata via `nodeIndex`). */\nexport interface IrStructuredNode {\n role: \"structured\";\n /** Canonical kind slug. Empty string while pending. */\n kind: string;\n kindState: IrKindState;\n discriminator: IrDiscriminator;\n /** Region-relative path ([] = region root). */\n path: IrPath;\n status: \"streaming\" | \"complete\" | \"error\";\n /** Compliant snapshot: schema fields + __kind ONLY. Unknown keys → residue. */\n value: Record<string, unknown>;\n residue: IrResidue | null;\n}\n\n/** Envelope version. Bump = migration point for persisted envelopes. */\nexport const IR_VERSION = 1 as const;\n\n/** Reserved key carrying the envelope inside RenderBlockPayload.data. */\nexport const IR_ENVELOPE_KEY = \"__ir\" as const;\n\n/**\n * One parsed region's canonical form. Serializable (plain JSON), carried on\n * render blocks (`data.__ir`), persisted on artifacts and message metadata,\n * and — with `engine: \"py-block-detector\"` — accepted pre-built from Python.\n */\nexport interface CanonicalBlockIR {\n v: typeof IR_VERSION;\n /** Provenance: which implementation produced this envelope. */\n engine: \"fe-kind-parser\" | \"py-block-detector\";\n /** Stable hash of the region source text — the idempotence / cache key. */\n fingerprint: string;\n root: IrStructuredNode;\n /**\n * pathKey → node metadata for per-path readers (child kinds under root).\n * Carries each child node's residue — child snapshot values inside\n * `root.value` hold schema fields only, so WITHOUT this the envelope would\n * silently drop nested unknown keys (zero-data-loss violation).\n */\n nodeIndex?: Record<\n string,\n Pick<IrStructuredNode, \"kind\" | \"kindState\" | \"status\"> & {\n residue?: IrResidue | null;\n }\n >;\n}\n\n/** Normalizer output segment: prose stays raw text; structured regions carry IR. */\nexport type CanonicalSegment =\n | { role: \"text\"; content: string }\n | {\n role: \"block\";\n blockType: string;\n content: string;\n ir: CanonicalBlockIR | null;\n };\n\nexport interface CanonicalContent {\n v: typeof IR_VERSION;\n segments: CanonicalSegment[];\n}\n\n// ---------------------------------------------------------------------------\n// Path helpers — the ONE implementation. Consumers must not roll their own.\n// ---------------------------------------------------------------------------\n\nexport function irPathKey(path: IrPath): string {\n return path.map((segment) => String(segment)).join(\".\");\n}\n\nexport function irPathsEqual(left: IrPath, right: IrPath): boolean {\n if (left.length !== right.length) return false;\n for (let i = 0; i < left.length; i++) {\n if (left[i] !== right[i]) return false;\n }\n return true;\n}\n\nexport function irPathIsUnderOrEqual(path: IrPath, prefix: IrPath): boolean {\n if (path.length < prefix.length) return false;\n for (let i = 0; i < prefix.length; i++) {\n if (path[i] !== prefix[i]) return false;\n }\n return true;\n}\n\n/** Human label for a path (\"root\", \"cards[2].front\"). */\nexport function irPathLabel(path: IrPath): string {\n if (path.length === 0) return \"root\";\n\n const parts: string[] = [];\n for (const segment of path) {\n if (typeof segment === \"number\") {\n parts[parts.length - 1] += `[${segment}]`;\n } else {\n parts.push(String(segment));\n }\n }\n return parts.join(\".\");\n}\n\n/** True when every residue channel is empty — normalize to null instead. */\nexport function isEmptyResidue(residue: IrResidue): boolean {\n return (\n (residue.extra === null || Object.keys(residue.extra).length === 0) &&\n (residue.optionalMissing === null ||\n residue.optionalMissing.length === 0) &&\n (residue.notices === null || residue.notices.length === 0)\n );\n}\n","/**\n * Pure envelope→value functions (the zero-data-loss wire round-trip).\n *\n * These live in core/ (the pure kernel) because every layer needs them —\n * including kinds/legacy-bridge-utils, whose bridges are built at MODULE\n * SCOPE inside kinds/<slug>.ts files that system-kinds.ts imports. When these\n * functions lived in redux/render-block-envelope.ts, that file's memo/capture\n * imports closed a module cycle (kinds → bridge-utils → render-block-envelope\n * → region-envelope-memo → kind-registry → system-kinds → kinds), which made\n * SYSTEM_KIND_DEFINITIONS entry-point-fragile (undefined defs when a kinds\n * module was the import entry). Keeping them here makes every kinds module\n * cycle-free BY CONSTRUCTION. redux/render-block-envelope re-exports them for\n * its existing consumers.\n */\n\nimport { isEmptyResidue, type CanonicalBlockIR } from \"./ir-types\";\nimport { KIND_KEY } from \"./kind-schema.types\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Rebuild the region's full data: walk the root value and merge each node's\n * residue extras back in (root residue + nodeIndex residues). This is the\n * zero-data-loss read: nothing the model emitted is missing, whether or not\n * a schema knew about it.\n */\nexport function reconstructRegionValue(\n envelope: CanonicalBlockIR,\n): Record<string, unknown> {\n const cloned = structuredClone(envelope.root.value);\n\n const applyExtras = (\n target: Record<string, unknown>,\n extras: Record<string, unknown> | null | undefined,\n ) => {\n if (!extras) return;\n for (const [key, value] of Object.entries(extras)) {\n target[key] = structuredClone(value);\n }\n };\n\n applyExtras(cloned, envelope.root.residue?.extra);\n\n for (const [pathKey, meta] of Object.entries(envelope.nodeIndex ?? {})) {\n const residue = meta.residue;\n if (!residue || isEmptyResidue(residue) || !residue.extra) continue;\n\n const segments = pathKey.split(\".\");\n let cursor: unknown = cloned;\n for (const segment of segments) {\n if (Array.isArray(cursor)) {\n cursor = cursor[Number(segment)];\n } else if (isRecord(cursor)) {\n cursor = cursor[segment];\n } else {\n cursor = undefined;\n break;\n }\n }\n if (isRecord(cursor)) {\n applyExtras(cursor, residue.extra);\n }\n }\n\n return cloned;\n}\n\n/**\n * Deep-remove the `__kind` discriminator.\n *\n * 🚨 NOT A TRANSFORM FOR PLATFORM DATA. `__kind` is part of the data\n * (KINDS_EVERYWHERE_PLAN §4.2) and stripping it from anything stored, passed or\n * rendered was annihilated on 2026-08-23. This helper survives for exactly two\n * shapes of caller, both of which are guarded:\n * - a SYMMETRIC COMPARISON that reduces both sides and returns a boolean;\n * - legacy validation TOLERANCE against a pre-2026-08-23 schema version.\n * Guards: aidream `scripts/check_kind_marker_law.py`,\n * matrx-frontend `pnpm check:kind-marker-law`.\n */\nexport function stripKindDeep(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(stripKindDeep);\n }\n if (isRecord(value)) {\n const out: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n if (key === KIND_KEY) continue;\n out[key] = stripKindDeep(child);\n }\n return out;\n }\n return value;\n}\n","/**\n * Pure envelope helpers the chat package needs (chat-package-move P14): the Phase-2 shadow\n * parity check (\"does the envelope, reconstructed, deep-equal what JSON.parse sees?\").\n *\n * A COMPARISON, NEVER A TRANSFORM — the one lawful shape of `stripKindDeep` outside the two doors.\n * Markers are removed from BOTH sides, symmetrically, inside this predicate, so a marker the parser\n * INJECTED (speculation / expectedRootKind) is not reported as a mismatch against a source that did\n * not carry one. Only a boolean leaves; neither input is mutated and neither reduced value is ever\n * returned, stored, or rendered (KINDS_EVERYWHERE_PLAN §4.2).\n */\n\nimport type { CanonicalBlockIR } from \"../core/ir-types\";\nimport { reconstructRegionValue, stripKindDeep } from \"../core/envelope-value\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction deepEqual(left: unknown, right: unknown): boolean {\n if (Object.is(left, right)) return true;\n\n if (Array.isArray(left) && Array.isArray(right)) {\n if (left.length !== right.length) return false;\n for (let i = 0; i < left.length; i++) {\n if (!deepEqual(left[i], right[i])) return false;\n }\n return true;\n }\n\n if (isRecord(left) && isRecord(right)) {\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n if (leftKeys.length !== rightKeys.length) return false;\n for (const key of leftKeys) {\n if (!(key in right)) return false;\n if (!deepEqual(left[key], right[key])) return false;\n }\n return true;\n }\n\n return false;\n}\n\nexport function envelopeMatchesParsedSource(envelope: CanonicalBlockIR, parsedSource: unknown): boolean {\n if (!isRecord(parsedSource)) return false;\n return deepEqual(stripKindDeep(reconstructRegionValue(envelope)), stripKindDeep(parsedSource));\n}\n","/** The decision-answers block's stable wire ids (render-block type and kind slug). */\nexport const DECISION_ANSWERS_KIND = \"decision_answers\";\nexport const DECISION_ANSWERS_BLOCK_TYPE = \"decision_answers\";\n"]}
1
+ {"version":3,"sources":["../source/fence-nesting.ts","../source/code-ranges.ts","../source/xml-tag.ts","../surfaces/json-kind-signal.ts","../surfaces/embedded-kind-json.ts","../core/kind-schema.types.ts","../surfaces/instance-title.ts","../surfaces/kind-markdown-utils.ts","../surfaces/kind-value-markdown.ts","../surfaces/kind-text-to-markdown.ts","../surfaces/kind-one-line.ts","../surfaces/quoted-kind-lift.ts","../surfaces/markdown-escaped-kind.ts","../surfaces/kind-image-alt.ts","../surfaces/kind-text-label.ts","../surfaces/legacy-quiz-envelope.ts","../core/ir-types.ts","../core/envelope-value.ts","../surfaces/envelope-parity.ts","../surfaces/decision-answers-ids.ts"],"names":["state","quoteDepth","inside","KIND_KEY","humanizeIdentifier","isKindValue","isRecord","JSON_FENCE_LANGS","last","QUOTE_PREFIX","prefix","rest","HAS_ZERO_WIDTH"],"mappings":";;;;;AA+BO,IAAM,uBAAA,uBAAmD,GAAA,CAAI;AAAA,EAClE,UAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAC,CAAA;AAGM,SAAS,sBAAsB,QAAA,EAA8C;AAClF,EAAA,OAAO,CAAC,CAAC,QAAA,IAAY,wBAAwB,GAAA,CAAI,QAAA,CAAS,aAAa,CAAA;AACzE;AA8BO,IAAM,gBAAA,GAAmB,YAAA;AAEhC,SAAS,kBAAkB,EAAA,EAAiC;AAC1D,EAAA,OAAO,OAAO,MAAA,IAAa,EAAA,KAAO,EAAA,IAAM,gBAAA,CAAiB,SAAS,EAAE,CAAA;AACtE;AAGO,SAAS,cAAc,IAAA,EAAsB;AAClD,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,MAAM,IAAA,CAAK,MAAA;AACf,EAAA,OAAO,QAAQ,GAAA,IAAO,iBAAA,CAAkB,IAAA,CAAK,KAAK,CAAC,CAAA,EAAG,KAAA,EAAA;AACtD,EAAA,OAAO,MAAM,KAAA,IAAS,iBAAA,CAAkB,KAAK,GAAA,GAAM,CAAC,CAAC,CAAA,EAAG,GAAA,EAAA;AACxD,EAAA,OAAO,KAAA,KAAU,KAAK,GAAA,KAAQ,IAAA,CAAK,SAAS,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAC1E;AAUO,IAAM,uBAAA,GACX,4HAAA;AAEF,SAAS,mBAAmB,EAAA,EAAiC;AAC3D,EAAA,OAAO,OAAO,MAAA,IAAa,EAAA,KAAO,EAAA,IAAM,uBAAA,CAAwB,SAAS,EAAE,CAAA;AAC7E;AASO,SAAS,iBAAiB,IAAA,EAAsD;AACrF,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,MAAM,IAAA,CAAK,MAAA;AACf,EAAA,OAAO,QAAQ,GAAA,IAAO,kBAAA,CAAmB,IAAA,CAAK,KAAK,CAAC,CAAA,EAAG,KAAA,EAAA;AACvD,EAAA,OAAO,MAAM,KAAA,IAAS,kBAAA,CAAmB,KAAK,GAAA,GAAM,CAAC,CAAC,CAAA,EAAG,GAAA,EAAA;AACzD,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,OAAO,QAAQ,KAAA,GAAQ,GAAA,IAAO,KAAK,KAAA,GAAQ,KAAK,MAAM,GAAA,EAAK,KAAA,EAAA;AAC3D,EAAA,IAAI,KAAA,GAAQ,GAAG,OAAO,IAAA;AACtB,EAAA,IAAI,IAAA,CAAK,MAAM,KAAA,GAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,IAAA;AACzD,EAAA,IAAI,YAAY,KAAA,GAAQ,KAAA;AACxB,EAAA,OAAO,YAAY,GAAA,IAAO,kBAAA,CAAmB,IAAA,CAAK,SAAS,CAAC,CAAA,EAAG,SAAA,EAAA;AAC/D,EAAA,IAAI,OAAA,GAAU,SAAA;AACd,EAAA,OAAO,UAAU,GAAA,IAAO,CAAC,mBAAmB,IAAA,CAAK,OAAO,CAAC,CAAA,EAAG,OAAA,EAAA;AAC5D,EAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,KAAK,KAAA,CAAM,SAAA,EAAW,OAAO,CAAA,EAAE;AACvD;AAEO,SAAS,sBAAA,CACd,OAAA,EACA,SAAA,EACA,KAAA,EACA,WAAA,EACgB;AAChB,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,OAAO,QAAQ,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,KAAK,MAAM,GAAA,EAAK,KAAA,EAAA;AACzD,EAAA,IAAI,KAAA,GAAQ,GAAG,OAAO,SAAA;AACtB,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA;AAC/C,EAAA,IAAI,SAAS,EAAA,EAAI;AACf,IAAA,IAAI,KAAA,GAAQ,WAAW,OAAO,SAAA;AAC9B,IAAA,IAAI,KAAA,IAAS,WAAA,GAAc,CAAA,EAAG,OAAO,cAAA;AACrC,IAAA,OAAO,aAAA;AAAA,EACT;AAKA,EAAA,IAAI,KAAA,IAAS,SAAS,SAAA,IAAa,CAAC,KAAK,QAAA,CAAS,GAAG,GAAG,OAAO,aAAA;AAC/D,EAAA,OAAO,SAAA;AACT;;;ACtFO,SAAS,cAAc,OAAA,EAAqC;AACjE,EAAA,MAAM,CAAA,GAAI,QAAQ,SAAA,EAAU;AAC5B,EAAA,IAAI,CAAA,CAAE,UAAA,CAAW,KAAK,CAAA,EAAG;AAEvB,IAAA,MAAM,MAAA,GAAS,iBAAiB,CAAC,CAAA;AACjC,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,IAAA,OAAO,EAAE,MAAM,GAAA,EAAK,KAAA,EAAO,OAAO,KAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAK;AAAA,EAC7D;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,CAAE,MAAA,IAAU,KAAK,CAAA,CAAE,UAAA,CAAW,KAAK,CAAA,EAAG;AACzD,IAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,IAAA,CAAK,CAAC,CAAA;AACnC,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,OAAO,EAAE,IAAA,EAAM,GAAA,EAAK,OAAQ,IAAA,CAAK,CAAC,EAAa,MAAA,EAAQ,IAAA,EAAO,KAAK,CAAC,CAAA,CAAa,MAAK,CAAE,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,KAAK,EAAA,EAAG;AAAA,EAC/G;AACA,EAAA,OAAO,IAAA;AACT;AA6CA,IAAM,UAAA,GAAa,EAAE,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA,EAAM;AAE9C,IAAM,cAAN,MAAkB;AAAA,EACd,MAAA;AAAA,EACD,KAAA,GAAQ,CAAA;AAAA;AAAA,EAEhB,SAAA,GAAY,KAAA;AAAA,EACK,MAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EAEjB,WAAA,CACE,MAAA,EACA,OAAA,GAAiC,EAAC,EAClC;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA,CAAO,IAAA,KAAS,GAAA,IAAO,OAAO,IAAA,KAAS,MAAA;AACrD,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,IAAA,KAAS,GAAA,KAAQ,QAAQ,OAAA,IAAW,qBAAA,CAAsB,OAAO,IAAI,CAAA,CAAA;AAC3F,IAAA,IAAA,CAAK,WAAA,GAAc,MAAA,CAAO,IAAA,KAAS,GAAA,GAAM,IAAI,OAAO,CAAA,SAAA,EAAY,MAAA,CAAO,KAAK,CAAA,UAAA,CAAY,CAAA,GAAI,IAAA;AAAA,EAC9F;AAAA;AAAA,EAGA,IAAI,WAAA,GAAsB;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,KAAK,IAAA,EAAuB;AAC1B,IAAA,IAAI,KAAK,WAAA,EAAa,OAAO,IAAA,CAAK,WAAA,CAAY,KAAK,IAAI,CAAA;AACvD,IAAA,MAAM,WAAA,GAAc,cAAc,IAAI,CAAA;AACtC,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AAC7B,IAAA,IAAI,EAAA,KAAO,IAAI,OAAO,KAAA;AAKtB,IAAA,IAAI,IAAA,CAAK,UAAU,eAAA,CAAgB,IAAA,EAAM,GAAG,EAAA,EAAI,UAAU,CAAA,CAAE,QAAA,EAAU,OAAO,KAAA;AAC7E,IAAA,IAAI,WAAA,CAAY,UAAA,CAAW,KAAK,CAAA,EAAG;AACjC,MAAA,MAAM,IAAA,GAAO,uBAAuB,WAAA,EAAa,IAAA,CAAK,OAAO,KAAA,EAAO,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,KAAK,CAAA;AAC5F,MAAA,IAAI,IAAA,KAAS,eAAe,OAAO,IAAA;AACnC,MAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,QAAA,IAAA,CAAK,KAAA,EAAA;AACL,QAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAAA,MACnB;AACA,MAAA,IAAI,IAAA,KAAS,gBAAgB,IAAA,CAAK,KAAA,EAAA;AAAA,IACpC,CAAA,MAAO;AAEL,MAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,IAAA,EAAM,EAAE,CAAA;AAC7C,MAAA,MAAM,QAAQ,aAAA,CAAc,IAAA,CAAK,KAAA,CAAM,EAAA,GAAK,UAAU,CAAC,CAAA;AACvD,MAAA,IAAI,UAAA,IAAc,KAAK,MAAA,CAAO,KAAA,IAAS,UAAU,EAAA,IAAM,IAAA,CAAK,KAAA,KAAU,CAAA,EAAG,OAAO,IAAA;AAAA,IAClF;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACF,CAAA;AAGO,SAAS,UAAA,CAAW,GAAA,EAAiB,IAAA,EAAc,MAAA,EAA+B;AACvF,EAAA,MAAM,QAAQ,SAAA,CAAU,GAAA,EAAK,MAAM,IAAI,WAAA,CAAY,MAAM,CAAC,CAAA;AAC1D,EAAA,IAAI,MAAM,MAAA,IAAU,CAAC,KAAA,CAAM,MAAA,CAAO,aAAa,KAAA,CAAM,MAAA,CAAO,WAAA,IAAe,CAAA,SAAU,EAAE,IAAA,EAAM,MAAM,IAAA,EAAM,MAAA,EAAQ,MAAM,MAAA,EAAO;AAC9H,EAAA,IAAI,GAAA,CAAI,WAAW,OAAO,EAAE,MAAM,KAAA,CAAM,IAAA,EAAM,QAAQ,KAAA,EAAM;AAC5D,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,GAAA,EAAK,IAAA,EAAM,IAAI,WAAA,CAAY,MAAA,EAAQ,EAAE,OAAA,EAAS,KAAA,EAAO,CAAC,CAAA;AAC/E,EAAA,OAAO,EAAE,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,MAAA,EAAQ,OAAO,MAAA,EAAO;AACpD;AAEA,SAAS,SAAA,CAAU,GAAA,EAAiB,IAAA,EAAc,MAAA,EAAyD;AACzG,EAAA,KAAA,IAAS,IAAI,IAAA,GAAO,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,OAAO,CAAA,EAAA,EAAK;AAEzC,IAAA,IAAI,GAAA,CAAI,QAAA,GAAW,CAAC,CAAA,EAAG;AACvB,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AACvB,IAAA,IAAI,IAAA,KAAS,MAAM,OAAO,EAAE,MAAM,CAAA,GAAI,CAAA,EAAG,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAC/D,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAO;AAAA,EAChE;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,GAAA,CAAI,QAAQ,CAAA,EAAG,MAAA,EAAQ,OAAO,MAAA,EAAO;AACtD;AAGO,SAAS,eAAA,CACd,IAAA,EACA,IAAA,EACA,IAAA,EACAA,MAAAA,EACyC;AACzC,EAAA,IAAI,EAAE,QAAA,EAAU,OAAA,EAAQ,GAAIA,MAAAA;AAC5B,EAAA,KAAA,IAAS,GAAA,GAAM,IAAA,EAAM,GAAA,GAAM,IAAA,EAAM,GAAA,EAAA,EAAO;AACtC,IAAA,MAAM,EAAA,GAAK,KAAK,GAAG,CAAA;AACnB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,GAAU,KAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,IAAI,EAAA,KAAO,QAAQ,QAAA,EAAU;AAC3B,MAAA,OAAA,GAAU,IAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,IAAI,EAAA,KAAO,GAAA,EAAK,QAAA,GAAW,CAAC,QAAA;AAAA,EAC9B;AACA,EAAA,OAAO,EAAE,UAAU,OAAA,EAAQ;AAC7B;AAEO,SAAS,iBAAA,CAAkB,KAAa,GAAA,EAAqB;AAClE,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,GAAA,GAAM,IAAI,GAAA,CAAI,MAAA,IAAU,IAAI,GAAA,GAAM,CAAC,MAAM,GAAA,EAAK,CAAA,EAAA;AACrD,EAAA,OAAO,CAAA;AACT;AAKA,SAAS,YAAY,IAAA,EAAiD;AACpE,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,WAAS;AACP,IAAA,MAAM,IAAI,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA;AAC9C,IAAA,IAAI,CAAC,CAAA,EAAG,OAAO,EAAE,OAAO,MAAA,EAAO;AAC/B,IAAA,KAAA,EAAA;AACA,IAAA,MAAA,IAAU,CAAA,CAAE,CAAC,CAAA,CAAE,MAAA;AAAA,EACjB;AACF;AAGA,SAAS,WAAA,CAAY,MAAc,KAAA,EAA8B;AAC/D,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,IAAA,MAAM,IAAI,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA;AAC9C,IAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,IAAA,MAAA,IAAU,CAAA,CAAE,CAAC,CAAA,CAAE,MAAA;AAAA,EACjB;AACA,EAAA,OAAO,IAAA,CAAK,MAAM,MAAM,CAAA;AAC1B;AAEA,IAAM,SAAA,GAAY,mCAAA;AAElB,SAAS,cAAc,CAAA,EAAmB;AACxC,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,IAAI,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,CAAC,MAAM,GAAA,EAAK,CAAA,EAAA;AACrC,EAAA,OAAO,CAAA;AACT;AAcA,SAAS,KAAK,IAAA,EAAoB;AAChC,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,KAAA,IAAS,MAAM,CAAA,MAAO;AACpB,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AACjC,IAAA,MAAM,OAAA,GAAU,EAAA,KAAO,EAAA,GAAK,IAAA,CAAK,MAAA,GAAS,EAAA;AAC1C,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AACf,IAAA,IAAA,CAAK,IAAA,CAAK,OAAA,GAAU,GAAA,IAAO,IAAA,CAAK,UAAA,CAAW,OAAA,GAAU,CAAC,CAAA,KAAM,EAAA,GAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtF,IAAA,IAAI,OAAO,EAAA,EAAI;AACf,IAAA,GAAA,GAAM,EAAA,GAAK,CAAA;AAAA,EACb;AACA,EAAA,MAAM,QAAQ,MAAA,CAAO,MAAA;AACrB,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,KAAc,IAAA,CAAK,KAAA,CAAM,OAAO,CAAC,CAAA,EAAa,IAAA,CAAK,CAAC,CAAW,CAAA;AAC5E,EAAA,MAAM,GAAA,GAAY,EAAE,MAAA,EAAQ,IAAI,MAAA,EAAQ,EAAC,EAAG,UAAA,EAAY,EAAC,EAAG,WAAA,EAAa,KAAA,EAAO,aAAa,EAAA,EAAG;AAIhG,EAAA,MAAM,QAAA,GAAuB,EAAE,KAAA,EAAO,IAAA,EAAM,GAAA,EAAI;AAChD,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,IAAA,MAAM,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,CAAC,CAAC,CAAA;AACnC,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,IAAA,KAAS,GAAA,EAAK;AACpC,IAAA,KAAA,CAAM,MAAM,MAAA,EAAQ,IAAA,EAAM,GAAA,EAAK,OAAA,EAAS,GAAG,GAAG,CAAA;AAC9C,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,QAAA,EAAU,CAAA,EAAG,MAAM,CAAA;AAC1C,IAAA,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,OAAO,CAAC,CAAA,EAAa,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,EAAa,IAAA,EAAM,SAAS,CAAA;AAC5F,IAAA,GAAA,CAAI,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,IAAI,IAAA,EAAM,GAAA,CAAI,MAAM,CAAC,CAAA;AACzC,IAAA,GAAA,CAAI,WAAA,GAAc,EAAA;AAClB,IAAA,IAAI,CAAC,IAAI,MAAA,IAAU,GAAA,CAAI,SAAS,KAAA,GAAQ,CAAA,MAAO,WAAA,GAAc,IAAA;AAC7D,IAAA,CAAA,GAAI,GAAA,CAAI,IAAA;AACR,IAAA,OAAA,GAAU,CAAA,GAAI,CAAA;AAAA,EAChB;AACA,EAAA,KAAA,CAAM,MAAM,MAAA,EAAQ,IAAA,EAAM,GAAA,EAAK,OAAA,EAAS,OAAO,GAAG,CAAA;AAClD,EAAA,OAAO,GAAA;AACT;AAQA,SAAS,MACP,IAAA,EACA,MAAA,EACA,MACA,GAAA,EACA,IAAA,EACA,IACA,GAAA,EACM;AACN,EAAA,IAAI,IAAA,GAAO,EAAA;AACX,EAAA,IAAIC,WAAAA,GAAa,CAAA;AACjB,EAAA,IAAI,QAAkB,EAAC;AACvB,EAAA,MAAM,SAAA,GAAY,CAAC,EAAA,KAAe;AAChC,IAAA,IAAI,IAAA,KAAS,IAAI,GAAA,CAAI,UAAA,CAAW,KAAK,CAAC,IAAA,EAAM,EAAE,CAAC,CAAA;AAC/C,IAAA,IAAA,GAAO,EAAA;AAAA,EACT,CAAA;AACA,EAAA,KAAA,IAAS,CAAA,GAAI,IAAA,EAAM,CAAA,GAAI,EAAA,EAAI,CAAA,EAAA,EAAK;AAC9B,IAAA,MAAM,IAAA,GAAO,IAAI,CAAC,CAAA;AAClB,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,YAAY,IAAI,CAAA;AAC1C,IAAA,IAAI,UAAUA,WAAAA,EAAY;AACxB,MAAAA,WAAAA,GAAa,KAAA;AACb,MAAA,KAAA,GAAQ,EAAC;AAAA,IACX;AACA,IAAA,IAAI,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAC/B,IAAA,IAAI,OAAA,CAAQ,IAAA,EAAK,KAAM,EAAA,EAAI;AACzB,MAAA,SAAA,CAAU,MAAA,CAAO,CAAC,CAAW,CAAA;AAG7B,MAAA,IAAI,EAAE,MAAM,MAAA,CAAO,MAAA,GAAS,KAAK,IAAA,KAAS,EAAA,CAAA,MAAS,WAAA,GAAc,EAAA;AACjE,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,cAAc,OAAO,CAAA;AACpC,IAAA,OAAO,KAAA,CAAM,UAAU,MAAA,GAAU,KAAA,CAAM,MAAM,MAAA,GAAS,CAAC,CAAA,EAAc,KAAA,CAAM,GAAA,EAAI;AAC/E,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,IAAA,CAAK,OAAO,CAAA;AACnC,IAAA,IAAI,SAAS,KAAA,CAAM,MAAA,GAAU,MAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,GAAe,CAAA;AAClE,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,GAAA,GAAO,IAAA,CAAK,CAAC,CAAA,CAAa,MAAA;AAChC,MAAA,MAAA,GAAU,IAAA,CAAK,CAAC,CAAA,CAAa,MAAA,GAAU,IAAA,CAAK,CAAC,CAAA,CAAa,MAAA,IAAU,GAAA,IAAO,CAAA,IAAK,GAAA,IAAO,CAAA,GAAI,GAAA,GAAM,CAAA,CAAA;AACjG,MAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AACjB,MAAA,OAAA,GAAU,QAAQ,KAAA,CAAM,IAAA,CAAK,IAAI,MAAA,EAAQ,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,IAC1D,CAAA,MAAO;AACL,MAAA,OAAA,GAAU,QAAQ,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,MAAM,CAAC,CAAA;AAAA,IAClD;AACA,IAAA,MAAM,MAAA,GAAS,cAAc,OAAO,CAAA;AACpC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,IAAI,IAAA,KAAS,EAAA,EAAI,IAAA,GAAO,MAAA,CAAO,CAAC,CAAA;AAChC,MAAA,IAAI,IAAI,WAAA,KAAgB,EAAA,EAAI,GAAA,CAAI,WAAA,GAAc,OAAO,CAAC,CAAA;AACtD,MAAA;AAAA,IACF;AACA,IAAA,SAAA,CAAU,MAAA,CAAO,CAAC,CAAW,CAAA;AAC7B,IAAA,GAAA,CAAI,WAAA,GAAc,EAAA;AAClB,IAAA,MAAM,GAAA,GAAM,MAAA;AACZ,IAAA,MAAM,GAAA,GAAkB;AAAA,MACtB,KAAA,EAAO,EAAA;AAAA,MACP,IAAA,EAAM,CAAC,CAAA,KAAM;AACX,QAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,GAAA,CAAI,CAAC,GAAG,KAAK,CAAA;AACvC,QAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,QAAA,IAAI,MAAA,CAAO,IAAA,KAAS,GAAA,IAAO,GAAA,GAAM,CAAA,EAAG;AAClC,UAAA,MAAM,GAAA,GAAM,cAAc,KAAK,CAAA;AAC/B,UAAA,IAAI,MAAM,IAAA,EAAK,KAAM,EAAA,IAAM,GAAA,GAAM,KAAK,OAAO,IAAA;AAC7C,UAAA,OAAO,MAAM,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,GAAG,CAAC,CAAA;AAAA,QACvC;AACA,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,KACF;AACA,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,GAAA,EAAK,CAAA,EAAG,MAAM,CAAA;AACrC,IAAA,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,OAAO,CAAC,CAAA,EAAa,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,EAAa,IAAA,EAAM,SAAS,CAAA;AAC5F,IAAA,GAAA,CAAI,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,IAAI,IAAA,EAAM,GAAA,CAAI,MAAM,CAAC,CAAA;AACzC,IAAA,IAAI,CAAC,IAAI,MAAA,IAAU,GAAA,CAAI,SAAS,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,GAAA,CAAI,WAAA,GAAc,IAAA;AACrE,IAAA,CAAA,GAAI,GAAA,CAAI,IAAA;AAAA,EACV;AACA,EAAA,SAAA,CAAU,KAAK,MAAA,CAAO,MAAA,GAAU,OAAO,EAAE,CAAA,GAAe,KAAK,MAAM,CAAA;AACrE;AAQO,IAAM,eAAN,MAAmB;AAAA;AAAA,EAEf,MAA+B,EAAC;AAAA,EACxB,QAAA,uBAAe,GAAA,EAAsB;AAAA,EACrC,OAAA,uBAAc,GAAA,EAAoB;AAAA,EAEnD,WAAA,CAAY,IAAA,EAAc,IAAA,EAAc,EAAA,EAAY;AAClD,IAAA,KAAA,IAAS,CAAA,GAAI,IAAA,EAAM,CAAA,GAAI,EAAA,IAAM;AAC3B,MAAA,IAAI,IAAA,CAAK,UAAA,CAAW,CAAC,CAAA,KAAM,EAAA,EAAI;AAC7B,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,OAAO,CAAA,GAAI,MAAM,EAAA,IAAM,IAAA,CAAK,WAAW,CAAA,GAAI,GAAG,MAAM,EAAA,EAAI,GAAA,EAAA;AACxD,MAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,MAAM,CAAA;AACnC,MAAA,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AACtB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AAClC,MAAA,IAAI,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAAA,gBACX,QAAA,CAAS,GAAA,CAAI,GAAA,EAAK,CAAC,CAAC,CAAC,CAAA;AAC/B,MAAA,CAAA,IAAK,GAAA;AAAA,IACP;AAAA,EACF;AAAA;AAAA,EAGA,IAAA,CAAK,GAAW,KAAA,EAAuB;AACrC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA;AAChC,IAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,IAAA,IAAI,EAAA,GAAK,CAAA;AACT,IAAA,IAAI,KAAK,IAAA,CAAK,MAAA;AACd,IAAA,OAAO,KAAK,EAAA,EAAI;AACd,MAAA,MAAM,GAAA,GAAO,KAAK,EAAA,KAAQ,CAAA;AAC1B,MAAA,IAAK,IAAA,CAAK,GAAG,CAAA,GAAe,KAAA,OAAY,GAAA,GAAM,CAAA;AAAA,WACzC,EAAA,GAAK,GAAA;AAAA,IACZ;AACA,IAAA,OAAO,IAAA,CAAK,EAAE,CAAA,IAAK,EAAA;AAAA,EACrB;AAAA;AAAA,EAGA,MAAM,KAAA,EAAuB;AAC3B,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,IAAK,EAAA;AAAA,EACpC;AACF,CAAA;AAEA,SAAS,SAAA,CAAU,IAAA,EAAc,IAAA,EAAc,EAAA,EAAY,GAAA,EAAwB;AAKjF,EAAA,IAAI,IAAA,GAA4B,IAAA;AAChC,EAAA,KAAA,IAAS,CAAA,GAAI,IAAA,EAAM,CAAA,GAAI,EAAA,IAAM;AAC3B,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,UAAA,CAAW,CAAC,CAAA;AAC5B,IAAA,IAAI,OAAO,EAAA,EAAI;AACb,MAAA,CAAA,IAAK,CAAA;AACL,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,EAAA,EAAI;AACb,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AACA,IAAA,MAAM,CAAA,GAAI,iBAAA,CAAkB,IAAA,EAAM,CAAC,CAAA;AACnC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAA;AAC9B,IAAA,IAAA,KAAS,IAAI,YAAA,CAAa,IAAA,EAAM,IAAA,EAAM,EAAE,CAAA;AACxC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,IAAI,GAAG,CAAA;AACpC,IAAA,IAAI,UAAU,EAAA,EAAI;AAChB,MAAA,CAAA,IAAK,GAAA;AACL,MAAA;AAAA,IACF;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,KAAA,EAAO,CAAA,EAAG,KAAK,KAAA,GAAQ,GAAA,EAAK,IAAA,EAAM,MAAA,EAAQ,CAAA;AACrD,IAAA,CAAA,GAAI,KAAA,GAAQ,GAAA;AAAA,EACd;AACF;AAOO,SAAS,eAAe,IAAA,EAA2B;AACxD,EAAA,MAAM,CAAA,GAAI,KAAK,IAAI,CAAA;AACnB,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,CAAA,CAAE,MAAM,CAAA;AAC3B,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,EAAE,CAAA,IAAK,CAAA,CAAE,YAAY,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,EAAA,EAAI,MAAM,CAAA;AACvE,EAAA,OAAO,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AAChD;AAsDO,SAAS,WAAW,GAAA,EAA4E;AACrG,EAAA,MAAM,QAAQ,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,CAAE,IAAI,CAAC,CAAA,KAAO,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,GAAI,CAAA,CAAE,MAAM,CAAA,EAAG,EAAE,IAAI,CAAE,CAAA;AAChF,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,YAAY,KAAA,CAAM,CAAC,KAAK,EAAE,CAAA;AAC7C,EAAA,MAAM,MAAA,GAAS,aAAA,CAAA,CAAe,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA,EAAI,KAAA,CAAM,MAAM,CAAA,CAAE,OAAA,CAAQ,sCAAA,EAAwC,EAAE,CAAC,CAAA;AAC/G,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAC1B,EAAA,MAAM,SAAS,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,IAAI,YAAY,MAAA,EAAQ,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA,CAAE,IAAA,CAAK,KAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAW,CAAA;AAClH,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAE,MAAA,EAAQ,MAAM,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAAG,MAAA,EAAO;AAC5D,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAEjC,EAAA,MAAM,SAAS,MAAA,CAAO,IAAA,KAAS,GAAA,IAAO,aAAA,CAAc,IAAI,CAAA,CAAE,UAAA,CAAW,KAAK,CAAA,GAAI,KAAK,IAAA,CAAK,KAAA,CAAM,GAAG,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAC,CAAA;AACpH,EAAA,OAAO,EAAE,QAAQ,IAAA,EAAM,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG,GAAI,OAAO,IAAA,EAAK,GAAI,CAAC,MAAM,CAAA,GAAI,EAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,EAAG,MAAA,EAAO;AACvG;;;AChgBA,IAAM,cAAA,GAAiB,WAAA;AACvB,IAAM,kBAAA,GAAqB,SAAA;AAC3B,IAAM,UAAA,GAAa,IAAA;AAOZ,SAAS,UAAA,CACd,OAAA,EACA,KAAA,EACA,IAAA,GAAiD,CAAC,MAAA,EAAQ,IAAA,KAAS,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,IAAI,CAAA,EAC5E;AAGnB,EAAA,IAAI,OAAA,CAAQ,KAAK,CAAA,KAAM,GAAA,EAAK,OAAO,IAAA;AACnC,EAAA,IAAI,SAAS,KAAA,GAAQ,CAAA;AACrB,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,MAAM,CAAA,KAAM,GAAA;AACtC,EAAA,IAAI,SAAA,EAAW,MAAA,EAAA;AACf,EAAA,IAAI,CAAC,eAAe,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,IAAK,EAAE,GAAG,OAAO,IAAA;AACxD,EAAA,MAAM,SAAA,GAAY,MAAA;AAClB,EAAA,OAAO,mBAAmB,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,IAAK,EAAE,CAAA,EAAG,MAAA,EAAA;AACvD,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,SAAA,EAAW,MAAM,CAAA;AAC/C,EAAA,MAAM,aAAqD,EAAC;AAC5D,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO,WAAW,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,IAAK,EAAE,CAAA,EAAG,MAAA,EAAA;AAC/C,IAAA,IAAI,OAAA,CAAQ,MAAM,CAAA,KAAM,GAAA,EAAK,OAAO,IAAA;AACpC,IAAA,OAAO;AAAA,MACL,OAAA;AAAA,MACA,GAAA,EAAK,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,SAAS,CAAC,CAAA;AAAA,MACpC,SAAA;AAAA,MACA,aAAA,EAAe,KAAA;AAAA,MACf;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,MAAA,GAAS,QAAQ,MAAA,EAAQ;AAC9B,IAAA,OAAO,WAAW,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,IAAK,EAAE,CAAA,EAAG,MAAA,EAAA;AAC/C,IAAA,IAAI,OAAA,CAAQ,MAAM,CAAA,KAAM,GAAA;AACtB,MAAA,OAAO;AAAA,QACL,OAAA;AAAA,QACA,GAAA,EAAK,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,SAAS,CAAC,CAAA;AAAA,QACpC,SAAA;AAAA,QACA,aAAA,EAAe,KAAA;AAAA,QACf;AAAA,OACF;AACF,IAAA,IAAI,OAAA,CAAQ,MAAM,CAAA,KAAM,GAAA,EAAK;AAC3B,MAAA,MAAA,EAAA;AACA,MAAA,OAAO,WAAW,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,IAAK,EAAE,CAAA,EAAG,MAAA,EAAA;AAC/C,MAAA,IAAI,OAAA,CAAQ,MAAM,CAAA,KAAM,GAAA,EAAK,OAAO,IAAA;AACpC,MAAA,OAAO;AAAA,QACL,OAAA;AAAA,QACA,GAAA,EAAK,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,SAAS,CAAC,CAAA;AAAA,QACpC,SAAA;AAAA,QACA,aAAA,EAAe,IAAA;AAAA,QACf;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,CAAC,eAAe,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,IAAK,EAAE,GAAG,OAAO,IAAA;AACxD,IAAA,MAAM,cAAA,GAAiB,MAAA;AACvB,IAAA,OAAO,mBAAmB,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,IAAK,EAAE,CAAA,EAAG,MAAA,EAAA;AACvD,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,KAAA,CAAM,cAAA,EAAgB,MAAM,CAAA;AACjD,IAAA,OAAO,WAAW,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,IAAK,EAAE,CAAA,EAAG,MAAA,EAAA;AAC/C,IAAA,IAAI,OAAA,CAAQ,MAAM,CAAA,KAAM,GAAA,EAAK,OAAO,IAAA;AACpC,IAAA,MAAA,EAAA;AACA,IAAA,OAAO,WAAW,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,IAAK,EAAE,CAAA,EAAG,MAAA,EAAA;AAC/C,IAAA,MAAM,KAAA,GAAQ,QAAQ,MAAM,CAAA;AAC5B,IAAA,IAAI,KAAA,KAAU,GAAA,IAAO,KAAA,KAAU,GAAA,EAAK,OAAO,IAAA;AAC3C,IAAA,MAAM,aAAa,EAAE,MAAA;AACrB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,EAAO,UAAU,CAAA;AACvC,IAAA,IAAI,QAAA,KAAa,IAAI,OAAO,IAAA;AAC5B,IAAA,MAAA,GAAS,QAAA;AACT,IAAA,UAAA,CAAW,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,QAAQ,KAAA,CAAM,UAAA,EAAY,MAAM,CAAA,EAAG,CAAA;AAClE,IAAA,MAAA,EAAA;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;;;ACrEA,IAAM,qBAAA,GAAwB,GAAA;AAM9B,IAAM,gBAAgB,CAAC,GAAG,QAAQ,CAAA,CAC/B,GAAA,CAAI,CAAC,EAAA,KAAO;AACX,EAAA,MAAM,GAAA,GAAM,EAAA,CAAG,UAAA,CAAW,CAAC,CAAA,CAAE,SAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AACzD,EAAA,MAAM,OAAA,GAAU,CAAC,GAAG,GAAG,EACpB,GAAA,CAAI,CAAC,CAAA,KAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,GAAG,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,CAAA,GAAM,CAAE,CAAA,CAC7D,IAAA,CAAK,EAAE,CAAA;AACV,EAAA,OAAO,CAAA,GAAA,EAAM,EAAE,CAAA,MAAA,EAAS,OAAO,CAAA,CAAA,CAAA;AACjC,CAAC,CAAA,CACA,KAAK,EAAE,CAAA;AAGV,IAAM,WAAW,IAAI,MAAA,CAAO,MAAA,CAAO,GAAA,CAAA,QAAA,EAAc,aAAa,CAAA,KAAA,CAAO,CAAA;AAOrE,IAAM,cAAA,GAAiB,4CAAA;AACvB,IAAM,eAAA,GAAkB,6FAAA;AAOxB,IAAM,iBAAA,GAAoB,uCAAA;AAS1B,IAAM,gBAAA,GAAmB,oBAAA;AACzB,IAAM,iBAAA,GAAoB,iDAAA;AAoCnB,IAAM,kBAAA,GAAgD,OAAO,MAAA,CAAO;AAAA,EACzE,QAAA,EAAU,IAAA;AAAA,EACV,OAAA,EAAS,IAAA;AAAA,EACT,MAAA,EAAQ,IAAA;AAAA,EACR,KAAA,EAAO,IAAA;AAAA,EACP,MAAA,EAAQ,IAAA;AAAA,EACR,EAAA,EAAI;AACN,CAAC;AAaM,IAAM,sBAAiD,MAAA,CAAO,MAAA,CAAO,EAAE,QAAA,EAAU,MAAM;AAGvF,SAAS,eAAe,MAAA,EAAyB;AACtD,EAAA,OAAO,UAAA,CAAW,QAAQ,mBAAmB,CAAA;AAC/C;AAMO,SAAS,wBAAwB,MAAA,EAAyB;AAC/D,EAAA,OAAO,CAAC,eAAe,MAAM,CAAA,KAAM,WAAW,MAAA,EAAQ,kBAAkB,CAAA,IAAK,gBAAA,CAAiB,MAAM,CAAA,CAAA;AACtG;AAQA,IAAM,UAAA,GAAa,oCAAA;AACnB,IAAM,cAAA,GAAiB,mCAAA;AAGhB,SAAS,iBAAiB,IAAA,EAAsB;AACrD,EAAA,OAAO,cAAA,CAAe,KAAK,IAAI,CAAA,GAAI,KAAK,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA,GAAI,IAAA;AACpE;AAQA,IAAM,eAAA,GAAkB,4BAAA;AACxB,IAAM,gBAAA,GAAmB,qEAAA;AAGzB,IAAM,YAAA,GAAe,gCAAA;AACrB,IAAM,YAAA,GAAe,gCAAA;AAErB,IAAM,cAAA,GAAiB,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,YAAY,CAAA,EAAG,YAAY,CAAA,QAAA,EAAW,YAAY,CAAA,EAAG,YAAY,CAAA,QAAA,CAAU,CAAA;AAEjH,IAAM,YAAA,GAAe,+DAAA;AACrB,IAAM,kBAAkB,IAAI,MAAA,CAAO,GAAG,YAAY,CAAA,MAAA,EAAS,YAAY,CAAA,KAAA,CAAO,CAAA;AAGvE,SAAS,gBAAgB,IAAA,EAA0C;AACxE,EAAA,OAAA,CAAQ,IAAA,IAAQ,EAAA,EAAI,IAAA,EAAK,CAAE,aAAY,KAAM,OAAA;AAC/C;AAEO,SAAS,UAAA,CAAW,MAAA,EAAgB,OAAA,GAA2B,EAAC,EAAY;AACjF,EAAA,MAAM,IAAA,GAAO,iBAAiB,MAAM,CAAA;AACpC,EAAA,OACE,QAAA,CAAS,KAAK,IAAI,CAAA,IACjB,QAAQ,MAAA,KAAW,IAAA,IAAQ,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA,IACpD,QAAQ,KAAA,KAAU,IAAA,IAAQ,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA,IAClD,QAAQ,QAAA,KAAa,IAAA,IAAQ,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA,IACxD,QAAQ,OAAA,KAAY,IAAA,IAAQ,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA,IACtD,QAAQ,KAAA,KAAU,IAAA,IAAQ,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA,IAClD,QAAQ,MAAA,KAAW,IAAA,IAAQ,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA,IACpD,QAAQ,EAAA,KAAO,IAAA,IAAQ,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAAA;AAAA,EAG5C,OAAA,CAAQ,OAAA,KAAY,IAAA,IAAQ,OAAA,CAAQ,MAAA,KAAW,IAAA,IAAQ,OAAA,CAAQ,KAAA,KAAU,IAAA,IAAQ,OAAA,CAAQ,QAAA,KAAa,IAAA,IACrG,cAAc,MAAM,CAAA;AAE1B;AAGA,IAAM,WAAA,GAAc,0BAAA;AAUb,SAAS,iBAAiB,IAAA,EAAuB;AACtD,EAAA,IAAI,CAAC,uBAAA,CAAwB,IAAA,CAAK,IAAI,GAAG,OAAO,KAAA;AAChD,EAAA,IAAI,QAAQ,IAAA,CACT,OAAA,CAAQ,gBAAA,EAAkB,EAAE,EAC5B,OAAA,CAAQ,SAAA,EAAW,GAAG,CAAA,CACtB,QAAQ,SAAA,EAAW,GAAG,CAAA,CACtB,OAAA,CAAQ,WAAW,GAAG,CAAA;AACzB,EAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG,IAAA,EAAA,EAAQ,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,cAAc,WAAW,CAAA;AAC3G,EAAA,OAAO,KAAA,KAAU,IAAA,IAAQ,UAAA,CAAW,KAAA,EAAO,kBAAkB,CAAA;AAC/D;AAEA,IAAM,gBAAA,GAAmB,4DAAA;AACzB,IAAM,YAAA,GAAe,mDAAA;AACrB,IAAM,WAAA,GAAsC,EAAE,IAAA,EAAM,GAAA,EAAK,IAAA,EAAM,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,QAAQ,GAAA,EAAI;AAC5G,SAAS,WAAA,CAAY,OAAe,IAAA,EAAsB;AACxD,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACxB,IAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA,KAAM,OAAO,IAAA,CAAK,CAAC,CAAA,KAAM,GAAA,GAAM,MAAA,CAAO,QAAA,CAAS,KAAK,KAAA,CAAM,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,MAAA,CAAO,SAAS,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,EAAG,EAAE,CAAA;AACxH,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,IAAK,IAAA,GAAO,CAAA,IAAK,IAAA,GAAO,OAAA,GAAW,MAAA,CAAO,aAAA,CAAc,IAAI,CAAA,GAAI,KAAA;AAAA,EAC7F;AACA,EAAA,OAAO,WAAA,CAAY,IAAA,CAAK,WAAA,EAAa,CAAA,IAAK,KAAA;AAC5C;AAGO,SAAS,sBAAsB,MAAA,EAAyB;AAC7D,EAAA,OAAO,UAAA,CAAW,QAAQ,kBAAkB,CAAA;AAC9C;AAGA,IAAM,YAAY,IAAI,MAAA;AAAA,EACpB,MAAA,CAAO,cAAc,aAAa,CAAA,2BAAA;AACpC,CAAA;AAGA,IAAM,SAAA,GAAY,oBAAA;AAGX,SAAS,WAAW,KAAA,EAAiC;AAC1D,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,SAAA,CAAU,KAAK,KAAK,CAAA;AAC1D;AAOO,SAAS,aAAA,CAAc,MAAA,EAAgB,OAAA,GAA2B,EAAC,EAAkB;AAC1F,EAAA,MAAM,IAAA,GAAO,iBAAiB,MAAM,CAAA;AACpC,EAAA,IAAI,OAAA,GAAU,SAAA,CAAU,IAAA,CAAK,IAAI,IAAI,CAAC,CAAA;AACtC,EAAA,IAAI,CAAC,OAAA,KAAY,OAAA,CAAQ,KAAA,IAAS,QAAQ,EAAA,CAAA,EAAK;AAC7C,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,IAAA,CAAK,IAAI,IAAI,CAAC,CAAA;AAC5C,IAAA,OAAA,GAAU,KAAA,EAAO,UAAA,CAAW,GAAG,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,GAAI,KAAA;AAAA,EAC1E;AACA,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,OAAA,EAAS;AAC/B,IAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,IAAA,CAAK,IAAI,IAAI,CAAC,CAAA;AAChD,IAAA,IAAI,SAAS,OAAO,OAAA;AAAA,EACtB;AACA,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,MAAA,EAAQ;AAC9B,IAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA;AACzC,IAAA,IAAI,QAAQ,OAAO,MAAA,CAAO,CAAC,CAAA,IAAK,MAAA,CAAO,CAAC,CAAA,IAAK,IAAA;AAAA,EAC/C;AACA,EAAA,IAAI,CAAC,OAAA,KAAY,OAAA,CAAQ,SAAS,OAAA,CAAQ,MAAA,IAAU,QAAQ,QAAA,CAAA,EAAW;AACrE,IAAA,MAAM,SAAA,GAAY,uBAAuB,IAAI,CAAA;AAC7C,IAAA,IAAI,SAAA,KAAc,IAAA,EAAM,OAAO,aAAA,CAAc,WAAW,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,OAAO,CAAA;AAAA,EACtH;AACA,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,EAC3B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,IAAA,KAAS,QAAA,IAAY,UAAU,IAAA,CAAK,IAAI,IAAI,IAAA,GAAO,IAAA;AACnE;AAWA,IAAM,qBAAA,GAAwB,kCAAA;AAEvB,SAAS,qBAAqB,IAAA,EAAuB;AAC1D,EAAA,MAAM,IAAA,GAAO,qBAAA,CAAsB,IAAA,CAAK,IAAI,CAAA;AAC5C,EAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAClB,EAAA,OAAO,mBAAA,CAAoB,IAAA,EAAM,IAAA,CAAK,KAAK,CAAA;AAC7C;AAGA,SAAS,mBAAA,CAAoB,MAAc,OAAA,EAA0B;AACnE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,SAAA,GAAY,KAAA;AAChB,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,EAAS,CAAA,EAAA,EAAK;AAChC,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,SAAS,OAAA,GAAU,KAAA;AAAA,WAAA,IACd,EAAA,KAAO,MAAM,OAAA,GAAU,IAAA;AAAA,WAAA,IACvB,EAAA,KAAO,KAAK,QAAA,GAAW,KAAA;AAChC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,GAAA,EAAK;AACd,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,SAAA,GAAY,KAAA;AAAA,IACd,CAAA,MAAA,IAAW,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK;AACnC,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,MAAA,SAAA,GAAY,EAAA,KAAO,GAAA;AAAA,IACrB,CAAA,MAAA,IAAW,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK;AACnC,MAAA,KAAA,CAAM,GAAA,EAAI;AACV,MAAA,SAAA,GAAY,KAAA;AAAA,IACd,CAAA,MAAA,IAAW,OAAO,GAAA,EAAK;AACrB,MAAA,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,KAAM,GAAA;AAAA,IAC1C,CAAA,MAAA,IAAW,OAAO,GAAA,EAAK;AACrB,MAAA,SAAA,GAAY,KAAA;AAAA,IACd;AAAA,EACF;AACA,EAAA,OAAO,CAAC,QAAA,IAAY,SAAA;AACtB;AAQO,SAAS,2BAA2B,IAAA,EAAsB;AAC/D,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,WAAS;AACP,IAAA,CAAA,GAAI,MAAA,CAAO,MAAM,CAAC,CAAA;AAClB,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,IAAA,EAAM,CAAC,CAAA,EAAG;AAC5B,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,CAAC,CAAA;AAChC,MAAA,IAAI,GAAA,KAAQ,IAAI,OAAO,EAAA;AACvB,MAAA,CAAA,GAAI,GAAA,GAAM,CAAA;AAAA,IACZ,CAAA,MAAA,IAAW,IAAA,CAAK,UAAA,CAAW,IAAA,EAAM,CAAC,CAAA,EAAG;AACnC,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAC,CAAA;AACpC,MAAA,IAAI,GAAA,KAAQ,IAAI,OAAO,EAAA;AACvB,MAAA,CAAA,GAAI,GAAA,GAAM,CAAA;AAAA,IACZ,CAAA,MAAO;AACL,MAAA,OAAO,CAAA,KAAM,CAAA,GAAI,IAAA,GAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,IACtC;AAAA,EACF;AACF;AAEO,SAAS,cAAA,CACd,IAAA,EACA,OAAA,GAA2B,EAAC,EACZ;AAChB,EAAA,MAAM,MAAA,GAAS,0BAAA,CAA2B,IAAA,IAAQ,EAAE,CAAA;AACpD,EAAA,IAAI,UAAA,CAAW,MAAA,EAAQ,OAAO,CAAA,EAAG,OAAO,MAAA;AAExC,EAAA,IAAI,CAAA,GAAI,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AACxB,EAAA,IAAI,CAAA,IAAK,MAAA,CAAO,MAAA,EAAQ,OAAO,WAAA;AAG/B,EAAA,IAAI,MAAA,CAAO,CAAC,CAAA,KAAM,GAAA,EAAK;AACrB,IAAA,CAAA,GAAI,MAAA,CAAO,MAAA,EAAQ,CAAA,GAAI,CAAC,CAAA;AACxB,IAAA,IAAI,CAAA,IAAK,MAAA,CAAO,MAAA,EAAQ,OAAO,OAAO,MAAM,CAAA;AAC5C,IAAA,IAAI,OAAO,CAAC,CAAA,KAAM,GAAA,EAAK,OAAO,wBAAwB,MAAM,CAAA;AAAA,EAC9D;AACA,EAAA,IAAI,OAAO,CAAC,CAAA,KAAM,GAAA,EAAK,OAAO,wBAAwB,MAAM,CAAA;AAE5D,EAAA,CAAA,GAAI,MAAA,CAAO,MAAA,EAAQ,CAAA,GAAI,CAAC,CAAA;AACxB,EAAA,IAAI,CAAA,IAAK,MAAA,CAAO,MAAA,EAAQ,OAAO,OAAO,MAAM,CAAA;AAE5C,EAAA,IAAI,OAAO,CAAC,CAAA,KAAM,GAAA,EAAK,OAAO,wBAAwB,MAAM,CAAA;AAG5D,EAAA,IAAI,IAAI,CAAA,GAAI,CAAA;AACZ,EAAA,OAAO,CAAA,GAAI,OAAO,MAAA,EAAQ;AACxB,IAAA,MAAM,EAAA,GAAK,OAAO,CAAC,CAAA;AACnB,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,CAAA,IAAK,CAAA;AACL,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,GAAA,EAAK;AACd,MAAA,OAAO,gBAAA,CAAiB,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,CAAC,CAAC,CAAC,CAAA,KAAM,QAAA,GAC5D,MAAA,GACA,wBAAwB,MAAM,CAAA;AAAA,IACpC;AACA,IAAA,CAAA,EAAA;AAAA,EACF;AACA,EAAA,OAAO,OAAO,MAAM,CAAA;AACtB;AAGA,SAAS,wBAAwB,MAAA,EAAgC;AAC/D,EAAA,OAAO,oBAAA,CAAqB,MAAM,CAAA,GAAI,WAAA,GAAc,UAAA;AACtD;AAGA,SAAS,WAAW,OAAA,EAAyB;AAC3C,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAe,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACvC,IAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,GAAW,MAAM,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA,CAAE,CAAA;AAAA,EAC5D,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,EAC5B;AACF;AAEA,SAAS,OAAO,MAAA,EAAgC;AAC9C,EAAA,OAAO,MAAA,CAAO,MAAA,GAAS,qBAAA,GAAwB,UAAA,GAAa,WAAA;AAC9D;AAEA,SAAS,MAAA,CAAO,QAAgB,IAAA,EAAsB;AACpD,EAAA,IAAI,CAAA,GAAI,IAAA;AACR,EAAA,OAAO,CAAA,GAAI,OAAO,MAAA,IAAU,IAAA,CAAK,KAAK,MAAA,CAAO,CAAC,CAAA,IAAK,EAAE,CAAA,EAAG,CAAA,EAAA;AACxD,EAAA,OAAO,CAAA;AACT;AAOO,SAAS,YAAY,IAAA,EAA6B;AACvD,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAA,GAAI,KAAK,MAAA,EAAQ;AACtB,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAI,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK;AAC5B,MAAA,IAAI,IAAI,CAAA,GAAI,CAAA;AACZ,MAAA,IAAI,IAAA,GAAO,EAAA;AACX,MAAA,OAAO,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,CAAC,MAAM,EAAA,EAAI;AACxC,QAAA,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,IAAA,EAAM;AACpB,UAAA,IAAA,IAAQ,KAAK,CAAC,CAAA,IAAM,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA,IAAK,EAAA,CAAA;AACnC,UAAA,CAAA,IAAK,CAAA;AACL,UAAA;AAAA,QACF;AACA,QAAA,IAAA,IAAQ,EAAA,KAAO,OAAO,IAAA,CAAK,CAAC,MAAM,GAAA,GAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACtD,QAAA,CAAA,EAAA;AAAA,MACF;AACA,MAAA,GAAA,IAAO,IAAI,IAAI,CAAA,CAAA,CAAA;AACf,MAAA,CAAA,GAAI,CAAA,GAAI,CAAA;AACR,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,IAAA,EAAM,CAAC,CAAA,EAAG;AAC5B,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,CAAC,CAAA;AAChC,MAAA,CAAA,GAAI,GAAA,KAAQ,EAAA,GAAK,IAAA,CAAK,MAAA,GAAS,GAAA;AAC/B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,IAAA,EAAM,CAAC,CAAA,EAAG;AAC5B,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAC,CAAA;AACpC,MAAA,CAAA,GAAI,GAAA,KAAQ,EAAA,GAAK,IAAA,CAAK,MAAA,GAAS,GAAA,GAAM,CAAA;AACrC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAM,2BAAA,CAA4B,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAC1D,IAAA,IAAI,GAAA,IAAO,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA,EAAG;AAC/B,MAAA,GAAA,IAAO,CAAA,CAAA,EAAI,GAAA,CAAI,CAAC,CAAC,CAAA,CAAA,CAAA;AACjB,MAAA,CAAA,IAAK,GAAA,CAAI,CAAC,CAAA,CAAE,MAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,GAAA,IAAO,EAAA;AACP,IAAA,CAAA,EAAA;AAAA,EACF;AACA,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,cAAA,EAAgB,IAAI,CAAA;AACtC,EAAA,IAAI;AACF,IAAA,IAAA,CAAK,MAAM,GAAG,CAAA;AACd,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAOO,SAAS,iBAAiB,IAAA,EAA6B;AAC5D,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAA,GAAI,KAAK,MAAA,EAAQ;AACtB,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAI,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK;AAC5B,MAAA,IAAI,IAAI,CAAA,GAAI,CAAA;AACZ,MAAA,IAAI,IAAA,GAAO,EAAA;AACX,MAAA,OAAO,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,CAAC,MAAM,EAAA,EAAI;AACxC,QAAA,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,IAAA,EAAM;AACpB,UAAA,MAAM,IAAA,GAAO,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA,IAAK,EAAA;AAC5B,UAAA,IAAA,IAAQ,IAAA,KAAS,GAAA,GAAM,GAAA,GAAM,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA;AACtC,UAAA,CAAA,IAAK,CAAA;AACL,UAAA;AAAA,QACF;AACA,QAAA,IAAA,IAAQ,KAAK,CAAC,CAAA,KAAM,GAAA,GAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACxC,QAAA,CAAA,EAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAA,IAAK,IAAA,CAAK,MAAA,EAAQ,OAAO,IAAA;AAC7B,MAAA,GAAA,IAAO,IAAI,IAAI,CAAA,CAAA,CAAA;AACf,MAAA,CAAA,GAAI,CAAA,GAAI,CAAA;AACR,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,yBAAyB,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA,EAAG,CAAA,GAAI,CAAC,CAAC,CAAA;AAC/D,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,GAAA,IAAO,IAAA,CAAK,CAAC,CAAA,KAAM,MAAA,GAAS,SAAS,IAAA,CAAK,CAAC,CAAA,KAAM,OAAA,GAAU,OAAA,GAAU,MAAA;AACrE,MAAA,CAAA,IAAK,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA;AACb,MAAA;AAAA,IACF;AACA,IAAA,GAAA,IAAO,EAAA;AACP,IAAA,CAAA,EAAA;AAAA,EACF;AACA,EAAA,IAAI;AACF,IAAA,IAAA,CAAK,MAAM,GAAG,CAAA;AACd,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAGO,SAAS,iBAAiB,IAAA,EAAuB;AACtD,EAAA,OAAO,eAAA,CAAgB,IAAA,CAAK,gBAAA,CAAiB,IAAI,CAAC,CAAA;AACpD;AAGO,SAAS,iBAAA,CAAkB,MAAc,KAAA,EAA8B;AAC5E,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,KAAA,GAAuB,IAAA;AAC3B,EAAA,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAI,OAAO,IAAA,EAAM,CAAA,EAAA;AAAA,WAAA,IACR,EAAA,KAAO,OAAO,KAAA,GAAQ,IAAA;AAC/B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK,KAAA,GAAQ,EAAA;AAAA,SAAA,IAC7B,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK,KAAA,EAAA;AAAA,SAAA,IAC1B,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK;AACjC,MAAA,KAAA,EAAA;AACA,MAAA,IAAI,KAAA,KAAU,CAAA,EAAG,OAAO,CAAA,GAAI,CAAA;AAAA,IAC9B;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAsBO,SAAS,uBAAuB,MAAA,EAAwB;AAC7D,EAAA,IAAI,CAAC,cAAA,CAAe,MAAM,CAAA,EAAG,OAAO,MAAA;AAEpC,EAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,SAAA,EAAW,CAAA,EAAG;AACpC,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,MAAM,MAAM,CAAA;AAEjB,MAAA,OAAO,uBAAuB,MAAM,CAAA;AAAA,IACtC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,MAAA,IAAU,uBAAA,CAAwB,MAAM,CAAA,EAAG;AACpD,IAAA,MAAM,SAAA,GAAY,mBAAA,CAAoB,MAAA,EAAQ,MAAM,CAAA;AACpD,IAAA,IAAI,cAAc,IAAA,EAAM;AACxB,IAAA,GAAA,IAAO,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,MAAA,CAAO,YAAY,CAAA,GAAI,SAAA;AACnD,IAAA,MAAA,GAAS,MAAA,CAAO,UAAA;AAAA,EAClB;AACA,EAAA,OAAO,WAAW,CAAA,GAAI,MAAA,GAAS,GAAA,GAAM,MAAA,CAAO,MAAM,MAAM,CAAA;AAC1D;AAGA,SAAS,mBAAA,CAAoB,QAAgB,MAAA,EAA2C;AACtF,EAAA,IAAI,MAAA,CAAO,WAAW,QAAA,EAAU;AAG9B,IAAA,IAAI,MAAA,CAAO,QAAA,EAAU,OAAO,MAAA,CAAO,MAAA,KAAW,QAAA,GAAW,UAAA,CAAW,MAAM,CAAA,IAAK,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,OAAA;AACvG,IAAA,MAAM,MAAM,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,YAAA,EAAc,OAAO,UAAU,CAAA;AAC/D,IAAA,OAAO,OAAO,OAAA,KAAY,MAAA,IAAa,QAAQ,MAAA,CAAO,OAAA,GAAU,OAAO,MAAA,CAAO,OAAA;AAAA,EAChF;AACA,EAAA,IAAI,MAAA,CAAO,WAAW,UAAA,EAAY;AAChC,IAAA,MAAM,IAAA,GAAO,WAAW,MAAM,CAAA;AAC9B,IAAA,IAAI,IAAA,KAAS,MAAM,OAAO,IAAA;AAC1B,IAAA,OAAO,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,MAAA,KAAW,IAAA,GAAO,OAAO,MAAA,CAAO,OAAA;AAAA,EAC9E;AACA,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,SAAiB,UAAA,CAAW,MAAM,KAAK,MAAA,CAAO,OAAA;AACpE,EAAA,OAAO,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,MAAA,KAAW,IAAA,GAAO,OAAO,MAAA,CAAO,OAAA;AAC9E;AA4BA,IAAM,EAAA,GAAK,wCAAA;AAEX,IAAM,iBAAiB,MAAA,CAAO,GAAA,CAAA,8DAAA,CAAA;AAC9B,IAAM,WAAW,CAAA,EAAG,EAAE,IAAI,cAAc,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,cAAc,CAAA,EAAG,EAAE,KAAK,EAAE,CAAA,EAAA,EAAK,EAAE,CAAA,EAAA,EAAK,EAAE,KAAK,EAAE,CAAA,CAAA,CAAA;AAChG,IAAM,SAAA,GAAY,CAAA,CAAA,EAAI,YAAY,CAAA,EAAG,YAAY,CAAA,CAAA,CAAA;AASjD,IAAM,kBAAA,GAAqB;AAAA,EACzB,MAAA,CAAO,aAAa,QAAQ,CAAA,SAAA,CAAA;AAAA,EAC5B,MAAA,CAAO,oBAAoB,QAAQ,CAAA,iBAAA,CAAA;AAAA,EACnC,GAAG,SAAS,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,EAAK,YAAY,GAAG,YAAY,CAAA,QAAA,CAAA;AAAA,EACxD,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,QAAQ,IAAI,YAAY,CAAA,KAAA,CAAA;AAAA,EAC3C,MAAA,CAAO,mBAAmB,QAAQ,CAAA,gBAAA;AACpC,CAAA,CAAE,KAAK,GAAG,CAAA;AACV,IAAM,WAAA,GAAc,IAAI,MAAA,CAAO,kBAAkB,CAAA;AACjD,IAAM,aAAA,GAAgB,IAAI,MAAA,CAAO,kBAAA,EAAoB,GAAG,CAAA;AAGxD,SAAS,cAAc,IAAA,EAAuB;AAC5C,EAAA,OAAO,cAAA,CAAe,IAAI,CAAA,IAAK,WAAA,CAAY,KAAK,IAAI,CAAA;AACtD;AAOO,SAAS,eAAe,IAAA,EAAuB;AACpD,EAAA,OAAO,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,IAAM,IAAA,CAAK,SAAS,GAAG,CAAA,IAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACjF;AAGA,IAAM,oBAAA,GAAuB,GAAA;AAE7B,IAAM,cAAA,GAAiB,EAAA;AAGvB,SAAS,WAAA,CAAY,IAAA,EAAc,IAAA,EAAc,SAAA,EAA4B;AAC3E,EAAA,IAAI,CAAC,SAAA,EAAW,OAAO,IAAA,CAAK,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAChD,EAAA,cAAA,CAAe,SAAA,GAAY,IAAA;AAC3B,EAAA,MAAM,CAAA,GAAI,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AAClC,EAAA,OAAO,CAAA,GAAI,EAAE,KAAA,GAAQ,EAAA;AACvB;AACA,IAAM,cAAA,GAAiB,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,EAAE,KAAK,EAAE,CAAA,EAAA,EAAK,EAAE,CAAA,EAAA,CAAA,EAAM,GAAG,CAAA;AAG/D,SAAS,UAAU,CAAA,EAAkF;AACnG,EAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,MAAA,EAAW,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,CAAA,CAAE,CAAC,CAAA,EAAG,QAAQ,CAAA,EAAE;AACzE,EAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,MAAA,EAAW,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,CAAA,CAAE,CAAC,CAAA,EAAG,QAAQ,CAAA,EAAE;AACxE,EAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,MAAA,EAAW,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,CAAA,CAAE,CAAC,CAAA,EAAG,QAAQ,CAAA,EAAE;AACzE,EAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,MAAA,EAAW,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAM,CAAA,CAAE,CAAC,CAAA,EAAG,QAAQ,CAAA,EAAE;AACrE,EAAA,MAAM,WAAA,GAAc,CAAA,CAAE,CAAC,CAAA,CAAG,MAAA;AAC1B,EAAA,MAAM,IAAA,GAAO,EAAE,CAAC,CAAA;AAGhB,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ,CAAA,EAAE;AACnE,EAAA,IAAI,cAAc,CAAA,EAAG;AAEnB,IAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,MAAA,EAAQ,KAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,KAAK,IAAA,CAAK,WAAA,GAAc,CAAC,CAAC,CAAC,CAAA,EAAE;AAAA,EAC/F;AACA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AACzC,EAAA,IAAI,KAAA,KAAU,QAAA,IAAY,mBAAA,CAAoB,IAAA,CAAK,KAAK,CAAA,EAAG,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ,CAAA,EAAE;AACtG,EAAA,IAAI,KAAA,KAAU,cAAc,OAAO,EAAE,QAAQ,QAAA,EAAU,IAAA,EAAM,QAAQ,CAAA,EAAE;AACvE,EAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,QAAQ,CAAA,EAAE;AAC/C;AAUO,SAAS,uBAAA,CACd,IAAA,EACA,OAAA,GAAwD,EAAC,EACnC;AACtB,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,KAAa,KAAA;AAItC,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,CAAA;AAC7B,EAAA,MAAM,UAAgC,EAAC;AACvC,EAAA,IAAI,CAAC,cAAA,CAAe,IAAI,CAAA,EAAG,OAAO,OAAA;AAClC,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AAC1C,EAAA,IAAI,MAAA,GAAyC,IAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,CAAC,EAAA,KAAe;AAC/B,IAAA,MAAA,KAAW,mBAAmB,IAAI,CAAA;AAClC,IAAA,IAAI,EAAA,GAAK,CAAA;AACT,IAAA,IAAI,EAAA,GAAK,OAAO,MAAA,GAAS,CAAA;AACzB,IAAA,OAAO,MAAM,EAAA,EAAI;AACf,MAAA,MAAM,GAAA,GAAO,KAAK,EAAA,IAAO,CAAA;AACzB,MAAA,MAAM,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,OAAO,GAAG,CAAA;AACzB,MAAA,IAAI,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,GAAA,GAAM,CAAA;AAAA,WAAA,IACd,EAAA,IAAM,CAAA,EAAG,EAAA,GAAK,GAAA,GAAM,CAAA;AAAA,WACxB,OAAO,IAAA;AAAA,IACd;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AACA,EAAA,IAAI,MAAA,GAAS,IAAA;AACb,EAAA,IAAI,SAAA,GAAY,IAAA;AAChB,EAAA,IAAI,SAAA,GAAY,EAAA;AAGhB,EAAA,IAAI,cAAA,GAAiB,IAAA;AAIrB,EAAA,MAAM,QAAqB,EAAE,IAAA,EAAM,mBAAA,GAAsB,IAAA,CAAK,SAAS,kBAAA,EAAmB;AAC1F,EAAA,IAAI,GAAA,GAAM,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,SAAS,CAAA;AAC3C,EAAA,OAAO,GAAA,IAAO,CAAA,IAAK,OAAA,CAAQ,MAAA,GAAS,oBAAA,EAAsB;AACxD,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,MAAM,cAAc,CAAA;AACzD,IAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,MAAM,cAAc,CAAA;AAC5D,IAAA,aAAA,CAAc,SAAA,GAAY,CAAA;AAC1B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,WAAA,EAAa,SAAS,CAAA;AAChD,IAAA,IAAI,CAAA,GAA4B,IAAA;AAChC,IAAA,KAAA,IAAS,SAAA,GAAY,aAAA,CAAc,IAAA,CAAK,MAAM,CAAA,EAAG,WAAW,SAAA,GAAY,aAAA,CAAc,IAAA,CAAK,MAAM,CAAA,EAAG;AAClG,MAAA,IAAI,cAAc,SAAA,CAAU,KAAA,GAAQ,UAAU,CAAC,CAAA,CAAE,SAAS,GAAA,EAAK;AAC7D,QAAA,CAAA,GAAI,SAAA;AACJ,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,CAAC,CAAA,EAAG;AACN,MAAA,GAAA,GAAM,WAAA,CAAY,IAAA,EAAM,GAAA,GAAM,CAAA,EAAG,SAAS,CAAA;AAC1C,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,cAAc,CAAA,CAAE,KAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,KAAA,GAAQ,CAAA,CAAE,CAAC,CAAA,CAAE,MAAA;AAC5B,IAAA,MAAM,IAAA,GAAO,MAAM,WAAA,CAAY,IAAA,EAAM,QAAQ,SAAS,CAAA;AACtD,IAAA,OAAO,YAAY,KAAA,EAAO;AACxB,MAAA,IAAI,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA,KAAM,KAAa,SAAA,GAAY,SAAA;AAC5D,MAAA,SAAA,EAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAQ,SAAA,IAAa,IAAA,CAAK,IAAI,MAAA,EAAQ,cAAc,IAAI,SAAA,GAAY,EAAA;AAC1E,IAAA,IAAI,QAAQ,CAAA,IAAK,QAAA,CAAS,KAAK,CAAA,IAAK,QAAA,CAAS,KAAK,CAAA,EAAG;AACnD,MAAA,GAAA,GAAM,IAAA,EAAK;AACX,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAO,GAAI,UAAU,CAAC,CAAA;AAE5C,IAAA,IAAI,QAAA,IAAY,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,UAAA,EAAY;AAC5D,MAAA,GAAA,GAAM,IAAA,EAAK;AACX,MAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAI,KAAM,MAAA,KAAW,SAAA,IAAa,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAChF,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,MAAA,EAAQ,MAAA,EAAQ,QAAQ,CAAA;AAChD,IAAA,MAAM,SAAS,WAAA,CAAY,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,MAAM,KAAK,CAAA;AAC1D,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,cAAA,GAAiB,KAAA,GAAQ,CAAA;AACzB,MAAA,GAAA,GAAM,IAAA,EAAK;AACX,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,KAAW,QAAA,IAAY,CAAC,QAAA,EAAU;AAGpC,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,KAAA,EAAO,KAAA;AAAA,QACP,KAAK,MAAA,CAAO,GAAA;AAAA,QACZ,YAAA,EAAc,KAAA;AAAA,QACd,UAAA,EAAY,MAAA;AAAA,QACZ,SAAS,CAAA,CAAE,CAAC,CAAA,CAAE,OAAA,CAAQ,YAAY,EAAE,CAAA;AAAA,QACpC,MAAA;AAAA,QACA,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,OAAA,EAAS,sBAAA,CAAuB,MAAA,CAAO,OAAO,CAAA;AAAA,QAC9C,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,KAAA,EAAO,KAAA;AAAA,QACP,KAAK,MAAA,CAAO,GAAA;AAAA,QACZ,YAAA,EAAc,KAAA;AAAA,QACd,YAAY,MAAA,CAAO,GAAA;AAAA,QACnB,MAAA;AAAA,QACA,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,OAAA,EAAS,sBAAA,CAAuB,MAAA,CAAO,OAAO,CAAA;AAAA,QAC9C;AAAA,OACD,CAAA;AAAA,IACH;AACA,IAAA,MAAA,GAAS,MAAA,CAAO,GAAA;AAChB,IAAA,IAAI,MAAA,CAAO,WAAW,QAAA,EAAU;AAChC,IAAA,GAAA,GAAM,WAAA,CAAY,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AAAA,EAC3C;AACA,EAAA,OAAO,OAAA;AACT;AAGA,IAAM,oBAAoB,IAAI,MAAA,CAAO,SAAS,EAAE,CAAA,EAAA,EAAK,EAAE,CAAA,EAAA,EAAK,EAAE,CAAA,EAAA,EAAK,EAAE,KAAK,EAAE,CAAA,EAAA,EAAK,EAAE,CAAA,EAAA,EAAK,EAAE,iBAAiB,GAAG,CAAA;AAC9G,SAAS,uBAAuB,OAAA,EAAyB;AACvD,EAAA,OAAO,cAAA,CAAe,IAAA,CAAK,OAAO,CAAA,GAAI,QAAQ,OAAA,CAAQ,iBAAA,EAAmB,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAC,CAAA,GAAI,OAAA;AACnH;AAOA,SAAS,UAAA,CAAW,MAAA,EAA4B,MAAA,EAAgB,QAAA,EAA+B;AAC7F,EAAA,MAAM,QAAwB,EAAC;AAC/B,EAAA,IAAI,MAAA,KAAW,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA;AAC9C,EAAA,IAAI,MAAA,KAAW,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA;AAC5C,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,QAAQ,KAAA,EAAA,EAAS,KAAA,CAAM,KAAK,UAAU,CAAA;AAClE,EAAA,IAAI,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,YAAY,CAAA;AACrC,EAAA,MAAM,OAAA,GACJ,MAAA,KAAW,IAAA,GAAO,IAAA,GAAO,MAAA,KAAW,YAAY,MAAA,KAAW,OAAA,IAAW,MAAA,KAAW,QAAA,GAAW,QAAA,GAAW,MAAA;AACzG,EAAA,OAAO,EAAE,OAAO,OAAA,EAAQ;AAC1B;AAUA,SAAS,UAAA,CAAW,KAAa,IAAA,EAAiC;AAChE,EAAA,IAAI,IAAA,GAAO,EAAA;AACX,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,IAAU;AAChC,IAAA,MAAM,CAAC,GAAA,EAAK,QAAQ,CAAA,GAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AACnC,IAAA,KAAA,IAAS,CAAA,GAAI,GAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK,GAAA,CAAI,KAAK,CAAC,CAAA;AAC/C,IAAA,IAAA,IAAQ,GAAA;AACR,IAAA,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAA;AAAA,EAC3B;AACA,EAAA,GAAA,CAAI,IAAA,CAAK,IAAI,MAAM,CAAA;AACnB,EAAA,OAAO,EAAE,MAAM,GAAA,EAAI;AACrB;AAGA,SAAS,WAAA,CAAY,KAAa,KAAA,EAAoC;AACpE,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAc,GAAA,CAAI,SAAS,CAAC,CAAA;AAC5C,IAAA,KAAA,IAAS,CAAA,GAAI,GAAG,CAAA,IAAK,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAC/C,IAAA,OAAO,EAAE,IAAA,EAAM,GAAA,EAAK,GAAA,EAAI;AAAA,EAC1B;AACA,EAAA,IAAI,OAAA,GAAU,UAAA,CAAW,GAAA,EAAK,KAAA,CAAM,CAAC,CAAE,CAAA;AACvC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,OAAO,UAAA,CAAW,OAAA,CAAQ,IAAA,EAAM,KAAA,CAAM,CAAC,CAAE,CAAA;AAC/C,IAAA,MAAM,QAAQ,OAAA,CAAQ,GAAA;AACtB,IAAA,OAAA,GAAU,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,CAAC,EAAA,KAAO,KAAA,CAAM,EAAE,CAAE,CAAA,EAAE;AAAA,EACrE;AACA,EAAA,OAAO,OAAA;AACT;AAEA,IAAM,cAAA,GAAiB,kFAAA;AACvB,IAAM,cAAA,GAAyC,EAAE,IAAA,EAAM,GAAA,EAAK,MAAM,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,EAAA,EAAI,KAAK,EAAA,EAAI,GAAA,EAAK,MAAA,EAAQ,GAAA,EAAK,UAAU,GAAA,EAAI;AAC9H,IAAM,eAAuC,EAAE,GAAA,EAAK,GAAA,EAAK,IAAA,EAAM,MAAM,GAAA,EAAK,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,GAAG,GAAA,EAAM,CAAA,EAAG,MAAM,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAEvH,IAAM,UAAA,GAA2B,CAAC,GAAA,EAAK,CAAA,KAAM;AAC3C,EAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,SAAY,CAAC,GAAA,CAAI,CAAC,CAAA,EAAI,CAAC,CAAA;AACtC,EAAA,MAAM,CAAA,GAAI,eAAe,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,EAAG,CAAA,GAAI,EAAE,CAAC,CAAA;AAClD,EAAA,IAAI,CAAC,CAAA,EAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AACtB,EAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAC,CAAA,GAAI,cAAA,CAAe,CAAA,CAAE,CAAC,CAAA,CAAE,WAAA,EAAa,CAAA,GAAK,MAAA,CAAO,aAAA,CAAc,OAAO,QAAA,CAAS,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,CAAE,CAAC,CAAA,EAAI,CAAA,CAAE,CAAC,CAAA,GAAI,EAAA,GAAK,EAAE,CAAC,CAAA;AAC3H,EAAA,OAAO,CAAC,EAAA,EAAI,CAAA,CAAE,CAAC,EAAE,MAAM,CAAA;AACzB,CAAA;AACA,IAAM,SAAA,GAA0B,CAAC,GAAA,EAAK,CAAA,KAAM;AAC1C,EAAA,MAAM,EAAA,GAAK,IAAI,CAAC,CAAA;AAChB,EAAA,IAAI,aAAa,QAAA,CAAS,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7C,EAAA,IAAI,aAAa,QAAA,CAAS,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7C,EAAA,OAAO,CAAC,IAAI,CAAC,CAAA;AACf,CAAA;AACA,IAAM,UAAA,GAA2B,CAAC,GAAA,EAAK,CAAA,KAAM;AAC3C,EAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,SAAa,CAAC,GAAA,CAAI,CAAC,CAAA,EAAI,CAAC,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,IAAK,EAAA;AAC3B,EAAA,IAAI,QAAQ,YAAA,EAAc,OAAO,CAAC,YAAA,CAAa,IAAI,GAAI,CAAC,CAAA;AACxD,EAAA,IAAI,IAAA,KAAS,OAAO,kBAAA,CAAmB,IAAA,CAAK,IAAI,KAAA,CAAM,CAAA,GAAI,GAAG,CAAA,GAAI,CAAC,CAAC,CAAA,EAAG,OAAO,CAAC,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,GAAI,CAAC,GAAG,CAAC,CAAA;AACpG,EAAA,OAAO,CAAC,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,GAAI,CAAC,GAAG,CAAC,CAAA;AAChC,CAAA;AACA,IAAM,YAAA,GAA6B,CAAC,GAAA,EAAK,CAAA,KAAO,IAAI,CAAC,CAAA,KAAM,QAAQ,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,GAAM,CAAC,GAAA,EAAK,CAAC,IAAI,CAAC,GAAA,CAAI,CAAC,CAAA,EAAI,CAAC,CAAA;AAG9G,IAAM,YAAA,GAAe,GAAA;AASrB,IAAM,mBAAA,GAAsB,CAAA;AAC5B,IAAM,kBAAA,GAAqB,KAAA;AAU3B,SAAS,WAAA,CACP,IAAA,EACA,KAAA,EACA,KAAA,EACA,IAAA,EACA,QAAqB,EAAE,IAAA,EAAM,MAAA,CAAO,iBAAA,EAAkB,EACyB;AAC/E,EAAA,KAAA,IAAS,KAAA,GAAQ,YAAA,IAAgB,KAAA,IAAS,CAAA,EAAG;AAC3C,IAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAC9C,IAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,CAAK,MAAA;AAC1B,IAAA,MAAM,OAAA,GAAU,YAAY,IAAA,CAAK,KAAA,CAAM,OAAO,EAAE,CAAA,EAAG,KAAK,KAAK,CAAA;AAC7D,IAAA,MAAM,UAAA,GAAa,cAAA,CAAe,OAAA,CAAQ,GAAA,EAAK,QAAQ,KAAK,CAAA;AAC5D,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,OAAA,CAAQ,IAAA,EAAM,KAAK,OAAO,CAAA;AACtD,IAAA,IAAI,OAAA,CAAQ,WAAW,UAAA,EAAY;AACjC,MAAA,IAAI,OAAA,CAAQ,GAAA,IAAO,UAAA,EAAY,OAAO,IAAA;AACtC,MAAA,OAAO,EAAE,GAAA,EAAK,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,QAAQ,GAAG,CAAA,EAAI,MAAA,EAAQ,UAAA,EAAY,SAAS,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,EAAG,OAAA,CAAQ,GAAG,CAAA,EAAE;AAAA,IACnH;AACA,IAAA,IAAI,OAAA,CAAQ,WAAW,QAAA,EAAU;AAE/B,MAAA,IAAI,CAAC,SAAS,OAAA,CAAQ,GAAA,CAAI,QAAQ,EAAE,CAAA,IAAM,EAAA,GAAK,KAAA,GAAQ,EAAA,EAAI;AAC3D,MAAA,IAAI,CAAC,QAAQ,KAAA,EAAO;AAIlB,QAAA,MAAM,MAAM,WAAA,CAAY,OAAA,CAAQ,IAAA,EAAM,IAAA,CAAK,YAAY,MAAM,CAAA;AAC7D,QAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,CAAC,KAAA,EAAO;AAE1B,UAAA,MAAM,IAAA,GAAO,EAAA,GAAK,KAAA,GAAQ,OAAA,CAAQ,EAAA;AAClC,UAAA,IAAI,KAAA,CAAM,OAAO,IAAA,EAAM;AACrB,YAAA,KAAA,CAAM,IAAA,IAAQ,IAAA;AACd,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,GAAA,GAAM,UAAA,IAAc,eAAA,CAAgB,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,EAAG;AACjG,UAAA,OAAO,EAAE,GAAA,EAAK,KAAA,GAAQ,OAAA,CAAQ,IAAI,GAAG,CAAA,EAAI,MAAA,EAAQ,UAAA,EAAY,SAAS,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,QACnG;AAAA,MACF;AAGA,MAAA,IAAI,KAAA,IAAS,sBAAA,CAAuB,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,EAAE,CAAE,CAAC,CAAA,EAAG;AACtF,QAAA,IAAI,OAAA,CAAQ,EAAA,IAAM,UAAA,EAAY,OAAO,IAAA;AACrC,QAAA,OAAO,EAAE,KAAK,IAAA,CAAK,MAAA,EAAQ,QAAQ,QAAA,EAAU,OAAA,EAAS,QAAQ,IAAA,EAAK;AAAA,MACrE;AACA,MAAA,IAAI,OAAA,CAAQ,GAAA,IAAO,UAAA,EAAY,OAAO,IAAA;AACtC,MAAA,OAAO,EAAE,GAAA,EAAK,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,QAAQ,GAAG,CAAA,EAAI,MAAA,EAAQ,QAAA,EAAU,SAAS,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,EAAG,OAAA,CAAQ,GAAG,CAAA,EAAE;AAAA,IACjH;AACA,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,OAAO,EAAE,KAAK,IAAA,CAAK,MAAA,EAAQ,QAAQ,QAAA,EAAU,OAAA,EAAS,QAAQ,IAAA,EAAK;AAAA,EACrE;AACF;AAQO,IAAM,0BAAA,GAA6B;AAWnC,SAAS,yBAAA,CAA0B,IAAA,EAAc,OAAA,GAAqC,EAAC,EAAY;AACxG,EAAA,IAAI,MAAA,GAAS,IAAA;AACb,EAAA,IAAI,MAAA,CAAO,SAAS,0BAAA,EAA4B;AAC9C,IAAA,IAAI,CAAC,OAAA,CAAQ,WAAA,EAAa,OAAO,KAAA;AACjC,IAAA,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,0BAA0B,CAAA;AAAA,EACrD;AACA,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAChC,EAAA,IAAI,KAAA,GAAQ,GAAG,OAAO,KAAA;AACtB,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,MAAA,EAAQ,MAAA,EAAQ,KAAK,CAAA;AACjD,EAAA,OAAO,OAAA,CAAQ,MAAA,KAAW,QAAA,IAAY,OAAA,CAAQ,KAAA;AAChD;AAGA,SAAS,eAAA,CAAgB,MAAc,OAAA,EAAkC;AACvE,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,cAAA,EAAgB,IAAI,CAAA;AAC9C,EAAA,IAAI,OAAA,KAAY,QAAQ,OAAO,IAAA;AAC/B,EAAA,IAAI;AACF,IAAA,IAAA,CAAK,MAAM,IAAI,CAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAGA,SAAS,WAAA,CAAY,MAAc,YAAA,EAAsC;AACvE,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAI,OAAO,IAAA,EAAM,CAAA,EAAA;AAAA,WAAA,IACR,EAAA,KAAO,OAAO,KAAA,GAAQ,EAAA;AAC/B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,EAAA,KAAO,GAAA,IAAQ,YAAA,IAAgB,EAAA,KAAO,KAAM,KAAA,GAAQ,EAAA;AAAA,SAAA,IAC/C,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK,KAAA,EAAA;AAAA,SAAA,IAC1B,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK;AACjC,MAAA,KAAA,EAAA;AACA,MAAA,IAAI,KAAA,KAAU,CAAA,EAAG,OAAO,CAAA,GAAI,CAAA;AAAA,IAC9B;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AASO,SAAS,qBAAqB,IAAA,EAA6B;AAChE,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,gBAAgB,CAAA;AACxC,EAAA,IAAI,GAAA,GAAM,GAAG,OAAO,IAAA;AACpB,EAAA,MAAM,OAAA,GAAU,YAAY,IAAI,CAAA;AAChC,EAAA,OAAO,OAAA,CAAQ,WAAW,QAAA,IAAY,OAAA,CAAQ,SAAS,OAAA,CAAQ,GAAA,GAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,GAAM,IAAA;AAC3F;AACA,IAAM,mBAAmB,IAAI,MAAA,CAAO,MAAA,CAAO,GAAA,CAAA,QAAA,EAAc,aAAa,CAAA,KAAA,CAAO,CAAA;AAG7E,IAAM,sBAAA,GAAyB,iCAAA;AAG/B,SAAS,cAAA,CAAe,KAAe,GAAA,EAAqB;AAC1D,EAAA,IAAI,EAAA,GAAK,CAAA;AACT,EAAA,IAAI,EAAA,GAAK,IAAI,MAAA,GAAS,CAAA;AACtB,EAAA,OAAO,KAAK,EAAA,EAAI;AACd,IAAA,MAAM,GAAA,GAAO,KAAK,EAAA,IAAO,CAAA;AACzB,IAAA,IAAI,GAAA,CAAI,GAAG,CAAA,GAAK,GAAA,OAAU,GAAA,GAAM,CAAA;AAAA,SAC3B,EAAA,GAAK,GAAA;AAAA,EACZ;AACA,EAAA,OAAO,EAAA;AACT;AAmBO,SAAS,WAAA,CACd,CAAA,EACA,OAAA,GAA0B,MAAA,EAC1B,OAAO,CAAA,EACa;AACpB,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,eAAe,OAAA,KAAY,MAAA;AACjC,EAAA,MAAM,WAAW,OAAA,KAAY,IAAA;AAC7B,EAAA,MAAM,iBAAiB,OAAA,KAAY,MAAA;AAEnC,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,QAAA,GAAW,IAAA;AACf,EAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AAIZ,EAAA,MAAM,MAAA,GAAS,CAAC,EAAA,MAAoC;AAAA,IAClD,MAAA,EAAQ,QAAA;AAAA,IACR,EAAA;AAAA,IACA,GAAA,EAAK,QAAA;AAAA,IACL,OAAO,CAAC,qBAAA,CAAsB,KAAK,CAAA,CAAE,EAAE,KAAK,EAAE;AAAA,GAChD,CAAA;AACA,EAAA,IAAI,CAAA,GAAI,IAAA;AACR,EAAA,OAAO,IAAI,CAAA,EAAG;AACZ,IAAA,MAAM,CAAA,GAAI,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA;AACxB,IAAA,IAAI,MAAM,EAAA,IAAM,CAAA,KAAM,KAAK,CAAA,KAAM,EAAA,IAAM,MAAM,EAAA,EAAI;AAC/C,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,KAAW,CAAA,IAAK,MAAA,KAAW,CAAA,IAAK,WAAW,CAAA,EAAG;AAChD,MAAA,IAAI,CAAA,KAAM,GAAA,IAAe,CAAA,KAAM,EAAA,EAAY;AACzC,QAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,IAAK,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA,KAAM,CAAA,EAAG,OAAO,MAAA,CAAO,CAAC,CAAA;AAC9E,QAAA,IAAI,WAAW,CAAA,IAAK,cAAA,IAAkB,iBAAA,CAAkB,CAAA,EAAG,CAAC,CAAA,EAAG;AAC7D,UAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,UAAA,CAAA,EAAA;AACA,UAAA,QAAA,GAAW,CAAA;AACX,UAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,KAAK,CAAA,EAAE;AAC9D,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACF;AACA,QAAA,OAAO,OAAO,CAAC,CAAA;AAAA,MACjB;AACA,MAAA,IAAI,WAAW,CAAA,EAAG;AAChB,QAAA,IAAI,CAAA,KAAM,EAAA,EAAY,OAAO,MAAA,CAAO,CAAC,CAAA;AACrC,QAAA,CAAA,EAAA;AACA,QAAA,QAAA,GAAW,CAAA;AACX,QAAA,MAAA,GAAS,QAAQ,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA,KAAM,MAAM,CAAA,GAAI,CAAA;AACnD,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,WAAW,CAAA,EAAG;AAChB,MAAA,IAAI,CAAA,KAAM,EAAA,EAAY,OAAO,MAAA,CAAO,CAAC,CAAA;AACrC,MAAA,CAAA,EAAA;AACA,MAAA,MAAA,GAAS,CAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,MAAM,cAAc,MAAA,KAAW,CAAA;AAC/B,IAAA,IAAI,CAAA,KAAM,EAAA,IAAe,YAAA,IAAgB,CAAA,KAAM,EAAA,EAAa;AAC1D,MAAA,IAAI,IAAI,CAAA,GAAI,CAAA;AACZ,MAAA,WAAS;AACP,QAAA,IAAI,CAAA,IAAK,CAAA,EAAG,OAAO,EAAE,QAAQ,QAAA,EAAS;AACtC,QAAA,MAAM,CAAA,GAAI,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA;AACxB,QAAA,IAAI,MAAM,EAAA,EAAY;AACpB,UAAA,CAAA,IAAK,CAAA;AACL,UAAA;AAAA,QACF;AACA,QAAA,IAAI,MAAM,EAAA,IAAM,CAAA,KAAM,EAAA,EAAI,OAAO,OAAO,CAAC,CAAA;AACzC,QAAA,IAAI,MAAM,CAAA,EAAG;AACb,QAAA,CAAA,EAAA;AAAA,MACF;AACA,MAAA,CAAA,GAAI,CAAA,GAAI,CAAA;AACR,MAAA,IAAI,aAAa,MAAA,GAAS,CAAA;AAAA,WACrB;AACH,QAAA,MAAA,GAAS,CAAA;AACT,QAAA,QAAA,GAAW,CAAA;AAAA,MACb;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,IAAI,CAAC,YAAY,CAAC,YAAA,CAAa,CAAC,CAAA,EAAG,OAAO,OAAO,CAAC,CAAA;AAClD,MAAA,IAAI,IAAI,CAAA,GAAI,CAAA;AACZ,MAAA,OAAO,IAAI,CAAA,IAAK,WAAA,CAAY,EAAE,UAAA,CAAW,CAAC,CAAC,CAAA,EAAG,CAAA,EAAA;AAC9C,MAAA,IAAI,CAAA,IAAK,CAAA,EAAG,OAAO,EAAE,QAAQ,QAAA,EAAS;AACtC,MAAA,CAAA,GAAI,CAAA;AACJ,MAAA,MAAA,GAAS,CAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAA,KAAM,GAAA,IAAe,CAAA,KAAM,EAAA,EAAY;AACzC,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,KAAM,GAAA,GAAM,GAAA,GAAM,EAAE,CAAA;AACjC,MAAA,CAAA,EAAA;AACA,MAAA,QAAA,GAAW,CAAA;AACX,MAAA,MAAA,GAAS,CAAA,KAAM,MAAM,CAAA,GAAI,CAAA;AACzB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAA,KAAM,EAAA,IAAe,CAAA,IAAK,EAAA,IAAM,KAAK,EAAA,EAAK;AAC5C,MAAA,IAAI,IAAI,CAAA,GAAI,CAAA;AACZ,MAAA,OAAO,IAAI,CAAA,IAAK,YAAA,CAAa,KAAK,CAAA,CAAE,CAAC,CAAE,CAAA,EAAG,CAAA,EAAA;AAC1C,MAAA,IAAI,CAAA,IAAK,CAAA,EAAG,OAAO,EAAE,QAAQ,QAAA,EAAS;AACtC,MAAA,CAAA,GAAI,CAAA;AACJ,MAAA,QAAA,GAAW,CAAA;AACX,MAAA,MAAA,GAAS,CAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,IAAI,YAAA,CAAa,CAAC,CAAA,EAAG;AACnB,MAAA,IAAI,IAAI,CAAA,GAAI,CAAA;AACZ,MAAA,OAAO,IAAI,CAAA,IAAK,WAAA,CAAY,EAAE,UAAA,CAAW,CAAC,CAAC,CAAA,EAAG,CAAA,EAAA;AAC9C,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACzB,MAAA,IAAI,KAAK,CAAA,EAAG,OAAO,YAAY,OAAO,CAAA,CAAE,KAAK,CAAC,CAAA,KAAM,EAAE,UAAA,CAAW,IAAI,CAAC,CAAA,GAAI,EAAE,QAAQ,QAAA,EAAS,GAAI,OAAO,CAAC,CAAA;AACzG,MAAA,IAAI,CAAC,YAAY,OAAO,CAAA,CAAE,SAAS,IAAI,CAAA,EAAG,OAAO,MAAA,CAAO,CAAC,CAAA;AACzD,MAAA,CAAA,GAAI,CAAA;AACJ,MAAA,QAAA,GAAW,CAAA;AACX,MAAA,MAAA,GAAS,CAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,OAAO,OAAO,CAAC,CAAA;AAAA,EACjB;AACA,EAAA,OAAO,EAAE,QAAQ,QAAA,EAAS;AAC5B;AAEA,IAAM,WAAA,GAAgD;AAAA,EACpD,IAAA,EAAM,CAAC,MAAA,EAAQ,OAAA,EAAS,MAAM,CAAA;AAAA,EAC9B,QAAQ,CAAC,MAAA,EAAQ,SAAS,MAAA,EAAQ,MAAA,EAAQ,SAAS,MAAM,CAAA;AAAA,EACzD,IAAI,CAAC,MAAA,EAAQ,SAAS,MAAA,EAAQ,WAAA,EAAa,OAAO,UAAU;AAC9D,CAAA;AAEA,SAAS,aAAa,CAAA,EAAoB;AACxC,EAAA,OAAQ,CAAA,IAAK,EAAA,IAAM,CAAA,IAAK,EAAA,IAAQ,CAAA,IAAK,MAAM,CAAA,IAAK,GAAA,IAAQ,CAAA,KAAM,EAAA,IAAM,CAAA,KAAM,EAAA;AAC5E;AACA,SAAS,YAAY,CAAA,EAAoB;AACvC,EAAA,OAAO,YAAA,CAAa,CAAC,CAAA,IAAM,CAAA,IAAK,MAAM,CAAA,IAAK,EAAA;AAC7C;AAEA,SAAS,iBAAA,CAAkB,GAAW,EAAA,EAAqB;AACzD,EAAA,KAAA,IAAS,CAAA,GAAI,EAAA,GAAK,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAChC,IAAA,MAAM,CAAA,GAAI,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA;AACxB,IAAA,IAAI,MAAM,EAAA,IAAM,CAAA,KAAM,KAAK,CAAA,KAAM,EAAA,IAAM,MAAM,EAAA,EAAI;AACjD,IAAA,OAAO,CAAA,KAAM,OAAO,CAAA,KAAM,EAAA;AAAA,EAC5B;AACA,EAAA,OAAO,KAAA;AACT;AAEA,IAAM,qCAAqB,IAAI,GAAA,CAAwB,CAAC,QAAA,EAAU,SAAA,EAAW,UAAU,CAAC,CAAA;AAGjF,SAAS,WAAW,MAAA,EAAuE;AAChG,EAAA,MAAM,OAAO,MAAA,CAAO,OAAA;AACpB,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,IAAA,EAAM,OAAO,YAAY,IAAI,CAAA;AACnD,EAAA,IAAI,MAAA,CAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,MAAM,IAAI,CAAA;AACf,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,OAAO,iBAAiB,IAAI,CAAA;AAC9B;AAOO,SAAS,WAAW,MAAA,EAAuE;AAChG,EAAA,IAAI,IAAA,GAAO,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC5C,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,uEAAA,EAAyE,EAAE,CAAA;AAC/F,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AAC/B,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAI,OAAO,IAAA,EAAM,CAAA,EAAA;AAAA,WAAA,IACR,EAAA,KAAO,OAAO,KAAA,GAAQ,EAAA;AAC/B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,EAAA,KAAO,GAAA,IAAQ,EAAA,KAAO,GAAA,IAAO,CAAC,mBAAmB,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA,EAAI,KAAA,GAAQ,EAAA;AAAA,SAAA,IACzE,EAAA,KAAO,GAAA,EAAK,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAAA,SAAA,IAC5B,EAAA,KAAO,GAAA,EAAK,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAAA,SAAA,IAC5B,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,UAAa,GAAA,EAAI;AAAA,EACjD;AACA,EAAA,IAAI,OAAO,OAAO,IAAA;AAClB,EAAA,OAAO,UAAA,CAAW,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,OAAA,EAAS,IAAA,GAAO,OAAA,CAAQ,OAAA,EAAQ,CAAE,IAAA,CAAK,EAAE,GAAG,CAAA;AACzF;AAWO,SAAS,iBAAiB,KAAA,EAAyB;AACxD,EAAA,OAAO,WAAA,CAAY,KAAA,EAAO,CAAA,kBAAG,IAAI,KAAK,CAAA;AACxC;AAGA,IAAM,kBAAA,GAAqB,EAAA;AAE3B,SAAS,WAAA,CAAY,KAAA,EAAgB,KAAA,EAAe,IAAA,EAA4B;AAC9E,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,gBAAgB,KAAK,CAAA;AAC3D,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AACxD,EAAA,IAAI,QAAQ,kBAAA,IAAsB,IAAA,CAAK,GAAA,CAAI,KAAK,GAAG,OAAO,KAAA;AAC1D,EAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AACd,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,KAAK,CAAC,IAAA,KAAS,YAAY,IAAA,EAAM,KAAA,GAAQ,CAAA,EAAG,IAAI,CAAC,CAAA;AAAA,EAChE;AACA,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,IAAI,OAAO,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,MAAA,CAAO,IAAA,IAAQ,OAAO,IAAA;AACtE,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,EAAG;AACxC,IAAA,IAAI,YAAY,IAAA,EAAM,KAAA,GAAQ,CAAA,EAAG,IAAI,GAAG,OAAO,IAAA;AAAA,EACjD;AACA,EAAA,OAAO,KAAA;AACT;AAQO,SAAS,gBAAgB,IAAA,EAAuB;AACrD,EAAA,IAAI,eAAe,IAAI,CAAA,IAAK,mBAAA,CAAoB,IAAI,GAAG,OAAO,IAAA;AAI9D,EAAA,IAAI,CAAC,cAAA,CAAe,IAAI,CAAA,IAAK,CAAC,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,CAAA,EAAG,OAAO,KAAA;AACrE,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EAC1B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,IAAA,IAAQ,iBAAiB,MAAM,CAAA;AACjF;AAOO,SAAS,eAAe,IAAA,EAAuB;AACpD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,EAAU,CAAE,CAAC,CAAA;AAChC,EAAA,OAAA,CAAQ,KAAA,KAAU,GAAA,IAAO,KAAA,KAAU,GAAA,KAAQ,WAAW,IAAI,CAAA;AAC5D;AAGO,SAAS,aAAa,KAAA,EAA+B;AAC1D,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,IAAA;AAChF,EAAA,MAAM,OAAQ,KAAA,CAAkC,MAAA;AAChD,EAAA,OAAO,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,IAAA,KAAS,IAAA,GAAO,IAAA;AAC1D;AAGA,IAAM,gBAAA,uBAAuB,GAAA,CAAI,CAAC,IAAI,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAC,CAAA;AAGxD,SAAS,oBAAoB,IAAA,EAA0C;AAC5E,EAAA,OAAO,iBAAiB,GAAA,CAAA,CAAK,IAAA,IAAQ,IAAI,IAAA,EAAK,CAAE,aAAa,CAAA;AAC/D;AAWO,SAAS,mBAAmB,IAAA,EAAuC;AACxE,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,KAAA,IAAS,cAAA,CAAe,IAAI,CAAA,EAAG;AACxC,IAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,MAAA,MAAA,CAAO,KAAK,CAAC,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,GAAG,CAAC,CAAA;AACpC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO,MAAM,GAAG,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA;AAChC,IAAA,MAAM,SAAA,GAAA,CAAa,OAAA,KAAY,EAAA,GAAK,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,EAAG,OAAA,CAAQ,iBAAA,EAAmB,EAAE,CAAA;AAC9F,IAAA,MAAM,MAAA,GAAS,aAAA,CAAc,SAAA,CAAU,SAAA,EAAW,CAAA;AAClD,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,mBAAA,CAAoB,MAAA,CAAO,IAAI,CAAA,EAAG;AAChD,MAAA,MAAA,CAAO,KAAK,CAAC,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,IACtC;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAUO,SAAS,uBAAuB,KAAA,EAE3B;AACV,EAAA,OAAO,KAAA,CAAM,UAAU,mBAAA,KAAwB,IAAA;AACjD;AASO,SAAS,eAAe,MAAA,EAAwB;AACrD,EAAA,MAAM,OAAO,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA,KAAM,QAAS,CAAA,GAAI,CAAA;AACnD,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA;AAC5C,EAAA,IAAI,UAAA,GAAa,GAAG,OAAO,CAAA;AAC3B,EAAA,MAAM,MAAA,GAAS,OAAO,KAAA,CAAM,IAAA,EAAM,UAAU,CAAA,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC/D,EAAA,IAAI,MAAA,KAAW,KAAA,IAAS,MAAA,KAAW,KAAA,EAAO,OAAO,CAAA;AACjD,EAAA,KAAA,IAAS,GAAA,GAAM,UAAA,GAAa,CAAA,EAAG,GAAA,GAAM,OAAO,MAAA,IAAU;AACpD,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AACrC,IAAA,MAAM,GAAA,GAAM,IAAA,GAAO,CAAA,GAAI,MAAA,CAAO,MAAA,GAAS,IAAA;AACvC,IAAA,MAAM,IAAA,GAAO,OAAO,KAAA,CAAM,GAAA,EAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AACrD,IAAA,IAAI,SAAS,MAAA,IAAW,MAAA,KAAW,KAAA,IAAS,IAAA,KAAS,OAAQ,OAAO,GAAA;AACpE,IAAA,IAAI,OAAO,CAAA,EAAG;AACd,IAAA,GAAA,GAAM,IAAA,GAAO,CAAA;AAAA,EACf;AACA,EAAA,OAAO,CAAA;AACT;AASO,SAAS,oBAAoB,MAAA,EAAyB;AAG3D,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,cAAA,CAAe,MAAM,CAAC,CAAA;AAChD,EAAA,IAAI,CAAC,UAAA,CAAW,IAAA,EAAM,mBAAmB,GAAG,OAAO,KAAA;AACnD,EAAA,IAAI,cAAA,CAAe,IAAI,CAAA,EAAG,OAAO,IAAA;AACjC,EAAA,MAAM,MAAA,GAAS,mBAAmB,IAAI,CAAA;AACtC,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAChC,EAAA,IAAI,OAAA,GAAU,EAAA;AACd,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,GAAG,CAAA,IAAK,MAAA,EAAQ;AACjC,IAAA,IAAI,QAAQ,MAAA,EAAQ;AACpB,IAAA,OAAA,IAAW,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,KAAK,CAAA,GAAI,GAAA;AACvC,IAAA,MAAA,GAAS,GAAA;AAAA,EACX;AACA,EAAA,OAAA,IAAW,IAAA,CAAK,MAAM,MAAM,CAAA;AAC5B,EAAA,OAAO,UAAA,CAAW,SAAS,mBAAmB,CAAA;AAChD;;;ACz3CA,SAAS,qBAAA,CAAsB,QAAgB,KAAA,EAA8B;AAC3E,EAAA,IAAI,MAAA,CAAO,KAAK,CAAA,KAAM,GAAA,IAAO,OAAO,KAAK,CAAA,KAAM,KAAK,OAAO,IAAA;AAE3D,EAAA,MAAM,KAAA,GAAkB,CAAC,MAAA,CAAO,KAAK,CAAC,CAAA;AACtC,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,OAAA,GAAU,KAAA;AAEd,EAAA,KAAA,IAAS,QAAQ,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,MAAA,CAAO,QAAQ,KAAA,EAAA,EAAS;AAC1D,IAAA,MAAM,IAAA,GAAO,OAAO,KAAK,CAAA;AAEzB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,GAAU,KAAA;AAAA,MACZ,CAAA,MAAA,IAAW,SAAS,IAAA,EAAM;AACxB,QAAA,OAAA,GAAU,IAAA;AAAA,MACZ,CAAA,MAAA,IAAW,SAAS,GAAA,EAAK;AACvB,QAAA,QAAA,GAAW,KAAA;AAAA,MACb;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,QAAA,GAAW,IAAA;AACX,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,MAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAElC,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,EAAI;AAC1B,IAAA,IACG,SAAS,GAAA,IAAO,OAAA,KAAY,OAC5B,IAAA,KAAS,GAAA,IAAO,YAAY,GAAA,EAC7B;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA,GAAQ,CAAA;AAAA,EACzC;AAEA,EAAA,OAAO,IAAA;AACT;AAUO,SAAS,aAAa,IAAA,EAA0B;AACrD,EAAA,MAAM,OAAO,IAAI,UAAA,CAAW,KAAK,MAAM,CAAA,CAAE,KAAK,EAAE,CAAA;AAChD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,IAAS,QAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,KAAA,IAAS,GAAG,KAAA,EAAA,EAAS;AACrD,IAAA,MAAM,IAAA,GAAO,KAAK,KAAK,CAAA;AACvB,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAClC,IAAA,KAAA,CAAM,MAAA,GAAS,CAAA;AACf,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,KAAS,GAAA,GAAM,GAAA,GAAM,GAAG,CAAA;AACnC,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,KAAA,IAAS,IAAI,KAAA,GAAQ,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AAC5C,MAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAI,OAAO,IAAA,EAAM,CAAA,EAAA;AAAA,aAAA,IACR,EAAA,KAAO,KAAK,QAAA,GAAW,KAAA;AAChC,QAAA;AAAA,MACF;AACA,MAAA,IAAI,EAAA,KAAO,KAAK,QAAA,GAAW,IAAA;AAAA,WAAA,IAClB,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK;AACjC,QAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,QAAA,IAAI,MAAM,CAAA,EAAG;AACb,QAAA,CAAA,GAAI,GAAA,GAAM,CAAA;AAAA,MACZ,CAAA,MAAA,IAAW,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK;AACnC,QAAA,IAAI,KAAA,CAAM,GAAA,EAAI,KAAM,EAAA,EAAI;AACxB,QAAA,IAAA,CAAK,KAAK,IAAI,CAAA,GAAI,CAAA;AAClB,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAGA,SAAS,aAAa,MAAA,EAAkD;AACtE,EAAA,IAAI,KAAA;AACJ,EAAA,OAAO,CAAC,KAAA,KAAU;AAChB,IAAA,IAAI,MAAA,CAAO,KAAK,CAAA,KAAM,GAAA,IAAO,OAAO,KAAK,CAAA,KAAM,KAAK,OAAO,IAAA;AAC3D,IAAA,KAAA,KAAU,aAAa,MAAM,CAAA;AAC7B,IAAA,MAAM,GAAA,GAAM,MAAM,KAAK,CAAA;AACvB,IAAA,OAAO,GAAA,GAAM,IAAI,IAAA,GAAO,GAAA;AAAA,EAC1B,CAAA;AACF;AAEA,SAAS,cAAA,CAAe,QAAgB,MAAA,EAAwB;AAC9D,EAAA,OAAO,KAAK,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,IAAK,EAAE,CAAA,EAAG,MAAA,EAAA;AACxC,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,aAAA,CAAc,QAAgB,KAAA,EAA8B;AACnE,EAAA,IAAI,MAAA,CAAO,KAAK,CAAA,KAAM,GAAA,EAAK,OAAO,IAAA;AAElC,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,KAAA,IAAS,SAAS,KAAA,GAAQ,CAAA,EAAG,MAAA,GAAS,MAAA,CAAO,QAAQ,MAAA,EAAA,EAAU;AAC7D,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAC1B,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,GAAU,KAAA;AAAA,IACZ,CAAA,MAAA,IAAW,SAAS,IAAA,EAAM;AACxB,MAAA,OAAA,GAAU,IAAA;AAAA,IACZ,CAAA,MAAA,IAAW,SAAS,GAAA,EAAK;AACvB,MAAA,OAAO,MAAA,GAAS,CAAA;AAAA,IAClB;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,YAAA,CAAa,QAAgB,KAAA,EAA8B;AAClE,EAAA,MAAM,IAAA,GAAO,OAAO,KAAK,CAAA;AACzB,EAAA,IAAI,IAAA,KAAS,GAAA,EAAK,OAAO,aAAA,CAAc,QAAQ,KAAK,CAAA;AACpD,EAAA,IAAI,SAAS,GAAA,IAAO,IAAA,KAAS,KAAK,OAAO,qBAAA,CAAsB,QAAQ,KAAK,CAAA;AAE5E,EAAA,MAAM,MAAM,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,CAAE,OAAO,UAAU,CAAA;AACjD,EAAA,MAAM,QAAA,GAAW,GAAA,KAAQ,EAAA,GAAK,MAAA,CAAO,SAAS,KAAA,GAAQ,GAAA;AACtD,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,QAAQ,CAAA;AAC1C,EAAA,OAAO,mEAAA,CAAoE,IAAA;AAAA,IACzE;AAAA,MAEE,QAAA,GACA,IAAA;AACN;AAOA,SAAS,qBAAA,CACP,MAAA,EACA,KAAA,EACA,QAAA,GAAW,OAAO,MAAA,EACH;AACf,EAAA,IAAI,MAAA,GAAS,cAAA,CAAe,MAAA,EAAQ,KAAA,GAAQ,CAAC,CAAA;AAC7C,EAAA,IAAI,SAAA,GAAY,KAAA;AAChB,EAAA,MAAM,QAAA,GAAW,MAAO,SAAA,GAAY,QAAA,GAAW,IAAA;AAE/C,EAAA,OAAO,SAAS,QAAA,EAAU;AACxB,IAAA,MAAM,QAAA,GAAW,MAAA;AACjB,IAAA,MAAM,MAAA,GAAS,aAAA,CAAc,MAAA,EAAQ,QAAQ,CAAA;AAC7C,IAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,GAAS,QAAA,SAAiB,QAAA,EAAS;AAE1D,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI;AACF,MAAA,GAAA,GAAM,KAAK,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,MAAM,CAAC,CAAA;AAAA,IACjD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,QAAA,EAAS;AAAA,IAClB;AAEA,IAAA,MAAA,GAAS,cAAA,CAAe,QAAQ,MAAM,CAAA;AACtC,IAAA,IAAI,UAAU,QAAA,IAAY,MAAA,CAAO,MAAM,CAAA,KAAM,GAAA,SAAY,QAAA,EAAS;AAClE,IAAA,MAAA,GAAS,cAAA,CAAe,MAAA,EAAQ,MAAA,GAAS,CAAC,CAAA;AAE1C,IAAA,MAAM,UAAA,GAAa,MAAA;AACnB,IAAA,MAAM,QAAA,GAAW,YAAA,CAAa,MAAA,EAAQ,UAAU,CAAA;AAChD,IAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,QAAA,GAAW,QAAA,SAAiB,QAAA,EAAS;AAE9D,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,IAAI;AACF,QAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,KAAA,CAAM,UAAA,EAAY,QAAQ,CAAC,CAAA;AAC3D,QAAA,SAAA,KAAc,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,GAAO,MAAA,GAAS,CAAA;AAAA,MACnE,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,QAAA,EAAS;AAAA,MAClB;AAAA,IACF;AAEA,IAAA,MAAA,GAAS,cAAA,CAAe,QAAQ,QAAQ,CAAA;AACxC,IAAA,IAAI,OAAO,MAAM,CAAA,KAAM,KAAK,OAAO,SAAA,GAAY,SAAS,CAAA,GAAI,IAAA;AAC5D,IAAA,IAAI,UAAU,QAAA,IAAY,MAAA,CAAO,MAAM,CAAA,KAAM,GAAA,SAAY,QAAA,EAAS;AAClE,IAAA,MAAA,GAAS,cAAA,CAAe,MAAA,EAAQ,MAAA,GAAS,CAAC,CAAA;AAAA,EAC5C;AAEA,EAAA,OAAO,QAAA,EAAS;AAClB;AAGA,SAAS,gBAAA,CACP,MAAA,EACA,KAAA,EACA,GAAA,EACyB;AACzB,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,KAAA,IAAS,MAAA,GAAS,KAAA,EAAO,MAAA,GAAS,GAAA,EAAK,MAAA,EAAA,EAAU;AAC/C,IAAA,IAAI,MAAA,CAAO,MAAM,CAAA,KAAM,GAAA,EAAK;AAC5B,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,MAAA,EAAQ,MAAM,CAAA;AAC9C,IAAA,IAAI,SAAA,KAAc,IAAA,IAAQ,SAAA,GAAY,GAAA,EAAK;AAC3C,IAAA,MAAA,CAAO,IAAA,CAAK,CAAC,MAAA,EAAQ,SAAS,CAAC,CAAA;AAC/B,IAAA,MAAA,GAAS,SAAA,GAAY,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,aAAa,SAAA,EAAkC;AACtD,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAC5C,IAAA,IACE,OAAO,WAAW,QAAA,IAClB,MAAA,KAAW,QACX,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EACpB;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,OAAQ,MAAA,CAAmC,MAAA;AACjD,IAAA,OAAO,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,IAAA,KAAS,IAAA,GAAO,IAAA;AAAA,EAC1D,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAQA,SAAS,aAAA,CACP,MAAA,EACA,cAAA,GAAiB,KAAA,EACQ;AACzB,EAAA,MAAM,SAAkC,EAAC;AAGzC,EAAA,MAAM,IAAA,GAAO,cAAA,GACT,cAAA,CAAe,MAAM,EAAE,MAAA,CAAO,CAAC,KAAA,KAAU,CAAC,iBAAiB,MAAA,EAAQ,KAAK,CAAC,CAAA,GACzE,eAAe,MAAM,CAAA;AACzB,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,OAAO,MAAA,GAAS,OAAO,MAAA,EAAQ;AAC7B,IAAA,OAAO,OAAO,IAAA,CAAK,MAAA,IAAU,KAAK,IAAI,CAAA,CAAG,QAAQ,MAAA,EAAQ,IAAA,EAAA;AACzD,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAI,CAAA;AACvB,IAAA,IAAI,KAAA,IAAS,KAAA,CAAM,KAAA,KAAU,MAAA,EAAQ;AACnC,MAAA,MAAA,CAAO,KAAK,CAAC,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,GAAG,CAAC,CAAA;AACpC,MAAA,MAAA,GAAS,KAAA,CAAM,GAAA;AACf,MAAA,IAAA,EAAA;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,UAAA,CAAW,MAAA,EAAQ,MAAM,CAAA,EAAG;AACrC,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,OAAA,CAAQ,KAAA,EAAO,SAAS,CAAC,CAAA;AAC5C,MAAA,MAAM,QAAA,GAAW,GAAA,KAAQ,EAAA,GAAK,MAAA,CAAO,SAAS,GAAA,GAAM,CAAA;AACpD,MAAA,MAAA,CAAO,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAC9B,MAAA,MAAA,GAAS,QAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,UAAA,CAAW,WAAA,EAAa,MAAM,CAAA,EAAG;AAC1C,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,OAAA,CAAQ,KAAA,EAAO,SAAS,CAAC,CAAA;AAC5C,MAAA,MAAM,QAAA,GAAW,GAAA,KAAQ,EAAA,GAAK,MAAA,CAAO,SAAS,GAAA,GAAM,CAAA;AACpD,MAAA,MAAA,CAAO,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAC9B,MAAA,MAAA,GAAS,QAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,MAAM,CAAA,KAAM,GAAA,EAAK;AAC1B,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,MAAA,EAAQ,MAAM,CAAA;AACrC,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,MAAM,GAAA,GAAM,MAAA,GAAS,GAAA,CAAI,GAAA,CAAI,MAAA;AAC7B,QAAA,MAAA,CAAO,IAAA,CAAK,CAAC,MAAA,EAAQ,GAAG,CAAC,CAAA;AACzB,QAAA,MAAA,GAAS,GAAA;AACT,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,uBAAA,CAAwB,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,MAAA,GAAS,EAAE,CAAC,CAAA,IAAK,CAAC,SAAA,CAAU,MAAA,EAAQ,MAAM,CAAA,EAAG;AACjG,QAAA,MAAA,CAAO,IAAA,CAAK,CAAC,MAAA,EAAQ,MAAA,CAAO,MAAM,CAAC,CAAA;AACnC,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,MAAA,EAAA;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAGA,SAAS,SAAA,CAAU,QAAgB,KAAA,EAAwB;AACzD,EAAA,IAAI,KAAA,GAAuB,IAAA;AAC3B,EAAA,KAAA,IAAS,IAAI,KAAA,GAAQ,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAC9C,IAAA,MAAM,EAAA,GAAK,OAAO,CAAC,CAAA;AACnB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAI,EAAA,KAAO,OAAO,KAAA,GAAQ,IAAA;AAAA,IAC5B,CAAA,MAAA,IAAW,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,KAAK,KAAA,GAAQ,EAAA;AAAA,SAAA,IACpC,EAAA,KAAO,KAAK,OAAO,IAAA;AAAA,EAC9B;AACA,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,gBAAA,CACP,QACA,KAAA,EACS;AACT,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS,OAAO,KAAA;AACnC,EAAA,MAAM,MAAM,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO,MAAM,GAAG,CAAA;AAC/C,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA;AAChC,EAAA,MAAM,MAAA,GAAS,aAAA,CAAA,CAAe,OAAA,KAAY,EAAA,GAAK,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,EAAG,SAAA,EAAW,CAAA;AACvF,EAAA,OAAO,MAAA,KAAW,IAAA,IAAQ,mBAAA,CAAoB,MAAA,CAAO,IAAI,CAAA;AAC3D;AAOA,SAAS,oBAAA,CACP,QACA,OAAA,EACyB;AACzB,EAAA,MAAM,QAAiC,EAAC;AACxC,EAAA,KAAA,MAAW,KAAA,IAAS,cAAA,CAAe,MAAM,CAAA,EAAG;AAC1C,IAAA,IAAI,CAAC,gBAAA,CAAiB,MAAA,EAAQ,KAAK,CAAA,EAAG;AACtC,IAAA,MAAMC,OAAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,IAAS,KAAA,CAAM,KAAA,IAAS,CAAA,CAAE,GAAA,IAAO,KAAA,CAAM,GAAG,CAAA;AACjF,IAAA,IAAIA,OAAAA,CAAO,WAAW,CAAA,EAAG;AACzB,IAAA,MAAM,MAAA,GAASA,QAAO,CAAC,CAAA;AACvB,IAAA,MAAM,OAAO,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO,OAAO,KAAK,CAAA;AACnD,IAAA,MAAM,OAAO,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,GAAA,EAAK,MAAM,GAAG,CAAA;AAE/C,IAAA,IAAI,CAAC,gBAAgB,IAAA,CAAK,IAAI,KAAK,CAAC,0BAAA,CAA2B,IAAA,CAAK,IAAI,CAAA,EAAG;AAC3E,IAAA,KAAA,CAAM,KAAK,CAAC,KAAA,CAAM,KAAA,EAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AACtC,IAAA,IAAI,MAAA,CAAO,GAAA,GAAM,KAAA,CAAM,GAAA,EAAK,KAAA,CAAM,IAAA,CAAK,CAAC,MAAA,CAAO,GAAA,EAAK,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,KAAA;AACT;AAwBO,SAAS,2BAAA,CACd,MAAA,EACA,OAAA,GAAqC,EAAC,EACZ;AAC1B,EAAA,MAAM,UAAoC,EAAC;AAC3C,EAAA,MAAM,KAAA,GAAQ,aAAa,MAAM,CAAA;AACjC,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,GAAI,QAAQ,sBAAA,GACR,aAAA,CAAc,QAAQ,OAAA,CAAQ,cAAA,KAAmB,IAAI,CAAA,GACrD,EAAC;AAAA,IACL,GAAI,OAAA,CAAQ,mBAAA,GAAsB,kBAAA,CAAmB,MAAM,IAAI;AAAC,GAClE,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA;AAC5B,EAAA,MAAM,cAAuC,EAAC;AAC9C,EAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,EAAA,IAAI,eAAA,GAAkB,CAAA;AAEtB,EAAA,KAAA,IAAS,QAAQ,cAAA,CAAe,MAAM,GAAG,KAAA,GAAQ,MAAA,CAAO,QAAQ,KAAA,EAAA,EAAS;AACvE,IAAA,OACE,aAAA,GAAgB,SAAS,MAAA,IACzB,QAAA,CAAS,aAAa,CAAA,CAAG,CAAC,KAAK,KAAA,EAC/B;AACA,MAAA,aAAA,EAAA;AAAA,IACF;AACA,IAAA,OACE,eAAA,GAAkB,YAAY,MAAA,IAC9B,WAAA,CAAY,eAAe,CAAA,CAAG,CAAC,KAAK,KAAA,EACpC;AACA,MAAA,eAAA,EAAA;AAAA,IACF;AACA,IAAA,IACE,aAAA,GAAgB,QAAA,CAAS,MAAA,IACzB,KAAA,IAAS,QAAA,CAAS,aAAa,CAAA,CAAG,CAAC,CAAA,IACnC,KAAA,GAAQ,QAAA,CAAS,aAAa,EAAG,CAAC,CAAA;AAElC,MAAA;AACF,IAAA,IACE,eAAA,GAAkB,WAAA,CAAY,MAAA,IAC9B,KAAA,IAAS,WAAA,CAAY,eAAe,CAAA,CAAG,CAAC,CAAA,IACxC,KAAA,GAAQ,WAAA,CAAY,eAAe,EAAG,CAAC,CAAA;AAEvC,MAAA;AACF,IAAA,IAAI,MAAA,CAAO,KAAK,CAAA,KAAM,GAAA,EAAK;AAC3B,IAAA,MAAM,GAAA,GAAM,MAAM,KAAK,CAAA;AACvB,IAAA,IAAI,QAAQ,IAAA,EAAM;AAIhB,MAAA,MAAM,OAAA,GAAU,WAAA,CAAY,MAAA,EAAQ,MAAA,EAAQ,KAAK,CAAA;AACjD,MAAA,MAAM,QAAQ,OAAA,CAAQ,MAAA,KAAW,QAAA,GAAW,OAAA,CAAQ,MAAM,MAAA,CAAO,MAAA;AACjE,MAAA,MAAM,WAAW,KAAA,GAAQ,KAAA,GAAQ,sBAAsB,MAAA,EAAQ,KAAA,EAAO,KAAK,CAAA,GAAI,IAAA;AAC/E,MAAA,IAAI,QAAA,KAAa,IAAA,EAAM,KAAA,GAAQ,QAAA,GAAW,CAAA;AAC1C,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AACvC,IAAA,MAAM,IAAA,GAAO,aAAa,OAAO,CAAA;AACjC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,QAAA,GAAW,qBAAA,CAAsB,MAAA,EAAQ,KAAA,EAAO,GAAG,CAAA;AACzD,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA,KAAA,GAAQ,QAAA,GAAW,CAAA;AACnB,QAAA;AAAA,MACF;AAGA,MAAA,KAAA,MAAW,KAAA,IAAS,iBAAiB,MAAA,EAAQ,KAAA,EAAO,GAAG,CAAA,EAAG,WAAA,CAAY,KAAK,KAAK,CAAA;AAChF,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,KAAK,EAAE,KAAA,EAAO,GAAA,EAAK,OAAA,EAAS,MAAM,CAAA;AAC1C,IAAA,KAAA,GAAQ,GAAA,GAAM,CAAA;AAAA,EAChB;AAEA,EAAA,OAAO,OAAA;AACT;AAQA,SAAS,oBAAA,CACP,QACA,OAAA,EACyB;AACzB,EAAA,MAAM,QAAiC,EAAC;AACxC,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,OAAO,KAAA,GAAQ,QAAQ,MAAA,EAAQ;AAC7B,IAAA,IAAI,IAAA,GAAO,KAAA;AACX,IAAA,OACE,OAAO,CAAA,GAAI,OAAA,CAAQ,UACnB,WAAA,CAAY,IAAA,CAAK,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,CAAG,KAAK,OAAA,CAAQ,IAAA,GAAO,CAAC,CAAA,CAAG,KAAK,CAAC,CAAA,EAC3E;AACA,MAAA,IAAA,EAAA;AAAA,IACF;AACA,IAAA,MAAM,SAAS,MAAA,CAAO,KAAA,CAAM,GAAG,OAAA,CAAQ,KAAK,EAAG,KAAK,CAAA;AACpD,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AACjC,IAAA,MAAM,QAAQ,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,IAAI,EAAG,GAAG,CAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AACjC,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,CAAK,KAAA,EAAO,QAAQ,KAAK,CAAA,CAAG,KAAK,CAAC,CAAA;AAC9C,MAAA,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO,CAAA,GAAI,IAAA,EAAM,CAAA,EAAA,EAAK;AACjC,QAAA,KAAA,CAAM,IAAA,CAAK,CAAC,OAAA,CAAQ,CAAC,CAAA,CAAG,GAAA,EAAK,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAA,CAAG,KAAK,CAAC,CAAA;AAAA,MACrD;AACA,MAAA,KAAA,CAAM,IAAA,CAAK,CAAC,OAAA,CAAQ,IAAI,EAAG,GAAA,EAAK,OAAA,CAAQ,IAAI,CAAA,CAAG,GAAA,GAAM,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,CAAC,CAAA;AAAA,IACvE;AACA,IAAA,KAAA,GAAQ,IAAA,GAAO,CAAA;AAAA,EACjB;AACA,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,YAAY,KAAA,EAAyB;AAC5C,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACvE,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAQ,KAAA,CAAkC,MAAA;AAChD,EAAA,OAAO,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,IAAA,GAAO,MAAA,GAAS,CAAA;AAC1D;AAGA,SAAS,aAAa,KAAA,EAAyB;AAC7C,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,YAAY,IAAI,CAAC,CAAA,CAAE,GAAA,CAAI,YAAY,CAAA;AAAA,EACpE;AACA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,IAAI,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/C,MAAA,IAAI,CAAC,YAAY,IAAI,CAAA,MAAO,GAAG,CAAA,GAAI,aAAa,IAAI,CAAA;AAAA,IACtD;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,YAAY,KAAA,EAAyB;AAC5C,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,KAAA,CAAM,KAAK,WAAW,CAAA;AACvD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,CAAE,KAAK,WAAW,CAAA;AAAA,EAC9C;AACA,EAAA,OAAO,IAAA;AACT;AAGA,SAAS,oBAAoB,IAAA,EAAuB;AAClD,EAAA,OAAO,gBAAA,CAAiB,IAAA;AAAA,IACtB,IAAA,CAAK,OAAA,CAAQ,wBAAA,EAA0B,EAAE;AAAA,GAC3C;AACF;AAQA,SAAS,aAAA,CACP,QACA,OAAA,EACgC;AAChC,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAC5B,EAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,OAAO,GAAG,OAAO,IAAA;AACnC,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,WAAW,IAAA,IAAQ,WAAA,CAAY,MAAM,CAAA,EAAG;AACxE,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,QAAA,GAAW,aAAa,MAAM,CAAA;AACpC,EAAA,MAAM,YAAA,GAAe,YAAY,QAAQ,CAAA,GAAI,KAAK,SAAA,CAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAA,GAAI,IAAA;AAEjF,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,IAAI,iBAAiB,YAAA,KAAiB,IAAA;AACtC,EAAA,MAAM,QAAA,GAAW,CAAC,OAAA,KAAoB;AACpC,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,mBAAA,CAAoB,OAAO,CAAA,EAAG;AACpD,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,YAAY,OAAA,EAAS,IAAA,EAAM,cAAwB,CAAA;AACvE,MAAA,cAAA,GAAiB,IAAA;AACjB,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,CAAA;AAAA,EACzC,CAAA;AACA,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,MAAA,CAAO,KAAK,CAAC,CAAA;AAC3C,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,OAAO,OAAA,EAAS,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,CAAA;AACxE,IAAA,MAAA,GAAS,MAAA,CAAO,GAAA;AAAA,EAClB;AACA,EAAA,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,MAAM,CAAC,CAAA;AAC7B,EAAA,IAAI,CAAC,cAAA,EAAgB;AAGnB,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,UAAA,EAAY,SAAS,EAAA,EAAI,IAAA,EAAM,cAAwB,CAAA;AAAA,EAC7E;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,2BAAA,CACd,MAAA,EACA,OAAA,GAAqC,EAAC,EACb;AACzB,EAAA,MAAM,OAAA,GAAU,2BAAA,CAA4B,MAAA,EAAQ,OAAO,CAAA;AAC3D,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,CAAC,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,MAAA,EAAQ,CAAA;AAExE,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,MAAA,EAAQ,OAAO,CAAA;AAC7C,EAAA,IAAI,SAAS,OAAO,OAAA;AAGpB,EAAA,MAAM,KAAA,GAKF;AAAA,IACF,GAAG,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,EAAO,GAAA,EAAK,EAAE,GAAA,EAAK,IAAA,EAAM,QAAiB,IAAA,EAAM,CAAA,CAAE,MAAK,CAAE,CAAA;AAAA,IAC3F,GAAG;AAAA,MACD,GAAG,oBAAA,CAAqB,MAAA,EAAQ,OAAO,CAAA;AAAA,MACvC,GAAI,QAAQ,sBAAA,IAA0B,OAAA,CAAQ,iBAC1C,oBAAA,CAAqB,MAAA,EAAQ,OAAO,CAAA,GACpC;AAAC,MACL,GAAA,CAAI,CAAC,CAAC,KAAA,EAAO,GAAG,CAAA,MAAO;AAAA,MACvB,KAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACR,CAAE;AAAA,GACJ,CAAE,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AAElC,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AACvB,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,EAAS,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,KAAK,KAAK;AAAA,OACzC,CAAA;AAAA,IACH;AACA,IAAA,IAAI,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,KAAA,EAAO;AACzB,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,IAAA,CAAK,IAAA,KAAS,MAAA,GACV,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,GAAG,CAAA,EAAG,IAAA,EAAM,IAAA,CAAK,IAAA,EAAK,GAC7E,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,GAAG,CAAA;AAAE,OACpE;AAAA,IACF;AACA,IAAA,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,IAAA,CAAK,GAAG,CAAA;AAAA,EACpC;AACA,EAAA,IAAI,MAAA,GAAS,OAAO,MAAA,EAAQ;AAC1B,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,EAAG,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,MAAA;AACT;AAWO,SAAS,4BAAA,CACd,SACA,WAAA,EACQ;AACR,EAAA,MAAM,QAAQ,WAAA,GAAc,OAAA,CAAQ,OAAA,CAAQ,mBAAA,EAAqB,EAAE,CAAA,GAAI,OAAA;AACvE,EAAA,OAAO,MAAM,OAAA,EAAQ;AACvB;AAQO,SAAS,gCAAA,CACd,OAAA,EACA,aAAA,EACA,WAAA,EACQ;AACR,EAAA,IAAI,kBAAkB,MAAA,EAAQ;AAC5B,IAAA,OAAO,4BAAA,CAA6B,SAAS,WAAW,CAAA;AAAA,EAC1D;AACA,EAAA,IAAI,aAAA,KAAkB,QAAQ,OAAO,OAAA;AACrC,EAAA,OAAO,QAAQ,IAAA,EAAK;AACtB;AAkBO,SAAS,0BAAA,CACd,MAAA,EACA,OAAA,GAAgD,EAAC,EACvB;AAC1B,EAAA,MAAM,KAAA,GAAQ,2BAAA,CAA4B,MAAA,EAAQ,OAAO,CAAA;AACzD,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAChC,EAAA,MAAM,WAAW,OAAA,CAAQ,sBAAA,GAAyB,aAAA,CAAc,MAAM,IAAI,EAAC;AAC3E,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KACjB,QAAA,CAAS,IAAA,CAAK,CAAC,CAAC,KAAA,EAAO,GAAG,CAAA,KAAM,KAAA,IAAS,KAAA,IAAS,QAAQ,GAAG,CAAA;AAG/D,EAAA,MAAM,IAAA,GAAO,aAAa,MAAM,CAAA;AAEhC,EAAA,MAAM,UAAoC,EAAC;AAC3C,EAAA,IAAI,KAAA,GAAQ,eAAe,MAAM,CAAA;AACjC,EAAA,KAAA,MAAW,UAAU,KAAA,EAAO;AAC1B,IAAA,IAAI,MAAA,CAAO,QAAQ,KAAA,EAAO;AAC1B,IAAA,IAAI,IAAA,GAAO,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,GAAA,EAAK,MAAA,CAAO,GAAA,EAAK,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA,EAAa;AAChG,IAAA,KAAA,IAAS,IAAA,GAAO,KAAA,EAAO,IAAA,GAAO,MAAA,CAAO,OAAO,IAAA,EAAA,EAAQ;AAClD,MAAA,MAAM,IAAA,GAAO,OAAO,IAAI,CAAA;AACxB,MAAA,IAAK,SAAS,GAAA,IAAO,IAAA,KAAS,GAAA,IAAQ,SAAA,CAAU,IAAI,CAAA,EAAG;AACvD,MAAA,MAAM,KAAA,GAAQ,KAAK,IAAI,CAAA;AACvB,MAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,MAAA,CAAO,GAAA,EAAK;AACrC,MAAA,MAAM,GAAA,GAAM,KAAA;AACZ,MAAA,IAAI;AACF,QAAA,IAAA,GAAO,EAAE,KAAA,EAAO,IAAA,EAAM,GAAA,EAAK,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,IAAA,EAAM,GAAG,CAAC,CAAA,EAAE;AACtE,QAAA;AAAA,MACF,CAAA,CAAA,MAAQ;AACN,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,GAAG,IAAA,EAAM,OAAA,EAAS,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,GAAG,CAAA,EAAG,CAAA;AACrE,IAAA,KAAA,GAAQ,IAAA,CAAK,GAAA;AAAA,EACf;AACA,EAAA,OAAO,OAAA;AACT;AAmBA,IAAM,aAAA,GAAgB,qBAAA;AACtB,IAAM,eAAA,GAAkB,sBAAA;AAWjB,SAAS,yBAAA,CACd,MAAA,EACA,OAAA,GAAgD,EAAC,EACzB;AACxB,EAAA,MAAM,SAAiC,EAAC;AACxC,EAAA,IAAI,CAAC,aAAA,CAAc,IAAA,CAAK,MAAM,GAAG,OAAO,MAAA;AAIxC,EAAA,MAAM,uBAAuB,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,IAAK,MAAA,CAAO,SAAS,GAAG,CAAA;AACxE,EAAA,MAAM,KAAA,GAAQ,oBAAA,GAAuB,YAAA,CAAa,MAAM,CAAA,GAAI,IAAA;AAC5D,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,eAAA,CAAgB,SAAA,GAAY,CAAA;AAC5B,EAAA,KAAA,IAAS,CAAA,GAAI,eAAA,CAAgB,IAAA,CAAK,MAAM,GAAG,CAAA,EAAG,CAAA,GAAI,eAAA,CAAgB,IAAA,CAAK,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,EAAE,KAAK,CAAA;AACjG,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,MAAM,WAAW,OAAA,CAAQ,sBAAA,GAAyB,aAAA,CAAc,MAAM,IAAI,EAAC;AAC3E,EAAA,IAAI,aAAA,GAAgB,CAAA;AAEpB,EAAA,KAAA,IAAS,QAAQ,cAAA,CAAe,MAAM,GAAG,KAAA,GAAQ,MAAA,CAAO,QAAQ,KAAA,EAAA,EAAS;AACvE,IAAA,OAAO,aAAA,GAAgB,SAAS,MAAA,IAAU,QAAA,CAAS,aAAa,CAAA,CAAG,CAAC,KAAK,KAAA,EAAO;AAC9E,MAAA,aAAA,EAAA;AAAA,IACF;AACA,IAAA,IACE,aAAA,GAAgB,QAAA,CAAS,MAAA,IACzB,KAAA,IAAS,SAAS,aAAa,CAAA,CAAG,CAAC,CAAA,IACnC,KAAA,GAAQ,QAAA,CAAS,aAAa,CAAA,CAAG,CAAC,CAAA,EAClC;AACA,MAAA,KAAA,GAAQ,QAAA,CAAS,aAAa,CAAA,CAAG,CAAC,CAAA,GAAI,CAAA;AACtC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,OAAO,KAAK,CAAA;AACzB,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAClC,IAAA,OAAO,WAAW,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,QAAQ,IAAK,KAAA,EAAO,QAAA,EAAA;AAC1D,IAAA,IAAI,QAAA,IAAY,KAAK,MAAA,EAAQ;AAC7B,IAAA,MAAM,GAAA,GAAM,KAAK,QAAQ,CAAA;AAEzB,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,MAAA,EAAQ,MAAA,EAAQ,KAAK,CAAA;AACjD,IAAA,IAAI,OAAA,CAAQ,WAAW,UAAA,EAAY;AACjC,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,MAAM,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAC3C,QAAA,KAAA,GAAQ,QAAQ,GAAA,GAAM,CAAA;AAAA,MACxB,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,WAAW,QAAA,EAAU;AAE/B,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,GAAA,EAAK,MAAA,CAAO,MAAA,EAAQ,OAAA,EAAS,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EAAG,CAAA;AACvE,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,MAAM,GAAA,EAAK;AACvB,IAAA,MAAM,GAAA,GAAM,KAAA,GAAQ,KAAK,CAAA,IAAK,IAAA;AAC9B,IAAA,IAAI,GAAA,KAAQ,QAAQ,WAAA,CAAY,MAAA,CAAO,MAAM,KAAA,EAAO,GAAG,CAAC,CAAA,EAAG;AACzD,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,GAAA,EAAK,OAAA,EAAS,OAAO,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA,EAAG,CAAA;AAC7D,MAAA,KAAA,GAAQ,GAAA,GAAM,CAAA;AACd,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,OAAO,GAAA,EAAK;AACxB,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,GAAA,EAAK,OAAA,CAAQ,GAAA,EAAK,OAAA,EAAS,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,OAAA,CAAQ,GAAG,GAAG,CAAA;AAClF,IAAA,KAAA,GAAQ,QAAQ,GAAA,GAAM,CAAA;AAAA,EACxB;AACA,EAAA,OAAO,MAAA;AACT;AAGA,SAAS,YAAY,IAAA,EAAuB;AAC1C,EAAA,IAAI;AACF,IAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,cAAA,EAAgB,IAAI,CAAC,CAAA;AAC7C,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;;;ACjxBO,IAAMC,SAAAA,GAAW,QAAA;AA4EjB,SAAS,eAAe,KAAA,EAA+C;AAC5E,EAAA,MAAM,IAAA,GAAO,MAAMA,SAAQ,CAAA;AAC3B,EAAA,OAAO,OAAO,IAAA,KAAS,QAAA,GAAW,IAAA,GAAO,IAAA;AAC3C;;;ACzHO,IAAM,mBAAA,GAAsB;AAAA,EACjC,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF;AAEA,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAQO,SAAS,yBAAyB,QAAA,EAAkC;AACzE,EAAA,IAAI,CAAC,QAAA,CAAS,QAAQ,CAAA,EAAG,OAAO,IAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,SAAS,WAAW,CAAA;AAClC,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAK,GAAI,KAAA,CAAM,MAAK,GAAI,IAAA;AACpE;AAMA,SAAS,YAAY,KAAA,EAA+B;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA,CAAM,MAAK,IAAK,IAAA;AACtD,EAAA,IAAI,OAAO,KAAA,KAAU,SAAA,EAAW,OAAO,QAAQ,MAAA,GAAS,OAAA;AACxD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAA,CAAO,SAAS,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA,GAAI,IAAA;AAC/E,EAAA,OAAO,IAAA;AACT;AAQO,SAAS,mBAAA,CACd,IAAA,EACA,QAAA,EACA,QAAA,EACe;AACf,EAAA,IAAI,YAAY,QAAA,CAAS,IAAA,EAAK,EAAG,OAAO,SAAS,IAAA,EAAK;AACtD,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,IAAA,CAAK,QAAQ,CAAC,CAAA;AAC3C,IAAA,IAAI,UAAU,OAAO,QAAA;AAAA,EACvB;AACA,EAAA,KAAA,MAAW,OAAO,mBAAA,EAAqB;AACrC,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAG,CAAA;AACtB,IAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAK,EAAG,OAAO,MAAM,IAAA,EAAK;AAAA,EACnE;AACA,EAAA,OAAO,IAAA;AACT;AC5CO,SAAS,cACd,KAAA,EACkC;AAClC,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,SAAS,KAAA,EAAoD;AACpE,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,OAAO,KAAA,KAAU,QAAA,IACjB,OAAO,KAAA,KAAU,SAAA;AAErB;AAOO,SAAS,kBAAkB,KAAA,EAAwB;AACxD,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,QAAA;AAClD,EAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,OAAO,KAAK,CAAA;AACxC,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,KAAK,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAA,EAAG;AACjD,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,EACpC;AACA,EAAA,IAAI;AACF,IAAA,OAAO,KAAK,IAAA,CAAK,SAAA,CAAU,mBAAA,CAAoB,KAAK,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,EACxD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACF;AAGA,SAAS,oBAAoB,KAAA,EAAyB;AACpD,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,KAAA,CAAM,IAAI,mBAAmB,CAAA;AAC9D,EAAA,IAAI,aAAA,CAAc,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,MAAA,IAAI,QAAQA,SAAAA,EAAU;AACtB,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,mBAAA,CAAoB,KAAK,CAAA;AAAA,IACtC;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAQO,SAAS,aAAA,CACd,OACA,SAAA,EACyB;AACzB,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,SAAS,CAAA;AAC/B,EAAA,KAAA,CAAM,IAAIA,SAAQ,CAAA;AAClB,EAAA,KAAA,CAAM,IAAI,mBAAmB,CAAA;AAE7B,EAAA,MAAM,SAAkC,EAAC;AAEzC,EAAA,MAAM,UAAU,KAAA,CAAM,iBAAA;AACtB,EAAA,IAAI,aAAA,CAAc,OAAO,CAAA,EAAG;AAC1B,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,MAAA,IAAI,GAAA,KAAQA,SAAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,UAAU,MAAA,EAAW;AAC/D,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,IAChB;AAAA,EACF,CAAA,MAAA,IAAW,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,MAAA,EAAW;AACpD,IAAA,MAAA,CAAO,iBAAA,GAAoB,OAAA;AAAA,EAC7B;AAEA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,MAAM,GAAA,CAAI,GAAG,KAAK,KAAA,KAAU,IAAA,IAAQ,UAAU,MAAA,EAAW;AAC7D,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,EAChB;AAEA,EAAA,OAAO,MAAA;AACT;AAmBO,SAAS,gBAAgB,GAAA,EAAqB;AACnD,EAAA,MAAM,KAAA,GAAQ,GAAA,CACX,OAAA,CAAQ,oBAAA,EAAsB,OAAO,CAAA,CACrC,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,CACrB,IAAA,EAAK,CACL,WAAA,EAAY;AACf,EAAA,IAAI,CAAC,OAAO,OAAO,GAAA;AACnB,EAAA,OAAO,KAAA,CAAM,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AACtD;AAGO,SAAS,WAAW,MAAA,EAAgD;AACzE,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AACrC,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACjC,EAAA,OAAO,QACJ,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAA,IAAA,EAAO,GAAG,CAAA,IAAA,EAAO,kBAAkB,KAAK,CAAC,CAAA,CAAE,CAAA,CACjE,KAAK,IAAI,CAAA;AACd;AAOO,SAAS,wBAAA,CACd,MAAA,EACA,YAAA,GAAsC,IAAA,EACvB;AACf,EAAA,MAAM,IAAA,GAAO,WAAW,MAAM,CAAA;AAC9B,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,OAAO,GAAG,YAAY,CAAA;;AAAA,EAA0B,IAAI,CAAA,CAAA;AACtD;AAGO,SAAS,WACd,MAAA,EACQ;AACR,EAAA,OAAO,MAAA,CACJ,IAAI,CAAC,KAAA,KAAW,OAAO,KAAA,KAAU,QAAA,GAAW,MAAM,IAAA,EAAK,GAAI,EAAG,CAAA,CAC9D,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,CAAC,CAAA,CAClC,KAAK,MAAM,CAAA;AAChB;AAGO,SAAS,aAAa,IAAA,EAAsB;AACjD,EAAA,OAAOC,2BAAA,CAAmB,IAAI,CAAA,IAAK,UAAA;AACrC;AAKA,SAASC,aAAY,KAAA,EAAkD;AACrE,EAAA,OACE,aAAA,CAAc,KAAK,CAAA,IACnB,OAAO,KAAA,CAAMF,SAAQ,CAAA,KAAM,QAAA,IAC1B,KAAA,CAAMA,SAAQ,CAAA,CAAa,IAAA,GAAO,MAAA,GAAS,CAAA;AAEhD;AAEA,SAAS,WAAW,KAAA,EAAwB;AAC1C,EAAA,IAAI,OAAO,KAAA,KAAU,SAAA,EAAW,OAAO,QAAQ,KAAA,GAAQ,IAAA;AACvD,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,SAAS,KAAA,EAAwB;AACxC,EAAA,OAAO,UAAA,CAAW,KAAK,CAAA,CAAE,OAAA,CAAQ,UAAU,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAA;AACtE;AAGA,SAAS,eAAe,KAAA,EAAqD;AAC3E,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,MAAA;AAAA,IAC3B,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KACV,QAAQA,SAAAA,IACR,KAAA,KAAU,IAAA,IACV,KAAA,KAAU,MAAA,IACV,EAAE,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,EAAK,KAAM,EAAA,CAAA,IAChD,EAAE,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,MAAA,KAAW,CAAA;AAAA,GAC/C;AACF;AAGA,SAAS,aAAa,KAAA,EAAiC;AACrD,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,IAAI,OAAA,GAA2B,IAAA;AAC/B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,CAAC,aAAA,CAAc,IAAI,KAAKE,YAAAA,CAAY,IAAI,GAAG,OAAO,IAAA;AACtD,IAAA,MAAM,IAAA,GAAO,OAAO,IAAA,CAAK,IAAI,EAAE,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,KAAQF,SAAQ,CAAA;AAC/D,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC9B,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,CAAC,QAAQ,IAAA,CAAK,GAAG,CAAA,KAAM,IAAA,IAAQ,SAAS,IAAA,CAAK,GAAG,CAAC,CAAC,GAAG,OAAO,IAAA;AAC5E,IAAA,IAAI,OAAA,KAAY,MAAM,OAAA,GAAU,IAAA;AAAA,SAAA,IACvB,IAAA,CAAK,MAAA,KAAW,OAAA,CAAQ,MAAA,IAAU,CAAC,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,KAAM,OAAA,CAAS,CAAC,CAAC,CAAA;AAChF,MAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,MAAM,IAAA,GAAO,OAAA;AACb,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,CAAK,GAAA,CAAI,eAAe,CAAA,CAAE,IAAA,CAAK,KAAK,CAAC,CAAA,EAAA,CAAA;AACvD,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,CAAK,GAAA,CAAI,MAAM,KAAK,CAAA,CAAE,IAAA,CAAK,KAAK,CAAC,CAAA,EAAA,CAAA;AACnD,EAAA,MAAM,OAAO,KAAA,CAAM,GAAA;AAAA,IACjB,CAAC,IAAA,KACC,CAAA,EAAA,EAAK,IAAA,CACF,GAAA,CAAI,CAAC,GAAA,KAAQ;AACZ,MAAA,MAAM,IAAA,GAAQ,KAAiC,GAAG,CAAA;AAClD,MAAA,OAAO,SAAS,IAAA,IAAQ,IAAA,KAAS,MAAA,GAAY,QAAA,GAAM,SAAS,IAAI,CAAA;AAAA,IAClE,CAAC,CAAA,CACA,IAAA,CAAK,KAAK,CAAC,CAAA,EAAA;AAAA,GAClB;AACA,EAAA,OAAO,CAAC,IAAA,EAAM,IAAA,EAAM,GAAG,IAAI,CAAA,CAAE,KAAK,IAAI,CAAA;AACxC;AAEA,SAAS,WAAA,CAAY,MAAc,MAAA,EAAwB;AACzD,EAAA,OAAO,IAAA,CACJ,KAAA,CAAM,IAAI,CAAA,CACV,IAAI,CAAC,IAAA,KAAU,IAAA,CAAK,IAAA,KAAS,MAAA,GAAS,IAAA,GAAO,IAAK,CAAA,CAClD,KAAK,IAAI,CAAA;AACd;AAGA,SAAS,SAAA,CAAU,KAAA,EAAgB,MAAA,EAAgB,MAAA,EAAsC;AACvF,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,MAAA,EAAW;AACzC,MAAA,IAAI,QAAA,CAAS,IAAI,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,UAAA,CAAW,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,WAAA,IACtDE,YAAAA,CAAY,IAAI,CAAA,EAAG;AAC1B,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,CAAA,CAAG,CAAA;AACvB,QAAA,KAAA,CAAM,KAAK,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA,EAAG,MAAA,GAAS,IAAI,CAAC,CAAA;AAAA,MACrD,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC9B,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,CAAA,CAAG,CAAA;AACvB,QAAA,KAAA,CAAM,KAAK,GAAG,SAAA,CAAU,MAAM,MAAA,GAAS,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,MACtD,CAAA,MAAA,IAAW,aAAA,CAAc,IAAI,CAAA,EAAG;AAC9B,QAAA,MAAM,MAAA,GAAS,SAAA,CAAU,IAAA,EAAM,MAAA,GAAS,MAAM,MAAM,CAAA;AAEpD,QAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,UAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,MAAA,CAAO,CAAC,CAAA,CAAG,SAAA,EAAU,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA,CAAE,CAAA;AACpE,UAAA,KAAA,CAAM,IAAA,CAAK,GAAG,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,aAAA,CAAc,KAAK,CAAA,EAAG;AACxB,IAAA,IAAIA,YAAAA,CAAY,KAAK,CAAA,EAAG,OAAO,CAAC,YAAY,MAAA,CAAO,KAAK,CAAA,EAAG,MAAM,CAAC,CAAA;AAClE,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,cAAA,CAAe,KAAK,CAAA,EAAG;AAChD,MAAA,MAAM,KAAA,GAAQ,CAAA,EAAA,EAAK,eAAA,CAAgB,GAAG,CAAC,CAAA,GAAA,CAAA;AACvC,MAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,EAAI,UAAA,CAAW,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,WAAA,IACjE,MAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,MAAM,QAAQ,CAAA;AACnD,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,WACjE;AACH,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAChC,QAAA,KAAA,CAAM,KAAK,GAAG,SAAA,CAAU,OAAO,MAAA,GAAS,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,MACvD;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,QAAA,CAAS,KAAK,CAAA,GAAI,CAAC,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,UAAA,CAAW,KAAK,CAAC,CAAA,CAAE,CAAA,GAAI,EAAC;AAClE;AAEA,SAAS,WAAW,KAAA,EAAuB;AACzC,EAAA,OAAO,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,KAAA,EAAO,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AACnD;AAGA,SAAS,UAAA,CACP,KAAA,EACA,KAAA,EACA,MAAA,EACA,OAAA,EACU;AACV,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,cAAA,CAAe,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,QAAQ,OAAA,EAAS;AACrB,IAAA,MAAM,KAAA,GAAQ,gBAAgB,GAAG,CAAA;AACjC,IAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG;AACnB,MAAA,OAAA,CAAQ,KAAK,CAAA,IAAA,EAAO,KAAK,OAAO,UAAA,CAAW,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IACrD,CAAA,MAAA,IAAW,MAAM,OAAA,CAAQ,KAAK,KAAK,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAA,EAAG;AACxD,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,IAAA,EAAO,KAAK,CAAA,IAAA,EAAO,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IACpE,CAAA,MAAA,IAAWA,YAAAA,CAAY,KAAK,CAAA,EAAG;AAC7B,MAAA,QAAA,CAAS,IAAA,CAAK,UAAA,CAAW,CAAC,CAAA,EAAG,WAAW,KAAA,GAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO,KAAK,CAAC,CAAC,CAAC,CAAA;AAAA,IAChF,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/B,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,UAAA,CAAW;AAAA,UACT,GAAG,UAAA,CAAW,KAAA,GAAQ,CAAC,CAAC,IAAI,KAAK,CAAA,CAAA;AAAA,UACjC,YAAA,CAAa,KAAK,CAAA,IAAK,SAAA,CAAU,OAAO,EAAA,EAAI,MAAM,CAAA,CAAE,IAAA,CAAK,IAAI;AAAA,SAC9D;AAAA,OACH;AAAA,IACF,CAAA,MAAA,IAAW,aAAA,CAAc,KAAK,CAAA,EAAG;AAC/B,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,UAAA,CAAW;AAAA,UACT,GAAG,UAAA,CAAW,KAAA,GAAQ,CAAC,CAAC,IAAI,KAAK,CAAA,CAAA;AAAA,UACjC,GAAG,UAAA,CAAW,KAAA,EAAO,KAAA,GAAQ,CAAA,EAAG,QAAQ,IAAI;AAAA,SAC7C;AAAA,OACH;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,CAAC,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA,EAAM,GAAG,QAAQ,CAAA,CAAE,MAAA;AAAA,IAC/D,CAAC,UAA2B,KAAA,KAAU;AAAA,GACxC;AACF;AAGA,SAAS,cAAA,CAAe,OAAgC,KAAA,EAAqC;AAC3F,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,KAAA,MAAW,OAAO,mBAAA,EAAqB;AACrC,IAAA,MAAM,CAAA,GAAI,MAAM,GAAG,CAAA;AACnB,IAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,EAAE,IAAA,EAAK,KAAM,OAAO,OAAO,GAAA;AAAA,EAC1D;AACA,EAAA,OAAO,IAAA;AACT;AAcO,SAAS,mBAAA,CACd,IAAA,EACA,KAAA,EACA,MAAA,EACQ;AACR,EAAA,MAAM,YAAA,GACJ,MAAA,KACC,CAAC,KAAA,KACA,mBAAA,CAAoB,MAAA,CAAO,KAAA,CAAMF,SAAQ,CAAA,IAAK,UAAU,CAAA,EAAG,KAAK,CAAA,CAAA;AACpE,EAAA,MAAM,KAAA,GAAQ,oBAAoB,KAAK,CAAA;AACvC,EAAA,OAAO,UAAA,CAAW;AAAA,IAChB,CAAA,EAAA,EAAK,KAAA,IAAS,YAAA,CAAa,IAAI,CAAC,CAAA,CAAA;AAAA,IAChC,CAAA,CAAA,EAAI,YAAA,CAAa,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,IACtB,GAAG,WAAW,KAAA,EAAO,CAAA,EAAG,cAAc,cAAA,CAAe,KAAA,EAAO,KAAK,CAAC;AAAA,GACnE,CAAA;AACH;AASO,SAAS,kBAAA,CAAmB,OAAgB,MAAA,EAAqC;AACtF,EAAA,MAAM,YAAA,GACJ,MAAA,KACC,CAAC,KAAA,KAAU,mBAAA,CAAoB,MAAA,CAAO,KAAA,CAAMA,SAAQ,CAAA,IAAK,UAAU,CAAA,EAAG,KAAK,CAAA,CAAA;AAC9E,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,EAAA;AAClD,EAAA,IAAIE,YAAAA,CAAY,KAAK,CAAA,EAAG,OAAO,aAAa,KAAK,CAAA;AACjD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,YAAA,CAAa,KAAK,CAAA,IAAK,SAAA,CAAU,OAAO,EAAA,EAAI,YAAY,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAAA,EAC5E;AACA,EAAA,IAAI,aAAA,CAAc,KAAK,CAAA,EAAG,OAAO,UAAA,CAAW,WAAW,KAAA,EAAO,CAAA,EAAG,YAAA,EAAc,IAAI,CAAC,CAAA;AACpF,EAAA,OAAO,SAAS,KAAK,CAAA,GAAI,WAAW,KAAK,CAAA,GAAI,OAAO,KAAK,CAAA;AAC3D;;;ACzWA,IAAM,SAAA,mBAAY,MAAA,CAAO,GAAA,CAAI,yCAAyC,CAAA;AAEtE,SAAS,KAAA,GAAgC;AACvC,EAAA,MAAM,CAAA,GAAI,UAAA;AACV,EAAA,IAAI,CAAA,GAAI,EAAE,SAAS,CAAA;AACnB,EAAA,IAAI,CAAC,CAAA,EAAG;AACN,IAAA,CAAA,GAAI,EAAE,IAAA,EAAM,IAAA,EAAM,SAAA,EAAW,KAAA,EAAM;AACnC,IAAA,CAAA,CAAE,SAAS,CAAA,GAAI,CAAA;AAAA,EACjB;AACA,EAAA,OAAO,CAAA;AACT;AAGO,SAAS,0BAA0B,IAAA,EAAwC;AAChF,EAAA,KAAA,GAAQ,IAAA,GAAO,IAAA;AACjB;AAEO,SAAS,mBAAA,CACd,KAAA,EACA,YAAA,GAAe,UAAA,EACP;AACR,EAAA,MAAM,IAAI,KAAA,EAAM;AAChB,EAAA,IAAI,EAAE,IAAA,EAAM,OAAO,CAAA,CAAE,IAAA,CAAK,OAAO,YAAY,CAAA;AAC7C,EAAA,IAAI,CAAC,EAAE,SAAA,EAAW;AAChB,IAAA,CAAA,CAAE,SAAA,GAAY,IAAA;AACd,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,CAAA,gJAAA;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,CAAC,KAAA,KAAmC,mBAAA,CAAoB,KAAK,CAAA;AAC5E,EAAA,OAAO,oBAAoB,cAAA,CAAe,KAAK,CAAA,IAAK,YAAA,EAAc,OAAO,MAAM,CAAA;AACjF;;;ACpBA,SAASC,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,aAAa,KAAA,EAAkD;AACtE,EAAA,OACEA,SAAAA,CAAS,KAAK,CAAA,IACd,OAAO,KAAA,CAAM,MAAA,KAAW,QAAA,IACxB,KAAA,CAAM,MAAA,CAAO,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA;AAEjC;AAOO,SAAS,oBAAoB,IAAA,EAA6B;AAC/D,EAAA,OAAO,IAAA,GAAO,CAAA,EAAG,YAAA,CAAa,IAAI,CAAC,CAAA,eAAA,CAAA,GAAoB,uBAAA;AACzD;AAGO,IAAM,oBAAA,GAAuB;AAGpC,IAAM,cAAA,GAAiB,oBAAA;AAGvB,SAAS,iBAAA,CAAkB,KAAA,EAAgB,KAAA,GAAQ,CAAA,EAAY;AAC7D,EAAA,IAAI,QAAQ,EAAA,IAAM,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AACtE,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,iBAAA,CAAkB,IAAA,EAAM,KAAA,GAAQ,CAAC,CAAC,CAAA;AACxF,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,QAAQ,CAAA,EAAG;AAC1D,IAAA,MAAM,OAAO,MAAA,CAAO,MAAA;AAIpB,IAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,SAAS,IAAA,IAAQ,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAC9E,IAAA,IAAI,CAAC,KAAA,KAAU,OAAO,IAAA,KAAS,QAAA,IAAY,CAAC,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,OAAO,IAAA;AAAA,EACjF;AACA,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS,iBAAA,CAAkB,IAAA,EAAM,KAAA,GAAQ,CAAC,CAAC,CAAA;AAChF;AAIA,SAAS,YAAY,MAAA,EAA+E;AAClG,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,MAAM,EAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA;AACrD,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAC,EAAA,KAAO;AACb,IAAA,OAAO,CAAA,GAAI,OAAO,MAAA,IAAU,MAAA,CAAO,CAAC,CAAA,CAAG,CAAC,KAAK,EAAA,EAAI,CAAA,EAAA;AACjD,IAAA,KAAA,IAAS,CAAA,GAAI,GAAG,CAAA,GAAI,MAAA,CAAO,UAAU,MAAA,CAAO,CAAC,EAAG,CAAC,CAAA,IAAK,IAAI,CAAA,EAAA,EAAK,IAAI,KAAK,MAAA,CAAO,CAAC,EAAG,CAAC,CAAA,EAAG,OAAO,MAAA,CAAO,CAAC,CAAA;AACtG,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF;AAGA,SAAS,iBAAiB,IAAA,EAAuC;AAC/D,EAAA,OAAO,cAAA,CAAe,IAAI,CAAA,CACvB,MAAA,CAAO,CAAC,KAAA,KAAU;AACjB,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS,OAAO,IAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,WAAW,IAAA,CAAK,KAAA,CAAM,MAAM,KAAA,EAAO,KAAA,CAAM,GAAG,CAAC,CAAA;AAC3D,IAAA,OAAO,CAAC,SAAS,CAACC,iBAAAA,CAAiB,IAAI,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,WAAA,EAAa,CAAA;AAAA,EACxE,CAAC,CAAA,CACA,GAAA,CAAI,CAAC,KAAA,KAA4B,CAAC,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,GAAG,CAAC,CAAA;AAC9D;AAOA,SAAS,oBAAoB,IAAA,EAAsB;AACjD,EAAA,IAAI,CAAC,UAAA,CAAW,IAAI,CAAA,EAAG,OAAO,IAAA;AAK9B,EAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,IAAK,CAAC,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,IAAA;AACvD,EAAA,MAAM,MAAA,GAAS,iBAAiB,IAAI,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,eAAe,IAAI,CAAA,CAAE,OAAO,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,KAAS,OAAO,CAAA;AAC5E,EAAA,MAAM,QAAiC,EAAC;AACxC,EAAA,MAAM,IAAA,GAAO,aAAa,IAAI,CAAA;AAC9B,EAAA,MAAM,QAAA,GAAW,YAAY,MAAM,CAAA;AACnC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAI,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK;AAC9B,IAAA,MAAM,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AACf,MAAA;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,IAAI,MAAM,CAAA,EAAG;AACb,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI;AACF,MAAA,KAAA,GAAQ,KAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,IACvC,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AACA,IAAA,IAAI,iBAAA,CAAkB,KAAK,CAAA,EAAG,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AACjD,IAAA,CAAA,GAAI,GAAA,GAAM,CAAA;AAAA,EACZ;AAIA,EAAA,IAAI,OAAO,IAAA,CAAK,MAAA;AAChB,EAAA,IAAI,IAAA,GAAO,EAAA;AACX,EAAA,IAAI,QAAA,GAAW,EAAA;AACf,EAAA,KAAA,IAAS,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC1C,IAAA,IAAI,CAAC,KAAA,EAAO,GAAG,CAAA,GAAI,MAAM,CAAC,CAAA;AAC1B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,SAAS,KAAA,CAAM,KAAA,IAAS,GAAA,IAAO,KAAA,CAAM,GAAG,CAAA;AAC7E,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,KAAA,GAAQ,WAAW,IAAA,CAAK,KAAA,CAAM,MAAM,KAAA,EAAO,KAAA,CAAM,GAAG,CAAC,CAAA;AAC3D,MAAA,MAAM,KAAA,GAAQ,QACV,IAAA,CACG,KAAA,CAAM,MAAM,KAAA,EAAO,KAAA,CAAM,GAAG,CAAA,CAC5B,KAAA,CAAM,IAAI,EACV,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,MAAA,GAAS,EAAA,GAAK,MAAS,EACtC,IAAA,CAAK,IAAI,CAAA,CACT,IAAA,EAAK,GACR,EAAA;AACJ,MAAA,IAAI,KAAA,IAAS,UAAU,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA,CAAE,MAAK,EAAG;AACpD,QAAA,KAAA,GAAQ,KAAA,CAAM,KAAA;AACd,QAAA,GAAA,GAAM,KAAA,CAAM,GAAA;AAAA,MACd;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,aAAA,CAAc,IAAA,EAAM,KAAK,CAAA;AACxC,IAAA,MAAM,YAAY,GAAA,IAAO,IAAA,GAAO,KAAK,KAAA,CAAM,GAAA,EAAK,IAAI,CAAA,GAAI,EAAA;AACxD,IAAA,MAAM,KAAA,GAAQ,GAAA,IAAO,IAAA,GAAO,eAAA,CAAgB,SAAA,EAAW,IAAA,EAAM,QAAQ,CAAA,GAAI,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM,GAAA,GAAM,IAAI,CAAC,CAAA;AACzG,IAAA,IAAA,GAAO,MAAA,CAAO,GAAA;AACd,IAAA,QAAA,GAAW,OAAO,GAAA,GAAM,oBAAA;AACxB,IAAA,IAAA,GAAO,QAAA,GAAW,KAAA;AAAA,EACpB;AACA,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,GAAI,IAAA;AAC/B;AAGA,SAAS,eAAA,CAAgB,KAAA,EAAgB,KAAA,GAAQ,CAAA,EAAY;AAC3D,EAAA,IAAI,KAAA,GAAQ,IAAI,OAAO,KAAA;AACvB,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,CAAC,cAAA,CAAe,KAAK,CAAA,EAAG,OAAO,KAAA;AACnC,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AACxC,MAAA,OAAO,gBAAA,CAAiB,MAAM,CAAA,GAAI,MAAA,GAAS,KAAA;AAAA,IAC7C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,eAAA,CAAgB,IAAA,EAAM,KAAA,GAAQ,CAAC,CAAC,CAAA;AACrF,EAAA,IAAID,SAAAA,CAAS,KAAK,CAAA,EAAG;AACnB,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,IAAI,CAAA,IAAK,OAAO,OAAA,CAAQ,KAAK,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,GAAI,eAAA,CAAgB,IAAA,EAAM,QAAQ,CAAC,CAAA;AAC3F,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAQA,SAAS,cAAc,GAAA,EAAsB;AAC3C,EAAA,MAAM,KAAA,GAAQ,gBAAgB,GAAG,CAAA;AACjC,EAAA,MAAM,MAAA,GAAS,CAAC,KAAA,KAAmC,mBAAA,CAAoB,KAAK,CAAA;AAC5E,EAAA,IAAI,YAAA,CAAa,KAAK,CAAA,EAAG,OAAO,oBAAoB,KAAK,CAAA;AACzD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,IAAI,MAAiB,EAAC;AACtB,IAAA,MAAM,QAAQ,MAAM;AAClB,MAAA,IAAI,IAAI,MAAA,EAAQ,MAAA,CAAO,KAAK,kBAAA,CAAmB,GAAA,EAAK,MAAM,CAAC,CAAA;AAC3D,MAAA,GAAA,GAAM,EAAC;AAAA,IACT,CAAA;AACA,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,YAAA,CAAa,IAAI,CAAA,EAAG;AACtB,QAAA,KAAA,EAAM;AACN,QAAA,MAAA,CAAO,IAAA,CAAK,mBAAA,CAAoB,IAAI,CAAC,CAAA;AAAA,MACvC,WAAW,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,IAAKA,SAAAA,CAAS,IAAI,CAAA,EAAG;AAChD,QAAA,IAAI,gBAAA,CAAiB,IAAI,CAAA,EAAG;AAC1B,UAAA,KAAA,EAAM;AACN,UAAA,MAAA,CAAO,IAAA,CAAK,aAAA,CAAc,IAAI,CAAC,CAAA;AAAA,QACjC,CAAA,MAAO,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAAA,MACtB,CAAA,MAAO,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAAA,IACtB;AACA,IAAA,KAAA,EAAM;AACN,IAAA,OAAO,MAAA,CAAO,OAAO,CAAC,KAAA,KAAU,MAAM,IAAA,EAAM,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,kBAAA,CAAmB,OAAO,MAAM,CAAA;AACzC;AAGA,SAAS,sBAAsB,IAAA,EAA6B;AAC1D,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,EAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,CAAC,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG,OAAO,IAAA;AACjE,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,gBAAA,CAAiB,MAAM,CAAA,GAAI,aAAA,CAAc,MAAM,CAAA,GAAI,IAAA;AAC5D;AAGA,SAAS,YAAY,IAAA,EAAsB;AACzC,EAAA,MAAM,EAAE,GAAA,EAAK,GAAA,KAAQ,aAAA,CAAc,IAAA,EAAM,KAAK,MAAM,CAAA;AACpD,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,GAAI,GAAA;AAC9B;AAEA,IAAM,cAAc,CAAC,EAAA,KAA2B,OAAO,GAAA,IAAO,EAAA,KAAO,OAAQ,EAAA,KAAO,IAAA;AAGpF,SAAS,aAAA,CAAc,MAAc,EAAA,EAA0C;AAC7E,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,OAAO,MAAM,CAAA,IAAK,WAAA,CAAY,KAAK,GAAA,GAAM,CAAC,CAAC,CAAA,EAAG,GAAA,EAAA;AAC9C,EAAA,IAAI,QAAQ,CAAA,EAAG,OAAO,EAAE,GAAA,EAAK,KAAK,EAAA,EAAG;AACrC,EAAA,IAAI,IAAA,CAAK,MAAM,CAAC,CAAA,KAAM,MAAM,OAAO,EAAE,GAAA,EAAK,GAAA,EAAK,MAAA,EAAO;AACtD,EAAA,OAAO,EAAE,GAAA,EAAK,GAAA,EAAK,GAAA,GAAM,CAAA,IAAK,IAAA,CAAK,GAAA,GAAM,CAAC,CAAA,KAAM,IAAA,GAAO,EAAA,GAAK,IAAA,EAAK;AACnE;AAMA,SAAS,eAAA,CAAgB,IAAA,EAAc,IAAA,EAAc,QAAA,EAA0B;AAC7E,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,OAAO,OAAO,IAAA,CAAK,MAAA,IAAU,YAAY,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG,IAAA,EAAA;AACtD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC5B,EAAA,MAAM,IAAA,GAAO,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,GAAG,CAAC,CAAA;AACvC,EAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,EAAA,MAAM,SAAS,IAAA,GAAO,IAAA;AACtB,EAAA,IAAI,IAAA,CAAK,WAAW,MAAM,CAAA,IAAK,KAAK,UAAA,CAAW,UAAU,GAAG,OAAO,MAAA;AACnE,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,EAAG,OAAO;AAAA,EAAK,MAAM,CAAA,CAAA;AAC7C,EAAA,OAAO;;AAAA,EAAO,MAAM,CAAA,CAAA;AACtB;AAGA,SAAS,UAAU,IAAA,EAAsB;AACvC,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AACxC,EAAA,IAAI,CAAC,KAAK,OAAO,GAAA;AACjB,EAAA,IAAI,GAAA,CAAI,WAAW,MAAM,CAAA,IAAK,IAAI,UAAA,CAAW,UAAU,GAAG,OAAO,GAAA;AACjE,EAAA,IAAI,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,EAAG,OAAO;AAAA,EAAK,GAAG,CAAA,CAAA;AACzC,EAAA,OAAO;;AAAA,EAAO,GAAG,CAAA,CAAA;AACnB;AAcA,SAAS,eACP,IAAA,EACA,sBAAA,EACA,SACA,QAAA,GAAsC,CAAC,UAAU,KAAA,EAClC;AAKf,EAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,QAAA,CAAS,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,GAC3D,2BAA2B,IAAA,EAAM,EAAE,sBAAA,EAAwB,IAC3D,EAAC;AACL,EAAA,MAAM,QAAgB,eAAA,CAAgB,GAAA;AAAA,IACpC,CAAC,MAAA,MAAY,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,GAAA,EAAK,MAAA,CAAO,GAAA,EAAK,EAAA,EAAI,aAAA,CAAc,MAAA,CAAO,KAAK,CAAA,EAAE;AAAA,GACvF;AACA,EAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,EAAQ;AAC7B,IAAA,KAAA,MAAW,UAAU,yBAAA,CAA0B,IAAA,EAAM,EAAE,sBAAA,EAAwB,CAAA,EAAG;AAChF,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,KAAK,MAAA,CAAO,GAAA;AAAA,QACZ,EAAA,EAAI,mBAAA,CAAoB,aAAA,CAAc,MAAA,CAAO,OAAO,CAAC;AAAA,OACtD,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AAItC,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,KAAkB;AAC9B,IAAA,IAAI,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA;AAAA,EAC7B,CAAA;AACA,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,MAAA,MAAME,KAAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,MAAA,MAAM,OAAA,GAAUA,KAAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AAC5C,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,GAAI,OAAA;AAC1B,QAAA;AAAA,MACF;AACA,MAAA,KAAA,CAAM,GAAA,EAAI;AAAA,IACZ;AACA,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,MAAM,IAAA,EAAM;AAClC,MAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AACjB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA,GAAS,IAAI,IAAA,CAAK,IAAA,CAAK,SAAS,CAAC,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA,GAAI,MAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,CAAG,KAAA,CAAM,EAAE,CAAA,GAAI,EAAA;AACjH,IAAA,IAAI,MAAA,KAAW,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,EACtC,CAAA;AACA,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,UAAA,GAAa,KAAA;AACjB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AACzB,IAAA,MAAM,UAAU,QAAA,CAAS,IAAA,CAAK,MAAM,MAAA,EAAQ,IAAA,CAAK,KAAK,CAAC,CAAA;AACvD,IAAA,IAAA,CAAK,UAAA,GAAa,SAAA,CAAU,OAAO,CAAA,GAAI,OAAO,CAAA;AAC9C,IAAA,gBAAA,EAAiB;AACjB,IAAA,IAAA,CAAK,KAAK,EAAE,CAAA;AACZ,IAAA,MAAA,GAAS,IAAA,CAAK,GAAA;AACd,IAAA,UAAA,GAAa,IAAA;AAAA,EACf;AACA,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA;AACxC,EAAA,IAAA,CAAK,UAAA,GAAa,SAAA,CAAU,IAAI,CAAA,GAAI,IAAI,CAAA;AACxC,EAAA,OAAO,KAAA,CAAM,KAAK,EAAE,CAAA;AACtB;AAGA,IAAMD,iBAAAA,uBAAuB,GAAA,CAAI,CAAC,IAAI,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAC,CAAA;AAG/D,IAAM,YAAA,GAAe,iBAAA;AAQrB,SAAS,iBAAA,CAAkB,MAAc,OAAA,EAAiC;AAIxE,EAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,IAAK,CAAC,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,IAAA;AACvD,EAAA,MAAM,MAAA,GAAS,eAAe,IAAI,CAAA,CAAE,OAAO,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,KAAS,OAAO,CAAA;AAC5E,EAAA,IAAI,GAAA,GAAM,IAAA;AACV,EAAA,KAAA,IAAS,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC3C,IAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,IAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO,MAAM,GAAG,CAAA;AAC7C,IAAA,IAAI,CAAC,UAAA,CAAW,GAAG,CAAA,EAAG;AACtB,IAAA,MAAM,KAAA,GAAQ,WAAW,GAAG,CAAA;AAC5B,IAAA,IAAI,CAAC,KAAA,IAAS,CAACA,iBAAAA,CAAiB,GAAA,CAAI,MAAM,MAAA,CAAO,IAAA,CAAK,WAAA,EAAa,CAAA,EAAG;AAEtE,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA;AACnE,IAAA,MAAM,MAAA,GAAS,aAAa,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,IAAK,EAAE,CAAA,GAAI,CAAC,CAAA,IAAK,EAAA;AACzD,IAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,KAAkB,MAAA,GAAS,KAAK,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA,GAAI,IAAA;AAC3E,IAAA,MAAM,SAAS,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,IAAK,EAAE,EAAE,IAAA,EAAK;AAC1C,IAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAK,MAAA,CAAO,KAAA,CAAM,OAAO,KAAK,CAAA;AACzD,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,MAAA,GAAS,EAAA,GAAK,MAAS,CAAA,CAAE,GAAA,CAAI,KAAK,CAAA,CAAE,KAAK,IAAI,CAAA;AAE/E,IAAA,MAAM,EAAA,GACJ,qBAAA,CAAsB,IAAI,CAAA,IAC1B,cAAA;AAAA,MAAe,IAAA;AAAA,MAAM,KAAA;AAAA,MAAO,OAAA;AAAA,MAAS,CAAC,UACpC,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAA,GAAI,EAAA,GAAK,GAAG,MAAM;AAAA,EAAK,KAAA,CAAM,MAAM;AAAA,EAAK,KAAK,CAAA;AAAA,KACzE;AACF,IAAA,IAAI,OAAO,IAAA,EAAM;AACjB,IAAA,MAAM,KAAA,GAAQ,SACV,EAAA,CACG,KAAA,CAAM,IAAI,CAAA,CACV,GAAA,CAAI,CAAC,IAAA,KAAU,IAAA,GAAO,GAAG,MAAM,CAAA,EAAG,IAAI,CAAA,CAAA,GAAK,MAAA,CAAO,SAAU,CAAA,CAC5D,IAAA,CAAK,IAAI,CAAA,GACZ,EAAA;AACJ,IAAA,GAAA,GAAM,WAAA,CAAY,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,MAAM,KAAK,CAAC,CAAA,GAAI,KAAA,GAAQ,SAAA,CAAU,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,EACvF;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,eAAA,CAAgB,MAAc,OAAA,EAAiC;AAEtE,EAAA,IAAA,GAAO,mBAAA,CAAoB,sBAAA,CAAuB,IAAA,EAAM,OAAO,CAAC,CAAA;AAGhE,EAAA,MAAM,KAAA,GAAQ,sBAAsB,IAAI,CAAA;AACxC,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,KAAA;AAG3B,EAAA,IAAI,GAAA,GAAM,iBAAA,CAAkB,IAAA,EAAM,OAAO,CAAA;AAGzC,EAAA,IAAI,CAAC,UAAA,CAAW,GAAG,CAAA,EAAG,OAAO,GAAA;AAC7B,EAAA,GAAA,GAAM,cAAA,CAAe,GAAA,EAAK,IAAA,EAAM,OAAO,CAAA,IAAK,GAAA;AAI5C,EAAA,GAAA,GAAM,mBAAA,CAAoB,KAAK,OAAO,CAAA;AAGtC,EAAA,OAAO,qBAAA,CAAsB,KAAK,OAAO,CAAA;AAC3C;AAGA,SAAS,sBAAA,CAAuB,MAAc,OAAA,EAAiC;AAC7E,EAAA,MAAM,GAAA,GAAM,eAAe,IAAI,CAAA;AAC/B,EAAA,IAAI,GAAA,KAAQ,CAAA,IAAK,CAAC,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,EAAG,OAAO,IAAA;AACzD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AAC/B,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAC5D,EAAA,MAAM,EAAA,GAAK,cAAA;AAAA,IAAe,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,OAAA;AAAA,IAAS,CAAC,UAC/C,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAA,GAAI,EAAA,GAAK,MAAM,IAAA;AAAK,GAChD;AACA,EAAA,IAAI,EAAA,KAAO,MAAM,OAAO,IAAA;AACxB,EAAA,OAAO,EAAA,GAAK,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM,GAAG,CAAC,CAAA;AACvC;AAGA,SAAS,mBAAA,CAAoB,MAAc,OAAA,EAAiC;AAC1E,EAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,MAAM,GAAG,OAAO,IAAA;AACnC,EAAA,MAAM,MAAA,GAAS,iBAAiB,IAAI,CAAA;AACpC,EAAA,MAAM,WAAW,CAAC,GAAG,KAAK,QAAA,CAAS,wBAAwB,CAAC,CAAA,CAAE,MAAA;AAAA,IAC5D,CAAC,MACC,UAAA,CAAW,CAAA,CAAE,CAAC,CAAC,CAAA,IAAK,CAAC,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,CAAE,SAAU,CAAA,IAAK,CAAA,CAAE,QAAS,CAAC;AAAA,GAC9E;AACA,EAAA,IAAI,GAAA,GAAM,IAAA;AACV,EAAA,KAAA,IAAS,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC7C,IAAA,MAAM,CAAA,GAAI,SAAS,CAAC,CAAA;AACpB,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,CAAC,CAAA,CAAE,OAAA,CAAQ,SAAS,EAAE,CAAA,CAAE,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AACzD,IAAA,MAAM,EAAA,GAAK,cAAA;AAAA,MAAe,IAAA;AAAA,MAAM,KAAA;AAAA,MAAO,OAAA;AAAA,MAAS,CAAC,UAC/C,KAAA,CAAM,IAAA,KAAS,CAAA,KAAA,EAAQ,KAAA,CAAM,IAAA,EAAM,CAAA,IAAA,CAAA,GAAS;AAAA,KAC9C;AACA,IAAA,IAAI,OAAO,IAAA,EAAM;AACjB,IAAA,MAAM,QAAQ,CAAA,CAAE,KAAA;AAChB,IAAA,MAAM,GAAA,GAAM,KAAA,GAAQ,CAAA,CAAE,CAAC,CAAA,CAAE,MAAA;AACzB,IAAA,GAAA,GAAM,WAAA,CAAY,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAC,CAAA,GAAI,EAAA,GAAK,SAAA,CAAU,GAAA,CAAI,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,EACxE;AACA,EAAA,OAAO,GAAA;AACT;AAEA,IAAM,cAAA,GAAiB,qBAAA;AAGvB,SAAS,qBAAA,CAAsB,MAAc,OAAA,EAAiC;AAC5E,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,MAAA,IAAU,CAAC,UAAA,CAAW,IAAI,CAAA,IAAK,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,IAAA;AACxF,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,gBAAA,CAAiB,IAAI,CAAC,CAAA;AACnD,EAAA,MAAM,IAAA,GAAO,aAAa,IAAI,CAAA;AAC9B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAI,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK;AAC9B,IAAA,MAAM,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AACf,MAAA;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,IAAI,OAAO,CAAA,EAAG;AACZ,MAAA,CAAA,GAAI,GAAA,GAAM,CAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACzB,IAAA,IAAI,gBAAgB,IAAA,CAAK,IAAI,CAAA,IAAK,UAAA,CAAW,IAAI,CAAA,EAAG;AAClD,MAAA,OAAO,YAAY,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAE,OAAA,EAAQ,IAAK,CAAA,GAAI,IAAI,MAAA,GAAS,EAAA,CAAA,GAAM,mBAAA,CAAoB,aAAA,CAAc,IAAI,CAAC,CAAA;AAAA,IAClH;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAQO,SAAS,mBAAmB,GAAA,EAAwC;AACzE,EAAA,IAAI,CAAC,KAAK,OAAO,EAAA;AAEjB,EAAA,MAAM,IAAA,GAAO,uBAAuB,GAAG,CAAA;AACvC,EAAA,IAAI,CAAC,UAAA,CAAW,IAAI,CAAA,EAAG,OAAO,IAAA;AAC9B,EAAA,OAAO,eAAA,CAAgB,IAAA,EAAM,EAAE,MAAA,EAAQ,QAAQ,CAAA;AACjD;AAeA,SAAS,iBAAA,CAAkB,MAAc,QAAA,EAA0B;AACjE,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,OAAO,IAAA,EAAM,CAAA,EAAA;AAAA,WAAA,IACR,EAAA,KAAO,KAAK,QAAA,GAAW,KAAA;AAChC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,EAAA,KAAO,KAAK,QAAA,GAAW,IAAA;AAAA,SAAA,IAClB,EAAA,KAAO,GAAA,EAAK,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAAA,SAAA,IACvB,EAAA,KAAO,GAAA,EAAK,IAAA,CAAK,GAAA,EAAI;AAAA,EAChC;AACA,EAAA,OAAO,IAAA,CAAK,CAAC,CAAA,IAAK,EAAA;AACpB;AAOA,SAAS,aAAa,IAAA,EAAsB;AAC1C,EAAA,IAAI,CAAC,UAAA,CAAW,IAAI,CAAA,EAAG,OAAO,EAAA;AAC9B,EAAA,IAAI,EAAA,GAAK,CAAA;AACT,EAAA,IAAI,KAAK,IAAA,CAAK,MAAA;AACd,EAAA,OAAO,KAAK,EAAA,EAAI;AACd,IAAA,MAAM,GAAA,GAAO,KAAK,EAAA,IAAO,CAAA;AACzB,IAAA,IAAI,WAAW,IAAA,CAAK,KAAA,CAAM,GAAG,GAAG,CAAC,GAAG,EAAA,GAAK,GAAA;AAAA,cAC/B,GAAA,GAAM,CAAA;AAAA,EAClB;AACA,EAAA,IAAI,IAAI,EAAA,GAAK,CAAA;AACb,EAAA,OAAO,CAAA,GAAI,KAAK,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,GAAI,CAAC,CAAE,CAAA,EAAG,CAAA,EAAA;AACzC,EAAA,MAAM,UAAU,CAAA,GAAI,CAAA;AACpB,EAAA,OAAO,IAAA,CAAK,WAAA,CAAY,GAAA,EAAK,OAAA,GAAU,CAAC,CAAA;AAC1C;AAQO,SAAS,gBAAgB,GAAA,EAAiD;AAC/E,EAAA,MAAM,IAAA,GAAO,GAAA,GAAM,sBAAA,CAAuB,GAAG,CAAA,GAAI,GAAA;AAEjD,EAAA,MAAM,EAAA,GAAK,CAAC,IAAA,GAAO,EAAA,GAAK,UAAA,CAAW,IAAI,CAAA,GAAI,eAAA,CAAgB,IAAA,EAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,CAAA,GAAI,IAAA;AACvF,EAAA,MAAM,QAAA,GAAW,aAAa,EAAE,CAAA;AAChC,EAAA,IAAI,QAAA,GAAW,GAAG,OAAO,EAAE,MAAM,EAAA,EAAI,WAAA,EAAa,IAAA,EAAM,cAAA,EAAgB,KAAA,EAAM;AAC9E,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,EAAA,EAAI,QAAQ,CAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,KAAA,GAAQ,CAAA,GAAI,QAAA,GAAW,KAAA;AAErC,EAAA,MAAM,IAAA,GAAO,GAAG,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,CAAE,OAAA,CAAQ,6CAA6C,IAAI,CAAA;AACzF,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,EAAA,CAAG,KAAA,CAAM,QAAQ,CAAC,CAAA;AAC7C,EAAA,OAAO,EAAE,MAAM,IAAA,CAAK,OAAA,IAAW,WAAA,EAAa,IAAA,EAAM,cAAA,EAAgB,IAAA,KAAS,IAAA,EAAK;AAClF;AC9hBA,IAAM,OAAA,GAAU,mBAAA;AAEhB,SAAS,SAAS,IAAA,EAAyC;AACzD,EAAA,OAAQ,IAAA,IAAQH,2BAAAA,CAAmB,IAAI,CAAA,IAAM,OAAA;AAC/C;AAOO,SAAS,WAAA,CAAY,KAAA,EAAgB,OAAA,GAA+B,EAAC,EAAW;AACrF,EAAA,IAAI,CAAC,SAAS,OAAO,KAAA,KAAU,YAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,OAAA;AACxE,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,MAAM,OAAO,OAAO,MAAA,CAAO,MAAA,KAAW,QAAA,GAAW,OAAO,MAAA,GAAS,IAAA;AACjE,EAAA,MAAM,KAAA,GAAQ,oBAAoB,MAAM,CAAA;AACxC,EAAA,MAAM,IAAA,GAAO,SAAS,IAAI,CAAA;AAC1B,EAAA,IAAI,EAAE,KAAA,IAAS,KAAA,KAAU,IAAA,CAAA,EAAO,OAAO,IAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AAC3C,EAAA,OAAO,OAAA,CAAQ,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA,MAAA,EAAM,IAAI,CAAA,CAAA,GAAK,CAAA,EAAA,EAAK,KAAK,CAAA,QAAA,EAAQ,IAAI,CAAA,CAAA;AACtE;AAEA,SAAS,MAAA,CAAO,QAAiC,EAAA,EAAqB;AACpE,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,KAAA,EAAO,GAAG,CAAA,KAAM,EAAA,IAAM,KAAA,IAAS,EAAA,GAAK,GAAG,CAAA;AAC9D;AAOO,SAAS,cAAA,CAAe,GAAA,EAAa,OAAA,GAA+B,EAAC,EAAW;AAGrF,EAAA,MAAM,MAAA,GAAS,GAAA,GAAM,sBAAA,CAAuB,GAAG,CAAA,GAAI,GAAA;AACnD,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,UAAA,CAAW,MAAM,GAAG,OAAO,MAAA;AAE3C,EAAA,MAAM,QAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,UAAU,2BAAA,CAA4B,MAAA,EAAQ,EAAE,mBAAA,EAAqB,IAAA,EAAM,CAAA,EAAG;AACvF,IAAA,IAAI,KAAA,GAAiB,IAAA;AACrB,IAAA,IAAI;AACF,MAAA,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA;AAAA,IACnC,CAAA,CAAA,MAAQ;AACN,MAAA,KAAA,GAAQ,EAAE,MAAA,EAAQ,MAAA,CAAO,IAAA,EAAK;AAAA,IAChC;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,GAAA,EAAK,MAAA,CAAO,GAAA,EAAK,IAAA,EAAM,WAAA,CAAY,KAAA,EAAO,OAAO,GAAG,CAAA;AAAA,EACxF;AACA,EAAA,MAAM,MAAA,GAAS,mBAAmB,MAAM,CAAA;AACxC,EAAA,KAAA,MAAW,MAAA,IAAU,yBAAA,CAA0B,MAAM,CAAA,EAAG;AACtD,IAAA,IAAI,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,EAAG;AAClC,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,MAAA,CAAO,OAAO,GAAA,EAAK,MAAA,CAAO,GAAA,EAAK,IAAA,EAAM,SAAS,aAAA,CAAc,MAAA,CAAO,OAAO,CAAC,GAAG,CAAA;AAAA,EACpG;AACA,EAAA,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AACtC,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AACzB,IAAA,GAAA,IAAO,OAAO,KAAA,CAAM,MAAA,EAAQ,IAAA,CAAK,KAAK,IAAI,IAAA,CAAK,IAAA;AAC/C,IAAA,MAAA,GAAS,IAAA,CAAK,GAAA;AAAA,EAChB;AACA,EAAA,GAAA,IAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAM1B,EAAA,IAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACnB,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,MAAA,CAAO,yCAAyC,CAAA;AAChE,IAAA,MAAM,QAAQ,GAAA,IAAO,CAAA,GAAI,IAAI,WAAA,CAAY,GAAA,EAAK,GAAG,CAAA,GAAI,EAAA;AACrD,IAAA,IAAI,KAAA,IAAS,KAAK,CAAC,MAAA,CAAO,mBAAmB,GAAG,CAAA,EAAG,KAAK,CAAA,EAAG;AACzD,MAAA,MAAM,OAAA,GAAU,WAAA,CAAY,GAAA,EAAK,MAAA,EAAQ,KAAK,CAAA;AAC9C,MAAA,MAAM,GAAA,GACJ,OAAA,CAAQ,MAAA,KAAW,QAAA,GAAW,GAAA,CAAI,MAAA,GAAS,OAAA,CAAQ,MAAA,KAAW,QAAA,IAAY,OAAA,CAAQ,EAAA,GAAK,GAAA,GAAM,QAAQ,GAAA,GAAM,EAAA;AAC7G,MAAA,IAAI,MAAM,GAAA,EAAK,GAAA,GAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,GAAI,QAAA,CAAS,cAAc,GAAA,CAAI,KAAA,CAAM,KAAK,GAAG,CAAC,CAAC,CAAA,GAAI,GAAA,CAAI,MAAM,GAAG,CAAA;AAAA,IACzG;AAAA,EACF;AACA,EAAA,OAAO,sBAAsB,GAAG,CAAA;AAClC;AAOA,SAAS,oBAAoB,IAAA,EAAuB;AAClD,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI;AACF,IAAA,KAAA,GAAQ,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA;AAChF,EAAA,IAAI,CAAC,OAAO,SAAA,CAAU,cAAA,CAAe,KAAK,KAAA,EAAO,QAAQ,GAAG,OAAO,KAAA;AACnE,EAAA,MAAM,OAAQ,KAAA,CAAkC,MAAA;AAChD,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,KAAA;AACrC,EAAA,OAAO,EAAE,OAAO,IAAA,KAAS,QAAA,IAAY,SAAS,IAAA,IAAQ,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,CAAA;AAC3E;AAOO,SAAS,sBAAsB,IAAA,EAAsB;AAC1D,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,cAAA,CAAe,IAAI,KAAK,CAAC,cAAA,CAAe,IAAI,CAAA,EAAG,OAAO,IAAA;AACpE,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,MAAA,IAAU,uBAAA,CAAwB,IAAI,CAAA,EAAG;AAClD,IAAA,IAAI,MAAA,CAAO,WAAW,UAAA,EAAY;AAClC,IAAA,MAAM,IAAA,GAAO,WAAW,MAAM,CAAA;AAC9B,IAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,CAAC,mBAAA,CAAoB,IAAI,CAAA,EAAG;AACjD,IAAA,GAAA,IAAO,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,GAAI,oBAAA;AAC1C,IAAA,MAAA,GAAS,MAAA,CAAO,GAAA;AAAA,EAClB;AACA,EAAA,OAAO,WAAW,CAAA,GAAI,IAAA,GAAO,GAAA,GAAM,IAAA,CAAK,MAAM,MAAM,CAAA;AACtD;AAUO,SAAS,iBAAiB,IAAA,EAAyC;AACxE,EAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,EAAA,OAAO,cAAA,CAAe,IAAA,EAAM,EAAE,KAAA,EAAO,MAAM,CAAA;AAC7C;AAGA,SAAS,cAAc,MAAA,EAAoC;AACzD,EAAA,MAAM,IAAA,GACJ,MAAA,CAAO,MAAA,KAAW,UAAA,GAAa,UAAA,CAAW,MAAM,CAAA,GAAI,MAAA,CAAO,MAAA,KAAW,QAAA,GAAW,UAAA,CAAW,MAAM,CAAA,GAAI,IAAA;AACxG,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AACtC,MAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,WAAA,CAAY,KAAK,CAAA;AAAA,IACpG,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,OAAO,QAAA,CAAS,aAAA,CAAc,IAAA,IAAQ,MAAA,CAAO,OAAO,CAAC,CAAA;AACvD;AAGA,IAAM,cAAA,uBAAqB,GAAA,EAAoB;AAC/C,IAAM,mBAAA,GAAsB,EAAA;AAcrB,SAAS,sBAAsB,IAAA,EAAsB;AAC1D,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,cAAA,CAAe,IAAI,GAAG,OAAO,IAAA;AAC3C,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AACtC,EAAA,IAAI,MAAA,KAAW,QAAW,OAAO,MAAA;AACjC,EAAA,MAAM,GAAA,GAAM,6BAA6B,IAAI,CAAA;AAC7C,EAAA,IAAI,cAAA,CAAe,IAAA,IAAQ,mBAAA,EAAqB,cAAA,CAAe,MAAA,CAAO,eAAe,IAAA,EAAK,CAAE,IAAA,EAAK,CAAE,KAAM,CAAA;AACzG,EAAA,cAAA,CAAe,GAAA,CAAI,MAAM,GAAG,CAAA;AAC5B,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,6BAA6B,IAAA,EAAsB;AAC1D,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,MAAA,IAAU,uBAAA,CAAwB,IAAI,CAAA,EAAG;AAGlD,IAAA,IAAI,MAAA,CAAO,WAAW,QAAA,IAAY,CAAC,OAAO,QAAA,IAAY,MAAA,CAAO,WAAW,QAAA,EAAU;AAChF,MAAA,MAAM,OAAO,MAAA,CAAO,MAAA,KAAW,UAAA,GAAa,UAAA,CAAW,MAAM,CAAA,GAAI,IAAA;AACjE,MAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,CAAC,mBAAA,CAAoB,IAAI,CAAA,EAAG;AACjD,MAAA,GAAA,IAAO,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,GAAI,oBAAA;AAC1C,MAAA,MAAA,GAAS,MAAA,CAAO,GAAA;AAChB,MAAA;AAAA,IACF;AACA,IAAA,GAAA,IAAO,KAAK,KAAA,CAAM,MAAA,EAAQ,OAAO,KAAK,CAAA,GAAI,cAAc,MAAM,CAAA;AAC9D,IAAA,MAAA,GAAS,MAAA,CAAO,GAAA;AAAA,EAClB;AACA,EAAA,OAAO,WAAW,CAAA,GAAI,IAAA,GAAO,GAAA,GAAM,IAAA,CAAK,MAAM,MAAM,CAAA;AACtD;AAGA,IAAM,aAAA,uBAAoB,GAAA,EAAoB;AAYvC,SAAS,mBAAmB,IAAA,EAAsB;AACvD,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,cAAA,CAAe,IAAI,GAAG,OAAO,IAAA;AAC3C,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AACrC,EAAA,IAAI,MAAA,KAAW,QAAW,OAAO,MAAA;AACjC,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,UAAA,GAAyC,IAAA;AAC7C,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,KAAA,MAAW,UAAU,uBAAA,CAAwB,IAAA,EAAM,EAAE,QAAA,EAAU,KAAA,EAAO,CAAA,EAAG;AACvE,IAAA,IAAI,MAAA,CAAO,MAAA,KAAW,QAAA,IAAY,MAAA,CAAO,WAAW,UAAA,EAAY;AAChE,IAAA,UAAA,KAAe,mBAAmB,IAAI,CAAA;AACtC,IAAA,OAAO,CAAA,GAAI,WAAW,MAAA,GAAS,CAAA,IAAK,WAAW,CAAC,CAAA,CAAG,GAAA,IAAO,MAAA,CAAO,KAAA,EAAO,CAAA,EAAA;AACxE,IAAA,MAAM,KAAA,GAAQ,kBAAkB,IAAA,EAAM,MAAA,CAAO,OAAO,MAAA,CAAO,GAAA,EAAK,UAAA,CAAW,CAAC,CAAE,CAAA;AAC9E,IAAA,IAAI,UAAU,IAAA,EAAM;AACpB,IAAA,GAAA,IAAO,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,GAAI,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AACzF,IAAA,MAAA,GAAS,MAAA,CAAO,GAAA;AAAA,EAClB;AACA,EAAA,MAAM,SAAS,MAAA,KAAW,CAAA,GAAI,OAAO,GAAA,GAAM,IAAA,CAAK,MAAM,MAAM,CAAA;AAC5D,EAAA,IAAI,aAAA,CAAc,IAAA,IAAQ,mBAAA,EAAqB,aAAA,CAAc,MAAA,CAAO,cAAc,IAAA,EAAK,CAAE,IAAA,EAAK,CAAE,KAAM,CAAA;AACtG,EAAA,aAAA,CAAc,GAAA,CAAI,MAAM,MAAM,CAAA;AAC9B,EAAA,OAAO,MAAA;AACT;AAeA,IAAM,QAAA,GAAW,+CAAA;AACjB,IAAM,SAAA,GAAY,YAAA;AAElB,SAAS,mBAAmB,IAAA,EAAmC;AAC7D,EAAA,MAAM,MAA2B,EAAC;AAClC,EAAA,MAAM,KAAA,GAAQ,aAAA;AACd,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,WAAS;AACP,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AACzB,IAAA,MAAM,GAAA,GAAM,CAAA,GAAI,CAAA,CAAE,KAAA,GAAQ,IAAI,IAAA,CAAK,MAAA;AACnC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAClC,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,IAAU;AACjC,MAAA,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,GAAA,EAAK;AACnB,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAA,GAAI,CAAA;AACR,MAAA,OAAO,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,EAAK,CAAA,EAAA;AAC5B,MAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AACV,MAAA,CAAA,IAAK,CAAA;AAAA,IACP;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,KAAA,EAAO,GAAA,EAAK,MAAM,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA,EAAG,MAAM,CAAA;AACrF,IAAA,IAAI,CAAC,CAAA,EAAG;AACR,IAAA,KAAA,GAAQ,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,CAAC,EAAE,MAAA,GAAS,CAAA;AAAA,EAClC;AACA,EAAA,OAAO,GAAA;AACT;AAUA,SAAS,iBAAA,CAAkB,IAAA,EAAc,KAAA,EAAe,GAAA,EAAa,SAAA,EAA6C;AAChH,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AACpC,EAAA,IAAI,YAAA,CAAa,KAAK,MAAM,CAAA,IAAK,OAAO,QAAA,CAAS,GAAG,GAAG,OAAO,IAAA;AAC9D,EAAA,IAAI,SAAA,CAAU,QAAS,SAAA,CAAU,KAAA,IAAS,OAAO,QAAA,CAAS,GAAG,GAAI,OAAO,IAAA;AACxE,EAAA,IAAI,IAAA,CAAK,QAAQ,CAAC,CAAA,KAAM,OAAO,IAAA,CAAK,GAAG,CAAA,KAAM,GAAA,EAAK,OAAO,IAAA;AACzD,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,OAAO,SAAA,CAAU,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG,KAAA,EAAA;AAClC,EAAA,OAAO,GAAA,CAAI,OAAO,KAAK,CAAA;AACzB;;;AC/RA,IAAMG,iBAAAA,uBAAuB,GAAA,CAAI,CAAC,IAAI,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAC,CAAA;AAG/D,IAAME,aAAAA,GAAe,oBAAA;AAGrB,SAAS,WAAW,MAAA,EAAwB;AAC1C,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,IAAK,EAAC,EAAG,MAAA;AACpC;AAGA,SAAS,aAAA,CAAc,MAAc,KAAA,EAA8B;AACjE,EAAA,MAAM,KAAA,GAAQ,IAAI,MAAA,CAAO,CAAA,gBAAA,EAAmB,QAAQ,CAAC,CAAA,GAAA,CAAK,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACrE,EAAA,OAAO,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AAC5B;AAeA,SAAS,aAAa,IAAA,EAAsB;AAC1C,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,KAAA,MAAW,MAAM,IAAA,EAAM;AACrB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,SAAS,OAAA,GAAU,KAAA;AAAA,WAAA,IACd,EAAA,KAAO,MAAM,OAAA,GAAU,IAAA;AAAA,WAAA,IACvB,EAAA,KAAO,KAAK,QAAA,GAAW,KAAA;AAChC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,EAAA,KAAO,KAAK,QAAA,GAAW,IAAA;AAAA,SAAA,IAClB,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK,KAAA,EAAA;AAAA,SAAA,IAC1B,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK,KAAA,EAAA;AAAA,EACrC;AACA,EAAA,OAAO,KAAA;AACT;AAQO,IAAM,iBAAN,MAAqB;AAAA,EAClB,IAAA,GAAa,EAAE,IAAA,EAAM,MAAA,EAAO;AAAA;AAAA,EAE5B,IAAA,GAAO,EAAA;AAAA;AAAA,EAEP,IAAA,GAAO,EAAA;AAAA;AAAA,EAEP,OAAA,GAAU,KAAA;AAAA;AAAA,EAEV,SAAA,GAAY,CAAA;AAAA,EAEpB,KAAK,IAAA,EAAsB;AACzB,IAAA,IAAI,GAAA,GAAM,EAAA;AACV,IAAA,KAAA,MAAW,EAAA,IAAM,IAAA,EAAM,GAAA,IAAO,IAAA,CAAK,SAAS,EAAE,CAAA;AAC9C,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,KAAA,GAAgB;AACd,IAAA,IAAI,GAAA,GAAM,EAAA;AACV,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,WAAA,EAAa;AAClC,MAAA,GAAA,IAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,KAAK,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,MAAA,GAAS,IAAA,GAAO,EAAA,CAAA;AACjE,MAAA,IAAA,CAAK,IAAA,GAAO,EAAE,IAAA,EAAM,MAAA,EAAO;AAAA,IAC7B;AACA,IAAA,GAAA,IAAO,IAAA,CAAK,IAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,EAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,EAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AACf,IAAA,IAAA,CAAK,SAAA,GAAY,CAAA;AACjB,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,SAAS,EAAA,EAAoB;AACnC,IAAA,IAAI,EAAA,KAAO,IAAA,EAAM,OAAO,IAAA,CAAK,OAAA,EAAQ;AACrC,IAAA,IAAA,CAAK,IAAA,IAAQ,EAAA;AACb,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAI,IAAA,CAAK,YAAY,CAAA,EAAG;AAEtB,QAAA,IAAA,CAAK,SAAA,EAAA;AACL,QAAA,OAAO,EAAA;AAAA,MACT;AACA,MAAA,OAAO,EAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,IAAA,IAAQ,EAAA;AACb,IAAA,OAAO,KAAK,aAAA,EAAc;AAAA,EAC5B;AAAA;AAAA,EAGQ,aAAA,GAAwB;AAC9B,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,IAAI,IAAA,CAAK,SAAS,cAAA,EAAgB;AAEhC,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM,CAAC,CAAA;AAAA,IAClC;AACA,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,cAAA,IAAkB,IAAA,CAAK,SAAS,aAAA,EAAe;AAC/D,MAAA,MAAMC,OAAAA,GAAS,aAAA,CAAc,IAAA,CAAK,IAAA,EAAM,KAAK,KAAK,CAAA;AAClD,MAAA,IAAIA,OAAAA,KAAW,IAAA,KAAS,IAAA,CAAK,IAAA,CAAK,MAAA,GAASA,QAAO,MAAA,IAAU,KAAA,CAAM,IAAA,CAAKA,OAAM,CAAA,CAAA,EAAI;AAI/E,QAAA,MAAMC,KAAAA,GAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAMD,QAAO,MAAM,CAAA;AAC1C,QAAA,IAAI,KAAK,IAAA,KAAS,cAAA,IAAkB,WAAW,IAAA,CAAKC,KAAI,GAAG,OAAO,EAAA;AAClE,QAAA,OAAO,IAAA,CAAK,OAAA,CAAQA,KAAAA,EAAM,CAAC,CAAA;AAAA,MAC7B;AACA,MAAA,IAAI,CAAC,kBAAA,CAAmB,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAAG;AAEvC,QAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM,CAAC,CAAA;AAAA,MAClC;AACA,MAAA,OAAO,EAAA;AAAA,IACT;AACA,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,WAAA,EAAa,OAAO,EAAA;AAEtC,IAAA,IAAI,CAAC,gBAAA,CAAiB,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,IAAK,CAAC,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAAG;AACpE,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM,CAAC,CAAA;AAAA,IAClC;AACA,IAAA,MAAM,SAASF,aAAAA,CAAa,IAAA,CAAK,IAAA,CAAK,IAAI,IAAI,CAAC,CAAA;AAC/C,IAAA,IAAI,CAAC,QAAQ,OAAO,EAAA;AACpB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,OAAO,MAAM,CAAA;AAC1C,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAK,EAAG,OAAO,EAAA;AACzB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,EAAU,CAAE,CAAC,CAAA;AAChC,IAAA,IAAI,KAAA,KAAU,GAAA,IAAO,KAAA,KAAU,GAAA,EAAK,OAAO,EAAA;AAC3C,IAAA,IAAI,KAAA,KAAU,GAAA,IAAO,KAAA,KAAU,GAAA,EAAK;AAGlC,MAAA,IAAI,cAAA,CAAe,IAAI,CAAA,KAAM,MAAA,EAAQ;AACnC,QAAA,IAAA,CAAK,IAAA,GAAO,EAAE,IAAA,EAAM,aAAA,EAAe,OAAO,UAAA,CAAW,MAAM,CAAA,EAAG,OAAA,EAAS,CAAA,EAAE;AACzE,QAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,MAC7B;AACA,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM,CAAC,CAAA;AAAA,EAClC;AAAA;AAAA,EAGQ,OAAA,CAAQ,OAAe,KAAA,EAAuB;AACpD,IAAA,IAAA,CAAK,IAAA,GAAO,EAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,OAAA,GAAkB;AACxB,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,IAAA,CAAK,IAAA,GAAO,EAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,EAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AACf,IAAA,IAAA,CAAK,SAAA,GAAY,CAAA;AACjB,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAElB,IAAA,IAAI,IAAA,CAAK,SAAS,cAAA,EAAgB;AAChC,MAAA,MAAM,OAAA,GAAU,KAAK,KAAA,GAAQ,CAAA,GAAI,KAAK,OAAA,CAAQA,aAAAA,EAAc,EAAE,CAAA,GAAI,IAAA;AAClE,MAAA,IAAI,IAAA,CAAK,OAAO,IAAA,CAAK,OAAO,GAAG,IAAA,CAAK,IAAA,GAAO,EAAE,IAAA,EAAM,MAAA,EAAO;AAC1D,MAAA,OAAO,IAAA,GAAO,IAAA;AAAA,IAChB;AAEA,IAAA,IAAI,IAAA,CAAK,SAAS,cAAA,EAAgB;AAChC,MAAA,MAAM,MAAA,GAAS,aAAA,CAAc,IAAA,EAAM,IAAA,CAAK,KAAK,CAAA;AAC7C,MAAA,MAAM,UAAU,MAAA,KAAW,IAAA,GAAO,KAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA,GAAI,IAAA;AAC9D,MAAA,IAAI,IAAA,CAAK,OAAO,IAAA,CAAK,OAAO,GAAG,IAAA,CAAK,IAAA,GAAO,EAAE,IAAA,EAAM,MAAA,EAAO;AAE1D,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA;AAChC,MAAA,MAAM,cAAc,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,IAAQ,MAAA,EAAQ,UAAU,CAAA,CAAE,CAAA;AAC5D,MAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,WAAW,CAAA,GAAI,IAAA;AAAA,IACtC;AAEA,IAAA,IAAI,IAAA,CAAK,SAAS,aAAA,EAAe;AAC/B,MAAA,MAAM,MAAA,GAAS,aAAA,CAAc,IAAA,EAAM,IAAA,CAAK,KAAK,CAAA;AAC7C,MAAA,MAAM,UAAU,MAAA,KAAW,IAAA,GAAO,KAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA,GAAI,IAAA;AAC9D,MAAA,IAAA,CAAK,OAAA,IAAW,aAAa,OAAO,CAAA;AACpC,MAAA,IAAI,KAAK,OAAA,IAAW,CAAA,OAAQ,IAAA,GAAO,EAAE,MAAM,MAAA,EAAO;AAClD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA;AAChC,MAAA,MAAM,cAAc,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,IAAQ,MAAA,EAAQ,UAAU,CAAA,CAAE,CAAA;AAC5D,MAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,WAAW,CAAA,GAAI,IAAA;AAAA,IACtC;AAEA,IAAA,IAAI,IAAA,CAAK,SAAS,WAAA,EAAa;AAC7B,MAAA,MAAM,MAAA,GAAS,aAAA,CAAc,IAAA,EAAM,IAAA,CAAK,KAAK,CAAA;AAC7C,MAAA,IAAI,WAAW,IAAA,EAAM;AAEnB,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAClC,QAAA,IAAA,CAAK,IAAA,GAAO,EAAE,IAAA,EAAM,MAAA,EAAO;AAC3B,QAAA,OAAO,GAAA,GAAM,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA;AAAA,MACrC;AACA,MAAA,IAAA,CAAK,GAAA,CAAI,KAAK,IAAI,CAAA;AAClB,MAAA,IAAA,CAAK,SAAS,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAC,CAAA;AAC5C,MAAA,OAAO,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAAA,IAClC;AAEA,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,IAAI,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,YAAA,CAAa,IAAA,EAAc,IAAA,GAAO,IAAA,EAAc;AACtD,IAAA,MAAM,MAAA,GAASA,aAAAA,CAAa,IAAA,CAAK,IAAI,IAAI,CAAC,CAAA;AAC1C,IAAA,IAAI,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,CAAC,MAAA,EAAQ;AAGxC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,MAAA,GAAS,cAAc,IAAI,CAAA;AACjC,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,IAAA,CAAK,IAAA,GAAO,EAAE,IAAA,EAAM,cAAA,EAAgB,MAAA,EAAQ,IAAI,WAAA,CAAY,MAAM,CAAA,EAAG,KAAA,EAAO,CAAA,EAAE;AAAA,QAChF;AAAA,MACF;AACA,MAAA,OAAO,IAAA,GAAO,IAAA;AAAA,IAChB;AACA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM,CAAA;AAC/B,IAAA,MAAM,OAAA,GAAU,KAAK,SAAA,EAAU;AAC/B,IAAA,IAAI,QAAQ,UAAA,CAAW,GAAG,KAAK,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AACtD,MAAA,MAAM,MAAA,GAAS,cAAc,IAAI,CAAA;AACjC,MAAA,IAAI,UAAUF,iBAAAA,CAAiB,GAAA,CAAI,OAAO,IAAA,CAAK,WAAA,EAAa,CAAA,EAAG;AAC7D,QAAA,IAAA,CAAK,IAAA,GAAO,EAAE,IAAA,EAAM,cAAA,EAAgB,QAAQ,IAAI,WAAA,CAAY,MAAM,CAAA,EAAG,KAAA,EAAM;AAC3E,QAAA,OAAO,IAAA,GAAO,IAAA;AAAA,MAChB;AACA,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,IAAA,CAAK,IAAA,GAAO,EAAE,IAAA,EAAM,cAAA,EAAgB,QAAQ,IAAI,WAAA,CAAY,MAAM,CAAA,EAAG,KAAA,EAAM;AAAA,MAC7E;AACA,MAAA,OAAO,IAAA,GAAO,IAAA;AAAA,IAChB;AACA,IAAA,IAAI,QAAQ,UAAA,CAAW,GAAG,KAAK,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AACtD,MAAA,MAAM,SAAA,GAAkB,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,GAAA,EAAK,CAAC,IAAI,CAAA,EAAG,QAAA,EAAU,CAAC,IAAI,CAAA,EAAE;AAClF,MAAA,IAAA,CAAK,IAAA,GAAO,SAAA;AACZ,MAAA,OAAO,IAAA,CAAK,gBAAgB,SAAS,CAAA;AAAA,IACvC;AACA,IAAA,OAAO,IAAA,GAAO,IAAA;AAAA,EAChB;AAAA;AAAA,EAGQ,gBAAgB,IAAA,EAAoD;AAC1E,IAAA,MAAM,SAAS,cAAA,CAAe,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA;AACtD,IAAA,IAAI,MAAA,KAAW,aAAa,OAAO,EAAA;AACnC,IAAA,IAAI,WAAW,UAAA,EAAY;AACzB,MAAA,IAAA,CAAK,IAAA,GAAO,EAAE,IAAA,EAAM,MAAA,EAAO;AAC3B,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAAA,IAC/B;AACA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,YAAA,CAAa,CAAC,CAAA,EAAG,CAAC,CAAA;AACzE,IAAA,IAAA,CAAK,IAAA,GACH,OAAA,GAAU,CAAA,GACN,EAAE,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,OAAA,EAAQ,GAClD,EAAE,MAAM,MAAA,EAAO;AACrB,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAAA,EACpC;AACF;AAGO,SAAS,sBAAsB,MAAA,EAAwB;AAC5D,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,GAAG,GAAG,OAAO,MAAA;AAClC,EAAA,MAAM,IAAA,GAAO,IAAI,cAAA,EAAe;AAChC,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA,GAAI,KAAK,KAAA,EAAM;AACxC;;;ACtRA,IAAM,MAAA,GAAS,cAAA;AACf,IAAM,GAAA,GAAM,UAAA;AACZ,IAAMK,eAAAA,GAAiB,mCAAA;AAShB,IAAM,mBAAN,MAAuB;AAAA;AAAA,EAEpB,OAAA,GAAU,EAAA;AAAA,EAElB,KAAK,IAAA,EAAsB;AACzB,IAAA,IAAI,GAAA,GAAM,EAAA;AACV,IAAA,KAAA,MAAW,EAAA,IAAM,IAAA,EAAM,GAAA,IAAO,IAAA,CAAK,SAAS,EAAE,CAAA;AAC9C,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,KAAA,GAAgB;AACd,IAAA,MAAM,MAAM,IAAA,CAAK,OAAA;AACjB,IAAA,IAAA,CAAK,OAAA,GAAU,EAAA;AACf,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,SAAS,EAAA,EAAoB;AACnC,IAAA,IAAI,SAAA,GAAY,KAAK,OAAA,GAAU,EAAA;AAC/B,IAAA,IAAI,GAAA,GAAM,EAAA;AACV,IAAA,OAAO,SAAA,IAAa,EAAE,SAAA,CAAU,UAAA,CAAW,GAAG,CAAA,IAAK,GAAA,CAAI,UAAA,CAAW,gBAAA,CAAiB,SAAS,CAAC,CAAA,CAAA,EAAI;AAC/F,MAAA,MAAM,IAAA,GAAO,SAAA,CAAU,OAAA,CAAQ,GAAA,EAAK,CAAC,CAAA;AACrC,MAAA,IAAI,OAAO,CAAA,EAAG;AACZ,QAAA,GAAA,IAAO,SAAA;AACP,QAAA,SAAA,GAAY,EAAA;AAAA,MACd,CAAA,MAAO;AACL,QAAA,GAAA,IAAO,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA;AAC9B,QAAA,SAAA,GAAY,SAAA,CAAU,MAAM,IAAI,CAAA;AAAA,MAClC;AAAA,IACF;AACA,IAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,KAAM,GAAA,EAAK;AACvC,MAAA,IAAA,CAAK,OAAA,GAAU,EAAA;AACf,MAAA,OAAO,GAAA,GAAM,GAAA;AAAA,IACf;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,SAAA;AACf,IAAA,OAAO,GAAA;AAAA,EACT;AACF;AAEO,IAAM,0BAAN,MAA8B;AAAA;AAAA,EAE3B,SAAA,GAAY,IAAI,gBAAA,EAAiB;AAAA;AAAA,EAEjC,OAAA,GAAU,EAAA;AAAA;AAAA,EAEV,KAAA,GAAQ,CAAA;AAAA,EACR,QAAA,GAAW,KAAA;AAAA;AAAA,EAEX,MAAA,GAAS,KAAA;AAAA,EAEjB,KAAK,IAAA,EAAsB;AACzB,IAAA,OAAO,KAAK,YAAA,CAAa,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EACpD;AAAA,EAEQ,aAAa,IAAA,EAAsB;AACzC,IAAA,IAAI,GAAA,GAAM,EAAA;AACV,IAAA,KAAA,MAAW,EAAA,IAAM,IAAA,EAAM,GAAA,IAAO,IAAA,CAAK,SAAS,EAAE,CAAA;AAC9C,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,KAAA,GAAgB;AACd,IAAA,MAAM,OAAO,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AACrD,IAAA,MAAM,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,SAAS,IAAA,GAAO,EAAA,CAAA;AACxD,IAAA,IAAA,CAAK,OAAA,GAAU,EAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,CAAA;AACb,IAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAChB,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,SAAS,EAAA,EAAoB;AACnC,IAAA,IAAI,KAAK,KAAA,GAAQ,CAAA,EAAG,OAAO,IAAA,CAAK,aAAa,EAAE,CAAA;AAC/C,IAAA,IAAI,SAAA,GAAY,KAAK,OAAA,GAAU,EAAA;AAC/B,IAAA,IAAI,GAAA,GAAM,EAAA;AAEV,IAAA,OAAO,SAAA,IAAa,EAAE,SAAA,CAAU,UAAA,CAAW,GAAG,CAAA,IAAK,MAAA,CAAO,UAAA,CAAW,gBAAA,CAAiB,SAAS,CAAC,CAAA,CAAA,EAAI;AAClG,MAAA,MAAM,IAAA,GAAO,SAAA,CAAU,OAAA,CAAQ,GAAA,EAAK,CAAC,CAAA;AACrC,MAAA,IAAI,OAAO,CAAA,EAAG;AACZ,QAAA,GAAA,IAAO,SAAA;AACP,QAAA,SAAA,GAAY,EAAA;AAAA,MACd,CAAA,MAAO;AACL,QAAA,GAAA,IAAO,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA;AAC9B,QAAA,SAAA,GAAY,SAAA,CAAU,MAAM,IAAI,CAAA;AAAA,MAClC;AAAA,IACF;AACA,IAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,KAAM,MAAA,EAAQ;AAC1C,MAAA,IAAA,CAAK,OAAA,GAAU,EAAA;AACf,MAAA,IAAA,CAAK,KAAA,GAAQ,CAAA;AACb,MAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAChB,MAAA,OAAO,GAAA,GAAM,GAAA;AAAA,IACf;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,SAAA;AACf,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,aAAa,EAAA,EAAoB;AACvC,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,MAAA,OAAO,EAAA,KAAO,GAAA,GAAM,GAAA,GAAM,CAAA,EAAA,EAAK,EAAE,CAAA,CAAA;AAAA,IACnC;AACA,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,MAAA,OAAO,EAAA;AAAA,IACT;AACA,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,IAAI,EAAA,KAAO,GAAA,EAAK,IAAA,CAAK,QAAA,GAAW,KAAA;AAChC,MAAA,OAAO,EAAA;AAAA,IACT;AACA,IAAA,IAAI,EAAA,KAAO,GAAA,EAAK,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,SAAA,IACvB,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,OAAU,KAAA,IAAS,CAAA;AAAA,SAAA,IACxC,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,OAAU,KAAA,IAAS,CAAA;AACjD,IAAA,OAAO,EAAA;AAAA,EACT;AACF;AAGO,SAAS,yBAAyB,MAAA,EAAwB;AAC/D,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IAAK,CAACA,eAAAA,CAAe,IAAA,CAAK,MAAM,CAAA,EAAG,OAAO,MAAA;AACrE,EAAA,MAAM,SAAA,GAAY,IAAI,uBAAA,EAAwB;AAC9C,EAAA,OAAO,SAAA,CAAU,IAAA,CAAK,MAAM,CAAA,GAAI,UAAU,KAAA,EAAM;AAClD;AAMO,SAAS,4BAA4B,MAAA,EAAwB;AAClE,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAC5B,EAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,GAAG,KAAK,CAAC,OAAA,CAAQ,QAAA,CAAS,GAAG,KAAK,CAAC,OAAA,CAAQ,QAAA,CAAS,cAAc,GAAG,OAAO,MAAA;AACpG,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACzC,IAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,cAAA,CAAe,KAAA,CAAM,MAAM,CAAA,GAAI,KAAA,CAAM,IAAA,EAAK,GAAI,MAAA;AAAA,EACpF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;ACnJA,IAAM,UAAA,GAAa,GAAA;AAEZ,IAAM,qBAAN,MAAyB;AAAA,EACtB,IAAA,GAAa,MAAA;AAAA;AAAA,EAEb,IAAA,GAAO,EAAA;AAAA,EACP,KAAA,GAAQ,CAAA;AAAA,EACR,QAAA,GAAW,KAAA;AAAA,EACX,MAAA,GAAS,KAAA;AAAA,EAEjB,KAAK,IAAA,EAAsB;AACzB,IAAA,IAAI,GAAA,GAAM,EAAA;AACV,IAAA,KAAA,MAAW,EAAA,IAAM,IAAA,EAAM,GAAA,IAAO,IAAA,CAAK,SAAS,EAAE,CAAA;AAC9C,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,KAAA,GAAgB;AACd,IAAA,MAAM,GAAA,GAAM,KAAK,IAAA,KAAS,MAAA,GAAS,KAAK,IAAA,CAAK,IAAI,KAAK,IAAA,CAAK,IAAA;AAC3D,IAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,EAAA;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,CAAA;AACb,IAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA,EAGQ,MAAM,EAAA,EAAqB;AACjC,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,IAAI,EAAA,KAAO,IAAA,EAAM,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,WAAA,IACtB,EAAA,KAAO,GAAA,EAAK,IAAA,CAAK,QAAA,GAAW,KAAA;AACrC,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,EAAA,KAAO,GAAA,EAAK,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,SAAA,IACvB,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,OAAU,KAAA,IAAS,CAAA;AAAA,SAAA,IACxC,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK;AACjC,MAAA,IAAA,CAAK,KAAA,IAAS,CAAA;AACd,MAAA,OAAO,KAAK,KAAA,KAAU,CAAA;AAAA,IACxB;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,SAAS,EAAA,EAAoB;AACnC,IAAA,QAAQ,KAAK,IAAA;AAAM,MACjB,KAAK,MAAA,EAAQ;AACX,QAAA,IAAI,IAAA,CAAK,IAAA,KAAS,EAAA,IAAM,EAAA,KAAO,GAAA,EAAK;AAClC,UAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AACZ,UAAA,OAAO,EAAA;AAAA,QACT;AACA,QAAA,IAAI,IAAA,CAAK,IAAA,KAAS,GAAA,IAAO,EAAA,KAAO,GAAA,EAAK;AACnC,UAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,UAAA,OAAO,EAAA;AAAA,QACT;AACA,QAAA,IAAI,IAAA,CAAK,IAAA,KAAS,IAAA,IAAQ,EAAA,KAAO,GAAA,EAAK;AACpC,UAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AACZ,UAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AACZ,UAAA,IAAA,CAAK,KAAA,GAAQ,CAAA;AACb,UAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAChB,UAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,UAAA,OAAO,EAAA;AAAA,QACT;AACA,QAAA,IAAI,IAAA,CAAK,IAAA,KAAS,EAAA,EAAI,OAAO,EAAA;AAC7B,QAAA,MAAM,MAAM,IAAA,CAAK,IAAA;AACjB,QAAA,IAAA,CAAK,IAAA,GAAO,EAAA;AACZ,QAAA,OAAO,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,EAAE,CAAA;AAAA,MAC/B;AAAA,MACA,KAAK,MAAA,EAAQ;AACX,QAAA,IAAA,CAAK,IAAA,IAAQ,EAAA;AACb,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA;AAC5B,QAAA,MAAM,MAAA,GAAS,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACvC,QAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,UAAA,MAAM,MAAM,IAAA,CAAK,IAAA;AACjB,UAAA,IAAA,CAAK,IAAA,GAAO,EAAA;AACZ,UAAA,IAAI,MAAA,EAAQ;AACV,YAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AACZ,YAAA,OAAO,GAAA;AAAA,UACT;AACA,UAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AACZ,UAAA,OAAO,GAAA;AAAA,QACT;AACA,QAAA,IAAI,WAAW,UAAA,IAAc,MAAA,IAAU,IAAA,CAAK,IAAA,CAAK,SAAS,UAAA,EAAY;AACpE,UAAA,MAAM,GAAA,GAAM,CAAA,EAAA,EAAK,IAAA,CAAK,IAAI,CAAA,CAAA;AAC1B,UAAA,IAAA,CAAK,IAAA,GAAO,EAAA;AACZ,UAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AACZ,UAAA,OAAO,GAAA;AAAA,QACT;AACA,QAAA,OAAO,EAAA;AAAA,MACT;AAAA,MACA,KAAK,MAAA,EAAQ;AACX,QAAA,IAAI,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA,OAAQ,IAAA,GAAO,MAAA;AAChC,QAAA,OAAO,EAAA;AAAA,MACT;AAAA,MACA,KAAK,MAAA,EAAQ;AACX,QAAA,IAAA,CAAK,IAAA,IAAQ,EAAA;AACb,QAAA,IAAI,iBAAA,CAAkB,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAAG;AACrC,UAAA,IAAA,CAAK,IAAA,GAAO,EAAA;AACZ,UAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AACZ,UAAA,OAAO,EAAA;AAAA,QACT;AACA,QAAA,IAAI,oBAAA,CAAqB,IAAA,CAAK,IAAA,CAAK,IAAI,GAAG,OAAO,EAAA;AAEjD,QAAA,MAAM,MAAM,IAAA,CAAK,IAAA;AACjB,QAAA,IAAA,CAAK,IAAA,GAAO,EAAA;AACZ,QAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AACZ,QAAA,OAAO,GAAA;AAAA,MACT;AAAA;AACF,EACF;AACF;AAGO,SAAS,mBAAmB,MAAA,EAAwB;AACzD,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,GAAG,OAAO,MAAA;AACpC,EAAA,MAAM,SAAA,GAAY,IAAI,kBAAA,EAAmB;AACzC,EAAA,OAAO,SAAA,CAAU,IAAA,CAAK,MAAM,CAAA,GAAI,UAAU,KAAA,EAAM;AAClD;;;ACxHA,SAAS,IAAA,CAAK,MAAc,GAAA,EAAqB;AAC/C,EAAA,OAAO,KAAK,MAAA,GAAS,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAM,CAAC,CAAC,CAAA,CAAE,OAAA,EAAS,CAAA,MAAA,CAAA,GAAM,IAAA;AACnF;AAEA,SAAS,eAAe,IAAA,EAA6B;AACnD,EAAA,IAAI,IAAA,GAAO,KAAK,IAAA,EAAK;AACrB,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,gEAAgE,CAAA;AACzF,EAAA,IAAI,KAAA,EAAO,IAAA,GAAO,KAAA,CAAM,CAAC,EAAG,IAAA,EAAK;AACjC,EAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,GAAG,GAAG,OAAO,IAAA;AAClC,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AACvC,IAAA,IAAI,CAAC,UAAU,OAAO,MAAA,KAAW,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG,OAAO,IAAA;AAC3E,IAAA,MAAM,MAAA,GAAS,MAAA;AACf,IAAA,IAAI,OAAO,OAAO,MAAA,KAAW,QAAA,IAAY,CAAC,MAAA,CAAO,MAAA,CAAO,IAAA,EAAK,EAAG,OAAO,IAAA;AACvE,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA;AAC9C,IAAA,MAAM,KAAA,GAAQ,oBAAoB,MAAM,CAAA;AACxC,IAAA,OAAO,KAAA,GAAQ,CAAA,EAAG,IAAI,CAAA,MAAA,EAAM,KAAK,CAAA,CAAA,GAAK,IAAA;AAAA,EACxC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,kBAAkB,QAAA,EAA0B;AACnD,EAAA,KAAA,MAAW,GAAA,IAAO,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA,EAAG;AACtC,IAAA,MAAM,OAAO,GAAA,CACV,OAAA,CAAQ,8CAA8C,EAAE,CAAA,CAExD,QAAQ,qCAAA,EAAuC,EAAE,CAAA,CACjD,OAAA,CAAQ,WAAW,EAAE,CAAA,CACrB,QAAQ,MAAA,EAAQ,GAAG,EACnB,IAAA,EAAK;AACR,IAAA,IAAI,MAAM,OAAO,IAAA;AAAA,EACnB;AACA,EAAA,OAAO,EAAA;AACT;AAGO,SAAS,aAAA,CAAc,GAAA,EAAgC,GAAA,GAAM,EAAA,EAAY;AAC9E,EAAA,IAAI,CAAC,KAAK,OAAO,EAAA;AAEjB,EAAA,MAAM,IAAA,GAAO,uBAAuB,GAAG,CAAA;AACvC,EAAA,IAAI,CAAC,UAAA,CAAW,IAAI,CAAA,EAAG,OAAO,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CAAE,IAAA,IAAQ,GAAG,CAAA;AACxE,EAAA,MAAM,KAAA,GAAQ,eAAe,IAAI,CAAA;AACjC,EAAA,IAAI,KAAA,EAAO,OAAO,IAAA,CAAK,KAAA,EAAO,GAAG,CAAA;AACjC,EAAA,MAAM,IAAA,GAAO,iBAAA,CAAkB,kBAAA,CAAmB,IAAI,CAAC,CAAA;AAGvD,EAAA,IAAI,IAAA,EAAM,OAAO,IAAA,CAAK,IAAA,EAAM,GAAG,CAAA;AAC/B,EAAA,MAAM,IAAA,GAAO,cAAc,IAAI,CAAA;AAC/B,EAAA,OAAO,KAAK,IAAA,GAAO,YAAA,CAAa,IAAI,CAAA,GAAI,qBAAqB,GAAG,CAAA;AAClE;AAQO,SAAS,sBAAsB,KAAA,EAAiD;AACrF,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,IAAA;AAC1B,EAAA,OAAO,eAAe,KAAK,CAAA,GAAI,aAAA,CAAc,KAAA,EAAO,GAAG,CAAA,GAAI,KAAA;AAC7D;;;AC5EA,SAASN,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAGO,SAAS,uCAAA,CACd,UACA,UAAA,EACkB;AAClB,EAAA,IAAI,SAAS,IAAA,CAAK,IAAA,KAAS,cAAc,QAAA,CAAS,IAAA,CAAK,WAAW,UAAA,EAAY;AAC5E,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,UAAU,CAAA;AAAA,EAChC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,CAACA,SAAAA,CAAS,MAAM,CAAA,EAAG,OAAO,QAAA;AAK9B,EAAA,MAAM,mBACJ,OAAO,MAAA,CAAO,UAAA,KAAe,QAAA,IAC7B,OAAO,MAAA,CAAO,SAAA,KAAc,QAAA,IAC5B,KAAA,CAAM,QAAQ,MAAA,CAAO,eAAe,KACpC,KAAA,CAAM,OAAA,CAAQ,OAAO,cAAc,CAAA;AACrC,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,MAAA,IAAa,CAAC,kBAAkB,OAAO,QAAA;AAE7D,EAAA,MAAM,KAAA,GACJ,OAAO,MAAA,CAAO,UAAA,KAAe,QAAA,GACzB,MAAA,CAAO,UAAA,GACP,OAAO,MAAA,CAAO,SAAA,KAAc,QAAA,GAC1B,MAAA,CAAO,SAAA,GACP,IAAA;AACR,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,SAAA,IAAa,MAAA,CAAO,mBAAmB,MAAA,CAAO,cAAA;AAC7E,EAAA,IAAI,UAAU,IAAA,IAAQ,CAAC,MAAM,OAAA,CAAQ,eAAe,GAAG,OAAO,QAAA;AAC9D,EAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,OAAA,CAAQ,CAAC,SAAA,KAAc;AACvD,IAAA,IAAI,CAACA,SAAAA,CAAS,SAAS,CAAA,SAAU,EAAC;AAKlC,IAAA,MAAM,EAAE,MAAA,EAAQ,WAAA,EAAa,GAAG,gBAAe,GAAI,SAAA;AACnD,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,SAAA,CAAU,OAAO,CAAA,GAAI,SAAA,CAAU,UAAU,EAAC;AACxE,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,cAAA,IAAkB,SAAA,CAAU,aAAA,IAAiB,EAAA;AACtE,IAAA,MAAM,aAAA,GACJ,OAAO,MAAA,KAAW,QAAA,IAClB,OAAO,SAAA,CAAU,MAAM,CAAA,IACvB,MAAA,IAAU,KACV,MAAA,GAAS,OAAA,CAAQ,MAAA,GACb,OAAA,CAAQ,MAAM,CAAA,GACd,MAAA;AACN,IAAA,OAAO,CAAC;AAAA,MACN,GAAG,cAAA;AAAA,MACH,MAAM,OAAO,SAAA,CAAU,IAAA,KAAS,QAAA,GAAW,UAAU,IAAA,GAAO,iBAAA;AAAA,MAC5D,UAAU,OAAO,SAAA,CAAU,QAAA,KAAa,QAAA,GAAW,UAAU,QAAA,GAAW,EAAA;AAAA,MACxE,OAAA;AAAA,MACA,gBACE,OAAO,aAAA,KAAkB,QAAA,GAAW,aAAA,GAAgB,OAAO,aAAa,CAAA;AAAA,MAC1E,aACE,OAAO,SAAA,CAAU,WAAA,KAAgB,QAAA,GAAW,UAAU,WAAA,GAAc;AAAA,KACvE,CAAA;AAAA,EACH,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH,IAAA,EAAM;AAAA,MACJ,GAAG,QAAA,CAAS,IAAA;AAAA,MACZ,OAAO,EAAE,GAAG,SAAS,IAAA,CAAK,KAAA,EAAO,OAAO,SAAA;AAAU;AACpD,GACF;AACF;;;ACmFO,SAAS,eAAe,OAAA,EAA6B;AAC1D,EAAA,OAAA,CACG,OAAA,CAAQ,UAAU,IAAA,IAAQ,MAAA,CAAO,KAAK,OAAA,CAAQ,KAAK,CAAA,CAAE,MAAA,KAAW,CAAA,MAChE,OAAA,CAAQ,oBAAoB,IAAA,IAC3B,OAAA,CAAQ,gBAAgB,MAAA,KAAW,CAAA,CAAA,KACpC,QAAQ,OAAA,KAAY,IAAA,IAAQ,OAAA,CAAQ,OAAA,CAAQ,MAAA,KAAW,CAAA,CAAA;AAE5D;;;ACpJA,SAASA,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAQO,SAAS,uBACd,QAAA,EACyB;AACzB,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AAElD,EAAA,MAAM,WAAA,GAAc,CAClB,MAAA,EACA,MAAA,KACG;AACH,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,eAAA,CAAgB,KAAK,CAAA;AAAA,IACrC;AAAA,EACF,CAAA;AAEA,EAAA,WAAA,CAAY,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,OAAA,EAAS,KAAK,CAAA;AAEhD,EAAA,KAAA,MAAW,CAAC,OAAA,EAAS,IAAI,CAAA,IAAK,MAAA,CAAO,QAAQ,QAAA,CAAS,SAAA,IAAa,EAAE,CAAA,EAAG;AACtE,IAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AACrB,IAAA,IAAI,CAAC,OAAA,IAAW,cAAA,CAAe,OAAO,CAAA,IAAK,CAAC,QAAQ,KAAA,EAAO;AAE3D,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAClC,IAAA,IAAI,MAAA,GAAkB,MAAA;AACtB,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,QAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,MACjC,CAAA,MAAA,IAAWA,SAAAA,CAAS,MAAM,CAAA,EAAG;AAC3B,QAAA,MAAA,GAAS,OAAO,OAAO,CAAA;AAAA,MACzB,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,MAAA;AACT,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAIA,SAAAA,CAAS,MAAM,CAAA,EAAG;AACpB,MAAA,WAAA,CAAY,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAAA,IACnC;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAcO,SAAS,cAAc,KAAA,EAAyB;AACrD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,IAAI,aAAa,CAAA;AAAA,EAChC;AACA,EAAA,IAAIA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACnB,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,MAAA,IAAI,QAAQH,SAAAA,EAAU;AACtB,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,aAAA,CAAc,KAAK,CAAA;AAAA,IAChC;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;;;AChFA,SAASG,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,SAAA,CAAU,MAAe,KAAA,EAAyB;AACzD,EAAA,IAAI,MAAA,CAAO,EAAA,CAAG,IAAA,EAAM,KAAK,GAAG,OAAO,IAAA;AAEnC,EAAA,IAAI,MAAM,OAAA,CAAQ,IAAI,KAAK,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/C,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ,OAAO,KAAA;AACzC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,IAAI,CAAC,UAAU,IAAA,CAAK,CAAC,GAAG,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,IAC5C;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAIA,SAAAA,CAAS,IAAI,CAAA,IAAKA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACrC,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AACjC,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AACnC,IAAA,IAAI,QAAA,CAAS,MAAA,KAAW,SAAA,CAAU,MAAA,EAAQ,OAAO,KAAA;AACjD,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,MAAA,IAAI,EAAE,GAAA,IAAO,KAAA,CAAA,EAAQ,OAAO,KAAA;AAC5B,MAAA,IAAI,CAAC,UAAU,IAAA,CAAK,GAAG,GAAG,KAAA,CAAM,GAAG,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,IAChD;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,2BAAA,CAA4B,UAA4B,YAAA,EAAgC;AACtG,EAAA,IAAI,CAACA,SAAAA,CAAS,YAAY,CAAA,EAAG,OAAO,KAAA;AACpC,EAAA,OAAO,SAAA,CAAU,cAAc,sBAAA,CAAuB,QAAQ,CAAC,CAAA,EAAG,aAAA,CAAc,YAAY,CAAC,CAAA;AAC/F;;;AC7CO,IAAM,qBAAA,GAAwB;AAC9B,IAAM,2BAAA,GAA8B","file":"surfaces.cjs","sourcesContent":["// ─────────────────────────────────────────────────────────────────────────\n// THE ONE NESTED-FENCE RULE for a ```markdown / ```md / ```mdx fence.\n//\n// Source of truth (moved here from matrx-frontend\n// components/markdown-core/fence-nesting.ts, 2026-09-25). Consumers: the\n// source tokenizer (source/tokenize.ts), matrx-frontend's static splitter and\n// live StreamBlockAccumulator, and — by conformance, since Python cannot\n// import this — aidream matrx-ai `processing/blocks/fence_nesting.py`, which\n// runs the SAME generated vectors (`__tests__/fence-nesting-vectors.json`,\n// byte-identical copy at packages/matrx-ai/tests/fixtures/).\n//\n// Models write a markdown document inside a ```markdown fence and put their\n// own ```python … ``` blocks inside it with the SAME three backticks. Under\n// strict CommonMark the first inner bare ``` closes the outer fence: the\n// document ends mid-way, the rest leaks out as prose, and the outer closing\n// ``` opens a phantom code block that swallows everything after it.\n//\n// The rule, for MARKDOWN-language fences only (every other language keeps\n// strict CommonMark — a ```bash heredoc is code, not a document):\n// - a fence line WITH an info string (```python) opens a nested fence;\n// - a bare fence line (``` with at least the opener's tick count) closes\n// the innermost nested fence while one is open, and closes the outer\n// fence only when none is;\n// - a longer outer fence (````markdown) keeps working exactly as before —\n// an inner ``` is shorter than the opener, so it is plain content;\n// - if the text ENDS with a nested fence still open, the extraction is\n// redone under strict CommonMark (an unclosed inner fence must not eat\n// the outer closer and the rest of the message).\n// ─────────────────────────────────────────────────────────────────────────\n\n/** Fence languages whose body is itself a markdown document. */\nexport const NESTING_FENCE_LANGUAGES: ReadonlySet<string> = new Set([\n \"markdown\",\n \"md\",\n \"mdx\",\n]);\n\n/** True when a fence opened with this info-string language nests inner fences. */\nexport function fenceNestsInnerFences(language: string | undefined | null): boolean {\n return !!language && NESTING_FENCE_LANGUAGES.has(language.toLowerCase());\n}\n\nexport type InnerFenceLine =\n /** Not a fence line — ordinary content of the outer fence. */\n | \"content\"\n /** ```lang inside a markdown fence — content, and one level deeper. */\n | \"open-nested\"\n /** Bare ``` that closes the innermost nested fence — content, one level up. */\n | \"close-nested\"\n /** Bare ``` that closes the OUTER fence. */\n | \"close-outer\";\n\n/**\n * Classify one line inside an open backtick fence, already trimmed with\n * {@link trimFenceLine} (never a language's own `trim()`).\n *\n * @param trimmed the line with surrounding whitespace removed\n * @param openTicks backtick count of the outer fence's opener\n * @param nests whether the outer fence follows the nesting rule\n * @param nestedDepth how many nested fences are open right now\n */\n/**\n * The whitespace a fence line may carry around its backticks and info string:\n * CommonMark's ASCII whitespace — space, tab, LF, CR, form feed, vertical tab.\n * Defined HERE, not by a language's `trim()`: JavaScript's `trim()` also strips\n * U+FEFF, U+00A0 and the Unicode spaces, while Python's `strip()` also strips\n * U+0085 and U+001C–U+001F — which made the two twins disagree on lines such\n * as ```` ```\\uFEFF ```` (verify-RC-B3 residual R4). Every caller trims a line\n * with `trimFenceLine` before classifying it; the Python twin mirrors both.\n */\nexport const FENCE_WHITESPACE = \" \\t\\n\\r\\f\\v\";\n\nfunction isFenceWhitespace(ch: string | undefined): boolean {\n return ch !== undefined && ch !== \"\" && FENCE_WHITESPACE.includes(ch);\n}\n\n/** Strip {@link FENCE_WHITESPACE} (and nothing else) from both ends of a line. */\nexport function trimFenceLine(line: string): string {\n let start = 0;\n let end = line.length;\n while (start < end && isFenceWhitespace(line[start])) start++;\n while (end > start && isFenceWhitespace(line[end - 1])) end--;\n return start === 0 && end === line.length ? line : line.slice(start, end);\n}\n\n/**\n * The whitespace around a fence OPENER and inside its info string. The\n * renderer finds openers with JavaScript's `String#trim()` and splits the info\n * string on `/\\s/`; this set IS that definition, written out so the Python\n * twin can match it exactly — ECMAScript WhiteSpace + LineTerminator. It\n * differs from Python's `str.split()` on U+0085 and U+001C–U+001F (not JS\n * whitespace) and U+FEFF (JS whitespace) — verify-RC-B3 residual R4′.\n */\nexport const FENCE_OPENER_WHITESPACE =\n \"\\t\\n\\v\\f\\r \\u00a0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff\";\n\nfunction isOpenerWhitespace(ch: string | undefined): boolean {\n return ch !== undefined && ch !== \"\" && FENCE_OPENER_WHITESPACE.includes(ch);\n}\n\n/**\n * Parse a backtick fence OPENER line the way the renderer does: trim the line,\n * count the backtick run (3+), trim the rest, and take the first\n * whitespace-separated word as the language. null when the line opens nothing —\n * including when the info string holds a backtick (GFM / CommonMark 4.5:\n * \"```` code ````\" and \"``` `x` | b\" are code spans, never fences).\n */\nexport function parseFenceOpener(line: string): { ticks: number; lang: string } | null {\n let start = 0;\n let end = line.length;\n while (start < end && isOpenerWhitespace(line[start])) start++;\n while (end > start && isOpenerWhitespace(line[end - 1])) end--;\n let ticks = 0;\n while (start + ticks < end && line[start + ticks] === \"`\") ticks++;\n if (ticks < 3) return null;\n if (line.slice(start + ticks, end).includes(\"`\")) return null;\n let infoStart = start + ticks;\n while (infoStart < end && isOpenerWhitespace(line[infoStart])) infoStart++;\n let langEnd = infoStart;\n while (langEnd < end && !isOpenerWhitespace(line[langEnd])) langEnd++;\n return { ticks, lang: line.slice(infoStart, langEnd) };\n}\n\nexport function classifyInnerFenceLine(\n trimmed: string,\n openTicks: number,\n nests: boolean,\n nestedDepth: number,\n): InnerFenceLine {\n let ticks = 0;\n while (ticks < trimmed.length && trimmed[ticks] === \"`\") ticks++;\n if (ticks < 3) return \"content\";\n const info = trimFenceLine(trimmed.slice(ticks));\n if (info === \"\") {\n if (ticks < openTicks) return \"content\";\n if (nests && nestedDepth > 0) return \"close-nested\";\n return \"close-outer\";\n }\n // A fence line with an info string never closes anything (CommonMark).\n // Inside a markdown fence it opens a nested one — unless the outer opener is\n // LONGER, in which case CommonMark already treats the inner fence as content\n // and its bare closer can never reach the outer fence.\n if (nests && ticks >= openTicks && !info.includes(\"`\")) return \"open-nested\";\n return \"content\";\n}\n","/**\n * THE ONE CODE-RANGE RULE — where code is in markdown source, for every surface.\n *\n * Ruling (RC-B10, 2026-09-25, REGISTER rulings ledger): the rule is the\n * RENDERER's rule — what the chat renderer's splitter, the source tokenizer\n * and the Python block detector already agree on — made container-aware only\n * where the renderer hands a block to remark:\n * - a BACKTICK fence opens on a line whose whitespace-trimmed text starts\n * with ``` at ANY indent (so a fence inside a list item opens at any\n * depth), after stripping blockquote `>` prefixes;\n * - a TILDE fence opens at ≤ 3 spaces relative to its container (a list\n * item's content column, inside any `>` prefixes);\n * - a backtick fence closes by THE nested-fence rule (`fence-nesting.ts`,\n * with the strict-CommonMark retry when a nested fence is left open) or by\n * the renderer's line-end closer (`code```` with nothing after it); inside\n * a ```json fence a backtick run inside a JSON string is text;\n * - a fence inside a blockquote ends where the blockquote ends;\n * - strict CommonMark's \"4+ spaces is not a fence\" is rejected on purpose:\n * users see what the renderer's splitter draws.\n * Inline code spans pair equal-length backtick runs inside one paragraph.\n *\n * Order is the renderer's: phase 1 is the splitter — every raw line whose\n * trimmed text starts with ``` opens a block, before remark sees anything\n * (so `- ```` can never close on a later raw ``` line; that line opens a\n * splitter block instead). Phase 2 is remark inside each prose segment the\n * splitter left: blockquote fences, fences on a list-marker line, tilde\n * fences, and code spans — none can run past its segment. A ``` line inside a\n * tilde fence is therefore drawn as code up to ITS closer (remark's reading\n * here in `findCodeRanges`); the tokenizer's tilde island ends at its closer.\n *\n * Consumers: `findCodeRanges` (math pairing, kit's delimiter guard, chat's\n * speakable text, print, every matrx-frontend walker), and the line-level\n * primitives `fenceOpenerOf` / `closeFence`, which the tokenizer and the\n * renderer's splitters drive line by line. A private copy of fence or\n * code-span detection anywhere fails `__tests__/one-code-range-rule.test.ts`.\n */\nimport { classifyInnerFenceLine, fenceNestsInnerFences, parseFenceOpener, trimFenceLine } from \"./fence-nesting\";\n\nexport interface CodeRange {\n /** UTF-16 offset of the first character (the fence line start, or the opening backtick run). */\n start: number;\n /** Offset just past the closing fence line's content / closing backtick run (the fence's last line when unclosed). */\n end: number;\n kind: \"fence\" | \"span\";\n}\n\nexport interface FenceOpener {\n char: \"`\" | \"~\";\n /** Length of the opening run. */\n ticks: number;\n /** The info string's first word (\"\" when none). */\n lang: string;\n}\n\n/**\n * THE opener rule for one line's content (container prefixes already\n * removed; for a tilde fence, `content` starts at the container's column).\n */\nexport function fenceOpenerOf(content: string): FenceOpener | null {\n const t = content.trimStart();\n if (t.startsWith(\"```\")) {\n // THE opener parse: a backtick in the info string opens nothing (CommonMark 4.5).\n const parsed = parseFenceOpener(t);\n if (!parsed) return null;\n return { char: \"`\", ticks: parsed.ticks, lang: parsed.lang };\n }\n if (content.length - t.length <= 3 && t.startsWith(\"~~~\")) {\n const open = /^(~{3,})(.*)$/.exec(t);\n if (!open) return null;\n return { char: \"~\", ticks: (open[1] as string).length, lang: (open[2] as string).trim().split(/\\s/)[0] ?? \"\" };\n }\n return null;\n}\n\n/**\n * Does this line START a fenced code block? THE opener rule (`fenceOpenerOf`),\n * which follows CommonMark 4.5: a `~~~` run, or a backtick run whose info string\n * holds no backtick. Kept as a named predicate for block-boundary readers (a\n * table's end, source/gfm-table.ts).\n */\nexport function opensStrictFence(line: string): boolean {\n return fenceOpenerOf(line) !== null;\n}\n\n/** The lines a fence is read from. */\nexport interface FenceLines {\n count: number;\n /** Line `k`'s content (no terminator), or null when the fence's container has ended before it. */\n line(k: number): string | null;\n /** Streaming: line `k` has not ended yet, so it closes nothing. */\n openTail?(k: number): boolean;\n /**\n * Streaming: more lines may still arrive. The strict-CommonMark retry\n * applies only while the nested reading ends inside a nested fence — a\n * later line can close that nested fence, so a retry's closer is\n * undecided and the fence stays open (verify-RC-B3 F3).\n */\n streaming?: boolean;\n}\n\nexport interface FenceEnd {\n /** The closing line when `closed`; otherwise the fence's last line (text end, or the line before its container ended). */\n line: number;\n closed: boolean;\n}\n\n/**\n * THE closer rule, read line by line — the one implementation behind\n * `closeFence` and every streaming walker. Feed each following line\n * (container prefixes removed); `feed` returns true on the line that closes\n * the fence. A backtick fence closes by the nested-fence rule or the\n * renderer's line-end closer (`code````), and inside ```json a backtick run in\n * a JSON string is text; a tilde fence closes on `~~~` (≥ its length, ≤ 3\n * spaces). `nesting: false` forces strict CommonMark (the retry `closeFence`\n * makes when a nested fence is left open at the end; a streaming reader\n * cannot look ahead, so it reads with nesting and never retries).\n */\nconst LINE_START = { inString: false, escaped: false } as const;\n\nexport class FenceReader {\n readonly opener: FenceOpener;\n private depth = 0;\n /** A nested fence was opened at some point. */\n sawNested = false;\n private readonly isJson: boolean;\n private readonly nesting: boolean;\n private readonly tildeCloser: RegExp | null;\n\n constructor(\n opener: FenceOpener,\n options: { nesting?: boolean } = {},\n ) {\n this.opener = opener;\n this.isJson = opener.char === \"`\" && opener.lang === \"json\";\n this.nesting = opener.char === \"`\" && (options.nesting ?? fenceNestsInnerFences(opener.lang));\n this.tildeCloser = opener.char === \"~\" ? new RegExp(`^ {0,3}~{${opener.ticks},}[ \\\\t]*$`) : null;\n }\n\n /** How many nested fences are open right now. */\n get nestedDepth(): number {\n return this.depth;\n }\n\n feed(line: string): boolean {\n if (this.tildeCloser) return this.tildeCloser.test(line);\n const trimmedLine = trimFenceLine(line);\n const at = line.indexOf(\"```\");\n if (at === -1) return false;\n // Inside ```json a backtick run in a JSON string is text. The string state\n // is read per line: a JSON string never holds a raw newline, so a line that\n // ends inside one (`{\\\"__kind\\\":…}`, a cut value) ends it — carrying it on\n // swallowed the closer and everything after (never-raw R11 H2).\n if (this.isJson && jsonStringState(line, 0, at, LINE_START).inString) return false;\n if (trimmedLine.startsWith(\"```\")) {\n const kind = classifyInnerFenceLine(trimmedLine, this.opener.ticks, this.nesting, this.depth);\n if (kind === \"close-outer\") return true;\n if (kind === \"open-nested\") {\n this.depth++;\n this.sawNested = true;\n }\n if (kind === \"close-nested\") this.depth--;\n } else {\n // The renderer's line-end closer: `code```` with nothing after the run.\n const closeTicks = backtickRunLength(line, at);\n const after = trimFenceLine(line.slice(at + closeTicks));\n if (closeTicks >= this.opener.ticks && after === \"\" && this.depth === 0) return true;\n }\n return false;\n }\n}\n\n/** Where the fence opened on line `open` ends. */\nexport function closeFence(src: FenceLines, open: number, opener: FenceOpener): FenceEnd {\n const first = readFence(src, open, new FenceReader(opener));\n if (first.closed || !first.reader.sawNested || first.reader.nestedDepth <= 0) return { line: first.line, closed: first.closed };\n if (src.streaming) return { line: first.line, closed: false };\n const strict = readFence(src, open, new FenceReader(opener, { nesting: false }));\n return { line: strict.line, closed: strict.closed };\n}\n\nfunction readFence(src: FenceLines, open: number, reader: FenceReader): FenceEnd & { reader: FenceReader } {\n for (let k = open + 1; k < src.count; k++) {\n // Streaming: a bare ``` on the unfinished last line may still grow into ```bash.\n if (src.openTail?.(k)) continue;\n const line = src.line(k);\n if (line === null) return { line: k - 1, closed: false, reader };\n if (reader.feed(line)) return { line: k, closed: true, reader };\n }\n return { line: src.count - 1, closed: false, reader };\n}\n\n/** JSON-string state after scanning `line[from, upTo)` from the given state. */\nexport function jsonStringState(\n line: string,\n from: number,\n upTo: number,\n state: { inString: boolean; escaped: boolean },\n): { inString: boolean; escaped: boolean } {\n let { inString, escaped } = state;\n for (let idx = from; idx < upTo; idx++) {\n const ch = line[idx];\n if (escaped) {\n escaped = false;\n continue;\n }\n if (ch === \"\\\\\" && inString) {\n escaped = true;\n continue;\n }\n if (ch === '\"') inString = !inString;\n }\n return { inString, escaped };\n}\n\nexport function backtickRunLength(str: string, pos: number): number {\n let n = 0;\n while (pos + n < str.length && str[pos + n] === \"`\") n++;\n return n;\n}\n\n// ── the whole-text scan ────────────────────────────────────────────────────\n\n/** Blockquote prefix: how many `>` markers open the line, and where its content starts. */\nfunction quotePrefix(line: string): { depth: number; offset: number } {\n let depth = 0;\n let offset = 0;\n for (;;) {\n const m = /^ {0,3}> ?/.exec(line.slice(offset));\n if (!m) return { depth, offset };\n depth++;\n offset += m[0].length;\n }\n}\n\n/** Strip exactly `depth` blockquote markers; null when the line has fewer (the blockquote ended). */\nfunction stripQuotes(line: string, depth: number): string | null {\n let offset = 0;\n for (let d = 0; d < depth; d++) {\n const m = /^ {0,3}> ?/.exec(line.slice(offset));\n if (!m) return null;\n offset += m[0].length;\n }\n return line.slice(offset);\n}\n\nconst LIST_ITEM = /^( *)([-*+]|\\d{1,9}[.)])( +|\\t|$)/;\n\nfunction leadingSpaces(s: string): number {\n let i = 0;\n while (i < s.length && s[i] === \" \") i++;\n return i;\n}\n\ninterface Scan {\n ranges: CodeRange[];\n /** Every fence as lines: [opener line, last line, closed]. */\n fences: Array<[number, number, boolean]>;\n /** Paragraph runs outside fences, [start, end), for code-span pairing. */\n paragraphs: Array<[number, number]>;\n /** Text ends inside an open fence. */\n endsInFence: boolean;\n /** Start of the final, still-growing paragraph (streaming rule), -1 if none. */\n pendingPara: number;\n}\n\nfunction scan(text: string): Scan {\n const starts: number[] = [];\n const ends: number[] = [];\n for (let pos = 0; ; ) {\n const nl = text.indexOf(\"\\n\", pos);\n const lineEnd = nl === -1 ? text.length : nl;\n starts.push(pos);\n ends.push(lineEnd > pos && text.charCodeAt(lineEnd - 1) === 13 ? lineEnd - 1 : lineEnd);\n if (nl === -1) break;\n pos = nl + 1;\n }\n const count = starts.length;\n const raw = (k: number) => text.slice(starts[k] as number, ends[k] as number);\n const out: Scan = { ranges: [], fences: [], paragraphs: [], endsInFence: false, pendingPara: -1 };\n\n // Phase 1 — the renderer's splitter: every line whose trimmed text starts\n // with ``` opens a code block at ANY indent, before remark sees anything.\n const rawLines: FenceLines = { count, line: raw };\n let segment = 0;\n for (let k = 0; k < count; k++) {\n const opener = fenceOpenerOf(raw(k));\n if (!opener || opener.char !== \"`\") continue;\n prose(text, starts, ends, raw, segment, k, out);\n const end = closeFence(rawLines, k, opener);\n out.ranges.push({ start: starts[k] as number, end: ends[end.line] as number, kind: \"fence\" });\n out.fences.push([k, end.line, end.closed]);\n out.pendingPara = -1;\n if (!end.closed && end.line === count - 1) out.endsInFence = true;\n k = end.line;\n segment = k + 1;\n }\n prose(text, starts, ends, raw, segment, count, out);\n return out;\n}\n\n/**\n * Phase 2 — remark, inside one prose segment [from, to) the splitter left:\n * fences in blockquotes, on a list-marker line, and tilde fences (relative to\n * their container), plus the paragraphs whose backtick runs pair as spans. A\n * fence here can never run past its segment: the splitter's block begins there.\n */\nfunction prose(\n text: string,\n starts: number[],\n ends: number[],\n raw: (k: number) => string,\n from: number,\n to: number,\n out: Scan,\n): void {\n let para = -1;\n let quoteDepth = 0;\n let lists: number[] = []; // content columns of the open list items (inside the quote prefix)\n const closePara = (at: number) => {\n if (para !== -1) out.paragraphs.push([para, at]);\n para = -1;\n };\n for (let k = from; k < to; k++) {\n const line = raw(k);\n const { depth, offset } = quotePrefix(line);\n if (depth !== quoteDepth) {\n quoteDepth = depth;\n lists = [];\n }\n let content = line.slice(offset);\n if (content.trim() === \"\") {\n closePara(starts[k] as number);\n // The empty \"line\" after a final newline is not a blank line: the next\n // line may still join this paragraph.\n if (!(k === starts.length - 1 && line === \"\")) out.pendingPara = -1;\n continue;\n }\n const indent = leadingSpaces(content);\n while (lists.length && indent < (lists[lists.length - 1] as number)) lists.pop();\n const item = LIST_ITEM.exec(content);\n let column = lists.length ? (lists[lists.length - 1] as number) : 0;\n if (item) {\n const gap = (item[3] as string).length;\n column = (item[1] as string).length + (item[2] as string).length + (gap >= 1 && gap <= 4 ? gap : 1);\n lists.push(column);\n content = content.slice(Math.min(column, content.length));\n } else {\n content = content.slice(Math.min(indent, column));\n }\n const opener = fenceOpenerOf(content);\n if (!opener) {\n if (para === -1) para = starts[k] as number;\n if (out.pendingPara === -1) out.pendingPara = starts[k] as number;\n continue;\n }\n closePara(starts[k] as number);\n out.pendingPara = -1;\n const col = column;\n const src: FenceLines = {\n count: to,\n line: (j) => {\n const inner = stripQuotes(raw(j), depth);\n if (inner === null) return null;\n if (opener.char === \"~\" && col > 0) {\n const ind = leadingSpaces(inner);\n if (inner.trim() !== \"\" && ind < col) return null; // the list item ended\n return inner.slice(Math.min(ind, col));\n }\n return inner;\n },\n };\n const end = closeFence(src, k, opener);\n out.ranges.push({ start: starts[k] as number, end: ends[end.line] as number, kind: \"fence\" });\n out.fences.push([k, end.line, end.closed]);\n if (!end.closed && end.line === starts.length - 1) out.endsInFence = true;\n k = end.line;\n }\n closePara(to < starts.length ? (starts[to] as number) : text.length);\n}\n\n/**\n * THE code-span pairing table for one paragraph, text[from, to): a backtick\n * run closes at the first LATER run of exactly its length; a run with none is\n * literal text. `findCodeRanges` pairs runs in order; the tokenizer's inline\n * scanner asks `next` in the renderer's leftmost-first inline order.\n */\nexport class BacktickRuns {\n /** Every run, in order: [start, length]. */\n readonly all: Array<[number, number]> = [];\n private readonly byLength = new Map<number, number[]>();\n private readonly indexOf = new Map<number, number>();\n\n constructor(text: string, from: number, to: number) {\n for (let k = from; k < to; ) {\n if (text.charCodeAt(k) !== 96) {\n k++;\n continue;\n }\n let len = 1;\n while (k + len < to && text.charCodeAt(k + len) === 96) len++;\n this.indexOf.set(k, this.all.length);\n this.all.push([k, len]);\n const list = this.byLength.get(len);\n if (list) list.push(k);\n else this.byLength.set(len, [k]);\n k += len;\n }\n }\n\n /** Start of the first run of exactly `n` backticks at or after `after`, or -1. */\n next(n: number, after: number): number {\n const list = this.byLength.get(n);\n if (!list) return -1;\n let lo = 0;\n let hi = list.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if ((list[mid] as number) < after) lo = mid + 1;\n else hi = mid;\n }\n return list[lo] ?? -1;\n }\n\n /** Index of the run starting at `start` in `all`. */\n index(start: number): number {\n return this.indexOf.get(start) ?? -1;\n }\n}\n\nfunction codeSpans(text: string, from: number, to: number, out: CodeRange[]): void {\n // Left to right, exactly as the renderer (remark) and the tokenizer's inline\n // scanner read: a backslash escapes the next character, so an escaped\n // backtick opens nothing; a run closes at the first LATER run of exactly its\n // length (inside code a backslash is literal, so a closer may follow one).\n let runs: BacktickRuns | null = null;\n for (let i = from; i < to; ) {\n const ch = text.charCodeAt(i);\n if (ch === 92) {\n i += 2;\n continue;\n }\n if (ch !== 96) {\n i++;\n continue;\n }\n const n = backtickRunLength(text, i);\n const len = Math.min(n, to - i);\n runs ??= new BacktickRuns(text, from, to);\n const close = runs.next(len, i + len);\n if (close === -1) {\n i += len;\n continue;\n }\n out.push({ start: i, end: close + len, kind: \"span\" });\n i = close + len;\n }\n}\n\n/**\n * Every code range in the text — fences (by the renderer's rule above) and\n * inline code spans — sorted by start. Linear: one pass over lines, one over\n * each paragraph's backtick runs.\n */\nexport function findCodeRanges(text: string): CodeRange[] {\n const s = scan(text);\n const ranges = [...s.ranges];\n for (const [from, to] of s.paragraphs) codeSpans(text, from, to, ranges);\n return ranges.sort((a, b) => a.start - b.start);\n}\n\n/**\n * Rewrite every code range (fences and spans, by THE rule) through `fn`; text\n * outside code is kept byte for byte. The one way to strip, replace or\n * placeholder code in markdown — never a private /```…```/ regex.\n */\nexport function mapCodeRanges(text: string, fn: (range: CodeRange, raw: string) => string): string {\n let out = \"\";\n let at = 0;\n for (const r of findCodeRanges(text)) {\n if (r.start < at) continue;\n out += text.slice(at, r.start) + fn(r, text.slice(r.start, r.end));\n at = r.end;\n }\n return out + text.slice(at);\n}\n\n/**\n * The code SPANS in one piece of INLINE content — a table cell, a heading's\n * text, a link label — where no block structure exists, so a line opening with\n * three or more backticks is a code span, never a fence (```` `` code `` ```` in a\n * GFM cell). Same scanner and escape rules as `findCodeRanges`' span pass.\n */\nexport function findInlineCodeSpans(text: string): CodeRange[] {\n const ranges: CodeRange[] = [];\n codeSpans(text, 0, text.length, ranges);\n return ranges.sort((a, b) => a.start - b.start);\n}\n\n/** Rewrite every code SPAN of inline content through `fn` (see `findInlineCodeSpans`); other text is kept byte for byte. */\nexport function mapInlineCodeSpans(text: string, fn: (range: CodeRange, raw: string) => string): string {\n let out = \"\";\n let at = 0;\n for (const r of findInlineCodeSpans(text)) {\n if (r.start < at) continue;\n out += text.slice(at, r.start) + fn(r, text.slice(r.start, r.end));\n at = r.end;\n }\n return out + text.slice(at);\n}\n\n/** A code span's text (CommonMark): the backtick runs off, then one padding space each side when both are there and the content is not all spaces. */\nexport function codeSpanText(raw: string): string {\n const ticks = backtickRunLength(raw, 0);\n const inner = raw.slice(ticks, raw.length - ticks);\n return inner.length >= 2 && inner.startsWith(\" \") && inner.endsWith(\" \") && inner.trim() !== \"\" ? inner.slice(1, -1) : inner;\n}\n\n/**\n * A fence range's parts: its opener, its body (the lines between the opener\n * and the closer, blockquote prefixes kept), and whether it closed. Reads\n * `raw` exactly as `findCodeRanges` returned it.\n */\nexport function fenceParts(raw: string): { opener: FenceOpener; body: string; closed: boolean } | null {\n const lines = raw.split(\"\\n\").map((l) => (l.endsWith(\"\\r\") ? l.slice(0, -1) : l));\n const { offset } = quotePrefix(lines[0] ?? \"\");\n const opener = fenceOpenerOf((lines[0] ?? \"\").slice(offset).replace(/^ *(?:[-*+]|\\d{1,9}[.)])(?= |\\t|$) ?/, \"\"));\n if (!opener) return null;\n const rest = lines.slice(1);\n const closed = rest.length > 0 && new FenceReader(opener, { nesting: false }).feed(rest[rest.length - 1] as string);\n if (!closed) return { opener, body: rest.join(\"\\n\"), closed };\n const last = rest[rest.length - 1] as string;\n // The renderer's line-end closer (`code````): the text before the run is code.\n const before = opener.char === \"~\" || trimFenceLine(last).startsWith(\"```\") ? \"\" : last.slice(0, last.indexOf(\"```\"));\n return { opener, body: [...rest.slice(0, -1), ...(before.trim() ? [before] : [])].join(\"\\n\"), closed };\n}\n\nexport type FenceLineKind = \"prose\" | \"open\" | \"body\" | \"close\";\n\n/**\n * Where each line (the text split on \"\\n\") sits relative to the fences\n * `findCodeRanges` finds: its opener, its body, its closer, or prose. For a\n * line walker that must skip code — one rule, never a private `inFence` toggle.\n */\nexport function fenceLineKinds(text: string): FenceLineKind[] {\n const s = scan(text);\n let count = 1;\n for (let i = text.indexOf(\"\\n\"); i !== -1; i = text.indexOf(\"\\n\", i + 1)) count++;\n const kinds = new Array<FenceLineKind>(count).fill(\"prose\");\n for (const [open, last, closed] of s.fences) {\n kinds[open] = \"open\";\n for (let k = open + 1; k <= last; k++) kinds[k] = \"body\";\n if (closed && last > open) kinds[last] = \"close\";\n }\n return kinds;\n}\n\n/**\n * STREAMING: where the last, still-growing paragraph (no blank line or fence\n * after it) holds a backtick run that a later run could still close — a run\n * with no later run of its length, or the run touching the end of the text\n * (it may still lengthen). Such a code span can yet swallow any `$$` after it,\n * so a streaming tokenizer treats text from there as provisional. -1 if none.\n */\nexport function pendingCodeSpanStart(text: string): number {\n const n = text.length;\n if (n === 0 || /\\n[ \\t]*\\n[ \\t]*$/.test(text)) return -1;\n // An open last line that is only whitespace or blockquote markers SO FAR is\n // not a blank line yet: its next byte may continue the paragraph\n // (verify-RC-B3 F3: `\\n ` + `and\\``, `\\n>` + `<\\`\\`\\``).\n const lastLine = text.slice(text.lastIndexOf(\"\\n\") + 1);\n if (lastLine && /^(?: {0,3}>[ \\t]?)*[ \\t\\r]*$/.test(lastLine)) return pendingCodeSpanStart(`${text}x`);\n const s = scan(text);\n const para = s.pendingPara;\n if (s.endsInFence || para === -1) return -1;\n const runs: Array<[number, number]> = [];\n for (let k = para; k < n; ) {\n if (text.charCodeAt(k) !== 96) {\n k++;\n continue;\n }\n let len = 1;\n while (k + len < n && text.charCodeAt(k + len) === 96) len++;\n runs.push([k, len]);\n k += len;\n }\n // Pair runs the way findCodeRanges does, treating a run that touches the end\n // as still growing (it matches nothing yet); the first run left open is pending.\n const growing = (r: number) => {\n const [start, len] = runs[r] as [number, number];\n return start + len === n;\n };\n for (let r = 0; r < runs.length; ) {\n if (growing(r)) return (runs[r] as [number, number])[0];\n const len = (runs[r] as [number, number])[1];\n let j = r + 1;\n while (j < runs.length && ((runs[j] as [number, number])[1] !== len || growing(j))) j++;\n if (j >= runs.length) return (runs[r] as [number, number])[0];\n r = j + 1;\n }\n return -1;\n}\n","/**\n * XML tag reading + the generic-container balance scanner.\n *\n * Ported VERBATIM (behaviour) from matrx-frontend\n * `components/mardown-display/blocks/xml/readXmlTag.ts` and the\n * `XmlContainerTracker` in\n * `components/mardown-display/markdown-classification/processors/utils/content-splitter-v2.ts`\n * so the source tokenizer ends a generic XML section exactly where the\n * renderer does. Fences inside the section are found by THE one code-range\n * rule (source/code-ranges.ts `fenceOpenerOf` + `FenceReader`), which the\n * renderer's splitter imports too (RC-B10).\n */\nimport { FenceReader, fenceOpenerOf } from \"./code-ranges\";\n\nexport interface ReadXmlTag {\n tagName: string;\n raw: string;\n isClosing: boolean;\n isSelfClosing: boolean;\n attributes: Array<{ name: string; value: string }>;\n}\n\nconst XML_NAME_START = /[A-Za-z_]/;\nconst XML_NAME_CHARACTER = /[\\w.:-]/;\nconst WHITESPACE = /\\s/;\n\n/**\n * `find(needle, from)` must behave like `content.indexOf(needle, from)`; the\n * tokenizer passes a cached occurrence index so a text full of unclosed\n * attribute quotes stays linear. Behaviour is identical either way.\n */\nexport function readXmlTag(\n content: string,\n start: number,\n find: (needle: string, from: number) => number = (needle, from) => content.indexOf(needle, from),\n): ReadXmlTag | null {\n // A tag starts with `<` — without this, `description: >-` read as a tag\n // named \"escription:\" (RC-B3r).\n if (content[start] !== \"<\") return null;\n let cursor = start + 1;\n const isClosing = content[cursor] === \"/\";\n if (isClosing) cursor++;\n if (!XML_NAME_START.test(content[cursor] ?? \"\")) return null;\n const nameStart = cursor;\n while (XML_NAME_CHARACTER.test(content[cursor] ?? \"\")) cursor++;\n const tagName = content.slice(nameStart, cursor);\n const attributes: Array<{ name: string; value: string }> = [];\n if (isClosing) {\n while (WHITESPACE.test(content[cursor] ?? \"\")) cursor++;\n if (content[cursor] !== \">\") return null;\n return {\n tagName,\n raw: content.slice(start, cursor + 1),\n isClosing,\n isSelfClosing: false,\n attributes,\n };\n }\n while (cursor < content.length) {\n while (WHITESPACE.test(content[cursor] ?? \"\")) cursor++;\n if (content[cursor] === \">\")\n return {\n tagName,\n raw: content.slice(start, cursor + 1),\n isClosing,\n isSelfClosing: false,\n attributes,\n };\n if (content[cursor] === \"/\") {\n cursor++;\n while (WHITESPACE.test(content[cursor] ?? \"\")) cursor++;\n if (content[cursor] !== \">\") return null;\n return {\n tagName,\n raw: content.slice(start, cursor + 1),\n isClosing,\n isSelfClosing: true,\n attributes,\n };\n }\n if (!XML_NAME_START.test(content[cursor] ?? \"\")) return null;\n const attributeStart = cursor;\n while (XML_NAME_CHARACTER.test(content[cursor] ?? \"\")) cursor++;\n const name = content.slice(attributeStart, cursor);\n while (WHITESPACE.test(content[cursor] ?? \"\")) cursor++;\n if (content[cursor] !== \"=\") return null;\n cursor++;\n while (WHITESPACE.test(content[cursor] ?? \"\")) cursor++;\n const quote = content[cursor];\n if (quote !== '\"' && quote !== \"'\") return null;\n const valueStart = ++cursor;\n const valueEnd = find(quote, valueStart);\n if (valueEnd === -1) return null;\n cursor = valueEnd;\n attributes.push({ name, value: content.slice(valueStart, cursor) });\n cursor++;\n }\n return null;\n}\n\nfunction isEscapedBacktick(line: string, offset: number): boolean {\n let slashes = 0;\n for (let i = offset - 1; line[i] === \"\\\\\"; i--) slashes++;\n return slashes % 2 === 1;\n}\n\n/**\n * Balances ONE unknown root tag line by line, ignoring lookalike tags inside\n * fenced code, inline code spans, comments and CDATA. `consumeLine` returns\n * the offset (within that line) just past the root's closing tag, or null.\n */\nexport class XmlContainerTracker {\n readonly rootTag: string;\n private depth = 0;\n private inComment = false;\n private inCdata = false;\n private inlineTicks = 0;\n /** The open fence, read by THE one closer (source/code-ranges.ts). */\n private fence: FenceReader | null = null;\n\n constructor(rootTag: string) {\n this.rootTag = rootTag;\n }\n\n consumeLine(line: string, startOffset = 0): number | null {\n if (this.fence) {\n if (this.fence.feed(line)) this.fence = null;\n return null;\n }\n if (!this.inComment && !this.inCdata && this.inlineTicks === 0) {\n const opener = fenceOpenerOf(line);\n if (opener) {\n this.fence = new FenceReader(opener);\n return null;\n }\n }\n\n for (let i = startOffset; i < line.length; i++) {\n if (this.inlineTicks > 0) {\n if (line[i] === \"`\") {\n let end = i;\n while (line[end] === \"`\") end++;\n if (end - i === this.inlineTicks) this.inlineTicks = 0;\n i = end - 1;\n }\n continue;\n }\n if (this.inComment) {\n const end = line.indexOf(\"-->\", i);\n if (end === -1) return null;\n this.inComment = false;\n i = end + 2;\n continue;\n }\n if (this.inCdata) {\n const end = line.indexOf(\"]]>\", i);\n if (end === -1) return null;\n this.inCdata = false;\n i = end + 2;\n continue;\n }\n if (line.startsWith(\"<!--\", i)) {\n this.inComment = true;\n i += 3;\n continue;\n }\n if (line.startsWith(\"<![CDATA[\", i)) {\n this.inCdata = true;\n i += 8;\n continue;\n }\n if (line[i] === \"`\" && !isEscapedBacktick(line, i)) {\n let end = i;\n while (line[end] === \"`\") end++;\n this.inlineTicks = end - i;\n i = end - 1;\n continue;\n }\n if (line[i] !== \"<\") continue;\n const tag = readXmlTag(line, i);\n if (!tag) continue;\n const tagEnd = i + tag.raw.length;\n if (tag.tagName === this.rootTag) {\n if (tag.isClosing) this.depth--;\n else if (!tag.isSelfClosing) this.depth++;\n if (this.depth === 0) return tagEnd;\n }\n i = tagEnd - 1;\n }\n return null;\n }\n}\n","/**\n * THE KIND SIGNAL of a JSON region's text — the one answer to \"could this\n * still be a kind?\" (Arman, 2026-09-30):\n *\n * 1. The moment it COULD be a kind → display as a kind (its loader).\n * 2. The moment we know WHICH kind → that kind (the parser's job).\n * 3. The moment we know it is not a kind → it is JSON, and JSON is fine.\n *\n * \"Could\" is decided by the FIRST KEY. Until the first key has fully arrived\n * the region is `undecided` and nothing raw is shown. A first key of `__kind`\n * — or a `__kind` key anywhere in the text, at any depth, at any time — is\n * `kind`. A complete first key that is anything else, with no `__kind` seen,\n * is `not_kind`: the region streams live as JSON, and flips to `kind` the\n * instant a `__kind` key shows up later.\n *\n * Pure and text-only on purpose: it must answer for every frame of every\n * region, including ones whose parser never opened (an unlabelled fence, a\n * reload, a plain markdown fence).\n */\n\nimport { fenceOpenerOf, findCodeRanges } from \"../source\";\n\nexport type JsonKindSignal = \"undecided\" | \"kind\" | \"not_kind\";\n\n/**\n * A pathological first key (or a region that is only whitespace and brackets)\n * must not hold a loader forever — past this, an undecided region is treated\n * as JSON so its content is never hidden behind a lid.\n */\nconst UNDECIDED_LIMIT_CHARS = 2000;\n\n/**\n * The key `__kind` as JSON may spell it: every character literal or as its\n * `\\uXXXX` escape (`\"\\u005f_kind\"` IS the key `__kind` to `JSON.parse` — V7).\n */\nconst KIND_KEY_BODY = [...\"__kind\"]\n .map((ch) => {\n const hex = ch.charCodeAt(0).toString(16).padStart(4, \"0\");\n const escaped = [...hex]\n .map((d) => (/[a-f]/.test(d) ? `[${d}${d.toUpperCase()}]` : d))\n .join(\"\");\n return `(?:${ch}|\\\\\\\\u${escaped})`;\n })\n .join(\"\");\n\n/** A `\"__kind\"` KEY (not an escaped occurrence inside a string value). */\nconst KIND_KEY = new RegExp(String.raw`(?<!\\\\)\"${KIND_KEY_BODY}\"\\s*:`);\n\n/**\n * JSON5 lets a key go unquoted (`{__kind: \"flashcard_set\"}`) or single-quoted.\n * Accepted ONLY in a ```json5 context (X-minor, round 3) — plain JSON never\n * has such a key, and prose that says `__kind:` is not one.\n */\nconst JSON5_KIND_KEY = /(?:^|[{,]\\s*|\\n\\s*)(?:__kind|'__kind')\\s*:/;\nconst JSON5_KIND_SLUG = /(?:^|[{,]\\s*|\\n\\s*)(?:__kind|'__kind'|\"__kind\")\\s*:\\s*(\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')/;\n\n/**\n * The key as MARKDOWN may spell it (P8, round 4): `\"\\_\\_kind\"` — the renderer\n * un-escapes it to `\"__kind\"` on screen. Text contexts only.\n */\n// Half-escaped (`\"\\__kind\"`, `\"_\\_kind\"`) draws as the literal key too (round 10).\nconst MARKDOWN_KIND_KEY = /(?<!\\\\)\"(?:\\\\_\\\\_|\\\\__|_\\\\_)kind\"\\s*:/;\n\n/**\n * The key as a STRING-HELD kind spells it once serialized again (R3, round 6):\n * `{\\\"__kind\\\":…}` — what `JSON.stringify` of an object holding kind JSON in a\n * string value prints, at any nesting (`\\\\\\\"`). On screen that is raw kind\n * JSON (ruling c). Rendered-text / stored-text contexts only — inside parsed\n * JSON it is a string VALUE, never a key, so `hasKindKey` alone ignores it.\n */\nconst ESCAPED_KIND_KEY = /\\\\+\"__kind\\\\+\"\\s*:/;\nconst ESCAPED_KIND_SLUG = /\\\\+\"__kind\\\\+\"\\s*:\\s*\\\\+\"([A-Za-z0-9_.:-]+)\\\\+\"/;\n\n/**\n * Options for the JSON-text readers: `json5` widens the key rule to JSON5's;\n * `markdown` also reads the markdown-escaped key (`\"\\_\\_kind\"`, P8);\n * `escaped` also reads the backslash-escaped key of a string-held kind\n * (`\\\"__kind\\\"`, R3 round 6 — screen and search text only).\n */\nexport interface KindTextOptions {\n json5?: boolean;\n markdown?: boolean;\n escaped?: boolean;\n /** Also read a Python-repr key (`{'__kind': 'flashcard_set'}`) — text contexts only (K4). */\n python?: boolean;\n /** Also read a typographic-quoted key (`“__kind”`, `‘__kind’`) — text contexts only (round 8). */\n smart?: boolean;\n /** Also read an HTML-entity key (`&quot;__kind&quot;`, `&#34;__kind&#34;`) — text contexts only (round 8). */\n entity?: boolean;\n /**\n * Also read a JavaScript object-literal key (`{ __kind: 'flashcard_set' }` —\n * what Node's console prints, a sandbox tool's output) — key position with a\n * quoted value, text contexts only (L-2, round 9).\n */\n js?: boolean;\n}\n\n/**\n * EVERY spelling of the key a reader still sees as `__kind` (owner ruling,\n * round 8): literal, `\\u005f`-escaped, markdown-escaped `\\_\\_kind`,\n * backslash-escaped quotes `\\\"__kind\\\"`, zero-width characters anywhere in\n * the key, Python repr `'__kind'`, typographic quotes `“__kind”` and HTML\n * entities `&quot;__kind&quot;`. THE options every TEXT context (prose,\n * titles, exports, previews, the screen scan) passes; JSON contexts keep the\n * default, where those spellings are string VALUES (and `valueCarriesKind`\n * reads the strings with this set).\n */\nexport const ALL_KIND_SPELLINGS: Readonly<KindTextOptions> = Object.freeze({\n markdown: true,\n escaped: true,\n python: true,\n smart: true,\n entity: true,\n js: true,\n});\n\n/**\n * THE CONVERSION BOUNDARY (owner ruling, round 10): only REAL JSON is ever\n * converted — the literal key, its `\\u005f` escapes, the markdown-escaped\n * `\"\\_\\_kind\"` (markdown draws it as the literal key) and zero-width characters\n * inside the key. Every other spelling in free text (backslash-escaped\n * `\\\"__kind\\\"` in prose, Python repr, a JavaScript literal, typographic quotes,\n * entities) is DETECTION ONLY: the leak sentinel reports it, every renderer,\n * converter, label and export leaves it exactly as written. Real output emits\n * JSON; guessing at free text dropped and reordered people's words (rounds 8–9).\n * A kind held as a JSON STRING inside JSON is read by parsing (`textCarriesKind`).\n */\nexport const JSON_KIND_SPELLINGS: Readonly<KindTextOptions> = Object.freeze({ markdown: true });\n\n/** Whether text holds the key spelled as real JSON (`JSON_KIND_SPELLINGS`). */\nexport function hasJsonKindKey(source: string): boolean {\n return hasKindKey(source, JSON_KIND_SPELLINGS);\n}\n\n/**\n * Whether text holds the key ONLY in a detection-only spelling (round 10):\n * a spelling the sentinel reports and no renderer converts.\n */\nexport function hasDetectionOnlyKindKey(source: string): boolean {\n return !hasJsonKindKey(source) && (hasKindKey(source, ALL_KIND_SPELLINGS) || hasExoticKindKey(source));\n}\n\n/**\n * Invisible characters a model, a copy-paste or a sanitizer can leave INSIDE\n * the key (`\"__\\u200Bkind\"`): the screen still reads `\"__kind\"`, so the\n * detector reads through them (K4, round 7). Zero-width space / non-joiner /\n * joiner, word joiner, BOM / zero-width no-break space, soft hyphen.\n */\nconst ZERO_WIDTH = /[\\u200B-\\u200D\\u2060\\uFEFF\\u00AD]/g;\nconst HAS_ZERO_WIDTH = /[\\u200B-\\u200D\\u2060\\uFEFF\\u00AD]/;\n\n/** The text without zero-width characters (unchanged — same string — when it has none). */\nexport function withoutZeroWidth(text: string): string {\n return HAS_ZERO_WIDTH.test(text) ? text.replace(ZERO_WIDTH, \"\") : text;\n}\n\n/**\n * The key as a PYTHON REPR spells it (K4, round 7): `{'__kind': 'flashcard_set'}`\n * — what `str(dict)` prints into a server error or a tool's string result.\n * Text contexts only, and only in key position (after `{` or `,`) with a\n * quoted value, so prose that says `'__kind':` is never one.\n */\nconst PYTHON_KIND_KEY = /[{,]\\s*'__kind'\\s*:\\s*['\"]/;\nconst PYTHON_KIND_SLUG = /[{,]\\s*'__kind'\\s*:\\s*(?:'([A-Za-z0-9_.:-]+)'|\"([A-Za-z0-9_.:-]+)\")/;\n\n/** Typographic quotes a smart-quoting editor or model writes for `\"` and `'`. */\nconst SMART_DOUBLE = \"\\u201C\\u201D\\u201E\\u201F\\u2033\";\nconst SMART_SINGLE = \"\\u2018\\u2019\\u201A\\u201B\\u2032\";\n/** The key in typographic quotes (`“__kind”:`, `‘__kind’:`) — key position only. */\nconst SMART_KIND_KEY = new RegExp(`[${SMART_DOUBLE}${SMART_SINGLE}]__kind[${SMART_DOUBLE}${SMART_SINGLE}\"']\\\\s*:`);\n/** The key in HTML entities (`&quot;__kind&quot;:`, `&#34;`, `&#x22;`, `&#39;`, `&apos;`). */\nconst ENTITY_QUOTE = \"&(?:[qQ][uU][oO][tT]|[aA][pP][oO][sS]|#0*3[49]|#[xX]0*2[27]);\";\nconst ENTITY_KIND_KEY = new RegExp(`${ENTITY_QUOTE}__kind${ENTITY_QUOTE}\\\\s*:`);\n\n/** Whether a fence language is JSON5 (the one context that widens the key rule). */\nexport function isJson5Language(lang: string | null | undefined): boolean {\n return (lang ?? \"\").trim().toLowerCase() === \"json5\";\n}\n\nexport function hasKindKey(source: string, options: KindTextOptions = {}): boolean {\n const text = withoutZeroWidth(source);\n return (\n KIND_KEY.test(text) ||\n (options.python === true && PYTHON_KIND_KEY.test(text)) ||\n (options.json5 === true && JSON5_KIND_KEY.test(text)) ||\n (options.markdown === true && MARKDOWN_KIND_KEY.test(text)) ||\n (options.escaped === true && ESCAPED_KIND_KEY.test(text)) ||\n (options.smart === true && SMART_KIND_KEY.test(text)) ||\n (options.entity === true && ENTITY_KIND_KEY.test(text)) ||\n (options.js === true && JS_KIND_KEY.test(text)) ||\n // Every realistic spelling COMBINED in one key (escaped + zero-width,\n // repr + zero-width, `\"\\__kind\"`, `{\\\"\\\\_\\\\_kind\\\"…}` — L-1, round 9).\n (options.escaped === true && options.python === true && options.smart === true && options.markdown === true &&\n hasSpelledKey(source))\n );\n}\n\n/** The key as a JavaScript object literal spells it: unquoted, key position, quoted value (L-2). */\nconst JS_KIND_KEY = /[{,]\\s*__kind\\s*:\\s*['\"]/;\n\n/**\n * EXOTIC spellings (owner ruling, round 9): double HTML entities\n * (`&amp;quot;`), `&#95;` underscores, upper-case / padded entities, fullwidth\n * quotes, bidi marks, invisible operators and combining joiners inside the key.\n * DETECTION ONLY — the leak sentinel and the frame judge report them; no\n * renderer converts them (an adversarial spelling is a defect to see, not a\n * shape to guess at).\n */\nexport function hasExoticKindKey(text: string): boolean {\n if (!/kind|&#|&amp;|\\uFF3F/i.test(text)) return false;\n let plain = text\n .replace(EXOTIC_INVISIBLE, \"\")\n .replace(/\\uFF02/g, '\"')\n .replace(/\\uFF07/g, \"'\")\n .replace(/\\uFF3F/g, \"_\");\n for (let pass = 0; pass < 3 && plain.includes(\"&\"); pass++) plain = plain.replace(LOOSE_ENTITY, looseEntity);\n return plain !== text && hasKindKey(plain, ALL_KIND_SPELLINGS);\n}\n\nconst EXOTIC_INVISIBLE = /[\\p{Cf}\\u034F\\u115F\\u1160\\u17B4\\u17B5\\u180E\\u3164\\uFFA0]/gu;\nconst LOOSE_ENTITY = /&(#[xX][0-9a-fA-F]{1,8}|#\\d{1,8}|[A-Za-z]{2,8});/g;\nconst LOOSE_NAMED: Record<string, string> = { quot: '\"', apos: \"'\", amp: \"&\", lt: \"<\", gt: \">\", lowbar: \"_\" };\nfunction looseEntity(whole: string, body: string): string {\n if (body.startsWith(\"#\")) {\n const code = body[1] === \"x\" || body[1] === \"X\" ? Number.parseInt(body.slice(2), 16) : Number.parseInt(body.slice(1), 10);\n return Number.isFinite(code) && code > 0 && code < 0x110000 ? String.fromCodePoint(code) : whole;\n }\n return LOOSE_NAMED[body.toLowerCase()] ?? whole;\n}\n\n/** Whether TEXT holds the key in ANY spelling a reader sees as `__kind` (round 8). */\nexport function hasKindKeyAnySpelling(source: string): boolean {\n return hasKindKey(source, ALL_KIND_SPELLINGS);\n}\n\n/** The key, then its string value (escapes allowed), captured whole. */\nconst KIND_SLUG = new RegExp(\n String.raw`(?<!\\\\)\"${KIND_KEY_BODY}\"\\s*:\\s*(\"(?:[^\"\\\\]|\\\\.)*\")`,\n);\n\n/** A slug the loader may name: letters, digits and `_.:-` only. */\nconst SLUG_TEXT = /^[A-Za-z0-9_.:-]+$/;\n\n/** Whether a `__kind` value is a readable slug (ruling (c): anything else is broken output). */\nexport function isKindSlug(value: unknown): value is string {\n return typeof value === \"string\" && SLUG_TEXT.test(value);\n}\n\n/**\n * The first complete `__kind` slug in the text, or null. For a LOADER only —\n * which kind's skeleton to show while the region arrives. Never an identity:\n * the parser owns which kind a region actually is.\n */\nexport function firstKindSlug(source: string, options: KindTextOptions = {}): string | null {\n const text = withoutZeroWidth(source);\n let literal = KIND_SLUG.exec(text)?.[1];\n if (!literal && (options.json5 || options.js)) {\n const json5 = JSON5_KIND_SLUG.exec(text)?.[1];\n literal = json5?.startsWith(\"'\") ? JSON.stringify(json5.slice(1, -1)) : json5;\n }\n if (!literal && options.escaped) {\n const escaped = ESCAPED_KIND_SLUG.exec(text)?.[1];\n if (escaped) return escaped;\n }\n if (!literal && options.python) {\n const python = PYTHON_KIND_SLUG.exec(text);\n if (python) return python[1] ?? python[2] ?? null;\n }\n if (!literal && (options.smart || options.entity || options.markdown)) {\n const canonical = normalizeKindSpellings(text);\n if (canonical !== text) return firstKindSlug(canonical, { ...options, smart: false, entity: false, markdown: false });\n }\n if (!literal) return null;\n let slug: unknown;\n try {\n slug = JSON.parse(literal);\n } catch {\n return null;\n }\n return typeof slug === \"string\" && SLUG_TEXT.test(slug) ? slug : null;\n}\n\n/**\n * A text that ENDS in an object key that has reached `\"__k` and is still a\n * prefix of `\"__kind\"` (or is `\"__kind\"` waiting for its colon) — V6: the\n * frames before the colon of a LATER `__kind` key (`[{\"x\":1}, {\"__kind`,\n * `{\"data\":{\"__kind`) could be a kind, so they hold the loader instead of\n * flashing raw. Key position only (after `{` or `,` inside an object): a\n * string VALUE that starts `\"__k` is never a key. `\"_id\"`, `\"__type\"` never\n * reach the threshold; `\"__key\"` holds for the one frame before its `e`.\n */\nconst PARTIAL_KIND_KEY_TAIL = /\"__k(?:i(?:n(?:d(?:\"\\s*)?)?)?)?$/;\n\nexport function endsInPartialKindKey(text: string): boolean {\n const tail = PARTIAL_KIND_KEY_TAIL.exec(text);\n if (!tail) return false;\n return isObjectKeyPosition(text, tail.index);\n}\n\n/** Whether the `\"` at `quoteAt` opens an object key (structural scan, strings opaque). */\nfunction isObjectKeyPosition(text: string, quoteAt: number): boolean {\n const stack: string[] = [];\n let expectKey = false;\n let inString = false;\n let escaped = false;\n for (let i = 0; i < quoteAt; i++) {\n const ch = text[i];\n if (inString) {\n if (escaped) escaped = false;\n else if (ch === \"\\\\\") escaped = true;\n else if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') {\n inString = true;\n expectKey = false;\n } else if (ch === \"{\" || ch === \"[\") {\n stack.push(ch);\n expectKey = ch === \"{\";\n } else if (ch === \"}\" || ch === \"]\") {\n stack.pop();\n expectKey = false;\n } else if (ch === \",\") {\n expectKey = stack[stack.length - 1] === \"{\";\n } else if (ch === \":\") {\n expectKey = false;\n }\n }\n return !inString && expectKey;\n}\n\n/**\n * The text after any LEADING JSONC comments and whitespace (`// note`,\n * `/* … *\\/`) — a ```jsonc / ```json / unlabelled fence that opens with a\n * comment still decides on its first key (X3). An unterminated leading\n * comment (still arriving) leaves nothing: undecided, never raw.\n */\nexport function withoutLeadingJsonComments(text: string): string {\n let i = 0;\n for (;;) {\n i = skipWs(text, i);\n if (text.startsWith(\"//\", i)) {\n const end = text.indexOf(\"\\n\", i);\n if (end === -1) return \"\";\n i = end + 1;\n } else if (text.startsWith(\"/*\", i)) {\n const end = text.indexOf(\"*/\", i + 2);\n if (end === -1) return \"\";\n i = end + 2;\n } else {\n return i === 0 ? text : text.slice(i);\n }\n }\n}\n\nexport function jsonKindSignal(\n text: string | null | undefined,\n options: KindTextOptions = {},\n): JsonKindSignal {\n const source = withoutLeadingJsonComments(text ?? \"\");\n if (hasKindKey(source, options)) return \"kind\";\n\n let i = skipWs(source, 0);\n if (i >= source.length) return \"undecided\";\n\n // A list of objects: decide on the first element's first key.\n if (source[i] === \"[\") {\n i = skipWs(source, i + 1);\n if (i >= source.length) return capped(source);\n if (source[i] !== \"{\") return notKindUnlessPartialKey(source);\n }\n if (source[i] !== \"{\") return notKindUnlessPartialKey(source);\n\n i = skipWs(source, i + 1);\n if (i >= source.length) return capped(source);\n // `{}` or not an object key\n if (source[i] !== '\"') return notKindUnlessPartialKey(source);\n\n // Read the first key, honouring escapes; unterminated → still arriving.\n let j = i + 1;\n while (j < source.length) {\n const ch = source[j];\n if (ch === \"\\\\\") {\n j += 2;\n continue;\n }\n if (ch === '\"') {\n return withoutZeroWidth(decodedKey(source.slice(i, j + 1))) === \"__kind\"\n ? \"kind\"\n : notKindUnlessPartialKey(source);\n }\n j++;\n }\n return capped(source);\n}\n\n/** A first key decided against `__kind` — unless a later key is arriving as one (V6). */\nfunction notKindUnlessPartialKey(source: string): JsonKindSignal {\n return endsInPartialKindKey(source) ? \"undecided\" : \"not_kind\";\n}\n\n/** A complete JSON key literal (quotes included), decoded; the raw body if it will not parse. */\nfunction decodedKey(literal: string): string {\n try {\n const key: unknown = JSON.parse(literal);\n return typeof key === \"string\" ? key : literal.slice(1, -1);\n } catch {\n return literal.slice(1, -1);\n }\n}\n\nfunction capped(source: string): JsonKindSignal {\n return source.length > UNDECIDED_LIMIT_CHARS ? \"not_kind\" : \"undecided\";\n}\n\nfunction skipWs(source: string, from: number): number {\n let i = from;\n while (i < source.length && /\\s/.test(source[i] ?? \"\")) i++;\n return i;\n}\n\n/**\n * A ```json5 body as plain JSON, when the difference is only what JSON5 adds\n * that models actually write: comments, unquoted identifier keys, single-quoted\n * keys/strings and trailing commas. Null when the result still will not parse.\n */\nexport function json5AsJson(text: string): string | null {\n let out = \"\";\n let i = 0;\n while (i < text.length) {\n const ch = text[i]!;\n if (ch === '\"' || ch === \"'\") {\n let j = i + 1;\n let body = \"\";\n while (j < text.length && text[j] !== ch) {\n if (text[j] === \"\\\\\") {\n body += text[j]! + (text[j + 1] ?? \"\");\n j += 2;\n continue;\n }\n body += ch === \"'\" && text[j] === '\"' ? '\\\\\"' : text[j]!;\n j++;\n }\n out += `\"${body}\"`;\n i = j + 1;\n continue;\n }\n if (text.startsWith(\"//\", i)) {\n const end = text.indexOf(\"\\n\", i);\n i = end === -1 ? text.length : end;\n continue;\n }\n if (text.startsWith(\"/*\", i)) {\n const end = text.indexOf(\"*/\", i + 2);\n i = end === -1 ? text.length : end + 2;\n continue;\n }\n const key = /^[A-Za-z_$][\\w$]*(?=\\s*:)/.exec(text.slice(i));\n if (key && /[{,]\\s*$/.test(out)) {\n out += `\"${key[0]}\"`;\n i += key[0].length;\n continue;\n }\n out += ch;\n i++;\n }\n out = out.replace(/,(\\s*[}\\]])/g, \"$1\");\n try {\n JSON.parse(out);\n return out;\n } catch {\n return null;\n }\n}\n\n/**\n * A Python repr of a dict/list (`{'__kind': 'flashcard_set', 'ok': True}`) as\n * JSON text, or null when it is not one. Strings may be single- or\n * double-quoted; `True` / `False` / `None` become JSON literals.\n */\nexport function pythonReprAsJson(text: string): string | null {\n let out = \"\";\n let i = 0;\n while (i < text.length) {\n const ch = text[i]!;\n if (ch === \"'\" || ch === '\"') {\n let j = i + 1;\n let body = \"\";\n while (j < text.length && text[j] !== ch) {\n if (text[j] === \"\\\\\") {\n const next = text[j + 1] ?? \"\";\n body += next === \"'\" ? \"'\" : `\\\\${next}`;\n j += 2;\n continue;\n }\n body += text[j] === '\"' ? '\\\\\"' : text[j]!;\n j++;\n }\n if (j >= text.length) return null;\n out += `\"${body}\"`;\n i = j + 1;\n continue;\n }\n const word = /^(?:True|False|None)\\b/.exec(text.slice(i, i + 5));\n if (word) {\n out += word[0] === \"True\" ? \"true\" : word[0] === \"False\" ? \"false\" : \"null\";\n i += word[0].length;\n continue;\n }\n out += ch;\n i++;\n }\n try {\n JSON.parse(out);\n return out;\n } catch {\n return null;\n }\n}\n\n/** Whether text holds a Python-repr `'__kind'` key (key position, quoted value). */\nexport function hasPythonKindKey(text: string): boolean {\n return PYTHON_KIND_KEY.test(withoutZeroWidth(text));\n}\n\n/** Where the Python-repr value opening at `start` (`{` or `[`) closes (exclusive), or null. */\nexport function pythonBalancedEnd(text: string, start: number): number | null {\n let depth = 0;\n let quote: string | null = null;\n for (let i = start; i < text.length; i++) {\n const ch = text[i]!;\n if (quote) {\n if (ch === \"\\\\\") i++;\n else if (ch === quote) quote = null;\n continue;\n }\n if (ch === \"'\" || ch === '\"') quote = ch;\n else if (ch === \"{\" || ch === \"[\") depth++;\n else if (ch === \"}\" || ch === \"]\") {\n depth--;\n if (depth === 0) return i + 1;\n }\n }\n return null;\n}\n\n/**\n * THE ONE SPELLING NORMALIZER (K4 round 7, widened round 8, rebuilt round 9).\n * Every text detector, converter and label function runs it (directly, or\n * through `hasKindKeyAnySpelling`) so a kind spelled any REALISTIC way the\n * screen still reads as a kind converts like any other. Each spelled region —\n * from the `{` that owns the key to where its own grammar ends — is rewritten\n * as canonical JSON:\n *\n * zero-width in the key · HTML entities · typographic quotes ·\n * backslash-escaped quotes (any depth) · markdown-escaped `\\_` · Python repr ·\n * JavaScript object literal — and any combination of them in one key\n *\n * DO NO HARM (owner ruling, round 9): only characters INSIDE a matched region\n * change (a zero-width character only inside the key itself), a region never\n * reaches past the point where its grammar breaks (an unclosed region in prose\n * ends there and the text after it stays), and the scan is one linear pass.\n * Quoted source (inline code, non-JSON fences) stays as written, and a WHOLE\n * JSON text is never rewritten (a spelling inside it is a string VALUE).\n * Text with no non-canonical spelling comes back as the same string.\n */\nexport function normalizeKindSpellings(source: string): string {\n if (!mayHoldKindKey(source)) return source;\n // Whole JSON text: a spelling in it is a string VALUE, never rewritten.\n if (/^[{[]/.test(source.trimStart())) {\n try {\n JSON.parse(source);\n // Its own keys still read through a zero-width character (only the keys).\n return withoutZeroWidthInKeys(source);\n } catch {\n // Not JSON: read on.\n }\n }\n let out = \"\";\n let cursor = 0;\n for (const region of scanKindSpellingRegions(source)) {\n const rewritten = canonicalRegionText(source, region);\n if (rewritten === null) continue;\n out += source.slice(cursor, region.rewriteStart) + rewritten;\n cursor = region.rewriteEnd;\n }\n return cursor === 0 ? source : out + source.slice(cursor);\n}\n\n/** The canonical JSON a region is rewritten to by the normalizer, or null to leave it. */\nfunction canonicalRegionText(source: string, region: KindSpellingRegion): string | null {\n if (region.family === \"lifted\") {\n // A literal / `_` key: only a zero-width character INSIDE the key, or\n // the markdown `\\_` the stream ingress also reads, is rewritten.\n if (region.markdown) return region.status === \"broken\" ? closedJson(region) ?? region.decoded : region.decoded;\n const key = source.slice(region.rewriteStart, region.rewriteEnd);\n return region.keyText === undefined || key === region.keyText ? null : region.keyText;\n }\n if (region.status === \"complete\") {\n const json = regionJson(region);\n if (json !== null) return json;\n return region.family === \"python\" || region.family === \"js\" ? null : region.decoded;\n }\n if (region.status === \"broken\") return closedJson(region) ?? region.decoded;\n return region.family === \"python\" || region.family === \"js\" ? null : region.decoded;\n}\n\n/** How a kind key is spelled — which decoders turn its region into JSON. */\nexport type KindSpellingFamily = \"lifted\" | \"escaped\" | \"markdown\" | \"python\" | \"smart\" | \"entity\" | \"js\";\n\n/**\n * A kind region in a REALISTIC spelling (round 9). `[start, end)` is the raw\n * region (`{` to where its grammar ended); `[rewriteStart, rewriteEnd)` is what\n * the normalizer replaces (the key alone for a literal key holding only a\n * zero-width character). `status`: `complete` (balanced), `prefix` (still\n * arriving — runs to the end of the text) or `broken` (its grammar failed at\n * `end`; the text after it is NOT part of it). `decoded` is the region's text\n * with its spelling undone (still Python / JS for those families).\n */\nexport interface KindSpellingRegion {\n start: number;\n end: number;\n rewriteStart: number;\n rewriteEnd: number;\n family: KindSpellingFamily;\n status: \"complete\" | \"prefix\" | \"broken\";\n decoded: string;\n /** Whether the key carried the markdown `\\_` (the region was markdown-decoded). */\n markdown: boolean;\n /** A literal key's canonical text (the normalizer's whole rewrite for that family). */\n keyText?: string;\n}\n\nconst ZW = \"[\\\\u200B-\\\\u200D\\\\u2060\\\\uFEFF\\\\u00AD]\";\n/** One underscore of the key: literal, backslash-escaped at any depth, or `_`. */\nconst KEY_UNDERSCORE = String.raw`(?:\\\\*_|\\\\u005[fF]|&#0*95;|&#[xX]0*5[fF];|&lowbar;|&UnderBar;)`;\nconst KEY_CORE = `${ZW}*${KEY_UNDERSCORE}${ZW}*${KEY_UNDERSCORE}${ZW}*k${ZW}*i${ZW}*n${ZW}*d${ZW}*`;\nconst SMART_ANY = `[${SMART_DOUBLE}${SMART_SINGLE}]`;\n\n/**\n * EVERY REALISTIC SPELLING of the key, and any combination of them (L-1,\n * round 9). Groups: 1 backslashes + 2 core (the JSON family: literal,\n * escaped at any depth, markdown-escaped, zero-width), 3 Python repr core\n * (key position, quoted value), 4 typographic-quote core, 5 HTML-entity core,\n * 6 JavaScript object-literal core (unquoted, key position, quoted value).\n */\nconst SPELLED_KEY_SOURCE = [\n String.raw`(\\\\*)\"(${KEY_CORE})\\\\*\"\\s*:`,\n String.raw`(?<=[{,]\\s*)'(${KEY_CORE})'\\s*:(?=\\s*['\"])`,\n `${SMART_ANY}(${KEY_CORE})[${SMART_DOUBLE}${SMART_SINGLE}\"']\\\\s*:`,\n `${ENTITY_QUOTE}(${KEY_CORE})${ENTITY_QUOTE}\\\\s*:`,\n String.raw`(?<=[{,]\\s*)(${KEY_CORE})\\s*:(?=\\s*['\"])`,\n].join(\"|\");\nconst SPELLED_KEY = new RegExp(SPELLED_KEY_SOURCE);\nconst SPELLED_KEY_G = new RegExp(SPELLED_KEY_SOURCE, \"g\");\n\n/** Whether text holds the key in any realistic spelling or combination (detection, round 9). */\nfunction hasSpelledKey(text: string): boolean {\n return mayHoldKindKey(text) && SPELLED_KEY.test(text);\n}\n\n/**\n * A cheap pre-check every scanner runs first: no key spelling can exist\n * without `kind` (or a zero-width character splitting it). Linear, no regex\n * restarts — the plain text of every frame pays only this.\n */\nexport function mayHoldKindKey(text: string): boolean {\n return text.includes(\"kind\") || (text.includes(\"_\") && HAS_ZERO_WIDTH.test(text));\n}\n\n/** Per call: past this many regions the rest of the text is left as written (hard budget). */\nconst MAX_REGIONS_PER_CALL = 2000;\n/** How far before a `kind` the key's opening quote may sit (backslashes + zero-width + `__`). */\nconst KEY_LOOKBEHIND = 64;\n\n/** Where `kind` (or `k`+zero-width…`d`) occurs at or after `from`, or -1. */\nfunction nextKindHit(text: string, from: number, zeroWidth: boolean): number {\n if (!zeroWidth) return text.indexOf(\"kind\", from);\n KIND_LETTERS_G.lastIndex = from;\n const m = KIND_LETTERS_G.exec(text);\n return m ? m.index : -1;\n}\nconst KIND_LETTERS_G = new RegExp(`k${ZW}*i${ZW}*n${ZW}*d`, \"g\");\n\n/** The family a matched key belongs to, and its escape depth. */\nfunction keyFamily(m: RegExpExecArray): { family: KindSpellingFamily; core: string; levels: number } {\n if (m[3] !== undefined) return { family: \"python\", core: m[3], levels: 0 };\n if (m[4] !== undefined) return { family: \"smart\", core: m[4], levels: 0 };\n if (m[5] !== undefined) return { family: \"entity\", core: m[5], levels: 0 };\n if (m[6] !== undefined) return { family: \"js\", core: m[6], levels: 0 };\n const backslashes = m[1]!.length;\n const core = m[2]!;\n // An entity-spelled underscore (`&#95;`) is markdown-decoded to a real key on\n // screen but is not JSON: exotic, detection only, drawn as written.\n if (core.includes(\"&\")) return { family: \"entity\", core, levels: 0 };\n if (backslashes > 0) {\n // `\\\"` is one level, `\\\\\\\"` two, `\\\\\\\\\\\\\\\"` three: 2^levels − 1 backslashes.\n return { family: \"escaped\", core, levels: Math.min(4, Math.ceil(Math.log2(backslashes + 1))) };\n }\n const plain = core.replace(ZERO_WIDTH, \"\");\n if (plain === \"__kind\" || /^\\\\u005[fF]_kind$/.test(plain)) return { family: \"lifted\", core, levels: 0 };\n if (plain === \"\\\\_\\\\_kind\") return { family: \"lifted\", core, levels: 0 };\n return { family: \"markdown\", core, levels: 0 };\n}\n\n/**\n * THE ONE LINEAR SCAN for kind regions in a realistic spelling (round 9):\n * every candidate is found from a `kind` occurrence, its owning `{` from a\n * forward-only brace cursor, quoted source once, and each region is decoded\n * and bounded by its own grammar in work proportional to its length. Regions\n * are returned in order and never overlap; a region's inner keys belong to it.\n * A key whose `{` grammar fails BEFORE the key is not a region (prose braces).\n */\nexport function scanKindSpellingRegions(\n text: string,\n options: { families?: \"json\" | \"all\"; from?: number } = {},\n): KindSpellingRegion[] {\n const jsonOnly = options.families !== \"all\";\n // Resume point: a region end (or 0). Scanning from a region end is exactly\n // what the full scan does after that region, so a caller holding the regions\n // before it may rescan only the rest (streaming frames, round 10).\n const from = options.from ?? 0;\n const regions: KindSpellingRegion[] = [];\n if (!mayHoldKindKey(text)) return regions;\n const zeroWidth = HAS_ZERO_WIDTH.test(text);\n let quoted: Array<[number, number]> | null = null;\n const inQuoted = (at: number) => {\n quoted ??= quotedSourceRanges(text);\n let lo = 0;\n let hi = quoted.length - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >> 1;\n const [a, b] = quoted[mid]!;\n if (at < a) hi = mid - 1;\n else if (at >= b) lo = mid + 1;\n else return true;\n }\n return false;\n };\n let cursor = from;\n let braceScan = from;\n let lastBrace = -1;\n // A `{` whose grammar already ended before a key can own no later key: it is\n // never re-read (round 10, linear time — one early brace, many mentions).\n let deadBraceFloor = from;\n // Round 11 (F2): looking past a broken region for its balanced close is the\n // one step whose cost is not the region's own length — capped per call so\n // many broken regions never each read to the end of the text.\n const reach: ReachBudget = { left: REACH_BUDGET_FACTOR * text.length + REACH_BUDGET_FLOOR };\n let hit = nextKindHit(text, from, zeroWidth);\n while (hit >= 0 && regions.length < MAX_REGIONS_PER_CALL) {\n const windowStart = Math.max(cursor, hit - KEY_LOOKBEHIND);\n const windowEnd = Math.min(text.length, hit + KEY_LOOKBEHIND);\n SPELLED_KEY_G.lastIndex = 0;\n const window = text.slice(windowStart, windowEnd);\n let m: RegExpExecArray | null = null;\n for (let candidate = SPELLED_KEY_G.exec(window); candidate; candidate = SPELLED_KEY_G.exec(window)) {\n if (windowStart + candidate.index + candidate[0].length > hit) {\n m = candidate;\n break;\n }\n }\n if (!m) {\n hit = nextKindHit(text, hit + 1, zeroWidth);\n continue;\n }\n const keyAt = windowStart + m.index;\n const keyEnd = keyAt + m[0].length;\n const next = () => nextKindHit(text, keyEnd, zeroWidth);\n while (braceScan < keyAt) {\n if (text.charCodeAt(braceScan) === 123 /* { */) lastBrace = braceScan;\n braceScan++;\n }\n const brace = lastBrace >= Math.max(cursor, deadBraceFloor) ? lastBrace : -1;\n if (brace < 0 || inQuoted(keyAt) || inQuoted(brace)) {\n hit = next();\n continue;\n }\n const { family, core, levels } = keyFamily(m);\n // Round 10: a non-JSON spelling is detection only — never a converted region.\n if (jsonOnly && family !== \"lifted\" && family !== \"markdown\") {\n hit = next();\n continue;\n }\n const markdown = /\\\\_/.test(core) || (family === \"escaped\" && /\\\\{2}_/.test(core));\n const plan = decodePlan(family, levels, markdown);\n const region = boundRegion(text, brace, keyAt, plan, reach);\n if (!region) {\n deadBraceFloor = brace + 1;\n hit = next();\n continue;\n }\n if (family === \"lifted\" && !markdown) {\n // Literal key: the region is only scanned (so its inner keys belong to\n // it); the normalizer rewrites the key alone when it holds a zero-width.\n regions.push({\n start: brace,\n end: region.end,\n rewriteStart: keyAt,\n rewriteEnd: keyEnd,\n keyText: m[0].replace(ZERO_WIDTH, \"\"),\n family,\n status: region.status,\n decoded: withoutZeroWidthInKeys(region.decoded),\n markdown: false,\n });\n } else {\n regions.push({\n start: brace,\n end: region.end,\n rewriteStart: brace,\n rewriteEnd: region.end,\n family,\n status: region.status,\n decoded: withoutZeroWidthInKeys(region.decoded),\n markdown,\n });\n }\n cursor = region.end;\n if (region.status === \"prefix\") break;\n hit = nextKindHit(text, cursor, zeroWidth);\n }\n return regions;\n}\n\n/** Inside decoded text, a key spelled `__kind` with zero-width characters → `__kind` (keys only). */\nconst ZW_KEY_IN_DECODED = new RegExp(`([\"'])${ZW}*_${ZW}*_${ZW}*k${ZW}*i${ZW}*n${ZW}*d${ZW}*\\\\1(?=\\\\s*:)`, \"g\");\nfunction withoutZeroWidthInKeys(decoded: string): string {\n return HAS_ZERO_WIDTH.test(decoded) ? decoded.replace(ZW_KEY_IN_DECODED, (key) => key.replace(ZERO_WIDTH, \"\")) : decoded;\n}\n\ninterface DecodePlan {\n steps: SpellingStep[];\n grammar: GrammarDialect;\n}\n\nfunction decodePlan(family: KindSpellingFamily, levels: number, markdown: boolean): DecodePlan {\n const steps: SpellingStep[] = [];\n if (family === \"entity\") steps.push(entityStep);\n if (family === \"smart\") steps.push(smartStep);\n for (let level = 0; level < levels; level++) steps.push(escapeStep);\n if (markdown) steps.push(markdownStep);\n const grammar: GrammarDialect =\n family === \"js\" ? \"js\" : family === \"python\" || family === \"smart\" || family === \"entity\" ? \"python\" : \"json\";\n return { steps, grammar };\n}\n\n/** One decoded text and, per decoded character, the raw index it came from (plus the raw end). */\ninterface DecodedText {\n text: string;\n map: number[];\n}\n\ntype SpellingStep = (raw: string, i: number) => [string, number];\n\nfunction decodeWith(raw: string, step: SpellingStep): DecodedText {\n let text = \"\";\n const map: number[] = [];\n for (let i = 0; i < raw.length; ) {\n const [out, consumed] = step(raw, i);\n for (let k = 0; k < out.length; k++) map.push(i);\n text += out;\n i += Math.max(1, consumed);\n }\n map.push(raw.length);\n return { text, map };\n}\n\n/** Every step in order, the maps composed back to the raw input. */\nfunction decodeChain(raw: string, steps: SpellingStep[]): DecodedText {\n if (steps.length === 0) {\n const map = new Array<number>(raw.length + 1);\n for (let i = 0; i <= raw.length; i++) map[i] = i;\n return { text: raw, map };\n }\n let current = decodeWith(raw, steps[0]!);\n for (let s = 1; s < steps.length; s++) {\n const next = decodeWith(current.text, steps[s]!);\n const prior = current.map;\n current = { text: next.text, map: next.map.map((at) => prior[at]!) };\n }\n return current;\n}\n\nconst ENTITY_STEP_RE = /^&(?:(quot|apos|amp|lt|gt|lowbar|UnderBar)|#(\\d{1,6})|#[xX]([0-9a-fA-F]{1,6}));/i;\nconst NAMED_ENTITIES: Record<string, string> = { quot: '\"', apos: \"'\", amp: \"&\", lt: \"<\", gt: \">\", lowbar: \"_\", underbar: \"_\" };\nconst ESCAPE_CHARS: Record<string, string> = { '\"': '\"', \"\\\\\": \"\\\\\", \"/\": \"/\", n: \"\\n\", t: \"\\t\", r: \"\\r\", b: \"\", f: \"\" };\n\nconst entityStep: SpellingStep = (raw, i) => {\n if (raw[i] !== \"&\") return [raw[i]!, 1];\n const m = ENTITY_STEP_RE.exec(raw.slice(i, i + 12));\n if (!m) return [\"&\", 1];\n const ch = m[1] ? NAMED_ENTITIES[m[1].toLowerCase()]! : String.fromCodePoint(Number.parseInt(m[2] ?? m[3]!, m[2] ? 10 : 16));\n return [ch, m[0].length];\n};\nconst smartStep: SpellingStep = (raw, i) => {\n const ch = raw[i]!;\n if (SMART_DOUBLE.includes(ch)) return ['\"', 1];\n if (SMART_SINGLE.includes(ch)) return [\"'\", 1];\n return [ch, 1];\n};\nconst escapeStep: SpellingStep = (raw, i) => {\n if (raw[i] !== \"\\\\\") return [raw[i]!, 1];\n const next = raw[i + 1] ?? \"\";\n if (next in ESCAPE_CHARS) return [ESCAPE_CHARS[next]!, 2];\n if (next === \"u\" && /^[0-9a-fA-F]{4}$/.test(raw.slice(i + 2, i + 6))) return [raw.slice(i, i + 6), 6];\n return [raw.slice(i, i + 2), 2];\n};\nconst markdownStep: SpellingStep = (raw, i) => (raw[i] === \"\\\\\" && raw[i + 1] === \"_\" ? [\"_\", 2] : [raw[i]!, 1]);\n\n/** Smallest decode window; it grows ×4 until the region's grammar settles inside it. */\nconst FIRST_WINDOW = 128;\n\n/**\n * Characters one scan may read BEYOND broken regions' grammar breaks, looking\n * for their balanced closes (round 11, F2): `4 × text + 64 KB`. A real message\n * holds a few malformed objects and never comes near it; '{\"a\":[1,{\"__kind\":\"x\" 1 [ '\n * × 6 000 read the rest of the text per region (23.5 s). Once spent, a broken\n * region ends at its own break (its honest broken bound).\n */\nconst REACH_BUDGET_FACTOR = 4;\nconst REACH_BUDGET_FLOOR = 65_536;\ninterface ReachBudget {\n left: number;\n}\n\n/**\n * Decode and bound the region whose `{` is at `brace`: windowed, so the work is\n * proportional to the region, never to the rest of the text. Null when the\n * grammar fails before the key (the `{` is not the key's object).\n */\nfunction boundRegion(\n text: string,\n brace: number,\n keyAt: number,\n plan: DecodePlan,\n reach: ReachBudget = { left: Number.POSITIVE_INFINITY },\n): { end: number; status: KindSpellingRegion[\"status\"]; decoded: string } | null {\n for (let width = FIRST_WINDOW; ; width *= 4) {\n const hi = Math.min(text.length, brace + width);\n const atEnd = hi === text.length;\n const decoded = decodeChain(text.slice(brace, hi), plan.steps);\n const keyDecoded = firstAtOrAfter(decoded.map, keyAt - brace);\n const verdict = kindGrammar(decoded.text, plan.grammar);\n if (verdict.status === \"complete\") {\n if (verdict.end <= keyDecoded) return null;\n return { end: brace + decoded.map[verdict.end]!, status: \"complete\", decoded: decoded.text.slice(0, verdict.end) };\n }\n if (verdict.status === \"broken\") {\n // A break at the window edge may be a cut escape: look further.\n if (!atEnd && decoded.map[verdict.at]! >= hi - brace - 16) continue;\n if (!verdict.prose) {\n // Malformed JSON, not prose: its balanced close bounds it ONLY when that\n // span reads as JSON once trailing commas go (round 10 — a stray `}`\n // later in the prose never extends it); otherwise it ends at its cut.\n const end = balancedEnd(decoded.text, plan.grammar !== \"json\");\n if (end === null && !atEnd) {\n // Each wider window re-reads the span past the break: charge it.\n const past = hi - brace - verdict.at;\n if (reach.left > past) {\n reach.left -= past;\n continue;\n }\n }\n if (end !== null && end > keyDecoded && lenientlyParses(decoded.text.slice(0, end), plan.grammar)) {\n return { end: brace + decoded.map[end]!, status: \"complete\", decoded: decoded.text.slice(0, end) };\n }\n }\n // At the end of the text, a half-typed escape or entity (`\\`, `&quo`)\n // is still arriving, not broken.\n if (atEnd && ARRIVING_SPELLING_TAIL.test(text.slice(brace + decoded.map[verdict.at]!))) {\n if (verdict.at <= keyDecoded) return null;\n return { end: text.length, status: \"prefix\", decoded: decoded.text };\n }\n if (verdict.cut <= keyDecoded) return null;\n return { end: brace + decoded.map[verdict.cut]!, status: \"broken\", decoded: decoded.text.slice(0, verdict.cut) };\n }\n if (!atEnd) continue;\n return { end: text.length, status: \"prefix\", decoded: decoded.text };\n }\n}\n\n/**\n * Past this many characters an open bare-JSON region is not re-read for a\n * prose break (a hot-path budget: the check is linear in the region, run per\n * line / fragment). A fragment that breaks into prose does so within its first\n * lines; a long region is real JSON streaming.\n */\nexport const BARE_REGION_GRAMMAR_BUDGET = 16_384;\n\n/**\n * Whether an open bare-JSON region's text has BROKEN INTO PROSE by its own JSON\n * grammar (round 10, C1): `{\"status\": \"ok\", \"items\": [` then a line of words,\n * `{\\\"__kind\\\":…} and the rest`, `{ some code`. Such a region was never JSON:\n * it reads as text. THE one answer the live accumulator (per line, budgeted)\n * and the reload splitter (whole region, `firstBudget` — the same first 16 KB\n * the live check reads) share, so live ≡ reload (round 11, H1). A region still\n * validly open (or complete) is not broken.\n */\nexport function bareRegionBreaksIntoProse(text: string, options: { firstBudget?: boolean } = {}): boolean {\n let region = text;\n if (region.length > BARE_REGION_GRAMMAR_BUDGET) {\n if (!options.firstBudget) return false;\n region = region.slice(0, BARE_REGION_GRAMMAR_BUDGET);\n }\n const start = region.search(/\\S/);\n if (start < 0) return false;\n const verdict = kindGrammar(region, \"json\", start);\n return verdict.status === \"broken\" && verdict.prose;\n}\n\n/** Whether a balanced span reads as JSON (or as its dialect) once trailing commas are dropped. */\nfunction lenientlyParses(span: string, grammar: GrammarDialect): boolean {\n const body = span.replace(/,(\\s*[}\\]])/g, \"$1\");\n if (grammar !== \"json\") return true;\n try {\n JSON.parse(body);\n return true;\n } catch {\n return false;\n }\n}\n\n/** The end (exclusive) of the quote-aware balanced value opening at 0, or null. */\nfunction balancedEnd(text: string, singleQuotes: boolean): number | null {\n let depth = 0;\n let quote = \"\";\n for (let i = 0; i < text.length; i++) {\n const ch = text[i]!;\n if (quote) {\n if (ch === \"\\\\\") i++;\n else if (ch === quote) quote = \"\";\n continue;\n }\n if (ch === '\"' || (singleQuotes && ch === \"'\")) quote = ch;\n else if (ch === \"{\" || ch === \"[\") depth++;\n else if (ch === \"}\" || ch === \"]\") {\n depth--;\n if (depth === 0) return i + 1;\n }\n }\n return null;\n}\n\n/**\n * Where a LITERAL kind object (`text` opens at its `{`) breaks into prose —\n * `{\"__kind\":\"note\",\"title\":\"Hi\" and then…` — after its key: the end of the\n * region, or null (complete, still arriving, or merely malformed). THE one\n * answer the converters, the prose leaf and the live accumulator share, so a\n * settled unclosed object reads the same live and reloaded (L-4, round 9).\n */\nexport function kindObjectProseBreak(text: string): number | null {\n const key = text.search(LITERAL_KIND_KEY);\n if (key < 0) return null;\n const verdict = kindGrammar(text);\n return verdict.status === \"broken\" && verdict.prose && verdict.cut > key ? verdict.cut : null;\n}\nconst LITERAL_KIND_KEY = new RegExp(String.raw`(?<!\\\\)\"${KIND_KEY_BODY}\"\\s*:`);\n\n/** The text's tail after a break that is a spelling still typing: a lone `\\` run or a partial entity. */\nconst ARRIVING_SPELLING_TAIL = /^(?:\\\\+\"?|&#?[A-Za-z0-9]{0,6})$/;\n\n/** The first index whose map value is at least `raw` (maps are non-decreasing). */\nfunction firstAtOrAfter(map: number[], raw: number): number {\n let lo = 0;\n let hi = map.length - 1;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (map[mid]! < raw) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\n/** Which JSON-like grammar bounds a region: strict JSON, Python repr, or a JavaScript literal. */\nexport type GrammarDialect = \"json\" | \"python\" | \"js\";\n\nexport type KindGrammarVerdict =\n | { status: \"complete\"; end: number }\n | { status: \"prefix\" }\n | { status: \"broken\"; at: number; cut: number; prose: boolean };\n\n/**\n * Where a JSON-like value opening at 0 ends by its OWN grammar (H-1, round 9):\n * `complete` at its balanced close, `prefix` when the text ends while it is\n * still valid (arriving), or `broken` at the first character that cannot\n * continue it — `cut` is the end of the last whole token before that (after a\n * value, a `,`, or an opener), so the text after `cut` is never part of it.\n * A raw newline inside a string breaks it (JSON strings never hold one), so an\n * unclosed string never runs past its line. One pass, no allocation per char.\n */\nexport function kindGrammar(\n s: string,\n dialect: GrammarDialect = \"json\",\n from = 0,\n): KindGrammarVerdict {\n const closers: number[] = [];\n const singleQuotes = dialect !== \"json\";\n const bareKeys = dialect === \"js\";\n const trailingCommas = dialect !== \"json\";\n // 0 value, 1 value-or-close, 2 key-or-close, 3 colon, 4 after-value\n let expect = 0;\n let lastGood = from;\n const n = s.length;\n // A break is PROSE when what stops the value is a word (or a newline inside\n // a string) — text after an unclosed object — not JSON punctuation, which is\n // malformed JSON (a trailing comma, a missing comma) and keeps its old reading.\n const broken = (at: number): KindGrammarVerdict => ({\n status: \"broken\",\n at,\n cut: lastGood,\n prose: !/^[{}[\\]:,\"'0-9.+-]$/.test(s[at] ?? \"\"),\n });\n let i = from;\n while (i < n) {\n const c = s.charCodeAt(i);\n if (c === 32 || c === 9 || c === 10 || c === 13) {\n i++;\n continue;\n }\n if (expect === 4 || expect === 1 || expect === 2) {\n if (c === 125 /* } */ || c === 93 /* ] */) {\n if (closers.length === 0 || closers[closers.length - 1] !== c) return broken(i);\n if (expect === 4 || trailingCommas || lastCharWasOpener(s, i)) {\n closers.pop();\n i++;\n lastGood = i;\n if (closers.length === 0) return { status: \"complete\", end: i };\n expect = 4;\n continue;\n }\n return broken(i);\n }\n if (expect === 4) {\n if (c !== 44 /* , */) return broken(i);\n i++;\n lastGood = i;\n expect = closers[closers.length - 1] === 125 ? 2 : 1;\n continue;\n }\n }\n if (expect === 3) {\n if (c !== 58 /* : */) return broken(i);\n i++;\n expect = 0;\n continue;\n }\n const keyPosition = expect === 2;\n if (c === 34 /* \" */ || (singleQuotes && c === 39) /* ' */) {\n let j = i + 1;\n for (;;) {\n if (j >= n) return { status: \"prefix\" };\n const d = s.charCodeAt(j);\n if (d === 92 /* \\ */) {\n j += 2;\n continue;\n }\n if (d === 10 || d === 13) return broken(j);\n if (d === c) break;\n j++;\n }\n i = j + 1;\n if (keyPosition) expect = 3;\n else {\n expect = 4;\n lastGood = i;\n }\n continue;\n }\n if (keyPosition) {\n if (!bareKeys || !isIdentStart(c)) return broken(i);\n let j = i + 1;\n while (j < n && isIdentPart(s.charCodeAt(j))) j++;\n if (j >= n) return { status: \"prefix\" };\n i = j;\n expect = 3;\n continue;\n }\n if (c === 123 /* { */ || c === 91 /* [ */) {\n closers.push(c === 123 ? 125 : 93);\n i++;\n lastGood = i;\n expect = c === 123 ? 2 : 1;\n continue;\n }\n if (c === 45 /* - */ || (c >= 48 && c <= 57)) {\n let j = i + 1;\n while (j < n && /[0-9eE.+-]/.test(s[j]!)) j++;\n if (j >= n) return { status: \"prefix\" };\n i = j;\n lastGood = i;\n expect = 4;\n continue;\n }\n if (isIdentStart(c)) {\n let j = i + 1;\n while (j < n && isIdentPart(s.charCodeAt(j))) j++;\n const word = s.slice(i, j);\n if (j >= n) return VALUE_WORDS[dialect].some((w) => w.startsWith(word)) ? { status: \"prefix\" } : broken(i);\n if (!VALUE_WORDS[dialect].includes(word)) return broken(i);\n i = j;\n lastGood = i;\n expect = 4;\n continue;\n }\n return broken(i);\n }\n return { status: \"prefix\" };\n}\n\nconst VALUE_WORDS: Record<GrammarDialect, string[]> = {\n json: [\"true\", \"false\", \"null\"],\n python: [\"True\", \"False\", \"None\", \"true\", \"false\", \"null\"],\n js: [\"true\", \"false\", \"null\", \"undefined\", \"NaN\", \"Infinity\"],\n};\n\nfunction isIdentStart(c: number): boolean {\n return (c >= 65 && c <= 90) || (c >= 97 && c <= 122) || c === 95 || c === 36;\n}\nfunction isIdentPart(c: number): boolean {\n return isIdentStart(c) || (c >= 48 && c <= 57);\n}\n/** Whether the last non-space character before `at` opens a container (`{}` / `[]` are always fine). */\nfunction lastCharWasOpener(s: string, at: number): boolean {\n for (let k = at - 1; k >= 0; k--) {\n const c = s.charCodeAt(k);\n if (c === 32 || c === 9 || c === 10 || c === 13) continue;\n return c === 123 || c === 91;\n }\n return false;\n}\n\nconst JSON_ONLY_FAMILIES = new Set<KindSpellingFamily>([\"lifted\", \"escaped\", \"markdown\"]);\n\n/** A complete region as JSON text (Python / JS converted), or null when it will not read. */\nexport function regionJson(region: Pick<KindSpellingRegion, \"family\" | \"decoded\">): string | null {\n const text = region.decoded;\n if (region.family === \"js\") return json5AsJson(text);\n if (region.family !== \"python\") {\n try {\n JSON.parse(text);\n return text;\n } catch {\n // A repr-shaped body (single quotes, True/None) reads below.\n }\n }\n return pythonReprAsJson(text);\n}\n\n/**\n * A BROKEN (settled, unclosed) region closed where its grammar ended: a\n * dangling `,` or `key:` dropped, every open container closed — the reading\n * the label is drawn from. Null when even that will not read.\n */\nexport function closedJson(region: Pick<KindSpellingRegion, \"family\" | \"decoded\">): string | null {\n let body = region.decoded.replace(/\\s+$/, \"\");\n body = body.replace(/,?\\s*(?:\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|[A-Za-z_$][\\w$]*)\\s*:\\s*$/, \"\");\n body = body.replace(/,\\s*$/, \"\");\n const closers: string[] = [];\n let quote = \"\";\n for (let i = 0; i < body.length; i++) {\n const ch = body[i]!;\n if (quote) {\n if (ch === \"\\\\\") i++;\n else if (ch === quote) quote = \"\";\n continue;\n }\n if (ch === '\"' || (ch === \"'\" && !JSON_ONLY_FAMILIES.has(region.family))) quote = ch;\n else if (ch === \"{\") closers.push(\"}\");\n else if (ch === \"[\") closers.push(\"]\");\n else if (ch === \"}\" || ch === \"]\") closers.pop();\n }\n if (quote) return null;\n return regionJson({ family: region.family, decoded: body + closers.reverse().join(\"\") });\n}\n\n/**\n * The VALUE form of the same question, for renderers handed parsed data\n * instead of text (the value grid, the JSON viewers): does this value carry a\n * kind anywhere — an object with a string `__kind`, at any depth, or a string\n * that holds a kind REGION (`textCarriesKind`: whole kind JSON, or prose with\n * a kind in it — a ```json fence, inline JSON — outside quoted source)? A raw\n * renderer that answers yes renders the value through the one value door\n * (`AnswerValueView`) instead.\n */\nexport function valueCarriesKind(value: unknown): boolean {\n return carriesKind(value, 0, new Set());\n}\n\n/** Past this depth a value is not searched further (cycles and pathological nesting). */\nconst VALUE_SEARCH_DEPTH = 64;\n\nfunction carriesKind(value: unknown, depth: number, seen: Set<object>): boolean {\n if (typeof value === \"string\") return textCarriesKind(value);\n if (value === null || typeof value !== \"object\") return false;\n if (depth > VALUE_SEARCH_DEPTH || seen.has(value)) return false;\n seen.add(value);\n if (Array.isArray(value)) {\n return value.some((item) => carriesKind(item, depth + 1, seen));\n }\n const record = value as Record<string, unknown>;\n if (typeof record.__kind === \"string\" && record.__kind.trim()) return true;\n for (const item of Object.values(record)) {\n if (carriesKind(item, depth + 1, seen)) return true;\n }\n return false;\n}\n\n/**\n * A STRING value that holds a kind region (H1, round 5): text that is kind\n * JSON, or prose with a kind region in it by THE markdown definition\n * (`markdownCarriesKind` — outside quoted source, markdown-escaped key too).\n * `{answer: \"Here are your cards: ```json {…kind…}```\"}` carries its kind.\n */\nexport function textCarriesKind(text: string): boolean {\n if (isKindJsonText(text) || markdownCarriesKind(text)) return true;\n // A WHOLE JSON text whose kind is held in a string value at any depth\n // (`{\"result\":\"{\\\"__kind\\\":…}\"}` — tool / workflow data): parse it and read\n // the strings (round 10: real JSON, never a free-text guess).\n if (!mayHoldKindKey(text) || !/^[{[]/.test(text.trimStart())) return false;\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n return false;\n }\n return typeof parsed === \"object\" && parsed !== null && valueCarriesKind(parsed);\n}\n\n/**\n * Text that IS a JSON object/array carrying a `__kind` key (not prose\n * mentioning one) — the gate before a `JSON.parse` of the whole text. For\n * \"does this string hold a kind anywhere\", read `textCarriesKind`.\n */\nexport function isKindJsonText(text: string): boolean {\n const first = text.trimStart()[0];\n return (first === \"{\" || first === \"[\") && hasKindKey(text);\n}\n\n/** The kind slug a value claims for itself at its root, or null. */\nexport function rootKindSlug(value: unknown): string | null {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return null;\n const kind = (value as Record<string, unknown>).__kind;\n return typeof kind === \"string\" && kind.trim() ? kind : null;\n}\n\n/** Fence languages whose body is a JSON region (an unlabelled fence included). */\nconst JSON_FENCE_LANGS = new Set([\"\", \"json\", \"jsonc\", \"json5\"]);\n\n/** Whether a fence's language makes its body a JSON region (any case; none counts). */\nexport function isJsonFenceLanguage(lang: string | null | undefined): boolean {\n return JSON_FENCE_LANGS.has((lang ?? \"\").trim().toLowerCase());\n}\n\n/**\n * Where a kind in markdown is the model QUOTING SOURCE, never data (the\n * owner's ruling, 2026-09-30): inside an inline code span, or inside a fence\n * whose language is not JSON (```ts, ```xml, ```markdown …). Everything else\n * — prose, a blockquote, a list item, a table cell, a 4-space indented block,\n * a JSON fence — is data. [start, end) spans, in order. THE one definition:\n * the splitter, the live accumulator and the leaf gate all read it, so a leaf\n * and the pipeline can never disagree about what is a kind region.\n */\nexport function quotedSourceRanges(text: string): Array<[number, number]> {\n const ranges: Array<[number, number]> = [];\n for (const range of findCodeRanges(text)) {\n if (range.kind === \"span\") {\n ranges.push([range.start, range.end]);\n continue;\n }\n const raw = text.slice(range.start, range.end);\n const newline = raw.indexOf(\"\\n\");\n const firstLine = (newline === -1 ? raw : raw.slice(0, newline)).replace(/^ {0,3}(?:> ?)*/, \"\");\n const opener = fenceOpenerOf(firstLine.trimStart());\n if (!opener || !isJsonFenceLanguage(opener.lang)) {\n ranges.push([range.start, range.end]);\n }\n }\n return ranges;\n}\n\n/**\n * Whether an XML card SHOWS SOURCE (the owner's rulings, round 3): a ```xml\n * FENCE is the model quoting source — a kind inside it stays as written (a).\n * An XML TAG the model wraps content in (`<answer>`, `<output>`, any generic\n * tag, closed or not) is STRUCTURE (b): the splitter and the accumulator mark\n * every piece of it `genericXmlContainer`, and a kind inside its prose renders\n * as the kind. THE one answer — XmlBlock's callers and the frame judge read it.\n */\nexport function isQuotedSourceXmlBlock(block: {\n metadata?: Record<string, unknown> | null;\n}): boolean {\n return block.metadata?.genericXmlContainer !== true;\n}\n\n/**\n * Where the front matter that opens `source` ends (0 when none): an optional\n * byte-order mark, a first line that is exactly `---` or `+++`, through the\n * same fence (YAML also `...`). Front matter is document properties, never\n * content — a `{\"__kind\":…}` VALUE inside it is never a kind block, in the\n * static splitter or the live accumulator (RC-B3r round 3, C1).\n */\nexport function frontMatterEnd(source: string): number {\n const body = source.charCodeAt(0) === 0xfeff ? 1 : 0;\n const firstBreak = source.indexOf(\"\\n\", body);\n if (firstBreak < 0) return 0;\n const opener = source.slice(body, firstBreak).replace(/\\r$/, \"\");\n if (opener !== \"---\" && opener !== \"+++\") return 0;\n for (let pos = firstBreak + 1; pos < source.length; ) {\n const next = source.indexOf(\"\\n\", pos);\n const end = next < 0 ? source.length : next;\n const line = source.slice(pos, end).replace(/\\r$/, \"\");\n if (line === opener || (opener === \"---\" && line === \"...\")) return end;\n if (next < 0) break;\n pos = next + 1;\n }\n return 0;\n}\n\n/**\n * The MARKDOWN form: does this prose hold a kind REGION — a `__kind` key\n * anywhere outside quoted source (see `quotedSourceRanges`)? A leaf that\n * answers yes hands the text to the pipeline (`MarkdownStream`), which lifts\n * the region by the same definition — prose, table cell, indented block,\n * blockquote, JSON fence, or the whole text being kind JSON.\n */\nexport function markdownCarriesKind(source: string): boolean {\n // Front matter is document properties, hidden on screen and never lifted\n // (X-minor, round 3): a kind there is not a region of the text.\n const text = source.slice(frontMatterEnd(source));\n if (!hasKindKey(text, JSON_KIND_SPELLINGS)) return false;\n if (isKindJsonText(text)) return true;\n const quoted = quotedSourceRanges(text);\n if (quoted.length === 0) return true;\n let outside = \"\";\n let cursor = 0;\n for (const [start, end] of quoted) {\n if (start < cursor) continue;\n outside += text.slice(cursor, start) + \" \";\n cursor = end;\n }\n outside += text.slice(cursor);\n return hasKindKey(outside, JSON_KIND_SPELLINGS);\n}\n","/**\n * Recover complete self-described kind objects from ANY containing text.\n *\n * Markdown, code fences, and XML are arrival containers, not type authority.\n * Once a complete JSON object directly declares a non-empty `__kind`, that\n * object is its own Content IR region even when an outer parser already\n * classified the surrounding bytes as code, XML, or prose.\n *\n * Generic XML opts into literal-context exclusion so tag attributes, code,\n * comments, and CDATA remain examples owned by their container. Otherwise the\n * scanner is syntax-agnostic about the outer container. It only promotes candidates that independently pass JSON.parse and carry a\n * direct string discriminator. Failed/malformed candidates remain untouched.\n */\n\nimport { readXmlTag } from \"../source/xml-tag\";\nimport { fenceOpenerOf, findCodeRanges } from \"../source\";\nimport { frontMatterEnd, isJsonFenceLanguage, kindGrammar, quotedSourceRanges } from \"./json-kind-signal\";\n\nexport interface EmbeddedKindJsonRegion {\n start: number;\n end: number;\n content: string;\n kind: string;\n}\n\nexport type EmbeddedKindJsonPiece =\n | { type: \"container\"; content: string }\n | { type: \"kind\"; content: string; kind: string }\n /**\n * JSON punctuation that only held kinds together — the `[`, `,` and `]` of\n * an array of kinds. Kept so the partition stays lossless; never rendered\n * (a lone `[` drawn as a JSON card is noise, not content — A6).\n */\n | { type: \"chrome\"; content: string }\n /**\n * The non-kind DATA of a JSON wrapper around kinds (`{\"result\":{…kind…},\n * \"note\":\"x\"}`, A7): `content` is the source span it replaces (lossless),\n * `json` is the wrapper's value with every kind removed — valid JSON, drawn\n * as genuine JSON. A wrapper that holds only kinds has no residual piece.\n */\n | { type: \"residual\"; content: string; json: string };\n\nfunction matchingJsonObjectEnd(source: string, start: number): number | null {\n if (source[start] !== \"{\" && source[start] !== \"[\") return null;\n\n const stack: string[] = [source[start]];\n let inString = false;\n let escaped = false;\n\n for (let index = start + 1; index < source.length; index++) {\n const char = source[index];\n\n if (inString) {\n if (escaped) {\n escaped = false;\n } else if (char === \"\\\\\") {\n escaped = true;\n } else if (char === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (char === '\"') {\n inString = true;\n continue;\n }\n if (char === \"{\" || char === \"[\") {\n stack.push(char);\n continue;\n }\n if (char !== \"}\" && char !== \"]\") continue;\n\n const opening = stack.pop();\n if (\n (char === \"}\" && opening !== \"{\") ||\n (char === \"]\" && opening !== \"[\")\n ) {\n return null;\n }\n if (stack.length === 0) return index + 1;\n }\n\n return null;\n}\n\n/**\n * For every `{` / `[` in `text`: the end (exclusive) of the string-aware\n * balanced JSON value opening there, or -1 (never balances). Each opener's\n * reading starts outside a string, exactly as if read alone; one right-to-left\n * pass reuses each nested opener's own answer (its reading from inside an\n * enclosing value is the same reading), so the whole table is linear — a\n * reading per opener was quadratic on thousands of unclosed `{` (round 11, P5).\n */\nexport function balancedEnds(text: string): Int32Array {\n const ends = new Int32Array(text.length).fill(-1);\n const stack: string[] = [];\n for (let start = text.length - 1; start >= 0; start--) {\n const open = text[start];\n if (open !== \"{\" && open !== \"[\") continue;\n stack.length = 0;\n stack.push(open === \"{\" ? \"}\" : \"]\");\n let inString = false;\n for (let i = start + 1; i < text.length; i++) {\n const ch = text[i]!;\n if (inString) {\n if (ch === \"\\\\\") i++;\n else if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') inString = true;\n else if (ch === \"{\" || ch === \"[\") {\n const end = ends[i]!;\n if (end < 0) break;\n i = end - 1;\n } else if (ch === \"}\" || ch === \"]\") {\n if (stack.pop() !== ch) break;\n ends[start] = i + 1;\n break;\n }\n }\n }\n return ends;\n}\n\n/** `matchingJsonObjectEnd` answered from ONE linear table, built on first use (a reading per opener is quadratic on thousands of unclosed `{`). */\nfunction lazyJsonEnds(source: string): (start: number) => number | null {\n let table: Int32Array | undefined;\n return (start) => {\n if (source[start] !== \"{\" && source[start] !== \"[\") return null;\n table ??= balancedEnds(source);\n const end = table[start]!;\n return end < 0 ? null : end;\n };\n}\n\nfunction skipWhitespace(source: string, cursor: number): number {\n while (/\\s/.test(source[cursor] ?? \"\")) cursor++;\n return cursor;\n}\n\nfunction jsonStringEnd(source: string, start: number): number | null {\n if (source[start] !== '\"') return null;\n\n let escaped = false;\n for (let cursor = start + 1; cursor < source.length; cursor++) {\n const char = source[cursor];\n if (escaped) {\n escaped = false;\n } else if (char === \"\\\\\") {\n escaped = true;\n } else if (char === '\"') {\n return cursor + 1;\n }\n }\n return null;\n}\n\nfunction jsonValueEnd(source: string, start: number): number | null {\n const char = source[start];\n if (char === '\"') return jsonStringEnd(source, start);\n if (char === \"{\" || char === \"[\") return matchingJsonObjectEnd(source, start);\n\n const end = source.slice(start).search(/[\\s,}\\]]/);\n const tokenEnd = end === -1 ? source.length : start + end;\n const token = source.slice(start, tokenEnd);\n return /^(?:true|false|null|-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)$/.test(\n token,\n )\n ? tokenEnd\n : null;\n}\n\n/**\n * Returns the structural boundary of an unfinished or malformed object whose\n * root directly declares `__kind`. That root owns all of its descendants even\n * though it cannot be promoted as a renderable JSON region itself.\n */\nfunction malformedKindOwnerEnd(\n source: string,\n start: number,\n boundary = source.length,\n): number | null {\n let cursor = skipWhitespace(source, start + 1);\n let kindFound = false;\n const ownerEnd = () => (kindFound ? boundary : null);\n\n while (cursor < boundary) {\n const keyStart = cursor;\n const keyEnd = jsonStringEnd(source, keyStart);\n if (keyEnd === null || keyEnd > boundary) return ownerEnd();\n\n let key: unknown;\n try {\n key = JSON.parse(source.slice(keyStart, keyEnd));\n } catch {\n return ownerEnd();\n }\n\n cursor = skipWhitespace(source, keyEnd);\n if (cursor >= boundary || source[cursor] !== \":\") return ownerEnd();\n cursor = skipWhitespace(source, cursor + 1);\n\n const valueStart = cursor;\n const valueEnd = jsonValueEnd(source, valueStart);\n if (valueEnd === null || valueEnd > boundary) return ownerEnd();\n\n if (key === \"__kind\") {\n try {\n const value = JSON.parse(source.slice(valueStart, valueEnd));\n kindFound ||= typeof value === \"string\" && value.trim().length > 0;\n } catch {\n return ownerEnd();\n }\n }\n\n cursor = skipWhitespace(source, valueEnd);\n if (source[cursor] === \"}\") return kindFound ? cursor + 1 : null;\n if (cursor >= boundary || source[cursor] !== \",\") return ownerEnd();\n cursor = skipWhitespace(source, cursor + 1);\n }\n\n return ownerEnd();\n}\n\n/** String literals in a valid anonymous JSON wrapper are never regions. */\nfunction jsonStringRanges(\n source: string,\n start: number,\n end: number,\n): Array<[number, number]> {\n const ranges: Array<[number, number]> = [];\n for (let cursor = start; cursor < end; cursor++) {\n if (source[cursor] !== '\"') continue;\n const stringEnd = jsonStringEnd(source, cursor);\n if (stringEnd === null || stringEnd > end) break;\n ranges.push([cursor, stringEnd]);\n cursor = stringEnd - 1;\n }\n return ranges;\n}\n\nfunction declaredKind(candidate: string): string | null {\n try {\n const parsed: unknown = JSON.parse(candidate);\n if (\n typeof parsed !== \"object\" ||\n parsed === null ||\n Array.isArray(parsed)\n ) {\n return null;\n }\n const kind = (parsed as Record<string, unknown>).__kind;\n return typeof kind === \"string\" && kind.trim() ? kind : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Literal markdown/XML regions do not grant embedded JSON a new render owner:\n * code (fences and spans, by THE one code-range rule — @ai-matrx/content-ir/\n * source; an unpaired backtick is text, never \"literal to the end\"), HTML\n * comments, CDATA and XML tags.\n */\nfunction literalRanges(\n source: string,\n liftJsonFences = false,\n): Array<[number, number]> {\n const ranges: Array<[number, number]> = [];\n // A JSON-family fence inside an XML TAG is data, not an example (ruling (b),\n // round 3): its body is searched; its fence lines become chrome around a kind.\n const code = liftJsonFences\n ? findCodeRanges(source).filter((range) => !isJsonFenceRange(source, range))\n : findCodeRanges(source);\n let next = 0;\n let cursor = 0;\n while (cursor < source.length) {\n while (next < code.length && code[next]!.start < cursor) next++;\n const range = code[next];\n if (range && range.start === cursor) {\n ranges.push([range.start, range.end]);\n cursor = range.end;\n next++;\n continue;\n }\n if (source.startsWith(\"<!--\", cursor)) {\n const end = source.indexOf(\"-->\", cursor + 4);\n const rangeEnd = end === -1 ? source.length : end + 3;\n ranges.push([cursor, rangeEnd]);\n cursor = rangeEnd;\n continue;\n }\n if (source.startsWith(\"<![CDATA[\", cursor)) {\n const end = source.indexOf(\"]]>\", cursor + 9);\n const rangeEnd = end === -1 ? source.length : end + 3;\n ranges.push([cursor, rangeEnd]);\n cursor = rangeEnd;\n continue;\n }\n if (source[cursor] === \"<\") {\n const tag = readXmlTag(source, cursor);\n if (tag) {\n const end = cursor + tag.raw.length;\n ranges.push([cursor, end]);\n cursor = end;\n continue;\n }\n // An opening tag still arriving (`<custom value='{…` — no `>` yet): its\n // attributes are literal to the end of the source, never a kind.\n if (/^<[A-Za-z_][\\w.:-]*\\s/.test(source.slice(cursor, cursor + 64)) && !tagCloses(source, cursor)) {\n ranges.push([cursor, source.length]);\n break;\n }\n }\n cursor++;\n }\n return ranges;\n}\n\n/** Whether the tag opening at `start` reaches its `>` (quoted attribute values honoured). */\nfunction tagCloses(source: string, start: number): boolean {\n let quote: string | null = null;\n for (let i = start + 1; i < source.length; i++) {\n const ch = source[i];\n if (quote) {\n if (ch === quote) quote = null;\n } else if (ch === \"'\" || ch === '\"') quote = ch;\n else if (ch === \">\") return true;\n }\n return false;\n}\n\n/** Whether a code range is a fence whose language makes its body JSON (unlabelled included). */\nfunction isJsonFenceRange(\n source: string,\n range: { start: number; end: number; kind: string },\n): boolean {\n if (range.kind !== \"fence\") return false;\n const raw = source.slice(range.start, range.end);\n const newline = raw.indexOf(\"\\n\");\n const opener = fenceOpenerOf((newline === -1 ? raw : raw.slice(0, newline)).trimStart());\n return opener !== null && isJsonFenceLanguage(opener.lang);\n}\n\n/**\n * The fence lines around a kind that is the WHOLE body of a JSON-family fence\n * (`liftJsonFences`): opener through the object, and the object through the\n * closer, as chrome spans — never rendered, kept so the partition is lossless.\n */\nfunction jsonFenceChromeSpans(\n source: string,\n regions: EmbeddedKindJsonRegion[],\n): Array<[number, number]> {\n const spans: Array<[number, number]> = [];\n for (const range of findCodeRanges(source)) {\n if (!isJsonFenceRange(source, range)) continue;\n const inside = regions.filter((r) => r.start >= range.start && r.end <= range.end);\n if (inside.length !== 1) continue;\n const region = inside[0]!;\n const head = source.slice(range.start, region.start);\n const tail = source.slice(region.end, range.end);\n // Opener line, then only whitespace; only whitespace, then the closer (or nothing yet).\n if (!/^[^\\n]*\\n\\s*$/.test(head) || !/^\\s*(?:[`~]{3,}[ \\t]*)?$/.test(tail)) continue;\n spans.push([range.start, region.start]);\n if (region.end < range.end) spans.push([region.end, range.end]);\n }\n return spans;\n}\n\n/** Outermost complete self-described objects, in source order. */\n// Front matter is document properties (`frontMatterEnd`) — one definition,\n// in the detector's module, so the leaf gate and the frame judge read it too.\nexport { frontMatterEnd } from \"./json-kind-signal\";\n\nexport interface EmbeddedKindSearchOptions {\n /** Generic XML: code, comments, CDATA and tags are literal (the XML card shows them). */\n excludeLiteralContexts?: boolean;\n /**\n * With `excludeLiteralContexts` (an XML TAG — structure, ruling (b) round 3):\n * a ```json / ```jsonc / ```json5 / unlabelled fence is NOT literal. A kind\n * that is its whole body leaves with the fence's own lines as chrome, so\n * the XML pieces around it hold no orphan fence marker.\n */\n liftJsonFences?: boolean;\n /**\n * Markdown: inline code spans and non-JSON fences are the model quoting\n * source (`quotedSourceRanges`, the owner's ruling 2026-09-30) — never lifted.\n */\n excludeQuotedSource?: boolean;\n}\n\nexport function findEmbeddedKindJsonRegions(\n source: string,\n options: EmbeddedKindSearchOptions = {},\n): EmbeddedKindJsonRegion[] {\n const regions: EmbeddedKindJsonRegion[] = [];\n const endOf = lazyJsonEnds(source);\n const excluded = [\n ...(options.excludeLiteralContexts\n ? literalRanges(source, options.liftJsonFences === true)\n : []),\n ...(options.excludeQuotedSource ? quotedSourceRanges(source) : []),\n ].sort((a, b) => a[0] - b[0]);\n const jsonStrings: Array<[number, number]> = [];\n let excludedIndex = 0;\n let jsonStringIndex = 0;\n\n for (let start = frontMatterEnd(source); start < source.length; start++) {\n while (\n excludedIndex < excluded.length &&\n excluded[excludedIndex]![1] <= start\n ) {\n excludedIndex++;\n }\n while (\n jsonStringIndex < jsonStrings.length &&\n jsonStrings[jsonStringIndex]![1] <= start\n ) {\n jsonStringIndex++;\n }\n if (\n excludedIndex < excluded.length &&\n start >= excluded[excludedIndex]![0] &&\n start < excluded[excludedIndex]![1]\n )\n continue;\n if (\n jsonStringIndex < jsonStrings.length &&\n start >= jsonStrings[jsonStringIndex]![0] &&\n start < jsonStrings[jsonStringIndex]![1]\n )\n continue;\n if (source[start] !== \"{\") continue;\n const end = endOf(start);\n if (end === null) {\n // An unclosed object owns text only as far as its JSON grammar holds —\n // to the end while still validly open, else to its cut (round 10, C1):\n // a later kind in prose after it is still found.\n const verdict = kindGrammar(source, \"json\", start);\n const bound = verdict.status === \"broken\" ? verdict.cut : source.length;\n const ownerEnd = bound > start ? malformedKindOwnerEnd(source, start, bound) : null;\n if (ownerEnd !== null) start = ownerEnd - 1;\n continue;\n }\n\n const content = source.slice(start, end);\n const kind = declaredKind(content);\n if (!kind) {\n const ownerEnd = malformedKindOwnerEnd(source, start, end);\n if (ownerEnd !== null) {\n start = ownerEnd - 1;\n continue;\n }\n // A loop, never a spread: a JSON value with ~100k strings overflowed the\n // call stack (RangeError on a stored chat row — the splitter crashed).\n for (const range of jsonStringRanges(source, start, end)) jsonStrings.push(range);\n continue;\n }\n\n regions.push({ start, end, content, kind });\n start = end - 1;\n }\n\n return regions;\n}\n\n/**\n * The array punctuation around runs of kinds: for every run of regions joined\n * only by commas, opened by a `[` (the last non-space byte before the run) and\n * closed by a `]` (the first one after it), the spans `[…`, `,` and `…]` are\n * chrome. Returned as [start, end) spans, in order.\n */\nfunction kindArrayChromeSpans(\n source: string,\n regions: EmbeddedKindJsonRegion[],\n): Array<[number, number]> {\n const spans: Array<[number, number]> = [];\n let first = 0;\n while (first < regions.length) {\n let last = first;\n while (\n last + 1 < regions.length &&\n /^\\s*,\\s*$/.test(source.slice(regions[last]!.end, regions[last + 1]!.start))\n ) {\n last++;\n }\n const before = source.slice(0, regions[first]!.start);\n const open = /\\[\\s*$/.exec(before);\n const after = source.slice(regions[last]!.end);\n const close = /^\\s*\\]/.exec(after);\n if (open && close) {\n spans.push([open.index, regions[first]!.start]);\n for (let k = first; k < last; k++) {\n spans.push([regions[k]!.end, regions[k + 1]!.start]);\n }\n spans.push([regions[last]!.end, regions[last]!.end + close[0].length]);\n }\n first = last + 1;\n }\n return spans;\n}\n\n/** True when a value is a JSON object that directly declares a non-empty `__kind`. */\nfunction isKindValue(value: unknown): boolean {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const kind = (value as Record<string, unknown>).__kind;\n return typeof kind === \"string\" && kind.trim().length > 0;\n}\n\n/** The value with every kind object removed (array items and object members). */\nfunction withoutKinds(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.filter((item) => !isKindValue(item)).map(withoutKinds);\n }\n if (typeof value === \"object\" && value !== null) {\n const out: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) {\n if (!isKindValue(item)) out[key] = withoutKinds(item);\n }\n return out;\n }\n return value;\n}\n\n/** Whether anything but empty containers is left. */\nfunction carriesData(value: unknown): boolean {\n if (Array.isArray(value)) return value.some(carriesData);\n if (typeof value === \"object\" && value !== null) {\n return Object.values(value).some(carriesData);\n }\n return true;\n}\n\n/** Only braces, brackets, commas, colons, whitespace and object KEYS. */\nfunction isPureJsonStructure(span: string): boolean {\n return /^[\\s{}[\\],:]*$/.test(\n span.replace(/\"(?:[^\"\\\\]|\\\\.)*\"\\s*:/g, \"\"),\n );\n}\n\n/**\n * A container that is, as a whole, a JSON object or array holding kinds (A7):\n * every non-kind span is chrome, and the wrapper's own data — the value with\n * its kinds removed — rides ONE residual piece at the first span that carries\n * any. Null when the source is not a parseable JSON wrapper.\n */\nfunction wrapperPieces(\n source: string,\n regions: EmbeddedKindJsonRegion[],\n): EmbeddedKindJsonPiece[] | null {\n const trimmed = source.trim();\n if (!/^[[{]/.test(trimmed)) return null;\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed);\n } catch {\n return null;\n }\n if (typeof parsed !== \"object\" || parsed === null || isKindValue(parsed)) {\n return null;\n }\n const residual = withoutKinds(parsed);\n const residualJson = carriesData(residual) ? JSON.stringify(residual, null, 2) : null;\n\n const pieces: EmbeddedKindJsonPiece[] = [];\n let residualPlaced = residualJson === null;\n const pushSpan = (content: string) => {\n if (!content) return;\n if (!residualPlaced && !isPureJsonStructure(content)) {\n pieces.push({ type: \"residual\", content, json: residualJson as string });\n residualPlaced = true;\n return;\n }\n pieces.push({ type: \"chrome\", content });\n };\n let cursor = 0;\n for (const region of regions) {\n pushSpan(source.slice(cursor, region.start));\n pieces.push({ type: \"kind\", content: region.content, kind: region.kind });\n cursor = region.end;\n }\n pushSpan(source.slice(cursor));\n if (!residualPlaced) {\n // Data the scan could not pin to a span (it sits between keys only):\n // still shown, after the kinds.\n pieces.push({ type: \"residual\", content: \"\", json: residualJson as string });\n }\n return pieces;\n}\n\n/** Losslessly partition a container around every recovered kind region. */\nexport function splitAroundEmbeddedKindJson(\n source: string,\n options: EmbeddedKindSearchOptions = {},\n): EmbeddedKindJsonPiece[] {\n const regions = findEmbeddedKindJsonRegions(source, options);\n if (regions.length === 0) return [{ type: \"container\", content: source }];\n\n const wrapped = wrapperPieces(source, regions);\n if (wrapped) return wrapped;\n\n // Every boundary in order: kind regions and chrome spans never overlap.\n const marks: Array<\n { start: number; end: number } & (\n | { type: \"kind\"; kind: string }\n | { type: \"chrome\" }\n )\n > = [\n ...regions.map((r) => ({ start: r.start, end: r.end, type: \"kind\" as const, kind: r.kind })),\n ...[\n ...kindArrayChromeSpans(source, regions),\n ...(options.excludeLiteralContexts && options.liftJsonFences\n ? jsonFenceChromeSpans(source, regions)\n : []),\n ].map(([start, end]) => ({\n start,\n end,\n type: \"chrome\" as const,\n })),\n ].sort((a, b) => a.start - b.start);\n\n const pieces: EmbeddedKindJsonPiece[] = [];\n let cursor = 0;\n for (const mark of marks) {\n if (mark.start > cursor) {\n pieces.push({\n type: \"container\",\n content: source.slice(cursor, mark.start),\n });\n }\n if (mark.end > mark.start) {\n pieces.push(\n mark.type === \"kind\"\n ? { type: \"kind\", content: source.slice(mark.start, mark.end), kind: mark.kind }\n : { type: \"chrome\", content: source.slice(mark.start, mark.end) },\n );\n }\n cursor = Math.max(cursor, mark.end);\n }\n if (cursor < source.length) {\n pieces.push({ type: \"container\", content: source.slice(cursor) });\n }\n return pieces;\n}\n\n/**\n * A recovered PROSE piece, shaped exactly as the live stream shapes the same\n * bytes (A5, 2026-09-30): the stream splits `Here: {\"__kind\":…} after` into\n * three lines as it arrives, so its prose blocks are trimmed at the end (every\n * text block is) and, after a kind, start where the next character does — the\n * spaces after the object and the one line break that ended its line are the\n * boundary, not content. Both hosts call this on every text piece, so a live\n * message and its reload draw the same blocks.\n */\nexport function normalizeRecoveredProsePiece(\n content: string,\n followsKind: boolean,\n): string {\n const start = followsKind ? content.replace(/^[ \\t]*(?:\\r?\\n)?/, \"\") : content;\n return start.trimEnd();\n}\n\n/**\n * Every recovered container piece, by its container's block type: prose by\n * the rule above, code byte-verbatim, and a SECTION (`thinking`, `info`, …)\n * trimmed — the live stream splits a kind out of a section as it arrives\n * (A8) and each part is a section body, which is trimmed like a whole one.\n */\nexport function normalizeRecoveredContainerPiece(\n content: string,\n containerType: string,\n followsKind: boolean,\n): string {\n if (containerType === \"text\") {\n return normalizeRecoveredProsePiece(content, followsKind);\n }\n if (containerType === \"code\") return content;\n return content.trim();\n}\n\n/**\n * A complete JSON value (object or array) that holds at least one kind, as\n * one region: a recovered kind region widened to the OUTERMOST complete,\n * parseable JSON value that contains it — a kindless wrapper\n * (`{\"result\":{…kind…},\"note\":…}`, A7) or an array of kinds and plain values.\n * For DESTINATION transforms (export, copy, speech) that convert the value\n * whole; the renderer partitions the same bytes with\n * {@link splitAroundEmbeddedKindJson}. Built on THE region finder above.\n */\nexport interface KindCarryingJsonRegion {\n start: number;\n end: number;\n content: string;\n value: unknown;\n}\n\nexport function findKindCarryingJsonValues(\n source: string,\n options: { excludeLiteralContexts?: boolean } = {},\n): KindCarryingJsonRegion[] {\n const kinds = findEmbeddedKindJsonRegions(source, options);\n if (kinds.length === 0) return [];\n const excluded = options.excludeLiteralContexts ? literalRanges(source) : [];\n const inLiteral = (index: number) =>\n excluded.some(([start, end]) => index >= start && index < end);\n // One linear table of every opener's balanced end: a reading per opener was\n // quadratic on thousands of unclosed `{` (round 11, P5).\n const ends = balancedEnds(source);\n\n const regions: KindCarryingJsonRegion[] = [];\n let floor = frontMatterEnd(source);\n for (const region of kinds) {\n if (region.start < floor) continue; // inside a wrapper already taken\n let best = { start: region.start, end: region.end, value: JSON.parse(region.content) as unknown };\n for (let open = floor; open < region.start; open++) {\n const char = source[open];\n if ((char !== \"{\" && char !== \"[\") || inLiteral(open)) continue;\n const found = ends[open]!;\n if (found < 0 || found < region.end) continue;\n const end = found;\n try {\n best = { start: open, end, value: JSON.parse(source.slice(open, end)) };\n break; // the earliest opener that encloses it is the outermost\n } catch {\n continue;\n }\n }\n regions.push({ ...best, content: source.slice(best.start, best.end) });\n floor = best.end;\n }\n return regions;\n}\n\n/**\n * A kind that can never complete as written: [start, end) and the text of\n * its region. Two shapes, by the same ownership rule as the finder above:\n * - a CLOSED object whose root declares `__kind` but does not parse (the\n * finder's malformed owner) — bounded;\n * - an UNCLOSED JSON object or array at the tail (a stream cut off, a\n * truncated store) holding a `\"__kind\"` key anywhere — runs to the end,\n * from its outermost opener (a kindless wrapper is cut with its kind).\n * For destinations that must say \"<Kind> did not finish\" instead of printing\n * the fragment. Complete values (kind or not) are skipped whole.\n */\nexport interface BrokenKindJsonRegion {\n start: number;\n end: number;\n content: string;\n}\n\nconst KIND_KEY_TEXT = /(?<!\\\\)\"__kind\"\\s*:/;\nconst KIND_KEY_TEXT_G = /(?<!\\\\)\"__kind\"\\s*:/g;\n\n/**\n * Round 10 (C1): a broken region is bounded by its OWN JSON grammar. An opener\n * owns a kind key only when its grammar reaches the key; it runs to the end of\n * the text only while it is still validly open, else it ends at its cut. A\n * stray `[[`, `{\"`, `{{`, `[\"`, an unrelated earlier object or a pasted\n * schema never extends a region over the prose after it. A balanced span that\n * does not parse is a region only when it reads once trailing commas go.\n * Linear: key positions once, each opener's grammar stops at its break.\n */\nexport function findBrokenKindJsonRegions(\n source: string,\n options: { excludeLiteralContexts?: boolean } = {},\n): BrokenKindJsonRegion[] {\n const broken: BrokenKindJsonRegion[] = [];\n if (!KIND_KEY_TEXT.test(source)) return broken;\n // A malformed region can only be widened to a lenient balanced value when\n // the source contains a possible closer. Do not allocate the whole balance\n // table for a truncated stream of openers: every lookup would be -1.\n const mayHaveBalancedValue = source.includes(\"}\") || source.includes(\"]\");\n const endOf = mayHaveBalancedValue ? lazyJsonEnds(source) : null;\n const keys: number[] = [];\n KIND_KEY_TEXT_G.lastIndex = 0;\n for (let m = KIND_KEY_TEXT_G.exec(source); m; m = KIND_KEY_TEXT_G.exec(source)) keys.push(m.index);\n let keyIndex = 0;\n const excluded = options.excludeLiteralContexts ? literalRanges(source) : [];\n let excludedIndex = 0;\n\n for (let start = frontMatterEnd(source); start < source.length; start++) {\n while (excludedIndex < excluded.length && excluded[excludedIndex]![1] <= start) {\n excludedIndex++;\n }\n if (\n excludedIndex < excluded.length &&\n start >= excluded[excludedIndex]![0] &&\n start < excluded[excludedIndex]![1]\n ) {\n start = excluded[excludedIndex]![1] - 1;\n continue;\n }\n const char = source[start];\n if (char !== \"{\" && char !== \"[\") continue;\n while (keyIndex < keys.length && keys[keyIndex]! < start) keyIndex++;\n if (keyIndex >= keys.length) break;\n const key = keys[keyIndex]!;\n\n const verdict = kindGrammar(source, \"json\", start);\n if (verdict.status === \"complete\") {\n try {\n JSON.parse(source.slice(start, verdict.end));\n start = verdict.end - 1; // complete: nothing broken inside it\n } catch {\n // A JSON-shaped span JSON.parse still refuses: leave it as written.\n }\n continue;\n }\n if (verdict.status === \"prefix\") {\n // Still validly open to the end of the text and holding a key: arriving.\n broken.push({ start, end: source.length, content: source.slice(start) });\n break;\n }\n // Broken: the opener owns the key only when its grammar reached it.\n if (verdict.at <= key) continue;\n const end = endOf?.(start) ?? null;\n if (end !== null && lenientJson(source.slice(start, end))) {\n broken.push({ start, end, content: source.slice(start, end) });\n start = end - 1;\n continue;\n }\n if (verdict.cut <= key) continue;\n broken.push({ start, end: verdict.cut, content: source.slice(start, verdict.cut) });\n start = verdict.cut - 1;\n }\n return broken;\n}\n\n/** Whether a balanced span reads as JSON once its trailing commas go. */\nfunction lenientJson(span: string): boolean {\n try {\n JSON.parse(span.replace(/,(\\s*[}\\]])/g, \"$1\"));\n return true;\n } catch {\n return false;\n }\n}\n","/**\n * KindSchema — the data-defined field model for a registered kind.\n *\n * `__kind` (KIND_KEY) is the carried discriminator: it is NOT part of a\n * kind's field map; the parser enforces it via `KindSchema.kind` and stamps\n * it onto every compliant snapshot.\n *\n * Moved from app/(dev)/demos/json-block-detector/kind-schemas.ts.\n *\n * 2026-07-15 expressivity extension (A2) — four constructs the Python-owned\n * pydantic schemas need that the v1 vocabulary could not express:\n * - `{type:\"json\"}` / `{type:\"json[]\"}` — any JSON value / array of any\n * JSON values (pydantic bare `Any` fields, `items: {}` arrays, `{}`\n * schemas). A `json` value is implicitly nullable — `null` IS a JSON\n * value — so `nullable` is meaningless (and ignored) on it.\n * - `record` values widened to `\"json\"` (pydantic `dict[str, Any]` /\n * `additionalProperties: true`).\n * - `union` may now carry `kinds` (object unions — anyOf over kind refs,\n * optionally mixed with scalars). Refs externalize to `kind_edge` rows\n * exactly like `array.itemKinds`.\n * - `KindSchema.root` — a NON-OBJECT root form: the kind's VALUE is the\n * root field itself (scalar / array / json / open object), not a `__kind`\n * object with fields. Root-form kinds are data-only: the streaming\n * `__kind` parser cannot type them (a scalar cannot carry a\n * discriminator) and refuses them loudly; validation goes through the\n * emitted JSON Schema (ajv / Pydantic). `root` and a non-empty `fields`\n * are mutually exclusive.\n * - `inline_object.open` — `additionalProperties: true`; fixes the\n * open-empty-object defect where an open `inline_object{fields:{}}`\n * materialized as CLOSED (schema_proposal / item_presentation class).\n *\n * 2026-07-15 input-semantics extension (W3-A, agent-input bridge) — the\n * constructs the Wave-1 sufficiency survey of all 1,529 live agent variables\n * showed FieldSchema could not carry, added so `AgentVariable` ⇄ kind\n * conversion is faithful:\n * - `FieldBase.description` — human guidance; round-trips JSON Schema\n * `description` and VariableDefinition `helpText`.\n * - `FieldBase.default` — the field's default VALUE (JSON Schema `default`,\n * VariableDefinition `defaultValue`). Annotation-level: validators never\n * apply it; emitters carry it verbatim.\n * - `enum.open` — \"one of these options OR any string\" (the FE's\n * `allowOther`). Emits as `anyOf: [{type:\"string\", enum}, {type:\"string\"}]`\n * so the option set survives instead of widening to bare `string`.\n * - `number` bounds `min`/`max`/`step` — JSON Schema\n * `minimum`/`maximum`/`multipleOf` (number/slider components).\n * - `string[].values` (+ `open`) — an items-enum: array of strings drawn\n * from an option set (checkbox components), `open` meaning the set is\n * advisory (`allowOther` on a multi-select).\n * Picklist bindings, scope bindings, and media component identity are\n * PROVENANCE, not structure — they never enter FieldSchema; the bridge\n * carries them out-of-band (see convert/kind-variable-bridge.ts sidecar).\n */\n\n/** System discriminator — hardcoded, not part of per-kind field schemas. */\nexport const KIND_KEY = \"__kind\";\n\nexport type ScalarFieldType = \"string\" | \"number\" | \"boolean\";\n\nexport type ArrayItemScalarType = \"string\" | \"number\" | \"boolean\";\n\n/** Value domain of a `record` field — typed scalars, or any JSON value. */\nexport type RecordValueType = ArrayItemScalarType | \"json\";\n\ntype FieldBase = {\n required?: boolean;\n nullable?: boolean;\n /** Human guidance — JSON Schema `description` / variable `helpText`. */\n description?: string;\n /**\n * Default VALUE (JSON Schema `default` / variable `defaultValue`).\n * Annotation-level: validators never apply it; emitters carry it verbatim.\n */\n default?: unknown;\n};\n\nexport type FieldSchema =\n | (FieldBase & { type: \"string\" | \"boolean\" })\n | (FieldBase & {\n type: \"number\";\n /** Inclusive lower bound — JSON Schema `minimum`. */\n min?: number;\n /** Inclusive upper bound — JSON Schema `maximum`. */\n max?: number;\n /** Increment — JSON Schema `multipleOf`. Annotation-level in the parser. */\n step?: number;\n })\n | (FieldBase & {\n type: \"string[]\";\n /** Items-enum: each item must be one of these values (checkbox option sets). */\n values?: string[];\n /** With `values`: the set is advisory — any string item is also legal (`allowOther`). */\n open?: boolean;\n })\n | (FieldBase & { type: \"number[]\" | \"boolean[]\" })\n | (FieldBase & { type: \"json\" })\n | (FieldBase & { type: \"json[]\" })\n | (FieldBase & { type: \"array\"; itemKinds: string[] })\n | (FieldBase & { type: \"object\"; kind: string })\n | (FieldBase & {\n type: \"inline_object\";\n fields: Record<string, FieldSchema>;\n /** additionalProperties: true — unknown keys are legal, not residue-only. */\n open?: boolean;\n })\n | (FieldBase & { type: \"record\"; values: RecordValueType })\n | (FieldBase & {\n type: \"enum\";\n values: string[];\n /** \"One of these OR any string\" — the option set is advisory (`allowOther`). */\n open?: boolean;\n })\n | (FieldBase & {\n type: \"union\";\n scalars: Array<\"string\" | \"number\" | \"boolean\">;\n /** Object union members — kind refs (anyOf of $refs), may mix with scalars. */\n kinds?: string[];\n });\n\n/**\n * Domain fields only — __kind is enforced by the parser via KindSchema.kind\n * (block slug). A kind with `root` set has NO field map (fields stays `{}`):\n * its value is the root field's type at the top level. See the module header.\n */\nexport type KindSchema = {\n kind: string;\n fields: Record<string, FieldSchema>;\n /** Non-object root form — mutually exclusive with a non-empty `fields`. */\n root?: FieldSchema;\n};\n\nexport function readObjectKind(value: Record<string, unknown>): string | null {\n const kind = value[KIND_KEY];\n return typeof kind === \"string\" ? kind : null;\n}\n\nexport function isScalarArrayType(\n type: FieldSchema[\"type\"],\n): type is \"string[]\" | \"number[]\" | \"boolean[]\" {\n return type === \"string[]\" || type === \"number[]\" || type === \"boolean[]\";\n}\n\nexport function scalarArrayItemType(\n type: \"string[]\" | \"number[]\" | \"boolean[]\",\n): ArrayItemScalarType {\n if (type === \"number[]\") return \"number\";\n if (type === \"boolean[]\") return \"boolean\";\n return \"string\";\n}\n\n/**\n * Does this field's value domain accept ANY JSON shape (object/array/scalar/\n * null alike)? True for `json` and `json[]` ITEMS — the parser treats the\n * subtree under such a field as opaque (no kind identification, no raw_object\n * degradation: unknown structure is the declared contract, not a failure).\n */\nexport function isJsonAnyField(field: FieldSchema): boolean {\n return field.type === \"json\" || field.type === \"json[]\";\n}\n","/**\n * Instance TITLE derivation — pure, importable from server and client code\n * (no supabase import; `instance-service.ts` consumes it on the write path).\n *\n * CROSS-REPO MIRROR: aidream `kind_instance.py` (`_TITLE_KEYS` +\n * `derive_title` + `kind_shared.kind_title_key`) implements the SAME\n * derivation order — explicit title → the kind's `metadata.title_key` field\n * (per-kind override, non-empty scalar) → the shared key list → null.\n * Change BOTH sides together.\n */\n\n/** Mirrors aidream `kind_instance._TITLE_KEYS` — keep the two in lockstep. */\nexport const INSTANCE_TITLE_KEYS = [\n \"title\",\n \"name\",\n \"label\",\n \"heading\",\n \"subject\",\n \"customer\",\n] as const;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * The kind's per-kind instance-title override —\n * `kind_definition.metadata.title_key` (a single data key naming the title\n * field, e.g. `wine_name`). Set by the creator agent via `kind_create`;\n * null when absent/blank/non-string. Server parity: `kind_shared.kind_title_key`.\n */\nexport function kindTitleKeyFromMetadata(metadata: unknown): string | null {\n if (!isRecord(metadata)) return null;\n const value = metadata[\"title_key\"];\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\n/**\n * A non-empty scalar rendered as a title string; null for anything else.\n * Mirrors the server `_scalar_title` exactly (booleans → \"true\"/\"false\").\n */\nfunction scalarTitle(value: unknown): string | null {\n if (typeof value === \"string\") return value.trim() || null;\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n if (typeof value === \"number\") return Number.isFinite(value) ? String(value) : null;\n return null;\n}\n\n/**\n * Explicit title wins; else the kind's `metadata.title_key` field when it\n * holds a non-empty scalar; else the first non-empty string under a shared\n * title/name-ish key. The ORDER is a cross-repo contract — mirrored verbatim\n * by aidream `kind_instance.derive_title`.\n */\nexport function deriveInstanceTitle(\n data: Record<string, unknown>,\n explicit?: string | null,\n titleKey?: string | null,\n): string | null {\n if (explicit && explicit.trim()) return explicit.trim();\n if (titleKey) {\n const override = scalarTitle(data[titleKey]);\n if (override) return override;\n }\n for (const key of INSTANCE_TITLE_KEYS) {\n const value = data[key];\n if (typeof value === \"string\" && value.trim()) return value.trim();\n }\n return null;\n}\n","/**\n * Shared plumbing for kind → markdown export facets (`toMarkdown`).\n *\n * The FORWARD leg of the artifact ⇄ markdown two-way layer: every facet\n * turns a kind's ZERO-LOSS value object into clean human-readable markdown\n * (headings / lists / bold — never a JSON dump), following two laws:\n *\n * 1. `__kind` discriminators are transport metadata — never rendered.\n * 2. Nothing silently vanishes: keys a facet doesn't understand (plus the\n * declared `additionalDetails` bag every top-level kind schema carries)\n * are appended under a small \"Additional details\" key: value section via\n * `collectExtras` + `additionalDetailsSection`.\n *\n * `genericKindMarkdown` is the fallback for kinds WITHOUT a `toMarkdown`\n * facet (and for unregistered kinds): readable markdown built from the value\n * itself — headings, bold-label lists, tables — never a JSON dump.\n */\n\nimport { KIND_KEY } from \"../core/kind-schema.types\";\nimport {\n deriveInstanceTitle,\n INSTANCE_TITLE_KEYS,\n} from \"./instance-title\";\nimport { humanizeIdentifier } from \"@ai-matrx/kit/text-case\";\n\nexport function isRecordValue(\n value: unknown,\n): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isScalar(value: unknown): value is string | number | boolean {\n return (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n );\n}\n\n/**\n * One-line rendering of an arbitrary value for key: value lists. Scalars\n * render as text, scalar arrays join with \", \", anything structural falls\n * back to inline JSON in a code span (zero loss, still one line).\n */\nexport function formatInlineValue(value: unknown): string {\n if (value === null || value === undefined) return \"—\";\n if (isScalar(value)) return String(value);\n if (Array.isArray(value) && value.every(isScalar)) {\n return value.map(String).join(\", \");\n }\n try {\n return `\\`${JSON.stringify(stripKindForDisplay(value))}\\``;\n } catch {\n return String(value);\n }\n}\n\n/** Deep-copy with every `__kind` discriminator removed (display only). */\nfunction stripKindForDisplay(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stripKindForDisplay);\n if (isRecordValue(value)) {\n const out: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n if (key === KIND_KEY) continue;\n out[key] = stripKindForDisplay(child);\n }\n return out;\n }\n return value;\n}\n\n/**\n * Collect the keys a facet does NOT understand. Skips `__kind`,\n * null/undefined, and the facet's known keys; merges the contents of a\n * declared `additionalDetails` object bag (the schema-blessed extras\n * channel) into the same flat map so both extra channels surface together.\n */\nexport function collectExtras(\n value: Record<string, unknown>,\n knownKeys: Iterable<string>,\n): Record<string, unknown> {\n const known = new Set(knownKeys);\n known.add(KIND_KEY);\n known.add(\"additionalDetails\");\n\n const extras: Record<string, unknown> = {};\n\n const details = value.additionalDetails;\n if (isRecordValue(details)) {\n for (const [key, child] of Object.entries(details)) {\n if (key === KIND_KEY || child === null || child === undefined) continue;\n extras[key] = child;\n }\n } else if (details !== null && details !== undefined) {\n extras.additionalDetails = details;\n }\n\n for (const [key, child] of Object.entries(value)) {\n if (known.has(key) || child === null || child === undefined) continue;\n extras[key] = child;\n }\n\n return extras;\n}\n\n/**\n * A field's own name, as words — `violations_not_fixed` → \"Violations not\n * fixed\", `wordCountAfter` → \"Word count after\".\n *\n * 🚨 WALK 18, DEFECT D. The finished Masterwork deliverable an Expert hands a\n * customer carried `violations_not_fixed: []` — a key out of a schema we\n * declared, printed at a person. A label is the one place a field name is\n * GUARANTEED to reach a reader, so the resolution lives here, beside the\n * extras plumbing, for every RENDERER that puts a structured field on a\n * screen: underscores and camel humps become spaces, the first letter is\n * capitalised, and nothing else changes.\n *\n * Deliberately NOT applied inside {@link extrasList}. That list is the\n * markdown/EXPORT leg (`features/canvas/export/exportArtifactMarkdown.ts`\n * writes a file somebody — or something — reads back), and a key spelled as\n * prose cannot be read back as a key. A screen resolves; a file keeps the key.\n */\nexport function plainFieldLabel(key: string): string {\n const words = key\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .trim()\n .toLowerCase();\n if (!words) return key;\n return words.charAt(0).toUpperCase() + words.slice(1);\n}\n\n/** Render extras as a key: value bullet list (no heading). Null when empty. */\nexport function extrasList(extras: Record<string, unknown>): string | null {\n const entries = Object.entries(extras);\n if (entries.length === 0) return null;\n return entries\n .map(([key, value]) => `- **${key}:** ${formatInlineValue(value)}`)\n .join(\"\\n\");\n}\n\n/**\n * The canonical \"Additional details\" section — appended at the END of a\n * kind's markdown so nothing silently vanishes. Null when there is nothing\n * to say (callers filter with `joinBlocks`).\n */\nexport function additionalDetailsSection(\n extras: Record<string, unknown>,\n headingLevel: \"##\" | \"###\" | \"####\" = \"##\",\n): string | null {\n const list = extrasList(extras);\n if (!list) return null;\n return `${headingLevel} Additional details\\n\\n${list}`;\n}\n\n/** Join markdown blocks with blank lines, dropping empty/null ones. */\nexport function joinBlocks(\n blocks: Array<string | null | undefined>,\n): string {\n return blocks\n .map((block) => (typeof block === \"string\" ? block.trim() : \"\"))\n .filter((block) => block.length > 0)\n .join(\"\\n\\n\");\n}\n\n/** \"flashcard_set\" → \"Flashcard Set\"; \"Artifact\" when there is nothing to say. */\nexport function humanizeKind(kind: string): string {\n return humanizeIdentifier(kind) || \"Artifact\";\n}\n\n/** Renders a nested kind value as markdown (the registry's converter). */\nexport type NestedKindMarkdown = (value: Record<string, unknown>) => string;\n\nfunction isKindValue(value: unknown): value is Record<string, unknown> {\n return (\n isRecordValue(value) &&\n typeof value[KIND_KEY] === \"string\" &&\n (value[KIND_KEY] as string).trim().length > 0\n );\n}\n\nfunction scalarText(value: unknown): string {\n if (typeof value === \"boolean\") return value ? \"Yes\" : \"No\";\n return String(value);\n}\n\nfunction cellText(value: unknown): string {\n return scalarText(value).replace(/\\r?\\n/g, \" \").replace(/\\|/g, \"\\\\|\");\n}\n\n/** Visible fields of a record: never `__kind`, never empty. */\nfunction visibleEntries(value: Record<string, unknown>): [string, unknown][] {\n return Object.entries(value).filter(\n ([key, child]) =>\n key !== KIND_KEY &&\n child !== null &&\n child !== undefined &&\n !(typeof child === \"string\" && child.trim() === \"\") &&\n !(Array.isArray(child) && child.length === 0),\n );\n}\n\n/** A table when every element is a non-kind record of scalars over one key set. */\nfunction uniformTable(items: unknown[]): string | null {\n if (items.length === 0) return null;\n let columns: string[] | null = null;\n for (const item of items) {\n if (!isRecordValue(item) || isKindValue(item)) return null;\n const keys = Object.keys(item).filter((key) => key !== KIND_KEY);\n if (keys.length === 0) return null;\n if (!keys.every((key) => item[key] === null || isScalar(item[key]))) return null;\n if (columns === null) columns = keys;\n else if (keys.length !== columns.length || !keys.every((k, i) => k === columns![i]))\n return null;\n }\n const cols = columns!;\n const head = `| ${cols.map(plainFieldLabel).join(\" | \")} |`;\n const rule = `| ${cols.map(() => \"---\").join(\" | \")} |`;\n const rows = items.map(\n (item) =>\n `| ${cols\n .map((key) => {\n const cell = (item as Record<string, unknown>)[key];\n return cell === null || cell === undefined ? \"—\" : cellText(cell);\n })\n .join(\" | \")} |`,\n );\n return [head, rule, ...rows].join(\"\\n\");\n}\n\nfunction indentBlock(text: string, indent: string): string {\n return text\n .split(\"\\n\")\n .map((line) => (line.trim() ? indent + line : line))\n .join(\"\\n\");\n}\n\n/** Nested bullet lines for any value (lists inside lists, kinds as blocks). */\nfunction listLines(value: unknown, indent: string, nested: NestedKindMarkdown): string[] {\n if (Array.isArray(value)) {\n const lines: string[] = [];\n for (const item of value) {\n if (item === null || item === undefined) continue;\n if (isScalar(item)) lines.push(`${indent}- ${scalarText(item)}`);\n else if (isKindValue(item)) {\n lines.push(`${indent}-`);\n lines.push(indentBlock(nested(item), indent + \" \"));\n } else if (Array.isArray(item)) {\n lines.push(`${indent}-`);\n lines.push(...listLines(item, indent + \" \", nested));\n } else if (isRecordValue(item)) {\n const fields = listLines(item, indent + \" \", nested);\n // The record's first field rides on the bullet itself.\n if (fields.length > 0) {\n lines.push(`${indent}- ${fields[0]!.trimStart().replace(/^- /, \"\")}`);\n lines.push(...fields.slice(1));\n }\n }\n }\n return lines;\n }\n if (isRecordValue(value)) {\n if (isKindValue(value)) return [indentBlock(nested(value), indent)];\n const lines: string[] = [];\n for (const [key, child] of visibleEntries(value)) {\n const label = `**${plainFieldLabel(key)}:**`;\n if (isScalar(child)) lines.push(`${indent}- ${label} ${scalarText(child)}`);\n else if (Array.isArray(child) && child.every(isScalar))\n lines.push(`${indent}- ${label} ${child.map(scalarText).join(\", \")}`);\n else {\n lines.push(`${indent}- ${label}`);\n lines.push(...listLines(child, indent + \" \", nested));\n }\n }\n return lines;\n }\n return isScalar(value) ? [`${indent}- ${scalarText(value)}`] : [];\n}\n\nfunction headingFor(depth: number): string {\n return \"#\".repeat(Math.min(Math.max(depth, 1), 6));\n}\n\n/** The body of a record: scalar list first, then one section per structure. */\nfunction recordBody(\n value: Record<string, unknown>,\n depth: number,\n nested: NestedKindMarkdown,\n skipKey: string | null,\n): string[] {\n const scalars: string[] = [];\n const sections: string[] = [];\n for (const [key, child] of visibleEntries(value)) {\n if (key === skipKey) continue;\n const label = plainFieldLabel(key);\n if (isScalar(child)) {\n scalars.push(`- **${label}:** ${scalarText(child)}`);\n } else if (Array.isArray(child) && child.every(isScalar)) {\n scalars.push(`- **${label}:** ${child.map(scalarText).join(\", \")}`);\n } else if (isKindValue(child)) {\n sections.push(joinBlocks([`${headingFor(depth + 1)} ${label}`, nested(child)]));\n } else if (Array.isArray(child)) {\n sections.push(\n joinBlocks([\n `${headingFor(depth + 1)} ${label}`,\n uniformTable(child) ?? listLines(child, \"\", nested).join(\"\\n\"),\n ]),\n );\n } else if (isRecordValue(child)) {\n sections.push(\n joinBlocks([\n `${headingFor(depth + 1)} ${label}`,\n ...recordBody(child, depth + 1, nested, null),\n ]),\n );\n }\n }\n return [scalars.length ? scalars.join(\"\\n\") : null, ...sections].filter(\n (block): block is string => block !== null,\n );\n}\n\n/** Which key the derived title was read from, so it is not repeated below. */\nfunction titleSourceKey(value: Record<string, unknown>, title: string | null): string | null {\n if (!title) return null;\n for (const key of INSTANCE_TITLE_KEYS) {\n const v = value[key];\n if (typeof v === \"string\" && v.trim() === title) return key;\n }\n return null;\n}\n\n/**\n * Fallback markdown for kinds with no `toMarkdown` facet (or unregistered\n * kinds): READABLE markdown built from the value itself (kind-never-raw,\n * Arman 2026-09-30 — a kind is never shown as raw JSON, an export included).\n * Heading = the instance title (`deriveInstanceTitle`), then the kind's\n * name; scalar fields as a bold-label list; arrays of uniform scalar records\n * as a table, other arrays as nested lists; nested plain objects as\n * sections; nested KINDS through `nested` (the registry converter —\n * `kindValueToMarkdown` passes itself; default: this function). Never the\n * `__kind` key, never a JSON fence. Every field still appears (zero loss in\n * content; the discriminator is named in words by the subtitle).\n */\nexport function genericKindMarkdown(\n kind: string,\n value: Record<string, unknown>,\n nested?: NestedKindMarkdown,\n): string {\n const renderNested: NestedKindMarkdown =\n nested ??\n ((child) =>\n genericKindMarkdown(String(child[KIND_KEY] ?? \"artifact\"), child));\n const title = deriveInstanceTitle(value);\n return joinBlocks([\n `# ${title ?? humanizeKind(kind)}`,\n `*${humanizeKind(kind)}*`,\n ...recordBody(value, 1, renderNested, titleSourceKey(value, title)),\n ]);\n}\n\n/**\n * Readable markdown for a value that is NOT itself a kind — a kindless JSON\n * wrapper around kinds, or a run of plain values beside kinds in an array —\n * so a destination (export, copy) never prints it as JSON. Same rendering as\n * a kind's body in {@link genericKindMarkdown} (bold-label scalars, tables for\n * uniform records, nested lists, sections), nested kinds through `nested`.\n */\nexport function plainValueMarkdown(value: unknown, nested?: NestedKindMarkdown): string {\n const renderNested: NestedKindMarkdown =\n nested ??\n ((child) => genericKindMarkdown(String(child[KIND_KEY] ?? \"artifact\"), child));\n if (value === null || value === undefined) return \"\";\n if (isKindValue(value)) return renderNested(value);\n if (Array.isArray(value)) {\n return uniformTable(value) ?? listLines(value, \"\", renderNested).join(\"\\n\");\n }\n if (isRecordValue(value)) return joinBlocks(recordBody(value, 1, renderNested, null));\n return isScalar(value) ? scalarText(value) : String(value);\n}\n","/**\n * kind-value-markdown — a kind-carrying value object → markdown, through the host's\n * kind registry when it registers one (`registerKindValueMarkdown`), else the package's\n * generic readable rendering (never a JSON dump, never the `__kind` key).\n *\n * The registration lives on `globalThis` (dual-loader graphs split module state). An\n * unregistered host is announced once on the console, never silently.\n */\nimport { readObjectKind } from \"../core/kind-schema.types\";\nimport { genericKindMarkdown } from \"./kind-markdown-utils\";\n\nexport type KindValueToMarkdown = (value: Record<string, unknown>, fallbackKind?: string) => string;\n\ninterface KindValueMarkdownState {\n impl: KindValueToMarkdown | null;\n announced: boolean;\n}\n\nconst STATE_KEY = Symbol.for(\"ai-matrx.content-ir.kind-value-markdown\");\n\nfunction state(): KindValueMarkdownState {\n const g = globalThis as unknown as Record<symbol, KindValueMarkdownState | undefined>;\n let s = g[STATE_KEY];\n if (!s) {\n s = { impl: null, announced: false };\n g[STATE_KEY] = s;\n }\n return s;\n}\n\n/** The host's registry-backed converter (matrx-frontend: `features/canvas/export/exportArtifactMarkdown`). */\nexport function registerKindValueMarkdown(impl: KindValueToMarkdown | null): void {\n state().impl = impl;\n}\n\nexport function kindValueToMarkdown(\n value: Record<string, unknown>,\n fallbackKind = \"artifact\",\n): string {\n const s = state();\n if (s.impl) return s.impl(value, fallbackKind);\n if (!s.announced) {\n s.announced = true;\n console.warn(\n '[@ai-matrx/content-ir] No \"kindValueMarkdown\" registered, so kind values render through the generic readable form, not the host\\'s kind registry.',\n );\n }\n const nested = (child: Record<string, unknown>) => kindValueToMarkdown(child);\n return genericKindMarkdown(readObjectKind(value) ?? fallbackKind, value, nested);\n}\n","/**\n * Answer TEXT → the readable markdown a person meant, for DISPLAY and EXPORT\n * destinations only (a note, a task, a file, a print, a clipboard copy, the\n * speaker, a plain-text slot). Rule (Arman, 2026-09-30): a kind is never shown\n * as raw JSON — every `{\"__kind\":…}` region in the text (bare, or the whole\n * body of a ```json / unlabelled fence) becomes that kind's markdown through\n * the ONE kind → markdown converter (`kindValueToMarkdown`: the registry's\n * `toMarkdown` facet, else `genericKindMarkdown`).\n *\n * 🚨 Never call this on data that is STORED or PASSED to a machine: `__kind`\n * is part of the data. This is a destination transform, the same as\n * `unwrapKindEnvelopes`. Kindless text returns byte for byte.\n *\n * Regions come from the one embedded-kind region finder\n * (`findEmbeddedKindJsonRegions`); the signal is the one detector\n * (`hasKindKey`). Nobody writes a second one.\n */\n\nimport { findCodeRanges, fenceParts } from \"../source\";\nimport { kindValueToMarkdown } from \"./kind-value-markdown\";\nimport { humanizeKind, plainValueMarkdown } from \"./kind-markdown-utils\";\nimport {\n balancedEnds,\n findBrokenKindJsonRegions,\n findKindCarryingJsonValues,\n frontMatterEnd,\n} from \"./embedded-kind-json\";\nimport { firstKindSlug, hasKindKey, isKindJsonText, normalizeKindSpellings, valueCarriesKind } from \"./json-kind-signal\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isKindObject(value: unknown): value is Record<string, unknown> {\n return (\n isRecord(value) &&\n typeof value.__kind === \"string\" &&\n value.__kind.trim().length > 0\n );\n}\n\n/**\n * The one-line broken state of a kind that never completed (≤60 chars) — the\n * SAME words the compact preview shows (`AnswerTextPreview`), so an export of\n * a cut-off answer says what the screen said.\n */\nexport function unfinishedKindLabel(kind: string | null): string {\n return kind ? `${humanizeKind(kind)} did not finish` : \"Result did not finish\";\n}\n\n/** The one-line note for structured output whose `__kind` cannot name a kind. */\nexport const UNREADABLE_KIND_NOTE = \"Structured output could not be read\";\n\n/** A slug the kind loader may name: letters, digits and `_.:-` only. */\nconst KIND_SLUG_TEXT = /^[A-Za-z0-9_.:-]+$/;\n\n/** Does this parsed value hold an object whose `__kind` is not a readable slug, at any depth? */\nfunction carriesBrokenKind(value: unknown, depth = 0): boolean {\n if (depth > 64 || value === null || typeof value !== \"object\") return false;\n if (Array.isArray(value)) return value.some((item) => carriesBrokenKind(item, depth + 1));\n const record = value as Record<string, unknown>;\n if (Object.prototype.hasOwnProperty.call(record, \"__kind\")) {\n const kind = record.__kind;\n // An object / array under `__kind` is a shape (a pasted JSON schema's\n // `properties`), not a kind — left as written (round 10).\n // A list under `__kind` is broken output, not a shape (round 11, L2).\n const shape = typeof kind === \"object\" && kind !== null && !Array.isArray(kind);\n if (!shape && (typeof kind !== \"string\" || !KIND_SLUG_TEXT.test(kind))) return true;\n }\n return Object.values(record).some((item) => carriesBrokenKind(item, depth + 1));\n}\n\n\n/** Sorted, non-overlapping ranges → for each position, whether it lies inside one (a cursor, linear over a forward walk). */\nfunction rangeCursor(ranges: Array<[number, number]>): (at: number) => [number, number] | undefined {\n const sorted = [...ranges].sort((a, b) => a[0] - b[0]);\n let k = 0;\n return (at) => {\n while (k < sorted.length && sorted[k]![1] <= at) k++;\n for (let j = k; j < sorted.length && sorted[j]![0] <= at; j++) if (at < sorted[j]![1]) return sorted[j];\n return undefined;\n };\n}\n\n/** Ranges whose text is quoted SOURCE (inline code, non-JSON fences) — never converted. */\nfunction quotedCodeRanges(text: string): Array<[number, number]> {\n return findCodeRanges(text)\n .filter((range) => {\n if (range.kind !== \"fence\") return true;\n const parts = fenceParts(text.slice(range.start, range.end));\n return !parts || !JSON_FENCE_LANGS.has(parts.opener.lang.toLowerCase());\n })\n .map((range): [number, number] => [range.start, range.end]);\n}\n\n/**\n * Complete JSON values holding a `__kind` that cannot name a kind (a number,\n * null, empty, a non-slug) — broken structured output — become the one-line\n * unreadable note. A JSON fence that held only such a value goes with it.\n */\nfunction noteUnreadableKinds(text: string): string {\n if (!hasKindKey(text)) return text;\n // An unreadable kind must be a COMPLETE JSON value. Avoid building code\n // ranges and a balance table for an arriving/malformed stream that has no\n // possible JSON closer at all; this is common in truncated exports and was\n // still several full walks for every `{ \"__kind\"` opener.\n if (!text.includes(\"}\") && !text.includes(\"]\")) return text;\n const quoted = quotedCodeRanges(text);\n const fences = findCodeRanges(text).filter((range) => range.kind === \"fence\");\n const spans: Array<[number, number]> = [];\n const ends = balancedEnds(text);\n const quotedAt = rangeCursor(quoted);\n for (let i = 0; i < text.length; i++) {\n const ch = text[i];\n if (ch !== \"{\" && ch !== \"[\") continue;\n const range = quotedAt(i);\n if (range) {\n i = range[1] - 1;\n continue;\n }\n const end = ends[i]!;\n if (end < 0) continue;\n let value: unknown;\n try {\n value = JSON.parse(text.slice(i, end));\n } catch {\n continue;\n }\n if (carriesBrokenKind(value)) spans.push([i, end]);\n i = end - 1;\n }\n // `out` is `text.slice(0, kept) + tail`: spans are replaced last to first, so\n // the prefix is always the original text and only the tail is rebuilt (no\n // whole-text copy per span — linear in the text, round 11 P5).\n let kept = text.length;\n let tail = \"\";\n let tailHead = \"\";\n for (let k = spans.length - 1; k >= 0; k--) {\n let [start, end] = spans[k]!;\n const fence = fences.find((range) => start >= range.start && end <= range.end);\n if (fence) {\n const parts = fenceParts(text.slice(fence.start, fence.end));\n const inner = parts\n ? text\n .slice(fence.start, fence.end)\n .split(\"\\n\")\n .slice(1, parts.closed ? -1 : undefined)\n .join(\"\\n\")\n .trim()\n : \"\";\n if (parts && inner === text.slice(start, end).trim()) {\n start = fence.start;\n end = fence.end;\n }\n }\n const before = closeBeforeAt(text, start);\n const following = end <= kept ? text.slice(end, kept) : \"\";\n const after = end <= kept ? openAfterJoined(following, tail, tailHead) : openAfter(tail.slice(end - kept));\n kept = before.cut;\n tailHead = before.add + UNREADABLE_KIND_NOTE;\n tail = tailHead + after;\n }\n return text.slice(0, kept) + tail;\n}\n\n/** A string field whose text is kind JSON → its parsed value (so it converts too). */\nfunction liftKindStrings(value: unknown, depth = 0): unknown {\n if (depth > 64) return value;\n if (typeof value === \"string\") {\n if (!isKindJsonText(value)) return value;\n try {\n const parsed: unknown = JSON.parse(value);\n return valueCarriesKind(parsed) ? parsed : value;\n } catch {\n return value;\n }\n }\n if (Array.isArray(value)) return value.map((item) => liftKindStrings(item, depth + 1));\n if (isRecord(value)) {\n const out: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) out[key] = liftKindStrings(item, depth + 1);\n return out;\n }\n return value;\n}\n\n/**\n * Any parsed value that carries a kind → markdown: a kind through the ONE\n * converter (`kindValueToMarkdown`), a list element by element (runs of plain\n * values as readable markdown beside the kinds), a kindless wrapper as its\n * data in markdown with its kinds converted in place.\n */\nfunction valueMarkdown(raw: unknown): string {\n const value = liftKindStrings(raw);\n const nested = (child: Record<string, unknown>) => kindValueToMarkdown(child);\n if (isKindObject(value)) return kindValueToMarkdown(value);\n if (Array.isArray(value)) {\n const blocks: string[] = [];\n let run: unknown[] = [];\n const flush = () => {\n if (run.length) blocks.push(plainValueMarkdown(run, nested));\n run = [];\n };\n for (const item of value) {\n if (isKindObject(item)) {\n flush();\n blocks.push(kindValueToMarkdown(item));\n } else if (Array.isArray(item) || isRecord(item)) {\n if (valueCarriesKind(item)) {\n flush();\n blocks.push(valueMarkdown(item));\n } else run.push(item);\n } else run.push(item);\n }\n flush();\n return blocks.filter((block) => block.trim()).join(\"\\n\\n\");\n }\n return plainValueMarkdown(value, nested);\n}\n\n/** JSON text that parses to a value carrying a kind → markdown; else null. */\nfunction jsonKindValueMarkdown(text: string): string | null {\n const trimmed = text.trim();\n if (!trimmed.startsWith(\"{\") && !trimmed.startsWith(\"[\")) return null;\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed);\n } catch {\n return null;\n }\n return valueCarriesKind(parsed) ? valueMarkdown(parsed) : null;\n}\n\n/** Text before a block: the block starts on its own line, after a blank line. */\nfunction closeBefore(text: string): string {\n const { cut, add } = closeBeforeAt(text, text.length);\n return text.slice(0, cut) + add;\n}\n\nconst isLineSpace = (ch: string | undefined) => ch === \" \" || ch === \"\\t\" || ch === \"\\r\";\n\n/** `closeBefore(text.slice(0, at))` as where the kept text ends and what is added (a backward walk, never a regex over the prefix). */\nfunction closeBeforeAt(text: string, at: number): { cut: number; add: string } {\n let cut = at;\n while (cut > 0 && isLineSpace(text[cut - 1])) cut--;\n if (cut === 0) return { cut, add: \"\" };\n if (text[cut - 1] !== \"\\n\") return { cut, add: \"\\n\\n\" };\n return { cut, add: cut > 1 && text[cut - 2] === \"\\n\" ? \"\" : \"\\n\" };\n}\n\n/**\n * `openAfter(head + tail)` without flattening `tail`: `tailHead` is the start\n * of `tail` (a note, after its newlines), which never starts with a line space.\n */\nfunction openAfterJoined(head: string, tail: string, tailHead: string): string {\n let from = 0;\n while (from < head.length && isLineSpace(head[from])) from++;\n const rest = head.slice(from);\n const lead = rest + tailHead.slice(0, 4);\n if (!lead) return \"\";\n const joined = rest + tail;\n if (lead.startsWith(\"\\n\\n\") || lead.startsWith(\"\\r\\n\\r\\n\")) return joined;\n if (lead.startsWith(\"\\n\")) return `\\n${joined}`;\n return `\\n\\n${joined}`;\n}\n\n/** Text after a block: whatever follows starts after a blank line. */\nfunction openAfter(text: string): string {\n const out = text.replace(/^[ \\t\\r]+/, \"\");\n if (!out) return out;\n if (out.startsWith(\"\\n\\n\") || out.startsWith(\"\\r\\n\\r\\n\")) return out;\n if (out.startsWith(\"\\n\")) return `\\n${out}`;\n return `\\n\\n${out}`;\n}\n\ninterface ConvertOptions {\n /** A kind that can never complete → its one-line note (exports), or left for the caller (previews). */\n broken: \"note\" | \"keep\";\n}\n\n/**\n * Every kind region in `text` → markdown: complete kind-carrying JSON values\n * (THE region finder, widened to their outermost JSON value) and — when\n * `broken: \"note\"` — broken/cut-off kinds as their one-line note. `leftover`\n * reshapes the text between regions (identity for prose). Null when the text\n * holds no region.\n */\nfunction convertRegions(\n text: string,\n excludeLiteralContexts: boolean,\n options: ConvertOptions,\n leftover: (piece: string) => string = (piece) => piece,\n): string | null {\n type Span = { start: number; end: number; md: string };\n // A complete JSON kind value necessarily has a JSON closer. Broken-kind\n // recovery below still runs without one, but the complete-region finder\n // would otherwise build another balance table that cannot produce a span.\n const completeRegions = text.includes(\"}\") || text.includes(\"]\")\n ? findKindCarryingJsonValues(text, { excludeLiteralContexts })\n : [];\n const spans: Span[] = completeRegions.map(\n (region) => ({ start: region.start, end: region.end, md: valueMarkdown(region.value) }),\n );\n if (options.broken === \"note\") {\n for (const region of findBrokenKindJsonRegions(text, { excludeLiteralContexts })) {\n spans.push({\n start: region.start,\n end: region.end,\n md: unfinishedKindLabel(firstKindSlug(region.content)),\n });\n }\n }\n if (spans.length === 0) return null;\n spans.sort((a, b) => a.start - b.start);\n\n // Built as parts: `closeBefore` of the whole output per span copied the growing\n // string each time (quadratic on thousands of regions, round 11 P5).\n const parts: string[] = [];\n const push = (piece: string) => {\n if (piece) parts.push(piece);\n };\n const closeBeforeParts = () => {\n while (parts.length > 0) {\n const last = parts[parts.length - 1]!;\n const trimmed = last.replace(/[ \\t\\r]+$/, \"\");\n if (trimmed) {\n parts[parts.length - 1] = trimmed;\n break;\n }\n parts.pop();\n }\n if (parts.length === 0) return;\n const last = parts[parts.length - 1]!;\n if (last[last.length - 1] !== \"\\n\") {\n parts.push(\"\\n\\n\");\n return;\n }\n const before = last.length > 1 ? last[last.length - 2] : parts.length > 1 ? parts[parts.length - 2]!.slice(-1) : \"\";\n if (before !== \"\\n\") parts.push(\"\\n\");\n };\n let cursor = 0;\n let afterBlock = false;\n for (const span of spans) {\n if (span.start < cursor) continue; // inside a span already taken\n const between = leftover(text.slice(cursor, span.start));\n push(afterBlock ? openAfter(between) : between);\n closeBeforeParts();\n push(span.md);\n cursor = span.end;\n afterBlock = true;\n }\n const tail = leftover(text.slice(cursor));\n push(afterBlock ? openAfter(tail) : tail);\n return parts.join(\"\");\n}\n\n/** Fence languages whose body is a JSON region (an unlabelled fence included). */\nconst JSON_FENCE_LANGS = new Set([\"\", \"json\", \"jsonc\", \"json5\"]);\n\n/** Blockquote markers that open a line (`> `, `>> `, `> > `). */\nconst QUOTE_PREFIX = /^(?: {0,3}> ?)*/;\n\n/**\n * A json / jsonc / json5 / unlabelled fence (THE code-range rule, CRLF and\n * blockquote-safe) holding kind regions → its markdown, quoted again when the\n * fence sat in a blockquote. Fences of any other language, and inline code\n * spans, are quoted SOURCE and stay as written (owner ruling, 2026-09-30).\n */\nfunction convertKindFences(text: string, options: ConvertOptions): string {\n // Fences only use backticks or tildes. The shared source scanner is\n // intentionally thorough, so do not invoke it for ordinary prose or a\n // malformed JSON stream that cannot contain a fence.\n if (!text.includes(\"`\") && !text.includes(\"~\")) return text;\n const fences = findCodeRanges(text).filter((range) => range.kind === \"fence\");\n let out = text;\n for (let i = fences.length - 1; i >= 0; i--) {\n const range = fences[i]!;\n const raw = text.slice(range.start, range.end);\n if (!hasKindKey(raw)) continue;\n const parts = fenceParts(raw);\n if (!parts || !JSON_FENCE_LANGS.has(parts.opener.lang.toLowerCase())) continue;\n\n const lines = raw.split(\"\\n\").map((line) => line.replace(/\\r$/, \"\"));\n const prefix = QUOTE_PREFIX.exec(lines[0] ?? \"\")?.[0] ?? \"\";\n const strip = (line: string) => (prefix ? line.replace(QUOTE_PREFIX, \"\") : line);\n const opener = strip(lines[0] ?? \"\").trim();\n const fence = parts.opener.char.repeat(parts.opener.ticks);\n const body = lines.slice(1, parts.closed ? -1 : undefined).map(strip).join(\"\\n\");\n\n const md =\n jsonKindValueMarkdown(body) ??\n convertRegions(body, false, options, (piece) =>\n /^[\\s,[\\]{}]*$/.test(piece) ? \"\" : `${opener}\\n${piece.trim()}\\n${fence}`,\n );\n if (md === null) continue;\n const block = prefix\n ? md\n .split(\"\\n\")\n .map((line) => (line ? `${prefix}${line}` : prefix.trimEnd()))\n .join(\"\\n\")\n : md;\n out = closeBefore(out.slice(0, range.start)) + block + openAfter(out.slice(range.end));\n }\n return out;\n}\n\nfunction convertKindText(text: string, options: ConvertOptions): string {\n // 0. Front matter holding a kind, and kinds that cannot name themselves.\n text = noteUnreadableKinds(convertFrontMatterKind(text, options));\n\n // 1. The whole text is a value carrying kinds (a structured answer's stored JSON).\n const whole = jsonKindValueMarkdown(text);\n if (whole !== null) return whole;\n\n // 2. JSON fences holding kinds.\n let out = convertKindFences(text, options);\n\n // 3. Bare kind values in prose (code fences and spans stay quoted source).\n if (!hasKindKey(out)) return out;\n out = convertRegions(out, true, options) ?? out;\n\n // 4. HTML comments are literal to the region finder, but a person reading\n // plain text sees what is inside them.\n out = convertCommentKinds(out, options);\n\n // 5. A cut-off kind whose key is written escaped (`\"\\u005f_kind\"`).\n return noteEscapedCutOffKind(out, options);\n}\n\n/** Front matter (`---` … `---`) whose body holds a kind → that kind's markdown. */\nfunction convertFrontMatterKind(text: string, options: ConvertOptions): string {\n const end = frontMatterEnd(text);\n if (end === 0 || !hasKindKey(text.slice(0, end))) return text;\n const block = text.slice(0, end);\n const lines = block.split(\"\\n\");\n const body = lines.slice(1, -1).join(\"\\n\").replace(/\\r$/, \"\");\n const md = convertRegions(body, false, options, (piece) =>\n /^[\\s,[\\]{}]*$/.test(piece) ? \"\" : piece.trim(),\n );\n if (md === null) return text;\n return md + openAfter(text.slice(end));\n}\n\n/** HTML comments (outside code) holding a kind → the kind's markdown; other comment text stays a comment. */\nfunction convertCommentKinds(text: string, options: ConvertOptions): string {\n if (!text.includes(\"<!--\")) return text;\n const quoted = quotedCodeRanges(text);\n const comments = [...text.matchAll(/<!--[\\s\\S]*?(?:-->|$)/g)].filter(\n (m) =>\n hasKindKey(m[0]) && !quoted.some(([a, b]) => m.index! >= a && m.index! < b),\n );\n let out = text;\n for (let i = comments.length - 1; i >= 0; i--) {\n const m = comments[i]!;\n const body = m[0].replace(/^<!--/, \"\").replace(/-->$/, \"\");\n const md = convertRegions(body, false, options, (piece) =>\n piece.trim() ? `<!-- ${piece.trim()} -->` : \"\",\n );\n if (md === null) continue;\n const start = m.index!;\n const end = start + m[0].length;\n out = closeBefore(out.slice(0, start)) + md + openAfter(out.slice(end));\n }\n return out;\n}\n\nconst KIND_KEY_PLAIN = /(?<!\\\\)\"__kind\"\\s*:/;\n\n/** An unclosed JSON value at the tail whose `__kind` key is written escaped → its one-line note. */\nfunction noteEscapedCutOffKind(text: string, options: ConvertOptions): string {\n if (options.broken !== \"note\" || !hasKindKey(text) || KIND_KEY_PLAIN.test(text)) return text;\n const quotedAt = rangeCursor(quotedCodeRanges(text));\n const ends = balancedEnds(text);\n for (let i = 0; i < text.length; i++) {\n const ch = text[i];\n if (ch !== \"{\" && ch !== \"[\") continue;\n const range = quotedAt(i);\n if (range) {\n i = range[1] - 1;\n continue;\n }\n const end = ends[i]!;\n if (end >= 0) {\n i = end - 1;\n continue;\n }\n const tail = text.slice(i);\n if (/^[{[]\\s*[\"{[]/.test(tail) && hasKindKey(tail)) {\n return closeBefore(text.slice(0, i)).trimEnd() + (i > 0 ? \"\\n\\n\" : \"\") + unfinishedKindLabel(firstKindSlug(tail));\n }\n }\n return text;\n}\n\n/**\n * The export transform. Kindless text returns byte for byte; every kind\n * region becomes readable markdown, and a kind that can never complete (cut\n * off, malformed) becomes its one-line \"<Kind> did not finish\" note — never\n * the fragment.\n */\nexport function kindTextToMarkdown(raw: string | null | undefined): string {\n if (!raw) return \"\";\n // A Python-repr or zero-width-spelled kind converts like any other (K4).\n const text = normalizeKindSpellings(raw);\n if (!hasKindKey(text)) return text;\n return convertKindText(text, { broken: \"note\" });\n}\n\nexport interface KindTextPreview {\n /** The readable text: complete kinds as markdown, an arriving kind cut off. */\n text: string;\n /** The slug of a kind still arriving at the end of the text (its loader), else null. */\n pendingKind: string | null;\n /** True when a kind is arriving but its slug has not been read yet. */\n pendingUnnamed: boolean;\n}\n\n/**\n * Where the object that OWNS the first `\"__kind\"` key starts — the outermost\n * `{` still open at that key — or -1. String contents are skipped.\n */\nfunction owningObjectStart(text: string, keyIndex: number): number {\n const open: number[] = [];\n let inString = false;\n for (let i = 0; i < keyIndex; i++) {\n const ch = text[i];\n if (inString) {\n if (ch === \"\\\\\") i++;\n else if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') inString = true;\n else if (ch === \"{\") open.push(i);\n else if (ch === \"}\") open.pop();\n }\n return open[0] ?? -1;\n}\n\n/**\n * Where the first `__kind` KEY starts (its opening quote), or -1 — found with\n * the shared detector (`hasKindKey`, which also sees the `\\u005f_kind` spelling):\n * the shortest prefix the detector accepts ends at the key's colon.\n */\nfunction kindKeyIndex(text: string): number {\n if (!hasKindKey(text)) return -1;\n let lo = 0;\n let hi = text.length;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (hasKindKey(text.slice(0, mid))) hi = mid;\n else lo = mid + 1;\n }\n let i = lo - 1; // the colon\n while (i > 0 && /\\s/.test(text[i - 1]!)) i--;\n const closing = i - 1; // the key's closing quote\n return text.lastIndexOf('\"', closing - 1);\n}\n\n/**\n * A COMPACT, possibly still-streaming preview of answer text (a toast, a\n * hover card, a list row): complete kinds read as their markdown; a kind\n * still arriving is cut from the text and named in `pendingKind` so the\n * caller shows that kind's loader — the raw JSON never shows mid-stream.\n */\nexport function kindTextPreview(raw: string | null | undefined): KindTextPreview {\n const text = raw ? normalizeKindSpellings(raw) : raw;\n // An arriving kind is the caller's loader, not a note: keep it to cut below.\n const md = !text ? \"\" : hasKindKey(text) ? convertKindText(text, { broken: \"keep\" }) : text;\n const keyIndex = kindKeyIndex(md);\n if (keyIndex < 0) return { text: md, pendingKind: null, pendingUnnamed: false };\n const start = owningObjectStart(md, keyIndex);\n const cutAt = start < 0 ? keyIndex : start;\n // Drop an opening fence line that only introduces the arriving kind.\n const head = md.slice(0, cutAt).replace(/(^|\\n)[ \\t]*(`{3,}|~{3,})[^\\n]*\\n?[ \\t]*$/, \"$1\");\n const slug = firstKindSlug(md.slice(keyIndex));\n return { text: head.trimEnd(), pendingKind: slug, pendingUnnamed: slug === null };\n}\n","/**\n * THE ONE-LINE FORM of a kind — what an INLINE surface shows where a kind\n * region sits in its text (P6, round 4): a collapsed card preview, a\n * notification body, an extraction cell, a table cell. An inline/preview level\n * cannot mount a kind component, so a kind reads as its instance title and\n * kind name (`**Cells** · Flashcard Set`), an unfinished one as its kind name\n * alone, and an unreadable one as \"Structured output\". Never the JSON.\n *\n * LIGHT on purpose — the inline level must not pull the kind registry or the\n * block pipeline: the region finder (`embedded-kind-json.ts`), the detector\n * and the title derivation (`studio/instance-title.ts`) only.\n */\n\nimport { humanizeIdentifier } from \"@ai-matrx/kit/text-case\";\nimport { deriveInstanceTitle } from \"./instance-title\";\nimport { UNREADABLE_KIND_NOTE } from \"./kind-text-to-markdown\";\nimport {\n findBrokenKindJsonRegions,\n findEmbeddedKindJsonRegions,\n} from \"./embedded-kind-json\";\nimport {\n closedJson,\n firstKindSlug,\n hasKindKey,\n kindGrammar,\n mayHoldKindKey,\n hasJsonKindKey,\n normalizeKindSpellings,\n quotedSourceRanges,\n regionJson,\n scanKindSpellingRegions,\n type KindSpellingRegion,\n} from \"./json-kind-signal\";\n\nconst UNNAMED = \"Structured output\";\n\nfunction kindName(slug: string | null | undefined): string {\n return (slug && humanizeIdentifier(slug)) || UNNAMED;\n}\n\n/**\n * One line for a kind VALUE: `**Title** · Kind Name`, or the kind name alone.\n * `plain` drops the markdown emphasis (`Title · Kind Name`) for slots that\n * draw text as written — a tooltip, a `title` attribute, a clamped caption.\n */\nexport function kindOneLine(value: unknown, options: { plain?: boolean } = {}): string {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return UNNAMED;\n const record = value as Record<string, unknown>;\n const slug = typeof record.__kind === \"string\" ? record.__kind : null;\n const title = deriveInstanceTitle(record);\n const name = kindName(slug);\n if (!(title && title !== name)) return name;\n const clean = title.replace(/[*_`[\\]]/g, \"\");\n return options.plain ? `${clean} · ${name}` : `**${clean}** · ${name}`;\n}\n\nfunction inside(ranges: Array<[number, number]>, at: number): boolean {\n return ranges.some(([start, end]) => at >= start && at < end);\n}\n\n/**\n * The text with every kind region (complete, unfinished or unreadable) in\n * prose replaced by its one-line form. Quoted source (inline code, non-JSON\n * fences) stays as written. Text with no kind key comes back unchanged.\n */\nexport function inlineKindText(raw: string, options: { plain?: boolean } = {}): string {\n // A zero-width or markdown-escaped key converts like the literal one; every\n // non-JSON spelling stays exactly as written (round 10).\n const source = raw ? normalizeKindSpellings(raw) : raw;\n if (!source || !hasKindKey(source)) return source;\n type Span = { start: number; end: number; line: string };\n const spans: Span[] = [];\n for (const region of findEmbeddedKindJsonRegions(source, { excludeQuotedSource: true })) {\n let value: unknown = null;\n try {\n value = JSON.parse(region.content);\n } catch {\n value = { __kind: region.kind };\n }\n spans.push({ start: region.start, end: region.end, line: kindOneLine(value, options) });\n }\n const quoted = quotedSourceRanges(source);\n for (const region of findBrokenKindJsonRegions(source)) {\n if (inside(quoted, region.start)) continue;\n spans.push({ start: region.start, end: region.end, line: kindName(firstKindSlug(region.content)) });\n }\n spans.sort((a, b) => a.start - b.start);\n let out = \"\";\n let cursor = 0;\n for (const span of spans) {\n if (span.start < cursor) continue;\n out += source.slice(cursor, span.start) + span.line;\n cursor = span.end;\n }\n out += source.slice(cursor);\n // Anything the finders could not bound: the `{` right before the first\n // remaining key, ONLY when its own JSON grammar reaches the key — to the end\n // of the text while it is still validly open, else to where it breaks. A\n // stray or unrelated earlier `{` (prose braces, a pasted schema) never owns\n // it, and nothing past a grammar failure is ever touched (round 10, C1).\n if (hasKindKey(out)) {\n const key = out.search(/(?<!\\\\)\"(?:__kind|\\\\u005[fF]_kind)\"\\s*:/);\n const brace = key >= 0 ? out.lastIndexOf(\"{\", key) : -1;\n if (brace >= 0 && !inside(quotedSourceRanges(out), brace)) {\n const verdict = kindGrammar(out, \"json\", brace);\n const end =\n verdict.status === \"prefix\" ? out.length : verdict.status === \"broken\" && verdict.at > key ? verdict.cut : -1;\n if (end > key) out = out.slice(0, brace) + kindName(firstKindSlug(out.slice(key, end))) + out.slice(end);\n }\n }\n return unreadableKindsAsNote(out);\n}\n\n/**\n * Whether parsed JSON text is an object whose `__kind` is not a string — a\n * list, number, boolean or null: broken structured output (round 11, L2). An\n * object under `__kind` is a shape (a pasted schema), not a kind (round 10).\n */\nfunction holdsUnreadableKind(json: string): boolean {\n let value: unknown;\n try {\n value = JSON.parse(json);\n } catch {\n return false;\n }\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return false;\n if (!Object.prototype.hasOwnProperty.call(value, \"__kind\")) return false;\n const kind = (value as Record<string, unknown>).__kind;\n if (typeof kind === \"string\") return false;\n return !(typeof kind === \"object\" && kind !== null && !Array.isArray(kind));\n}\n\n/**\n * A complete JSON kind region whose `__kind` cannot name a kind (`{\"__kind\":\n * [\"x\"], …}`, `{\"__kind\": 5}`) → the one-line unreadable note, the words the\n * export writes (`UNREADABLE_KIND_NOTE`), instead of raw JSON (round 11, L2).\n */\nexport function unreadableKindsAsNote(text: string): string {\n if (!text || !mayHoldKindKey(text) || !hasJsonKindKey(text)) return text;\n let out = \"\";\n let cursor = 0;\n for (const region of scanKindSpellingRegions(text)) {\n if (region.status !== \"complete\") continue;\n const json = regionJson(region);\n if (json === null || !holdsUnreadableKind(json)) continue;\n out += text.slice(cursor, region.start) + UNREADABLE_KIND_NOTE;\n cursor = region.end;\n }\n return cursor === 0 ? text : out + text.slice(cursor);\n}\n\n/**\n * CATALOG PROSE as a person reads it (ruling (a), round 6): a skill / agent /\n * tool description that shows an example kind JSON (`emit a\n * {\"__kind\": \"math_problem\"} block`) is documentation — the example reads as\n * its kind's one-line label, never the JSON. Plain text out, for text AND\n * attribute slots (`title`, tooltips). Display transform only: the stored\n * description is never rewritten.\n */\nexport function catalogProseText(text: string | null | undefined): string {\n if (!text) return \"\";\n return inlineKindText(text, { plain: true });\n}\n\n/** The one-line form of one broken JSON region (settled, unclosed — cut where its grammar broke). */\nfunction regionOneLine(region: KindSpellingRegion): string {\n const json =\n region.status === \"complete\" ? regionJson(region) : region.status === \"broken\" ? closedJson(region) : null;\n if (json !== null) {\n try {\n const value: unknown = JSON.parse(json);\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) return kindOneLine(value);\n } catch {\n // The kind's name alone, below.\n }\n }\n return kindName(firstKindSlug(json ?? region.decoded));\n}\n\n/** Frames repeat (two leaves read every frame): the last few answers, by text. */\nconst ONE_LINE_CACHE = new Map<string, string>();\nconst ONE_LINE_CACHE_SIZE = 16;\n\n/**\n * THE PROSE LEAF's kind reading (round 10 boundary): a REAL JSON kind region\n * the pipeline cannot lift — a settled object whose grammar BROKE in prose\n * (`{\"__kind\":\"note\",\"title\":\"Hi\" and then…`), or a markdown-escaped key\n * (`\"\\_\\_kind\"`) — reads as its one-line label, then every character after\n * its cut as written. A complete literal kind is the pipeline's (lifted).\n * Every NON-JSON spelling (`{\\\"__kind\\\":…}` in prose, repr, a JS literal,\n * typographic quotes, entities) is left EXACTLY as written — detection only.\n * Called by the one prose leaf live and reloaded text both pass through, so\n * live ≡ reload. One linear pass, memoized per text; text with no such region\n * comes back as the same string.\n */\nexport function spelledKindsAsOneLine(text: string): string {\n if (!text || !mayHoldKindKey(text)) return text;\n const cached = ONE_LINE_CACHE.get(text);\n if (cached !== undefined) return cached;\n const out = computeSpelledKindsAsOneLine(text);\n if (ONE_LINE_CACHE.size >= ONE_LINE_CACHE_SIZE) ONE_LINE_CACHE.delete(ONE_LINE_CACHE.keys().next().value!);\n ONE_LINE_CACHE.set(text, out);\n return out;\n}\n\nfunction computeSpelledKindsAsOneLine(text: string): string {\n let out = \"\";\n let cursor = 0;\n for (const region of scanKindSpellingRegions(text)) {\n // A literal key is lifted by the pipeline — unless it broke in prose, or\n // its `__kind` cannot name a kind (round 11, L2: the unreadable note).\n if (region.family === \"lifted\" && !region.markdown && region.status !== \"broken\") {\n const json = region.status === \"complete\" ? regionJson(region) : null;\n if (json === null || !holdsUnreadableKind(json)) continue;\n out += text.slice(cursor, region.start) + UNREADABLE_KIND_NOTE;\n cursor = region.end;\n continue;\n }\n out += text.slice(cursor, region.start) + regionOneLine(region);\n cursor = region.end;\n }\n return cursor === 0 ? text : out + text.slice(cursor);\n}\n\n\nconst AS_CODE_CACHE = new Map<string, string>();\n\n/**\n * Round 10, detection-only spellings drawn EXACTLY as written: a non-JSON\n * kind spelling in prose (`{\\\"__kind\\\":…}`, repr, a JS literal, typographic\n * quotes, entities) becomes an inline code span, so markdown neither eats its\n * backslashes nor decodes its entities — the screen shows the source byte for\n * byte, as quoted source. Nothing outside a region changes; text with no such\n * region comes back as the same string. One linear pass, memoized per text.\n * (A markdown-escaping pass did the same job and hung the renderer on nested\n * escapes — never reintroduce it.)\n */\nexport function nonJsonKindsAsCode(text: string): string {\n if (!text || !mayHoldKindKey(text)) return text;\n const cached = AS_CODE_CACHE.get(text);\n if (cached !== undefined) return cached;\n let out = \"\";\n let cursor = 0;\n let paragraphs: CodeSpanParagraph[] | null = null;\n let p = 0;\n for (const region of scanKindSpellingRegions(text, { families: \"all\" })) {\n if (region.family === \"lifted\" || region.family === \"markdown\") continue;\n paragraphs ??= codeSpanParagraphs(text);\n while (p < paragraphs.length - 1 && paragraphs[p]!.end <= region.start) p++;\n const fence = safeCodeSpanFence(text, region.start, region.end, paragraphs[p]!);\n if (fence === null) continue; // detection only: left exactly as it was\n out += text.slice(cursor, region.start) + fence + text.slice(region.start, region.end) + fence;\n cursor = region.end;\n }\n const result = cursor === 0 ? text : out + text.slice(cursor);\n if (AS_CODE_CACHE.size >= ONE_LINE_CACHE_SIZE) AS_CODE_CACHE.delete(AS_CODE_CACHE.keys().next().value!);\n AS_CODE_CACHE.set(text, result);\n return result;\n}\n\n/** One blank-line-bounded paragraph of the text, read once per call (round 11, H3). */\ninterface CodeSpanParagraph {\n start: number;\n end: number;\n /** A line opening raw HTML: CommonMark draws an HTML block's text verbatim, backticks included. */\n html: boolean;\n /** A GFM table row in it: a `|` inside a code span would still split the cell. */\n table: boolean;\n /** Lengths of every backtick run in it. */\n runs: Set<number>;\n}\n\n/** A line that can start (or interrupt with) an HTML block; inline tags mid-line keep markdown. */\nconst HTML_TAG = /^ {0,3}<\\/?[A-Za-z][A-Za-z0-9-]*(?:[\\s/>]|$)/m;\nconst TABLE_ROW = /^[ \\t]*\\|/m;\n\nfunction codeSpanParagraphs(text: string): CodeSpanParagraph[] {\n const out: CodeSpanParagraph[] = [];\n const blank = /\\n[ \\t]*\\n/g;\n let start = 0;\n for (;;) {\n const m = blank.exec(text);\n const end = m ? m.index + 1 : text.length;\n const body = text.slice(start, end);\n const runs = new Set<number>();\n for (let i = 0; i < body.length; ) {\n if (body[i] !== \"`\") {\n i++;\n continue;\n }\n let n = 0;\n while (body[i + n] === \"`\") n++;\n runs.add(n);\n i += n;\n }\n out.push({ start, end, html: HTML_TAG.test(body), table: TABLE_ROW.test(body), runs });\n if (!m) break;\n start = m.index + m[0].length - 1;\n }\n return out;\n}\n\n/**\n * The backtick fence that draws `text[start, end)` as an inline code span\n * WITHOUT changing anything around it — or null when no fence can (round 11,\n * H3): the region crosses a blank line (a span cannot), sits in raw HTML (its\n * backticks would show), holds a backtick or a table pipe, or touches a\n * backtick (the runs would merge). The fence length is one no backtick run in\n * the paragraph has, so no stray backtick there can pair with it.\n */\nfunction safeCodeSpanFence(text: string, start: number, end: number, paragraph: CodeSpanParagraph): string | null {\n const source = text.slice(start, end);\n if (/\\n[ \\t]*\\n/.test(source) || source.includes(\"`\")) return null;\n if (paragraph.html || (paragraph.table && source.includes(\"|\"))) return null;\n if (text[start - 1] === \"`\" || text[end] === \"`\") return null;\n let ticks = 1;\n while (paragraph.runs.has(ticks)) ticks++;\n return \"`\".repeat(ticks);\n}\n","/**\n * A JSON REGION INSIDE A BLOCKQUOTE leaves the quote (V1, the never-raw law).\n *\n * A model sometimes quotes its whole answer — `> ```json` / `> {\"__kind\":…}` —\n * and every line then starts with `>`. Neither host could see the region: the\n * live accumulator classifies a `>` line as prose, the static splitter keeps\n * the quote as one text block, so the kind was drawn as raw JSON inside a\n * blockquote in chat, on reload, on public shared pages and in tool results.\n *\n * THE RULE: a blockquote holds prose, never a data region. A JSON-family\n * fence (```json / ```jsonc / ```json5 / unlabelled, any case, ``` or ~~~)\n * opening on a quoted line, or a quoted line whose JSON could be a kind (the\n * first-key rule, `jsonKindSignal`), is LIFTED: its quote prefix is removed\n * from every line of the region, so the region becomes an ordinary top-level\n * fence / bare JSON object between two quotes. The quote before it renders as\n * a quote, the region as its kind, the quote after it as a new quote. Quoted\n * text that is not a JSON region is never touched — and a fence of another\n * language (```ts, ```xml, ```markdown, quoted or not) is the model quoting\n * SOURCE, so nothing inside it is lifted (the owner's ruling, 2026-09-30).\n *\n * ONE transform, both hosts: the live accumulator pushes every delta through\n * a `QuotedKindLift` before its line machine; the static splitter runs\n * `liftQuotedKindRegions` on the whole text first. The transform is\n * chunk-invariant (decisions are taken only at points every chunking reaches\n * with the same bytes), so live = reload byte for byte.\n */\n\nimport { FenceReader, fenceOpenerOf } from \"../source\";\nimport { jsonKindSignal } from \"./json-kind-signal\";\n\n/** Fence languages whose body is a JSON region (an unlabelled fence included). */\nconst JSON_FENCE_LANGS = new Set([\"\", \"json\", \"jsonc\", \"json5\"]);\n\n/** A blockquote prefix: up to three spaces, then one or more `>` (each with an optional space). */\nconst QUOTE_PREFIX = /^ {0,3}>(?: ?>)* ?/;\n\n/** How deep a matched quote prefix nests (`> >` is 2). */\nfunction quoteDepth(prefix: string): number {\n return (prefix.match(/>/g) ?? []).length;\n}\n\n/** A prefix of exactly `depth` levels, or null. */\nfunction prefixOfDepth(line: string, depth: number): string | null {\n const match = new RegExp(`^ {0,3}>(?: ?>){${depth - 1}} ?`).exec(line);\n return match ? match[0] : null;\n}\n\ntype Mode =\n /** Between regions. */\n | { kind: \"none\" }\n /** Inside an unquoted (or quoted, non-JSON) fence: everything passes as written. */\n | { kind: \"source_fence\"; reader: FenceReader; depth: number }\n /** Quoted JSON-ish lines held while the first key decides (multi-line `> {`). */\n | { kind: \"candidate\"; depth: number; raw: string[]; stripped: string[] }\n /** A lifted JSON-family fence: prefix stripped until its closing line. */\n | { kind: \"lifted_fence\"; reader: FenceReader; depth: number }\n /** A lifted bare JSON value: prefix stripped until its brackets balance. */\n | { kind: \"lifted_bare\"; depth: number; balance: number };\n\n/** Structural bracket balance of one line (JSON strings are opaque; none spans a line). */\nfunction bracketDelta(line: string): number {\n let delta = 0;\n let inString = false;\n let escaped = false;\n for (const ch of line) {\n if (inString) {\n if (escaped) escaped = false;\n else if (ch === \"\\\\\") escaped = true;\n else if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') inString = true;\n else if (ch === \"{\" || ch === \"[\") delta++;\n else if (ch === \"}\" || ch === \"]\") delta--;\n }\n return delta;\n}\n\n/**\n * The streaming lift. `push` returns the bytes that are safe to hand on now;\n * a line whose fate is not known yet (a quoted line that may open a JSON\n * region) is held — never shown raw — until it is. `flush` releases what is\n * held, as written, at the end of the stream (or a hard boundary).\n */\nexport class QuotedKindLift {\n private mode: Mode = { kind: \"none\" };\n /** The current line's bytes not yet handed on (held while undecided). */\n private held = \"\";\n /** The current line's bytes so far (handed on or not), as received. */\n private line = \"\";\n /** Whether the rest of the current line passes straight through. */\n private passing = false;\n /** Prefix stripped from the current line's handed-on bytes (passing lines). */\n private stripping = 0;\n\n push(text: string): string {\n let out = \"\";\n for (const ch of text) out += this.pushChar(ch);\n return out;\n }\n\n flush(): string {\n let out = \"\";\n if (this.mode.kind === \"candidate\") {\n out += this.mode.raw.join(\"\\n\") + (this.mode.raw.length ? \"\\n\" : \"\");\n this.mode = { kind: \"none\" };\n }\n out += this.held;\n this.held = \"\";\n this.line = \"\";\n this.passing = false;\n this.stripping = 0;\n return out;\n }\n\n private pushChar(ch: string): string {\n if (ch === \"\\n\") return this.endLine();\n this.line += ch;\n if (this.passing) {\n if (this.stripping > 0) {\n // Still inside the prefix being removed.\n this.stripping--;\n return \"\";\n }\n return ch;\n }\n this.held += ch;\n return this.decideMidLine();\n }\n\n /** Try to decide the current line before it ends; returns bytes released. */\n private decideMidLine(): string {\n const mode = this.mode;\n if (mode.kind === \"source_fence\") {\n // Pass as written; the closer is judged at line end.\n return this.release(this.held, 0);\n }\n if (mode.kind === \"lifted_fence\" || mode.kind === \"lifted_bare\") {\n const prefix = prefixOfDepth(this.held, mode.depth);\n if (prefix !== null && (this.held.length > prefix.length || /> $/.test(prefix))) {\n // The prefix is known and complete: strip it, pass the rest live.\n // A lifted fence's closing line is judged at line end, so a fragment\n // that may be that closer (it opens with a backtick or tilde) waits.\n const rest = this.held.slice(prefix.length);\n if (mode.kind === \"lifted_fence\" && /^\\s*[`~]/.test(rest)) return \"\";\n return this.release(rest, 0);\n }\n if (!/^ {0,3}(?:> ?)*$/.test(this.held)) {\n // A lazy line (no quote prefix) inside the region: passes as written.\n return this.release(this.held, 0);\n }\n return \"\";\n }\n if (mode.kind === \"candidate\") return \"\";\n // none: is this line a quote at all?\n if (!/^ {0,3}(?:>|$)/.test(this.held) && !/^ {0,3}$/.test(this.held)) {\n return this.release(this.held, 0);\n }\n const prefix = QUOTE_PREFIX.exec(this.held)?.[0];\n if (!prefix) return \"\";\n const rest = this.held.slice(prefix.length);\n if (!rest.trim()) return \"\";\n const first = rest.trimStart()[0];\n if (first === \"`\" || first === \"~\") return \"\"; // decided at line end\n if (first === \"{\" || first === \"[\") {\n // Lift the moment the first key says kind (monotonic — a `__kind` key\n // never un-arrives); anything else waits for the line to end.\n if (jsonKindSignal(rest) === \"kind\") {\n this.mode = { kind: \"lifted_bare\", depth: quoteDepth(prefix), balance: 0 };\n return this.release(rest, 0);\n }\n return \"\";\n }\n // Quoted prose.\n return this.release(this.held, 0);\n }\n\n /** Hand on `bytes` and let the rest of the line pass straight through. */\n private release(bytes: string, strip: number): string {\n this.held = \"\";\n this.passing = true;\n this.stripping = strip;\n return bytes;\n }\n\n private endLine(): string {\n const line = this.line;\n const held = this.held;\n this.line = \"\";\n this.held = \"\";\n this.passing = false;\n this.stripping = 0;\n const mode = this.mode;\n\n if (mode.kind === \"source_fence\") {\n const content = mode.depth > 0 ? line.replace(QUOTE_PREFIX, \"\") : line;\n if (mode.reader.feed(content)) this.mode = { kind: \"none\" };\n return held + \"\\n\";\n }\n\n if (mode.kind === \"lifted_fence\") {\n const prefix = prefixOfDepth(line, mode.depth);\n const content = prefix !== null ? line.slice(prefix.length) : line;\n if (mode.reader.feed(content)) this.mode = { kind: \"none\" };\n // What was not handed on yet (a held closer, or a prefix-only line).\n const sent = line.length - held.length;\n const contentSent = Math.max(0, sent - (prefix?.length ?? 0));\n return content.slice(contentSent) + \"\\n\";\n }\n\n if (mode.kind === \"lifted_bare\") {\n const prefix = prefixOfDepth(line, mode.depth);\n const content = prefix !== null ? line.slice(prefix.length) : line;\n mode.balance += bracketDelta(content);\n if (mode.balance <= 0) this.mode = { kind: \"none\" };\n const sent = line.length - held.length;\n const contentSent = Math.max(0, sent - (prefix?.length ?? 0));\n return content.slice(contentSent) + \"\\n\";\n }\n\n if (mode.kind === \"candidate\") {\n const prefix = prefixOfDepth(line, mode.depth);\n if (prefix === null) {\n // The quote ended before the first key decided: it was prose.\n const out = mode.raw.join(\"\\n\") + \"\\n\";\n this.mode = { kind: \"none\" };\n return out + this.lineFromNone(line);\n }\n mode.raw.push(line);\n mode.stripped.push(line.slice(prefix.length));\n return this.settleCandidate(mode);\n }\n\n return this.lineFromNone(line, held);\n }\n\n /**\n * A complete line met with no region open. `held` is what was not handed\n * on yet: the whole line when it was held to the end, otherwise \"\" (it was\n * released mid-line as prose or as an unquoted line).\n */\n private lineFromNone(line: string, held = line): string {\n const prefix = QUOTE_PREFIX.exec(line)?.[0];\n if (held.length < line.length || !prefix) {\n // Released mid-line (or never a quote). An unquoted fence opener starts\n // a source region: nothing inside it is lifted.\n if (!prefix) {\n const opener = fenceOpenerOf(line);\n if (opener) {\n this.mode = { kind: \"source_fence\", reader: new FenceReader(opener), depth: 0 };\n }\n }\n return held + \"\\n\";\n }\n const rest = line.slice(prefix.length);\n const depth = quoteDepth(prefix);\n const trimmed = rest.trimStart();\n if (trimmed.startsWith(\"`\") || trimmed.startsWith(\"~\")) {\n const opener = fenceOpenerOf(rest);\n if (opener && JSON_FENCE_LANGS.has(opener.lang.toLowerCase())) {\n this.mode = { kind: \"lifted_fence\", reader: new FenceReader(opener), depth };\n return rest + \"\\n\";\n }\n if (opener) {\n this.mode = { kind: \"source_fence\", reader: new FenceReader(opener), depth };\n }\n return held + \"\\n\";\n }\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\")) {\n const candidate: Mode = { kind: \"candidate\", depth, raw: [line], stripped: [rest] };\n this.mode = candidate;\n return this.settleCandidate(candidate);\n }\n return held + \"\\n\";\n }\n\n /** A held quoted JSON start, re-judged after each complete line. */\n private settleCandidate(mode: Extract<Mode, { kind: \"candidate\" }>): string {\n const signal = jsonKindSignal(mode.stripped.join(\"\\n\"));\n if (signal === \"undecided\") return \"\";\n if (signal === \"not_kind\") {\n this.mode = { kind: \"none\" };\n return mode.raw.join(\"\\n\") + \"\\n\";\n }\n const balance = mode.stripped.reduce((sum, l) => sum + bracketDelta(l), 0);\n this.mode =\n balance > 0\n ? { kind: \"lifted_bare\", depth: mode.depth, balance }\n : { kind: \"none\" };\n return mode.stripped.join(\"\\n\") + \"\\n\";\n }\n}\n\n/** The whole-text form, for the static splitter (identical bytes to any streaming of `source`). */\nexport function liftQuotedKindRegions(source: string): string {\n if (!source.includes(\">\")) return source;\n const lift = new QuotedKindLift();\n return lift.push(source) + lift.flush();\n}\n\n","/**\n * THE MARKDOWN-ESCAPED KIND (P8, round 4). A model that escapes markdown in\n * its whole answer writes `{\"\\_\\_kind\":\"flashcard\\_set\",…}`. No JSON reader\n * sees a kind there (`\\_` is not even a JSON escape), but the markdown\n * renderer un-escapes it, so the reader saw `{\"__kind\":…}` drawn raw.\n *\n * THE RULE: the key `\"\\_\\_kind\"` IS the key `\"__kind\"` (the detector reads it\n * in text contexts, `hasKindKey(…, { markdown: true })`), and inside the JSON\n * object that holds it every `\\_` is `_`. ONE transform, both hosts: the live\n * accumulator pushes every delta through a `MarkdownEscapedKindJson` before\n * its line machine; the static splitter runs `unescapeMarkdownKindJson` on the\n * whole text first. Character-driven and chunk-invariant, so live = reload.\n *\n * Also here (decided, round 4): a DOUBLE-ENCODED kind — the whole answer is a\n * JSON string literal whose value is kind JSON (`\"{\\\"__kind\\\":…}\"`) — reads as\n * that kind (`decodeDoubleEncodedKindText`, whole text, settled readers only).\n */\n\nimport { isKindJsonText, withoutZeroWidth } from \"./json-kind-signal\";\n\nconst TARGET = '\"\\\\_\\\\_kind\"';\nconst KEY = '\"__kind\"';\nconst HAS_ZERO_WIDTH = /[\\u200B-\\u200D\\u2060\\uFEFF\\u00AD]/;\n\n/**\n * A ZERO-WIDTH character inside the key (`\"__\\u200Bkind\"`, round 8): the\n * screen reads `\"__kind\"`, so the key is rewritten as `\"__kind\"` before\n * anything else reads the text, and the normal kind route (fence, standalone,\n * prose) takes it. Only a complete key is rewritten — a zero-width character\n * anywhere else stays. Character-driven and chunk-invariant (live = reload).\n */\nexport class ZeroWidthKindKey {\n /** Bytes that may still become the key — held, never shown. */\n private pending = \"\";\n\n push(text: string): string {\n let out = \"\";\n for (const ch of text) out += this.pushChar(ch);\n return out;\n }\n\n flush(): string {\n const out = this.pending;\n this.pending = \"\";\n return out;\n }\n\n private pushChar(ch: string): string {\n let candidate = this.pending + ch;\n let out = \"\";\n while (candidate && !(candidate.startsWith('\"') && KEY.startsWith(withoutZeroWidth(candidate)))) {\n const next = candidate.indexOf('\"', 1);\n if (next < 0) {\n out += candidate;\n candidate = \"\";\n } else {\n out += candidate.slice(0, next);\n candidate = candidate.slice(next);\n }\n }\n if (withoutZeroWidth(candidate) === KEY) {\n this.pending = \"\";\n return out + KEY;\n }\n this.pending = candidate;\n return out;\n }\n}\n\nexport class MarkdownEscapedKindJson {\n /** The zero-width key spelling is read first (round 8) — one transform, both hosts. */\n private zeroWidth = new ZeroWidthKindKey();\n /** Bytes that may still become the escaped key — held, never shown. */\n private pending = \"\";\n /** Inside the object holding a rewritten key: bracket depth (0 = outside). */\n private depth = 0;\n private inString = false;\n /** A held backslash inside the object (its fate depends on the next char). */\n private escape = false;\n\n push(text: string): string {\n return this.pushUnescape(this.zeroWidth.push(text));\n }\n\n private pushUnescape(text: string): string {\n let out = \"\";\n for (const ch of text) out += this.pushChar(ch);\n return out;\n }\n\n flush(): string {\n const held = this.pushUnescape(this.zeroWidth.flush());\n const out = held + this.pending + (this.escape ? \"\\\\\" : \"\");\n this.pending = \"\";\n this.escape = false;\n this.depth = 0;\n this.inString = false;\n return out;\n }\n\n private pushChar(ch: string): string {\n if (this.depth > 0) return this.insideObject(ch);\n let candidate = this.pending + ch;\n let out = \"\";\n // A zero-width character inside the escaped key reads through (L-1, round 9).\n while (candidate && !(candidate.startsWith('\"') && TARGET.startsWith(withoutZeroWidth(candidate)))) {\n const next = candidate.indexOf('\"', 1);\n if (next < 0) {\n out += candidate;\n candidate = \"\";\n } else {\n out += candidate.slice(0, next);\n candidate = candidate.slice(next);\n }\n }\n if (withoutZeroWidth(candidate) === TARGET) {\n this.pending = \"\";\n this.depth = 1;\n this.inString = false;\n return out + KEY;\n }\n this.pending = candidate;\n return out;\n }\n\n private insideObject(ch: string): string {\n if (this.escape) {\n this.escape = false;\n return ch === \"_\" ? \"_\" : `\\\\${ch}`;\n }\n if (ch === \"\\\\\") {\n this.escape = true;\n return \"\";\n }\n if (this.inString) {\n if (ch === '\"') this.inString = false;\n return ch;\n }\n if (ch === '\"') this.inString = true;\n else if (ch === \"{\" || ch === \"[\") this.depth += 1;\n else if (ch === \"}\" || ch === \"]\") this.depth -= 1;\n return ch;\n }\n}\n\n/** The whole-text form, for the static splitter (identical bytes to any streaming of `source`). */\nexport function unescapeMarkdownKindJson(source: string): string {\n if (!source.includes(TARGET) && !HAS_ZERO_WIDTH.test(source)) return source;\n const transform = new MarkdownEscapedKindJson();\n return transform.push(source) + transform.flush();\n}\n\n/**\n * A whole answer that is a JSON STRING literal holding kind JSON → that kind\n * JSON; anything else unchanged.\n */\nexport function decodeDoubleEncodedKindText(source: string): string {\n const trimmed = source.trim();\n if (!trimmed.startsWith('\"') || !trimmed.endsWith('\"') || !trimmed.includes('\\\\\"__kind\\\\\"')) return source;\n try {\n const inner: unknown = JSON.parse(trimmed);\n return typeof inner === \"string\" && isKindJsonText(inner.trim()) ? inner.trim() : source;\n } catch {\n return source;\n }\n}\n","/**\n * A KIND AS AN IMAGE'S ALT TEXT (P9, round 4): `![{\"__kind\":…}](url)`. The\n * prose split lifted the object out and left `!` and `(url)` behind as two\n * stray prose blocks after reload (and live). The model meant the kind: the\n * image wrapper is chrome — `![` before the object and `](url)` after it are\n * dropped, the object stays where it was and renders as its kind. A kindless\n * object in alt text (first key decided not `__kind`) is left as written.\n *\n * ONE transform, both hosts (like `quoted-kind-lift.ts`): the live accumulator\n * pushes every delta through a `KindImageAltUnwrap`; the static splitter runs\n * `unwrapKindImageAlt` on the whole text. Character-driven and chunk-invariant.\n */\n\nimport { jsonKindSignal } from \"./json-kind-signal\";\n\ntype Mode = \"scan\" | \"head\" | \"body\" | \"tail\";\n\n/** Past this, an alt text whose first key never arrived is left as written. */\nconst HEAD_LIMIT = 2000;\n\nexport class KindImageAltUnwrap {\n private mode: Mode = \"scan\";\n /** Held: `!` / `![` (scan), the object so far (head), `](…` (tail). */\n private held = \"\";\n private depth = 0;\n private inString = false;\n private escape = false;\n\n push(text: string): string {\n let out = \"\";\n for (const ch of text) out += this.pushChar(ch);\n return out;\n }\n\n flush(): string {\n const out = this.mode === \"head\" ? `![${this.held}` : this.held;\n this.mode = \"scan\";\n this.held = \"\";\n this.depth = 0;\n this.inString = false;\n this.escape = false;\n return out;\n }\n\n /** Track JSON structure; returns true when the object just closed. */\n private track(ch: string): boolean {\n if (this.escape) {\n this.escape = false;\n return false;\n }\n if (this.inString) {\n if (ch === \"\\\\\") this.escape = true;\n else if (ch === '\"') this.inString = false;\n return false;\n }\n if (ch === '\"') this.inString = true;\n else if (ch === \"{\" || ch === \"[\") this.depth += 1;\n else if (ch === \"}\" || ch === \"]\") {\n this.depth -= 1;\n return this.depth === 0;\n }\n return false;\n }\n\n private pushChar(ch: string): string {\n switch (this.mode) {\n case \"scan\": {\n if (this.held === \"\" && ch === \"!\") {\n this.held = \"!\";\n return \"\";\n }\n if (this.held === \"!\" && ch === \"[\") {\n this.held = \"![\";\n return \"\";\n }\n if (this.held === \"![\" && ch === \"{\") {\n this.mode = \"head\";\n this.held = \"{\";\n this.depth = 1;\n this.inString = false;\n this.escape = false;\n return \"\";\n }\n if (this.held === \"\") return ch;\n const out = this.held;\n this.held = \"\";\n return out + this.pushChar(ch);\n }\n case \"head\": {\n this.held += ch;\n const closed = this.track(ch);\n const signal = jsonKindSignal(this.held);\n if (signal === \"kind\") {\n const out = this.held;\n this.held = \"\";\n if (closed) {\n this.mode = \"tail\";\n return out;\n }\n this.mode = \"body\";\n return out;\n }\n if (signal === \"not_kind\" || closed || this.held.length > HEAD_LIMIT) {\n const out = `![${this.held}`;\n this.held = \"\";\n this.mode = \"scan\";\n return out;\n }\n return \"\";\n }\n case \"body\": {\n if (this.track(ch)) this.mode = \"tail\";\n return ch;\n }\n case \"tail\": {\n this.held += ch;\n if (/^\\]\\([^)\\n]*\\)$/.test(this.held)) {\n this.held = \"\";\n this.mode = \"scan\";\n return \"\";\n }\n if (/^\\](?:\\([^)\\n]*)?$/.test(this.held)) return \"\";\n // Not an image tail: hand it on as written.\n const out = this.held;\n this.held = \"\";\n this.mode = \"scan\";\n return out;\n }\n }\n }\n}\n\n/** The whole-text form, for the static splitter (identical bytes to any streaming of `source`). */\nexport function unwrapKindImageAlt(source: string): string {\n if (!source.includes(\"![{\")) return source;\n const transform = new KindImageAltUnwrap();\n return transform.push(source) + transform.flush();\n}\n","/**\n * Answer TEXT → ONE readable line, for a person's compact label (a card\n * subtitle, a rule name, a link-preview description, a list row). A kind is\n * never shown as raw JSON (Arman, 2026-09-30): a kind answer reads as\n * \"<Kind> · <instance title>\" (`deriveInstanceTitle`, the derivation saved\n * instances use); prose with a kind in it reads as the prose's first line;\n * a kind that never completed reads as its one-line broken note.\n * Kindless text is whitespace-collapsed and clipped, nothing else.\n *\n * Destination transform only — never call it on stored or machine-bound text.\n */\n\nimport { humanizeKind } from \"./kind-markdown-utils\";\nimport { deriveInstanceTitle } from \"./instance-title\";\nimport { firstKindSlug, hasJsonKindKey, hasKindKey, normalizeKindSpellings } from \"./json-kind-signal\";\nimport { kindTextToMarkdown } from \"./kind-text-to-markdown\";\n\nfunction clip(text: string, max: number): string {\n return text.length > max ? `${text.slice(0, Math.max(0, max - 1)).trimEnd()}…` : text;\n}\n\nfunction wholeKindLabel(text: string): string | null {\n let body = text.trim();\n const fence = body.match(/^(?:`{3,}|~{3,})[a-zA-Z0-9]*\\s*\\n([\\s\\S]*?)\\n?(?:`{3,}|~{3,})$/);\n if (fence) body = fence[1]!.trim();\n if (!body.startsWith(\"{\")) return null;\n try {\n const parsed: unknown = JSON.parse(body);\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return null;\n const record = parsed as Record<string, unknown>;\n if (typeof record.__kind !== \"string\" || !record.__kind.trim()) return null;\n const name = humanizeKind(record.__kind.trim());\n const title = deriveInstanceTitle(record);\n return title ? `${name} · ${title}` : name;\n } catch {\n return null;\n }\n}\n\nfunction firstReadableLine(markdown: string): string {\n for (const raw of markdown.split(\"\\n\")) {\n const line = raw\n .replace(/^\\s*(?:#{1,6}\\s+|>\\s*|[-*+]\\s+|\\d+[.)]\\s+)/, \"\")\n // A wrapper tag (`<artifact …>`, `<answer>`) names nothing.\n .replace(/<\\/?[A-Za-z][\\w:-]*(\\s[^<>]*)?\\/?>/g, \"\")\n .replace(/[*_`]+/g, \"\")\n .replace(/\\s+/g, \" \")\n .trim();\n if (line) return line;\n }\n return \"\";\n}\n\n/** One line, at most `max` characters, never containing a `__kind` key. */\nexport function kindTextLabel(raw: string | null | undefined, max = 90): string {\n if (!raw) return \"\";\n // A real JSON spelling (zero-width / markdown-escaped key) reads as the literal one (round 10).\n const text = normalizeKindSpellings(raw);\n if (!hasKindKey(text)) return clip(text.replace(/\\s+/g, \" \").trim(), max);\n const whole = wholeKindLabel(text);\n if (whole) return clip(whole, max);\n const line = firstReadableLine(kindTextToMarkdown(text));\n // Nothing readable around the kind (a kind wrapped in an `<artifact>` tag,\n // a kind that never completed): the kind's name, never \"\" (R4, round 6).\n if (line) return clip(line, max);\n const slug = firstKindSlug(text);\n return clip(slug ? humanizeKind(slug) : \"Structured output\", max);\n}\n\n/**\n * A conversation TITLE as a person reads it (R4, round 6): a title that holds\n * kind JSON reads as its one-line kind label; any other title — and null —\n * comes back as it is. Read boundaries and title renderers call this; the\n * stored title is never rewritten.\n */\nexport function conversationTitleText(title: string | null | undefined): string | null {\n if (title == null) return null;\n return hasJsonKindKey(title) ? kindTextLabel(title, 200) : title;\n}\n","import type { CanonicalBlockIR } from \"../core/ir-types\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** Mirror the server's legacy quiz adapter while keeping source aliases in IR residue. */\nexport function canonicalizeCompletedLegacyQuizEnvelope(\n envelope: CanonicalBlockIR,\n sourceText: string,\n): CanonicalBlockIR {\n if (envelope.root.kind !== \"quiz_set\" || envelope.root.status !== \"complete\") {\n return envelope;\n }\n\n let source: unknown;\n try {\n source = JSON.parse(sourceText);\n } catch {\n return envelope;\n }\n if (!isRecord(source)) return envelope;\n\n // A declared modern kind already owns canonical fields and can legitimately\n // contain nullable answers or future schema fields. Only the old root-key\n // vocabulary gets translated.\n const hasLegacyAliases =\n typeof source.quiz_title === \"string\" ||\n typeof source.quizTitle === \"string\" ||\n Array.isArray(source.multiple_choice) ||\n Array.isArray(source.multipleChoice);\n if (source.__kind !== undefined || !hasLegacyAliases) return envelope;\n\n const title =\n typeof source.quiz_title === \"string\"\n ? source.quiz_title\n : typeof source.quizTitle === \"string\"\n ? source.quizTitle\n : null;\n const sourceQuestions = source.questions ?? source.multiple_choice ?? source.multipleChoice;\n if (title === null || !Array.isArray(sourceQuestions)) return envelope;\n const questions = sourceQuestions.flatMap((candidate) => {\n if (!isRecord(candidate)) return [];\n // Legacy root-key quiz questions are scalar payload records, not declared\n // nested kind instances. Python's adapter intentionally leaves their\n // source vocabulary marker-free; do the same without affecting modern\n // `quiz_set` documents (which return before this adapter runs).\n const { __kind: _legacyKind, ...legacyQuestion } = candidate;\n const options = Array.isArray(candidate.options) ? candidate.options : [];\n const answer = candidate.correct_answer ?? candidate.correctAnswer ?? \"\";\n const correctAnswer =\n typeof answer === \"number\" &&\n Number.isInteger(answer) &&\n answer >= 0 &&\n answer < options.length\n ? options[answer]\n : answer;\n return [{\n ...legacyQuestion,\n type: typeof candidate.type === \"string\" ? candidate.type : \"multiple_choice\",\n question: typeof candidate.question === \"string\" ? candidate.question : \"\",\n options,\n correct_answer:\n typeof correctAnswer === \"string\" ? correctAnswer : String(correctAnswer),\n explanation:\n typeof candidate.explanation === \"string\" ? candidate.explanation : null,\n }];\n });\n\n return {\n ...envelope,\n root: {\n ...envelope.root,\n value: { ...envelope.root.value, title, questions },\n },\n };\n}\n","/**\n * The canonical IR contract for structured content.\n *\n * Every source (live agent stream, DB reload, Python-preprocessed results,\n * notes, any future surface) is normalized into these shapes exactly once.\n * Anything already carrying this IR passes through downstream layers by\n * reference — see `core/normalize.ts` for the idempotence law.\n *\n * This file is pure types + path helpers. No React, no Redux, no IO.\n */\n\n/** Path of a value inside a parsed region (object keys + array indices). */\nexport type IrPath = Array<string | number>;\n\n/**\n * How a node's kind was (or wasn't) established.\n *\n * 🚨 `unverified` IS NOT `raw`, AND THE DIFFERENCE IS LOAD-BEARING (Arman's\n * ruling, 2026-08-29). \"We checked it and it is wrong\" and \"we had nothing to\n * check it with\" are opposite facts about a payload, and collapsing them cost\n * ~221 live kinds their component overnight: a kind whose schema never loaded\n * degraded to `raw`, the render route read `raw` as \"broken instance\", and\n * perfectly valid payloads were dumped as key/value lists instead of reaching\n * the component the user built. A consumer that treats `unverified` as a\n * failure is reintroducing that outage — the data is intact and MAY be\n * entirely valid; all that is missing is the schema that would prove it.\n */\nexport type IrKindState =\n | \"resolved\" // __kind seen + schema validated\n | \"speculative\" // committed from parent itemKinds before __kind arrived\n | \"pending_kind\" // object open, no __kind yet, no speculation possible\n | \"pending_schema\" // kind known, registry cold-fetch in flight\n | \"unverified\" // kind known, NO schema was ever available — never checked\n | \"raw\"; // checked and FAILED, or structurally broken\n\n/**\n * System-level zero-data-loss channel. Unknown keys are NEVER merged into a\n * node's `value` (they'd be indistinguishable from schema fields); they are\n * carried here verbatim — Protobuf unknown-fields discipline. Distinct from\n * any domain-level `additionalDetails` field, which is an ordinary schema\n * field inside `value`.\n */\nexport interface IrResidue {\n /** Keys present in the source object but absent from the kind schema. */\n extra: Record<string, unknown> | null;\n /** Optional schema fields the source never provided. */\n optionalMissing: string[] | null;\n /** Structured warnings attached during parsing (speculation backtracks, truncation, …). */\n notices: Array<{ code: string; message: string; at?: number }> | null;\n}\n\n/** Which wire syntax carried the kind discriminator for a node. */\nexport type IrDiscriminator =\n | { format: \"json\"; key: \"__kind\" }\n | { format: \"xml\"; tag: string }\n | { format: \"fence\"; language: string };\n\n/** A schema-shaped structured node. Children live inside `value` (and carry their own metadata via `nodeIndex`). */\nexport interface IrStructuredNode {\n role: \"structured\";\n /** Canonical kind slug. Empty string while pending. */\n kind: string;\n kindState: IrKindState;\n discriminator: IrDiscriminator;\n /** Region-relative path ([] = region root). */\n path: IrPath;\n status: \"streaming\" | \"complete\" | \"error\";\n /** Compliant snapshot: schema fields + __kind ONLY. Unknown keys → residue. */\n value: Record<string, unknown>;\n residue: IrResidue | null;\n}\n\n/** Envelope version. Bump = migration point for persisted envelopes. */\nexport const IR_VERSION = 1 as const;\n\n/** Reserved key carrying the envelope inside RenderBlockPayload.data. */\nexport const IR_ENVELOPE_KEY = \"__ir\" as const;\n\n/**\n * One parsed region's canonical form. Serializable (plain JSON), carried on\n * render blocks (`data.__ir`), persisted on artifacts and message metadata,\n * and — with `engine: \"py-block-detector\"` — accepted pre-built from Python.\n */\nexport interface CanonicalBlockIR {\n v: typeof IR_VERSION;\n /** Provenance: which implementation produced this envelope. */\n engine: \"fe-kind-parser\" | \"py-block-detector\";\n /** Stable hash of the region source text — the idempotence / cache key. */\n fingerprint: string;\n root: IrStructuredNode;\n /**\n * pathKey → node metadata for per-path readers (child kinds under root).\n * Carries each child node's residue — child snapshot values inside\n * `root.value` hold schema fields only, so WITHOUT this the envelope would\n * silently drop nested unknown keys (zero-data-loss violation).\n */\n nodeIndex?: Record<\n string,\n Pick<IrStructuredNode, \"kind\" | \"kindState\" | \"status\"> & {\n residue?: IrResidue | null;\n }\n >;\n}\n\n/** Normalizer output segment: prose stays raw text; structured regions carry IR. */\nexport type CanonicalSegment =\n | { role: \"text\"; content: string }\n | {\n role: \"block\";\n blockType: string;\n content: string;\n ir: CanonicalBlockIR | null;\n };\n\nexport interface CanonicalContent {\n v: typeof IR_VERSION;\n segments: CanonicalSegment[];\n}\n\n// ---------------------------------------------------------------------------\n// Path helpers — the ONE implementation. Consumers must not roll their own.\n// ---------------------------------------------------------------------------\n\nexport function irPathKey(path: IrPath): string {\n return path.map((segment) => String(segment)).join(\".\");\n}\n\nexport function irPathsEqual(left: IrPath, right: IrPath): boolean {\n if (left.length !== right.length) return false;\n for (let i = 0; i < left.length; i++) {\n if (left[i] !== right[i]) return false;\n }\n return true;\n}\n\nexport function irPathIsUnderOrEqual(path: IrPath, prefix: IrPath): boolean {\n if (path.length < prefix.length) return false;\n for (let i = 0; i < prefix.length; i++) {\n if (path[i] !== prefix[i]) return false;\n }\n return true;\n}\n\n/** Human label for a path (\"root\", \"cards[2].front\"). */\nexport function irPathLabel(path: IrPath): string {\n if (path.length === 0) return \"root\";\n\n const parts: string[] = [];\n for (const segment of path) {\n if (typeof segment === \"number\") {\n parts[parts.length - 1] += `[${segment}]`;\n } else {\n parts.push(String(segment));\n }\n }\n return parts.join(\".\");\n}\n\n/** True when every residue channel is empty — normalize to null instead. */\nexport function isEmptyResidue(residue: IrResidue): boolean {\n return (\n (residue.extra === null || Object.keys(residue.extra).length === 0) &&\n (residue.optionalMissing === null ||\n residue.optionalMissing.length === 0) &&\n (residue.notices === null || residue.notices.length === 0)\n );\n}\n","/**\n * Pure envelope→value functions (the zero-data-loss wire round-trip).\n *\n * These live in core/ (the pure kernel) because every layer needs them —\n * including kinds/legacy-bridge-utils, whose bridges are built at MODULE\n * SCOPE inside kinds/<slug>.ts files that system-kinds.ts imports. When these\n * functions lived in redux/render-block-envelope.ts, that file's memo/capture\n * imports closed a module cycle (kinds → bridge-utils → render-block-envelope\n * → region-envelope-memo → kind-registry → system-kinds → kinds), which made\n * SYSTEM_KIND_DEFINITIONS entry-point-fragile (undefined defs when a kinds\n * module was the import entry). Keeping them here makes every kinds module\n * cycle-free BY CONSTRUCTION. redux/render-block-envelope re-exports them for\n * its existing consumers.\n */\n\nimport { isEmptyResidue, type CanonicalBlockIR } from \"./ir-types\";\nimport { KIND_KEY } from \"./kind-schema.types\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Rebuild the region's full data: walk the root value and merge each node's\n * residue extras back in (root residue + nodeIndex residues). This is the\n * zero-data-loss read: nothing the model emitted is missing, whether or not\n * a schema knew about it.\n */\nexport function reconstructRegionValue(\n envelope: CanonicalBlockIR,\n): Record<string, unknown> {\n const cloned = structuredClone(envelope.root.value);\n\n const applyExtras = (\n target: Record<string, unknown>,\n extras: Record<string, unknown> | null | undefined,\n ) => {\n if (!extras) return;\n for (const [key, value] of Object.entries(extras)) {\n target[key] = structuredClone(value);\n }\n };\n\n applyExtras(cloned, envelope.root.residue?.extra);\n\n for (const [pathKey, meta] of Object.entries(envelope.nodeIndex ?? {})) {\n const residue = meta.residue;\n if (!residue || isEmptyResidue(residue) || !residue.extra) continue;\n\n const segments = pathKey.split(\".\");\n let cursor: unknown = cloned;\n for (const segment of segments) {\n if (Array.isArray(cursor)) {\n cursor = cursor[Number(segment)];\n } else if (isRecord(cursor)) {\n cursor = cursor[segment];\n } else {\n cursor = undefined;\n break;\n }\n }\n if (isRecord(cursor)) {\n applyExtras(cursor, residue.extra);\n }\n }\n\n return cloned;\n}\n\n/**\n * Deep-remove the `__kind` discriminator.\n *\n * 🚨 NOT A TRANSFORM FOR PLATFORM DATA. `__kind` is part of the data\n * (KINDS_EVERYWHERE_PLAN §4.2) and stripping it from anything stored, passed or\n * rendered was annihilated on 2026-08-23. This helper survives for exactly two\n * shapes of caller, both of which are guarded:\n * - a SYMMETRIC COMPARISON that reduces both sides and returns a boolean;\n * - legacy validation TOLERANCE against a pre-2026-08-23 schema version.\n * Guards: aidream `scripts/check_kind_marker_law.py`,\n * matrx-frontend `pnpm check:kind-marker-law`.\n */\nexport function stripKindDeep(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(stripKindDeep);\n }\n if (isRecord(value)) {\n const out: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n if (key === KIND_KEY) continue;\n out[key] = stripKindDeep(child);\n }\n return out;\n }\n return value;\n}\n","/**\n * Pure envelope helpers the chat package needs (chat-package-move P14): the Phase-2 shadow\n * parity check (\"does the envelope, reconstructed, deep-equal what JSON.parse sees?\").\n *\n * A COMPARISON, NEVER A TRANSFORM — the one lawful shape of `stripKindDeep` outside the two doors.\n * Markers are removed from BOTH sides, symmetrically, inside this predicate, so a marker the parser\n * INJECTED (speculation / expectedRootKind) is not reported as a mismatch against a source that did\n * not carry one. Only a boolean leaves; neither input is mutated and neither reduced value is ever\n * returned, stored, or rendered (KINDS_EVERYWHERE_PLAN §4.2).\n */\n\nimport type { CanonicalBlockIR } from \"../core/ir-types\";\nimport { reconstructRegionValue, stripKindDeep } from \"../core/envelope-value\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction deepEqual(left: unknown, right: unknown): boolean {\n if (Object.is(left, right)) return true;\n\n if (Array.isArray(left) && Array.isArray(right)) {\n if (left.length !== right.length) return false;\n for (let i = 0; i < left.length; i++) {\n if (!deepEqual(left[i], right[i])) return false;\n }\n return true;\n }\n\n if (isRecord(left) && isRecord(right)) {\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n if (leftKeys.length !== rightKeys.length) return false;\n for (const key of leftKeys) {\n if (!(key in right)) return false;\n if (!deepEqual(left[key], right[key])) return false;\n }\n return true;\n }\n\n return false;\n}\n\nexport function envelopeMatchesParsedSource(envelope: CanonicalBlockIR, parsedSource: unknown): boolean {\n if (!isRecord(parsedSource)) return false;\n return deepEqual(stripKindDeep(reconstructRegionValue(envelope)), stripKindDeep(parsedSource));\n}\n","/** The decision-answers block's stable wire ids (render-block type and kind slug). */\nexport const DECISION_ANSWERS_KIND = \"decision_answers\";\nexport const DECISION_ANSWERS_BLOCK_TYPE = \"decision_answers\";\n"]}