agent-inspect 0.1.2 → 1.0.1

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":["../src/types.ts","../src/utils.ts","../src/context.ts","../src/storage.ts","../src/terminal.ts","../src/inspect-run.ts","../src/step.ts","../src/observe.ts"],"names":["isRecord","path","endTime","durationMs","printPath","safeInstrumentation"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Discriminator for what kind of work a {@link Step} represents.\n * `\"decision\"` captures agent branching/choices; other values cover runs, LLM calls, tools, and user-defined steps.\n */\nexport type StepType =\n | \"run\"\n | \"llm\"\n | \"tool\"\n | \"decision\"\n | \"logic\"\n | \"state\"\n | \"custom\";\n\n/** Lifecycle state of a single {@link Step}. */\nexport type StepStatus = \"running\" | \"success\" | \"error\";\n\n/** Lifecycle state of an entire {@link Run}. */\nexport type RunStatus = \"running\" | \"success\" | \"error\";\n\n/** Structured error attached to a run or step when status is `\"error\"`. */\nexport interface ErrorInfo {\n message: string;\n stack?: string;\n}\n\n/**\n * Optional token counts for a step (e.g. LLM usage).\n * Reserved for future roadmap; MVP does not compute or persist token usage.\n */\nexport interface TokenMetadata {\n input?: number;\n output?: number;\n}\n\n/** Arbitrary structured fields for a step; safe extensions use string keys. */\nexport interface StepMetadata {\n model?: string;\n toolName?: string;\n tokens?: TokenMetadata;\n retryCount?: number;\n [key: string]: unknown;\n}\n\n/**\n * One traced agent run (root of an execution tree).\n * MVP intentionally omits `input` / `output` on the run to limit PII, secrets, and serialization risk.\n */\nexport interface Run {\n id: string;\n name: string;\n status: RunStatus;\n startTime: number;\n endTime?: number;\n durationMs?: number;\n error?: ErrorInfo;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * One node in the execution tree under a {@link Run}.\n * MVP intentionally omits `input` / `output`; capture/redaction may come in a later version.\n */\nexport interface Step {\n id: string;\n runId: string;\n parentId?: string;\n name: string;\n type: StepType;\n status: StepStatus;\n startTime: number;\n endTime?: number;\n durationMs?: number;\n error?: ErrorInfo;\n metadata?: StepMetadata;\n}\n\n/** Version of the JSONL trace line schema consumed by AgentInspect tooling. */\nexport type TraceSchemaVersion = \"0.1\";\n\n/** Fields shared by every persisted trace event line. */\nexport interface TraceEventBase {\n schemaVersion: TraceSchemaVersion;\n event: string;\n timestamp: number;\n}\n\n/** Emitted when a run begins. */\nexport interface RunStartedEvent extends TraceEventBase {\n event: \"run_started\";\n runId: string;\n name: string;\n startTime: number;\n metadata?: Record<string, unknown>;\n}\n\n/** Emitted when a run finishes successfully or with an error. */\nexport interface RunCompletedEvent extends TraceEventBase {\n event: \"run_completed\";\n runId: string;\n status: \"success\" | \"error\";\n endTime: number;\n durationMs: number;\n error?: ErrorInfo;\n}\n\n/** Emitted when a step begins (including nested steps under `parentId`). */\nexport interface StepStartedEvent extends TraceEventBase {\n event: \"step_started\";\n runId: string;\n stepId: string;\n parentId?: string;\n name: string;\n type: StepType;\n startTime: number;\n metadata?: StepMetadata;\n}\n\n/**\n * Emitted when a step finishes (success or failure).\n * Failures use `status: \"error\"` and optional {@link ErrorInfo}; there is no separate `step_failed` event in MVP.\n */\nexport interface StepCompletedEvent extends TraceEventBase {\n event: \"step_completed\";\n runId: string;\n stepId: string;\n status: \"success\" | \"error\";\n endTime: number;\n durationMs: number;\n error?: ErrorInfo;\n}\n\n/** Discriminated union of all MVP trace events written as JSONL lines. */\nexport type TraceEvent =\n | RunStartedEvent\n | RunCompletedEvent\n | StepStartedEvent\n | StepCompletedEvent;\n\n/** Options for `inspectRun()` (implemented in a later step). */\nexport interface InspectRunOptions {\n traceDir?: string;\n silent?: boolean;\n metadata?: Record<string, unknown>;\n}\n\n/** Options passed when opening a logical step (implemented in a later step). */\nexport interface StepOptions {\n type?: StepType;\n metadata?: StepMetadata;\n}\n\n/** Options for `observe()` — same surface as {@link InspectRunOptions} in MVP. */\nexport type ObserveOptions = InspectRunOptions;\n\n/**\n * Resolved settings for the active run while tracing is enabled.\n * Populated by runtime code in a later step; defined here for `context.ts`.\n */\nexport interface ExecutionContext {\n runId: string;\n runName: string;\n traceDir: string;\n silent: boolean;\n metadata?: Record<string, unknown>;\n}\n\n/** Stack position of the step currently executing (used by future context tracking). */\nexport interface ActiveStepContext {\n stepId: string;\n parentId?: string;\n depth: number;\n}\n\nconst STEP_TYPES: readonly StepType[] = [\n \"run\",\n \"llm\",\n \"tool\",\n \"decision\",\n \"logic\",\n \"state\",\n \"custom\",\n] as const;\n\nconst STEP_STATUSES: readonly StepStatus[] = [\n \"running\",\n \"success\",\n \"error\",\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/** Returns true if `value` is one of the MVP {@link StepType} literals. */\nexport function isStepType(value: unknown): value is StepType {\n return (\n typeof value === \"string\" &&\n (STEP_TYPES as readonly string[]).includes(value)\n );\n}\n\n/** Returns true if `value` is one of the MVP {@link StepStatus} literals. */\nexport function isStepStatus(value: unknown): value is StepStatus {\n return (\n typeof value === \"string\" &&\n (STEP_STATUSES as readonly string[]).includes(value)\n );\n}\n\n/**\n * Narrowing guard for a {@link TraceEvent} object with required MVP fields.\n * Does not deeply validate optional `metadata` shapes.\n */\nexport function isTraceEvent(value: unknown): value is TraceEvent {\n if (!isRecord(value)) return false;\n if (value.schemaVersion !== \"0.1\") return false;\n if (typeof value.timestamp !== \"number\") return false;\n if (typeof value.event !== \"string\") return false;\n\n switch (value.event) {\n case \"run_started\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.name === \"string\" &&\n typeof value.startTime === \"number\"\n );\n }\n case \"run_completed\": {\n return (\n typeof value.runId === \"string\" &&\n (value.status === \"success\" || value.status === \"error\") &&\n typeof value.endTime === \"number\" &&\n typeof value.durationMs === \"number\"\n );\n }\n case \"step_started\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.stepId === \"string\" &&\n typeof value.name === \"string\" &&\n isStepType(value.type) &&\n typeof value.startTime === \"number\"\n );\n }\n case \"step_completed\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.stepId === \"string\" &&\n (value.status === \"success\" || value.status === \"error\") &&\n typeof value.endTime === \"number\" &&\n typeof value.durationMs === \"number\"\n );\n }\n default:\n return false;\n }\n}\n","import { mkdir } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { nanoid } from \"nanoid\";\n\nimport type { ErrorInfo } from \"./types.js\";\n\n/** Default folder under the user home for AgentInspect data. */\nexport const DEFAULT_TRACE_DIR_NAME = \".agent-inspect\";\n\n/** Subfolder where JSONL run traces are stored. */\nexport const RUNS_DIR_NAME = \"runs\";\n\n/** Writable trace root when the default home path cannot be used. */\nexport const FALLBACK_TRACE_DIR = path.join(\n os.tmpdir(),\n \"agent-inspect\",\n RUNS_DIR_NAME,\n);\n\n/** Maximum display length for run/step names before truncation. */\nexport const MAX_NAME_LENGTH = 100;\n\n/** Returns `run_` + a 10-character nanoid segment. */\nexport function createRunId(): string {\n return `run_${nanoid(10)}`;\n}\n\n/** Returns `step_` + a 10-character nanoid segment. */\nexport function createStepId(): string {\n return `step_${nanoid(10)}`;\n}\n\n/**\n * Formats a duration for CLI display.\n * Under 1000 ms uses whole milliseconds; from 1000 ms uses seconds with one decimal.\n */\nexport function formatDuration(ms: number): string {\n if (!Number.isFinite(ms) || ms < 0) {\n return \"0ms\";\n }\n if (ms < 1000) {\n return `${Math.floor(ms)}ms`;\n }\n const seconds = ms / 1000;\n return `${(Math.round(seconds * 10) / 10).toFixed(1)}s`;\n}\n\n/**\n * Formats a Unix timestamp (ms) as local `YYYY-MM-DD HH:mm:ss`.\n * Invalid values yield `\"Invalid date\"` (no throw).\n */\nexport function formatTimestamp(timestamp: number): string {\n if (!Number.isFinite(timestamp)) {\n return \"Invalid date\";\n }\n const d = new Date(timestamp);\n if (Number.isNaN(d.getTime())) {\n return \"Invalid date\";\n }\n const y = d.getFullYear();\n const mo = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n const h = String(d.getHours()).padStart(2, \"0\");\n const min = String(d.getMinutes()).padStart(2, \"0\");\n const s = String(d.getSeconds()).padStart(2, \"0\");\n return `${y}-${mo}-${day} ${h}:${min}:${s}`;\n}\n\n/**\n * Default directory for trace files: `~/DEFAULT_TRACE_DIR_NAME/RUNS_DIR_NAME`.\n * Falls back to {@link FALLBACK_TRACE_DIR} when home cannot be resolved.\n */\nexport function getDefaultTraceDir(): string {\n try {\n const home = os.homedir();\n if (typeof home !== \"string\" || home.trim() === \"\") {\n return FALLBACK_TRACE_DIR;\n }\n return path.join(home, DEFAULT_TRACE_DIR_NAME, RUNS_DIR_NAME);\n } catch {\n return FALLBACK_TRACE_DIR;\n }\n}\n\n/**\n * Full path to the JSONL trace file for a run.\n * `runId` is passed through `path.basename` to avoid traversal; empty ids become `run_unknown`.\n */\nexport function getTraceFilePath(runId: string, traceDir?: string): string {\n const baseDir = traceDir ?? getDefaultTraceDir();\n let safeId =\n typeof runId === \"string\" && runId.trim() !== \"\" ? runId.trim() : \"run_unknown\";\n safeId = path.basename(safeId);\n if (safeId === \"\" || safeId === \".\" || safeId === \"..\") {\n safeId = \"run_unknown\";\n }\n return path.join(baseDir, `${safeId}.jsonl`);\n}\n\n/**\n * Ensures a trace directory exists (recursive). Tries {@link FALLBACK_TRACE_DIR} on failure.\n * Returns the directory path that callers should prefer: primary, fallback, or original if both mkdir attempts fail.\n * Emits concise `[AgentInspect]` warnings on failure; never throws.\n */\nexport async function ensureTraceDir(traceDir: string): Promise<string> {\n const primary = path.resolve(traceDir);\n try {\n await mkdir(primary, { recursive: true });\n return primary;\n } catch {\n warn(`Failed to create trace directory: ${primary}`);\n const fallback = path.resolve(FALLBACK_TRACE_DIR);\n try {\n await mkdir(fallback, { recursive: true });\n return fallback;\n } catch {\n warn(`Failed to create fallback trace directory: ${fallback}`);\n return primary;\n }\n }\n}\n\n/**\n * Normalizes any thrown/caught value into {@link ErrorInfo}.\n * Never throws (circular structures and non-JSON values fall back to a generic message).\n */\nexport function formatError(error: unknown): ErrorInfo {\n if (error instanceof Error) {\n const out: ErrorInfo = { message: error.message };\n if (typeof error.stack === \"string\" && error.stack.length > 0) {\n out.stack = error.stack;\n }\n return out;\n }\n if (typeof error === \"string\") {\n return { message: error };\n }\n if (error === null) {\n return { message: \"Unknown error: null\" };\n }\n if (error === undefined) {\n return { message: \"Unknown error: undefined\" };\n }\n if (\n typeof error === \"number\" ||\n typeof error === \"boolean\" ||\n typeof error === \"bigint\"\n ) {\n return { message: String(error) };\n }\n if (typeof error === \"object\") {\n try {\n return { message: JSON.stringify(error) };\n } catch {\n return { message: \"Unknown error\" };\n }\n }\n return { message: \"Unknown error\" };\n}\n\n/**\n * Truncates a display name to `maxLength`, appending `\"...\"` when shortened.\n * Empty or non-string input becomes `\"unnamed\"`.\n */\nexport function truncateName(name: string, maxLength = MAX_NAME_LENGTH): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed\";\n }\n const trimmed = name.trim();\n if (trimmed.length <= maxLength) {\n return trimmed;\n }\n const ellipsis = \"...\";\n const head = Math.max(0, maxLength - ellipsis.length);\n return `${trimmed.slice(0, head)}${ellipsis}`;\n}\n\n/**\n * Instrumentation-only warning to stderr. Not a general-purpose logger.\n * Optional `error` is summarized via {@link formatError} (message only).\n */\nexport function warn(message: string, error?: unknown): void {\n const base = `[AgentInspect] ${message}`;\n if (error === undefined) {\n console.warn(base);\n return;\n }\n console.warn(`${base}: ${formatError(error).message}`);\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport type { ExecutionContext } from \"./types.js\";\n\ntype RuntimeExecutionContext = ExecutionContext & {\n currentStepId?: string;\n currentDepth: number;\n};\n\nconst storage = new AsyncLocalStorage<RuntimeExecutionContext>();\n\nfunction toPublicContext(ctx: RuntimeExecutionContext): ExecutionContext {\n return {\n runId: ctx.runId,\n runName: ctx.runName,\n traceDir: ctx.traceDir,\n silent: ctx.silent,\n metadata: ctx.metadata,\n };\n}\n\nfunction invoke<T>(fn: () => T | Promise<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n try {\n Promise.resolve(fn()).then(resolve, reject);\n } catch (e) {\n reject(e);\n }\n });\n}\n\n/** Returns the active run context, without internal step fields. */\nexport function getCurrentContext(): ExecutionContext | undefined {\n try {\n const s = storage.getStore();\n if (!s) return undefined;\n return toPublicContext(s);\n } catch {\n return undefined;\n }\n}\n\n/** Active `runId` when inside `runWithContext`, else `undefined`. */\nexport function getCurrentRunId(): string | undefined {\n try {\n return storage.getStore()?.runId;\n } catch {\n return undefined;\n }\n}\n\n/** Active `runName` when inside `runWithContext`, else `undefined`. */\nexport function getCurrentRunName(): string | undefined {\n try {\n return storage.getStore()?.runName;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Active step id in this async scope (parent for nested `step()` calls).\n * `undefined` at run root or outside any run.\n */\nexport function getCurrentStepId(): string | undefined {\n try {\n return storage.getStore()?.currentStepId;\n } catch {\n return undefined;\n }\n}\n\n/** Alias of {@link getCurrentStepId} for readability in step instrumentation. */\nexport function getParentStepId(): string | undefined {\n return getCurrentStepId();\n}\n\n/**\n * Nesting depth: `0` at run root, increments by one per nested `runWithStepContext`.\n * Returns `0` outside any run.\n */\nexport function getCurrentDepth(): number {\n try {\n const d = storage.getStore()?.currentDepth;\n return typeof d === \"number\" && Number.isFinite(d) ? d : 0;\n } catch {\n return 0;\n }\n}\n\nexport function hasActiveContext(): boolean {\n try {\n return storage.getStore() !== undefined;\n } catch {\n return false;\n }\n}\n\nexport function getTraceDirFromContext(): string | undefined {\n try {\n return storage.getStore()?.traceDir;\n } catch {\n return undefined;\n }\n}\n\nexport function isSilentContext(): boolean {\n try {\n const s = storage.getStore();\n return s ? s.silent : false;\n } catch {\n return false;\n }\n}\n\n/**\n * Runs `fn` with a fresh AgentInspect run context (depth 0, no active step).\n * Propagates sync/async results and rejections; does not swallow user errors.\n */\nexport function runWithContext<T>(\n context: ExecutionContext,\n fn: () => Promise<T> | T,\n): Promise<T> {\n const runtime: RuntimeExecutionContext = {\n runId: context.runId,\n runName: context.runName,\n traceDir: context.traceDir,\n silent: context.silent,\n metadata: context.metadata,\n currentDepth: 0,\n };\n\n return new Promise((resolve, reject) => {\n storage.run(runtime, () => {\n try {\n Promise.resolve(fn()).then(resolve, reject);\n } catch (e) {\n reject(e);\n }\n });\n });\n}\n\n/**\n * Runs `fn` with `stepId` as the active step (incremented depth).\n * If no run is active, runs `fn` without altering async context.\n */\nexport function runWithStepContext<T>(\n stepId: string,\n fn: () => Promise<T> | T,\n): Promise<T> {\n let parent: RuntimeExecutionContext | undefined;\n try {\n parent = storage.getStore();\n } catch {\n parent = undefined;\n }\n\n if (!parent) {\n return invoke(fn);\n }\n\n const derived: RuntimeExecutionContext = {\n runId: parent.runId,\n runName: parent.runName,\n traceDir: parent.traceDir,\n silent: parent.silent,\n metadata: parent.metadata,\n currentStepId: stepId,\n currentDepth: parent.currentDepth + 1,\n };\n\n return new Promise((resolve, reject) => {\n storage.run(derived, () => {\n try {\n Promise.resolve(fn()).then(resolve, reject);\n } catch (e) {\n reject(e);\n }\n });\n });\n}\n","import { appendFile, readdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type { TraceEvent } from \"./types.js\";\nimport { isStepType } from \"./types.js\";\nimport {\n ensureTraceDir,\n FALLBACK_TRACE_DIR,\n getTraceFilePath,\n warn,\n} from \"./utils.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction finiteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction optionalErrorInfo(value: unknown): boolean {\n if (value === undefined) return true;\n if (!isRecord(value)) return false;\n if (typeof value.message !== \"string\") return false;\n if (\"stack\" in value && value.stack !== undefined) {\n if (typeof value.stack !== \"string\") return false;\n }\n return true;\n}\n\n/**\n * Strict MVP validation before writing JSONL. Rejects empty ids, non-finite times, and malformed payloads.\n */\nexport function validateEvent(event: unknown): event is TraceEvent {\n if (!isRecord(event)) return false;\n if (event.schemaVersion !== \"0.1\") return false;\n if (!finiteNumber(event.timestamp)) return false;\n if (typeof event.event !== \"string\") return false;\n\n switch (event.event) {\n case \"run_started\": {\n if (\n !nonEmptyString(event.runId) ||\n !nonEmptyString(event.name) ||\n !finiteNumber(event.startTime)\n ) {\n return false;\n }\n if (event.metadata !== undefined && !isRecord(event.metadata)) {\n return false;\n }\n return true;\n }\n case \"run_completed\": {\n return (\n nonEmptyString(event.runId) &&\n (event.status === \"success\" || event.status === \"error\") &&\n finiteNumber(event.endTime) &&\n finiteNumber(event.durationMs) &&\n optionalErrorInfo(event.error)\n );\n }\n case \"step_started\": {\n if (\n !nonEmptyString(event.runId) ||\n !nonEmptyString(event.stepId) ||\n !nonEmptyString(event.name) ||\n !isStepType(event.type) ||\n !finiteNumber(event.startTime)\n ) {\n return false;\n }\n if (event.parentId !== undefined && typeof event.parentId !== \"string\") {\n return false;\n }\n if (event.metadata !== undefined && !isRecord(event.metadata)) {\n return false;\n }\n return true;\n }\n case \"step_completed\": {\n return (\n nonEmptyString(event.runId) &&\n nonEmptyString(event.stepId) &&\n (event.status === \"success\" || event.status === \"error\") &&\n finiteNumber(event.endTime) &&\n finiteNumber(event.durationMs) &&\n optionalErrorInfo(event.error)\n );\n }\n default:\n return false;\n }\n}\n\n/** Serializes a trace line as compact JSON without a trailing newline. */\nexport function serializeEvent(event: TraceEvent): string {\n try {\n return JSON.stringify(event);\n } catch {\n return \"\";\n }\n}\n\n/**\n * Creates (or truncates) an empty JSONL file for a run. Uses {@link ensureTraceDir} then {@link getTraceFilePath}.\n * On failure, retries once under {@link FALLBACK_TRACE_DIR}.\n */\nexport async function initializeTraceFile(\n runId: string,\n traceDir: string,\n): Promise<string | undefined> {\n try {\n const usable = await ensureTraceDir(traceDir);\n const filePath = getTraceFilePath(runId, usable);\n await writeFile(filePath, \"\", \"utf-8\");\n return filePath;\n } catch (e) {\n warn(\"Failed to initialize trace file\", e);\n }\n\n try {\n const usable = await ensureTraceDir(FALLBACK_TRACE_DIR);\n const filePath = getTraceFilePath(runId, usable);\n await writeFile(filePath, \"\", \"utf-8\");\n return filePath;\n } catch (e) {\n warn(\"Failed to initialize trace file on fallback directory\", e);\n return undefined;\n }\n}\n\n/**\n * Appends one validated JSONL line for `event.runId`. Falls back to {@link FALLBACK_TRACE_DIR} on append failure.\n */\nexport async function writeTraceEvent(\n event: TraceEvent,\n traceDir: string,\n): Promise<void> {\n if (!validateEvent(event)) {\n warn(\"Skipped invalid trace event (validation failed)\");\n return;\n }\n\n const line = serializeEvent(event);\n if (line === \"\") {\n warn(\"Skipped trace event (serialization failed)\");\n return;\n }\n\n const payload = `${line}\\n`;\n\n const tryAppend = async (dir: string): Promise<boolean> => {\n try {\n const usable = await ensureTraceDir(dir);\n const filePath = getTraceFilePath(event.runId, usable);\n await appendFile(filePath, payload, \"utf-8\");\n return true;\n } catch {\n return false;\n }\n };\n\n if (await tryAppend(traceDir)) {\n return;\n }\n\n warn(`Failed to append trace event for run ${event.runId}`);\n\n if (await tryAppend(FALLBACK_TRACE_DIR)) {\n return;\n }\n\n warn(\"Failed to append trace event to fallback directory\");\n}\n\n/**\n * Reads raw JSONL file contents for a run, or `undefined` if missing or unreadable.\n */\nexport async function readTraceFile(\n runId: string,\n traceDir: string,\n): Promise<string | undefined> {\n try {\n const filePath = getTraceFilePath(runId, traceDir);\n return await readFile(filePath, \"utf-8\");\n } catch (e) {\n if (e && typeof e === \"object\" && \"code\" in e && e.code === \"ENOENT\") {\n return undefined;\n }\n warn(\"Unexpected error reading trace file\", e);\n return undefined;\n }\n}\n\n/** Parses JSONL into validated {@link TraceEvent} rows; invalid lines are skipped with a warning. */\nexport async function readTraceEvents(\n runId: string,\n traceDir: string,\n): Promise<TraceEvent[]> {\n const out: TraceEvent[] = [];\n try {\n const raw = await readTraceFile(runId, traceDir);\n if (raw === undefined) {\n return out;\n }\n const lines = raw.split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed === \"\") continue;\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed) as unknown;\n } catch {\n warn(\"Skipped invalid JSON line in trace file\");\n continue;\n }\n if (validateEvent(parsed)) {\n out.push(parsed);\n } else {\n warn(\"Skipped invalid trace event line in trace file\");\n }\n }\n } catch (e) {\n warn(\"Failed to read trace events\", e);\n }\n return out;\n}\n\n/**\n * Lists `.jsonl` file names in `traceDir`, newest by mtime first (name sort as tie-breaker).\n */\nexport async function listTraceFiles(traceDir: string): Promise<string[]> {\n try {\n const usable = path.resolve(traceDir);\n const names = await readdir(usable);\n const jsonl = names.filter((n) => n.endsWith(\".jsonl\"));\n const withStat = await Promise.all(\n jsonl.map(async (name) => {\n try {\n const st = await stat(path.join(usable, name));\n return { name, mtime: st.mtimeMs };\n } catch {\n return { name, mtime: 0 };\n }\n }),\n );\n withStat.sort((a, b) => {\n if (b.mtime !== a.mtime) return b.mtime - a.mtime;\n return a.name.localeCompare(b.name);\n });\n return withStat.map((x) => x.name);\n } catch {\n return [];\n }\n}\n\n/** Maps a `.jsonl` file name to its run id (basename only; no traversal). */\nexport function getRunIdFromTraceFileName(fileName: string): string | undefined {\n try {\n const base = path.basename(fileName);\n if (!base.endsWith(\".jsonl\")) return undefined;\n const id = base.slice(0, -\".jsonl\".length);\n return id === \"\" ? undefined : id;\n } catch {\n return undefined;\n }\n}\n","import chalk from \"chalk\";\n\nimport { isSilentContext } from \"./context.js\";\nimport type { ErrorInfo, RunStatus, StepStatus } from \"./types.js\";\nimport { formatDuration, truncateName } from \"./utils.js\";\n\n/** Two spaces per nesting level in terminal output. */\nexport const TERMINAL_INDENT = \" \";\n\n/** Max display length for names in terminal output. */\nexport const MAX_TERMINAL_NAME_LENGTH = 80;\n\n/** Max nesting depth used for indentation (prevents huge indents). */\nexport const MAX_TERMINAL_DEPTH = 10;\n\nfunction normalizeDepth(depth: number): number {\n if (!Number.isFinite(depth) || depth < 0) {\n return 0;\n }\n return Math.min(Math.floor(depth), MAX_TERMINAL_DEPTH);\n}\n\nfunction safePrint(line = \"\"): void {\n try {\n console.log(line);\n } catch {\n /* never break callers */\n }\n}\n\n/** Indentation string for a nesting depth (capped, never negative). */\nexport function getIndent(depth: number): string {\n return TERMINAL_INDENT.repeat(normalizeDepth(depth));\n}\n\n/** Truncates a display name for terminal use; invalid input becomes `\"unnamed\"`. */\nexport function formatTerminalName(name: string): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed\";\n }\n return truncateName(name, MAX_TERMINAL_NAME_LENGTH);\n}\n\nfunction getStatusIcon(status: StepStatus | RunStatus): string {\n if (status === \"success\") return chalk.green(\"✔\");\n if (status === \"error\") return chalk.red(\"✖\");\n return chalk.yellow(\"⏳\");\n}\n\n/** Renders a single step line (colored); does not consult silent mode. */\nexport function renderStepLine(\n name: string,\n durationMs: number | undefined,\n status: StepStatus,\n depth?: number,\n): string {\n try {\n const nm = formatTerminalName(name);\n const ind = getIndent(depth ?? 0);\n if (status === \"running\" && durationMs === undefined) {\n return `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n }\n const hasDur =\n durationMs !== undefined && Number.isFinite(durationMs as number);\n const dur = hasDur ? formatDuration(durationMs as number) : undefined;\n if (status === \"running\") {\n return dur !== undefined\n ? `${ind}${chalk.yellow(\"⏳\")} ${nm} (${dur})`\n : `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n }\n if (!hasDur || dur === undefined) {\n return `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n }\n if (status === \"success\") {\n return `${ind}${getStatusIcon(\"success\")} ${nm} (${dur})`;\n }\n return `${ind}${getStatusIcon(\"error\")} ${nm} (${dur})`;\n } catch {\n return \"\";\n }\n}\n\n/** Renders an error summary line (no stack in MVP). */\nexport function renderErrorLine(error: ErrorInfo, depth?: number): string {\n try {\n const msg =\n typeof error.message === \"string\" ? error.message : \"\";\n const ind = getIndent((depth ?? 0) + 1);\n return `${ind}Error: ${msg}`;\n } catch {\n return \"\";\n }\n}\n\n/** Plain-text run summary lines (no chalk) for stable testing and CLI reuse. */\nexport function renderRunSummary(\n durationMs: number,\n status: RunStatus,\n traceFilePath?: string,\n): string[] {\n try {\n const dur = Number.isFinite(durationMs)\n ? formatDuration(durationMs)\n : formatDuration(0);\n const head =\n status === \"error\" ? `Failed in ${dur}` : `Completed in ${dur}`;\n const lines = [head];\n if (traceFilePath !== undefined && traceFilePath.trim() !== \"\") {\n lines.push(`Trace: ${traceFilePath}`);\n }\n return lines;\n } catch {\n return [];\n }\n}\n\n/** Prints run header with icon and dim run id. */\nexport function printRunStart(runId: string, name: string): void {\n if (isSilentContext()) return;\n try {\n safePrint(\"\");\n const header = `${chalk.cyan.bold(\"🔍 AgentInspect:\")} ${formatTerminalName(name)} ${chalk.dim(`(${runId})`)}`;\n safePrint(header);\n } catch {\n /* noop */\n }\n}\n\n/** Prints a running step line. */\nexport function printStepStart(name: string, depth = 0): void {\n if (isSilentContext()) return;\n try {\n safePrint(renderStepLine(name, undefined, \"running\", depth));\n } catch {\n /* noop */\n }\n}\n\n/** Prints a completed step line with duration and status icon. */\nexport function printStepComplete(\n name: string,\n durationMs: number,\n status: StepStatus,\n depth = 0,\n): void {\n if (isSilentContext()) return;\n try {\n safePrint(renderStepLine(name, durationMs, status, depth));\n } catch {\n /* noop */\n }\n}\n\n/** Prints a structured error line (message only, no stack). */\nexport function printError(error: ErrorInfo, depth = 0): void {\n if (isSilentContext()) return;\n try {\n safePrint(renderErrorLine(error, depth));\n } catch {\n /* noop */\n }\n}\n\n/** Prints run completion summary and optional trace path. */\nexport function printRunComplete(\n _name: string,\n _runId: string,\n durationMs: number,\n status: RunStatus,\n traceFilePath?: string,\n): void {\n if (isSilentContext()) return;\n try {\n const lines = renderRunSummary(durationMs, status, traceFilePath);\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n if (i === 0) {\n const color =\n status === \"error\"\n ? chalk.red\n : status === \"running\"\n ? chalk.yellow\n : chalk.green;\n safePrint(color(line));\n } else {\n safePrint(chalk.dim(line));\n }\n }\n } catch {\n /* noop */\n }\n}\n\n/** Prints which step failed. */\nexport function printFailedAt(stepName: string): void {\n if (isSilentContext()) return;\n try {\n safePrint(`Failed at: ${formatTerminalName(stepName)}`);\n } catch {\n /* noop */\n }\n}\n","import { runWithContext } from \"./context.js\";\nimport type { ExecutionContext, InspectRunOptions, TraceEvent } from \"./types.js\";\nimport { initializeTraceFile, writeTraceEvent } from \"./storage.js\";\nimport { printRunComplete, printRunStart } from \"./terminal.js\";\nimport {\n createRunId,\n formatError,\n getDefaultTraceDir,\n getTraceFilePath,\n truncateName,\n warn,\n} from \"./utils.js\";\n\nfunction normalizeRunName(name: unknown): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed-run\";\n }\n return truncateName(name.trim(), 100);\n}\n\nasync function safeInstrumentation(\n label: string,\n op: () => void | Promise<void>,\n): Promise<void> {\n try {\n await Promise.resolve(op());\n } catch (e) {\n warn(`inspectRun: ${label}`, e);\n }\n}\n\n/**\n * Runs `fn` inside an AgentInspect trace: JSONL `run_started` / `run_completed`, optional terminal output,\n * and {@link ExecutionContext} for nested APIs. Instrumentation failures are swallowed; user errors are re-thrown.\n */\nexport async function inspectRun<T>(\n name: string,\n fn: () => Promise<T> | T,\n options?: InspectRunOptions,\n): Promise<T> {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"inspectRun requires `fn` to be a function\");\n }\n\n const runName = normalizeRunName(name);\n const runId = createRunId();\n const traceDir =\n typeof options?.traceDir === \"string\" && options.traceDir.trim() !== \"\"\n ? options.traceDir.trim()\n : getDefaultTraceDir();\n\n const context: ExecutionContext = {\n runId,\n runName,\n traceDir,\n silent: options?.silent ?? false,\n metadata: options?.metadata,\n };\n\n return runWithContext(context, async () => {\n const startTime = Date.now();\n let traceFilePath: string | undefined;\n\n await safeInstrumentation(\"initializeTraceFile\", async () => {\n traceFilePath = await initializeTraceFile(runId, traceDir);\n });\n\n await safeInstrumentation(\"writeTraceEvent(run_started)\", async () => {\n const started: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"run_started\",\n timestamp: startTime,\n runId,\n name: runName,\n startTime,\n ...(options?.metadata !== undefined\n ? { metadata: options.metadata }\n : {}),\n };\n await writeTraceEvent(started, traceDir);\n });\n\n await safeInstrumentation(\"printRunStart\", () => {\n printRunStart(runId, runName);\n });\n\n let result: T;\n try {\n result = await Promise.resolve(fn());\n } catch (userError) {\n const endTime = Date.now();\n const durationMs = endTime - startTime;\n const formatted = formatError(userError);\n const printPath = traceFilePath ?? getTraceFilePath(runId, traceDir);\n\n await safeInstrumentation(\"writeTraceEvent(run_completed error)\", async () => {\n const completed: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"run_completed\",\n timestamp: endTime,\n runId,\n status: \"error\",\n endTime,\n durationMs,\n error: formatted,\n };\n await writeTraceEvent(completed, traceDir);\n });\n\n await safeInstrumentation(\"printRunComplete(error)\", () => {\n printRunComplete(runName, runId, durationMs, \"error\", printPath);\n });\n\n throw userError;\n }\n\n const endTime = Date.now();\n const durationMs = endTime - startTime;\n const printPath = traceFilePath ?? getTraceFilePath(runId, traceDir);\n\n await safeInstrumentation(\"writeTraceEvent(run_completed success)\", async () => {\n const completed: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"run_completed\",\n timestamp: endTime,\n runId,\n status: \"success\",\n endTime,\n durationMs,\n };\n await writeTraceEvent(completed, traceDir);\n });\n\n await safeInstrumentation(\"printRunComplete(success)\", () => {\n printRunComplete(runName, runId, durationMs, \"success\", printPath);\n });\n\n return result;\n });\n}\n","import { getCurrentContext, getCurrentDepth, getParentStepId, runWithStepContext } from \"./context.js\";\nimport type { StepOptions, StepType, TraceEvent } from \"./types.js\";\nimport { writeTraceEvent } from \"./storage.js\";\nimport { printFailedAt, printError, printStepComplete, printStepStart } from \"./terminal.js\";\nimport { createStepId, formatError, truncateName, warn } from \"./utils.js\";\n\nfunction normalizeStepName(name: unknown): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed-step\";\n }\n return truncateName(name.trim(), 100);\n}\n\nasync function safeInstrumentation(\n label: string,\n op: () => void | Promise<void>,\n): Promise<void> {\n try {\n await Promise.resolve(op());\n } catch (e) {\n warn(`step: ${label}`, e);\n }\n}\n\nasync function stepImpl<T>(\n name: string,\n fn: () => Promise<T> | T,\n options?: StepOptions,\n): Promise<T> {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"step requires `fn` to be a function\");\n }\n\n const stepName = normalizeStepName(name);\n const context = getCurrentContext();\n\n if (!context) {\n warn(\"step() called outside inspectRun(); executing without instrumentation\");\n return Promise.resolve(fn());\n }\n\n const stepId = createStepId();\n const renderDepth = getCurrentDepth();\n const parentId = getParentStepId();\n const stepType: StepType = options?.type ?? \"logic\";\n const metadata = options?.metadata;\n const startTime = Date.now();\n\n await safeInstrumentation(\"writeTraceEvent(step_started)\", async () => {\n const started: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"step_started\",\n timestamp: startTime,\n runId: context.runId,\n stepId,\n ...(typeof parentId === \"string\" && parentId.trim() !== \"\"\n ? { parentId }\n : {}),\n name: stepName,\n type: stepType,\n startTime,\n ...(metadata !== undefined ? { metadata } : {}),\n };\n await writeTraceEvent(started, context.traceDir);\n });\n\n await safeInstrumentation(\"printStepStart\", () => {\n printStepStart(stepName, renderDepth);\n });\n\n let result: T;\n try {\n result = await runWithStepContext(stepId, async () => {\n return await Promise.resolve(fn());\n });\n } catch (userError) {\n const endTime = Date.now();\n const durationMs = endTime - startTime;\n const formatted = formatError(userError);\n\n await safeInstrumentation(\"writeTraceEvent(step_completed error)\", async () => {\n const completed: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"step_completed\",\n timestamp: endTime,\n runId: context.runId,\n stepId,\n status: \"error\",\n endTime,\n durationMs,\n error: formatted,\n };\n await writeTraceEvent(completed, context.traceDir);\n });\n\n await safeInstrumentation(\"printStepComplete(error)\", () => {\n printStepComplete(stepName, durationMs, \"error\", renderDepth);\n });\n await safeInstrumentation(\"printError\", () => {\n printError(formatted, renderDepth);\n });\n await safeInstrumentation(\"printFailedAt\", () => {\n printFailedAt(stepName);\n });\n\n throw userError;\n }\n\n const endTime = Date.now();\n const durationMs = endTime - startTime;\n\n await safeInstrumentation(\"writeTraceEvent(step_completed success)\", async () => {\n const completed: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"step_completed\",\n timestamp: endTime,\n runId: context.runId,\n stepId,\n status: \"success\",\n endTime,\n durationMs,\n };\n await writeTraceEvent(completed, context.traceDir);\n });\n\n await safeInstrumentation(\"printStepComplete(success)\", () => {\n printStepComplete(stepName, durationMs, \"success\", renderDepth);\n });\n\n return result;\n}\n\n/** Callable step tracer plus {@link step.llm} and {@link step.tool} shortcuts. */\nexport type StepFunction = {\n <T>(name: string, fn: () => Promise<T> | T, options?: StepOptions): Promise<T>;\n llm: <T>(model: string, fn: () => Promise<T> | T) => Promise<T>;\n tool: <T>(toolName: string, fn: () => Promise<T> | T) => Promise<T>;\n};\n\nasync function stepLlm<T>(model: string, fn: () => Promise<T> | T): Promise<T> {\n const modelName =\n typeof model === \"string\" && model.trim() !== \"\"\n ? model.trim()\n : \"unknown-model\";\n return stepImpl<T>(`llm:${modelName}`, fn, {\n type: \"llm\",\n metadata: { model: modelName },\n });\n}\n\nasync function stepTool<T>(\n toolName: string,\n fn: () => Promise<T> | T,\n): Promise<T> {\n const normalized =\n typeof toolName === \"string\" && toolName.trim() !== \"\"\n ? toolName.trim()\n : \"unknown-tool\";\n return stepImpl<T>(`tool:${normalized}`, fn, {\n type: \"tool\",\n metadata: { toolName: normalized },\n });\n}\n\n/**\n * Traces a named unit of work inside `inspectRun` (`step_started` / `step_completed`, optional terminal).\n * Outside a run, executes `fn` with a warn only. Preserves return values and rethrows user errors unchanged.\n *\n * - `step.llm(model, fn)` — `type: \"llm\"`, `metadata.model` (no SDK calls or token counting).\n * - `step.tool(toolName, fn)` — `type: \"tool\"`, `metadata.toolName` (no framework interception).\n */\nexport const step = Object.assign(stepImpl, {\n llm: stepLlm,\n tool: stepTool,\n}) as StepFunction;\n","import { inspectRun } from \"./inspect-run.js\";\nimport type { ObserveOptions } from \"./types.js\";\nimport { truncateName, warn } from \"./utils.js\";\n\nconst INSTRUMENTABLE_METHODS = [\"run\", \"execute\", \"invoke\"] as const;\n\nfunction isInstrumentableProp(\n prop: string | symbol,\n): prop is (typeof INSTRUMENTABLE_METHODS)[number] {\n if (typeof prop !== \"string\") return false;\n return (INSTRUMENTABLE_METHODS as readonly string[]).includes(prop);\n}\n\nfunction getAgentLabel(target: object): string {\n try {\n const ctor = Reflect.get(target, \"constructor\") as { name?: string } | undefined;\n const name = ctor?.name;\n if (typeof name === \"string\" && name.trim() !== \"\" && name !== \"Object\") {\n return name.trim();\n }\n } catch {\n /* ignore */\n }\n return \"Agent\";\n}\n\nfunction buildRunName(target: object, methodKey: string): string {\n const label = getAgentLabel(target);\n return truncateName(`${label}.${methodKey}`, 100);\n}\n\n/**\n * Returns a Proxy that traces top-level `run`, `execute`, and `invoke` via {@link inspectRun}.\n * Other properties pass through; function members are bound to the real target so class private fields work.\n * Invalid agents are returned unchanged (with a warn); this function never throws.\n */\nexport function observe<T>(agent: T, options?: ObserveOptions): T {\n if (agent === null || agent === undefined) {\n warn(\"observe() requires an object\");\n return agent;\n }\n const agentType = typeof agent;\n if (agentType !== \"object\" && agentType !== \"function\") {\n warn(\"observe() requires an object\");\n return agent;\n }\n\n const target = agent as object;\n\n const handlers: ProxyHandler<object> = {\n get(proxyTarget, prop, receiver) {\n try {\n const value = Reflect.get(proxyTarget, prop, receiver);\n\n if (isInstrumentableProp(prop)) {\n if (typeof value !== \"function\") {\n return value;\n }\n const methodKey = prop;\n return function observedWrapper(...args: unknown[]) {\n let runName: string;\n try {\n runName = buildRunName(proxyTarget, methodKey);\n } catch (e) {\n warn(\"observe() method wrapping failed\", e);\n return value.apply(proxyTarget, args);\n }\n return inspectRun(runName, () => value.apply(proxyTarget, args), options);\n };\n }\n\n if (typeof value === \"function\" && prop !== \"constructor\") {\n return value.bind(proxyTarget);\n }\n return value;\n } catch (e) {\n warn(\"observe() method wrapping failed\", e);\n try {\n return Reflect.get(proxyTarget, prop, receiver);\n } catch {\n return undefined;\n }\n }\n },\n };\n\n try {\n return new Proxy(target, handlers) as T;\n } catch (e) {\n warn(\"observe() failed\", e);\n return agent;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/types.ts","../src/logs/config.ts","../src/logs/json-parser.ts","../src/logs/log4js-parser.ts","../src/logs/mapping.ts","../src/logs/redactor.ts","../src/logs/normalizer.ts","../src/logs/tree-builder.ts","../src/logs/tree-renderer.ts","../src/logs/line-parser.ts","../src/logs/live-tree.ts","../src/logs/index.ts","../src/utils/duration.ts","../src/utils.ts","../src/context.ts","../src/storage.ts","../src/trace-directory.ts","../src/trace-metadata.ts","../src/trace-filter.ts","../src/trace-verification.ts","../src/diff/comparable.ts","../src/exporters/helpers.ts","../src/diff/engine.ts","../src/diff/renderer.ts","../src/diff/index.ts","../src/terminal.ts","../src/inspect-run.ts","../src/step.ts","../src/observe.ts","../src/exporters/types.ts","../src/exporters/html-exporter.ts","../src/exporters/markdown-exporter.ts","../src/exporters/openinference-exporter.ts","../src/exporters/otlp-json-exporter.ts","../src/exporters/validation.ts","../src/exporters/manual-trace-adapter.ts","../src/exporters/index.ts"],"names":["isRecord","readFile","nanoid","formatDuration","path","readdir","stat","isFiniteNumber","safeString","step","chalk","endTime","durationMs","printPath","safeInstrumentation","crypto","hexFrom","mapStepStatus"],"mappings":";;;;;;;;;;;AAsNA,IAAM,UAAA,GAAkC;AAAA,EACtC,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,aAAA,GAAuC;AAAA,EAC3C,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAGO,SAAS,WAAW,KAAA,EAAmC;AAC5D,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IAChB,UAAA,CAAiC,SAAS,KAAK,CAAA;AAEpD;AAGO,SAAS,aAAa,KAAA,EAAqC;AAChE,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IAChB,aAAA,CAAoC,SAAS,KAAK,CAAA;AAEvD;AAMO,SAAS,aAAa,KAAA,EAAqC;AAChE,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,aAAA,KAAkB,KAAA,EAAO,OAAO,KAAA;AAC1C,EAAA,IAAI,OAAO,KAAA,CAAM,SAAA,KAAc,QAAA,EAAU,OAAO,KAAA;AAChD,EAAA,IAAI,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AAE5C,EAAA,QAAQ,MAAM,KAAA;AAAO,IACnB,KAAK,aAAA,EAAe;AAClB,MAAA,OACE,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,IACvB,OAAO,MAAM,IAAA,KAAS,QAAA,IACtB,OAAO,KAAA,CAAM,SAAA,KAAc,QAAA;AAAA,IAE/B;AAAA,IACA,KAAK,eAAA,EAAiB;AACpB,MAAA,OACE,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,KACtB,KAAA,CAAM,WAAW,SAAA,IAAa,KAAA,CAAM,MAAA,KAAW,OAAA,CAAA,IAChD,OAAO,KAAA,CAAM,OAAA,KAAY,QAAA,IACzB,OAAO,MAAM,UAAA,KAAe,QAAA;AAAA,IAEhC;AAAA,IACA,KAAK,cAAA,EAAgB;AACnB,MAAA,OACE,OAAO,KAAA,CAAM,KAAA,KAAU,YACvB,OAAO,KAAA,CAAM,WAAW,QAAA,IACxB,OAAO,KAAA,CAAM,IAAA,KAAS,YACtB,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,IACrB,OAAO,MAAM,SAAA,KAAc,QAAA;AAAA,IAE/B;AAAA,IACA,KAAK,gBAAA,EAAkB;AACrB,MAAA,OACE,OAAO,MAAM,KAAA,KAAU,QAAA,IACvB,OAAO,KAAA,CAAM,MAAA,KAAW,aACvB,KAAA,CAAM,MAAA,KAAW,aAAa,KAAA,CAAM,MAAA,KAAW,YAChD,OAAO,KAAA,CAAM,YAAY,QAAA,IACzB,OAAO,MAAM,UAAA,KAAe,QAAA;AAAA,IAEhC;AAAA,IACA;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;ACrSA,SAASA,UAAS,CAAA,EAA0C;AAC1D,EAAA,OAAO,OAAO,MAAM,QAAA,IAAY,CAAA,KAAM,QAAQ,CAAC,KAAA,CAAM,QAAQ,CAAC,CAAA;AAChE;AAEA,SAAS,sBAAsB,CAAA,EAA2B;AACxD,EAAA,OACE,MAAM,OAAA,CAAQ,CAAC,CAAA,IACf,CAAA,CAAE,SAAS,CAAA,IACX,CAAA,CAAE,KAAA,CAAM,CAAC,MAAM,OAAO,CAAA,KAAM,YAAY,CAAA,CAAE,IAAA,OAAW,EAAE,CAAA;AAE3D;AAEA,SAAS,eAAe,MAAA,EAAoD;AAC1E,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,EAC3D;AACA,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AAC3B,IAAA,IAAI,CAACA,SAAAA,CAAS,CAAC,CAAA,EAAG;AAChB,MAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,IAC7E;AACA,IAAA,IAAI,OAAO,EAAE,GAAA,KAAQ,QAAA,IAAY,EAAE,GAAA,CAAI,IAAA,OAAW,EAAA,EAAI;AACpD,MAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,IACzE;AACA,IAAA,IAAI,CAAA,CAAE,aAAa,MAAA,IAAU,CAAA,CAAE,aAAa,QAAA,IAAY,CAAA,CAAE,aAAa,MAAA,EAAQ;AAC7E,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,uEAAA,EAA0E,MAAA;AAAA,UACxE,CAAA,CAAE;AAAA,SACH,CAAA,CAAA;AAAA,OACH;AAAA,IACF;AACA,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,MAAA,KAAc,OAAO,EAAE,IAAA,KAAS,QAAA,IAAY,CAAC,MAAA,CAAO,SAAS,CAAA,CAAE,IAAI,CAAA,IAAK,CAAA,CAAE,OAAO,CAAA,CAAA,EAAI;AAClG,MAAA,MAAM,IAAI,MAAM,yEAAyE,CAAA;AAAA,IAC3F;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,QAAA,EAAwE;AAChG,EAAA,IAAI,CAACA,SAAAA,CAAS,QAAQ,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,EAC9D;AACF;AAEO,IAAM,yBAAA,GAA6C;AAAA,EACxD,WAAW,CAAC,OAAA,EAAS,SAAA,EAAW,WAAA,EAAa,cAAc,OAAO,CAAA;AAAA,EAClE,QAAA,EAAU,OAAA;AAAA,EACV,YAAA,EAAc,WAAA;AAAA,EACd,UAAA,EAAY,SAAA;AAAA,EACZ,QAAA,EAAU,OAAA;AAAA,EACV,iBAAA,EAAmB,GAAA;AAAA,EACnB,QAAA,EAAU;AAAA,IACR,SAAA,EAAW,EAAE,IAAA,EAAM,OAAA,EAAS,QAAQ,OAAA,EAAQ;AAAA,IAC5C,UAAA,EAAY,EAAE,IAAA,EAAM,OAAA,EAAS,QAAQ,OAAA,EAAQ;AAAA,IAC7C,SAAA,EAAW,EAAE,IAAA,EAAM,KAAA,EAAM;AAAA,IACzB,UAAA,EAAY,EAAE,IAAA,EAAM,MAAA,EAAO;AAAA,IAC3B,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAQ;AAAA,IAC7B,eAAA,EAAiB,EAAE,IAAA,EAAM,WAAA,EAAY;AAAA,IACrC,YAAA,EAAc,EAAE,IAAA,EAAM,QAAA;AAAS;AAEnC;AAEO,SAAS,oBAAA,CACd,MACA,QAAA,EACiB;AACjB,EAAA,MAAM,MAAA,GAA0B;AAAA,IAC9B,GAAG,IAAA;AAAA,IACH,GAAG,QAAA;AAAA,IACH,QAAA,EAAU;AAAA,MACR,GAAI,IAAA,CAAK,QAAA,IAAY,EAAC;AAAA,MACtB,GAAI,QAAA,CAAS,QAAA,IAAY;AAAC;AAC5B,GACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,eAAsB,oBAAoB,UAAA,EAA+C;AACvF,EAAA,IAAI,UAAA,KAAe,MAAA,IAAa,UAAA,CAAW,IAAA,OAAW,EAAA,EAAI;AACxD,IAAA,OAAO,yBAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,MAAM,QAAA,CAAS,UAAA,EAAY,OAAO,CAAA;AAAA,EAC9C,SAAS,CAAA,EAAG;AACV,IAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,UAAU,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,EACtE;AAEA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,EAC7B,SAAS,CAAA,EAAG;AACV,IAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,UAAU,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,EACvE;AAEA,EAAA,IAAI,CAACA,SAAAA,CAAS,MAAM,CAAA,EAAG;AACrB,IAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAAA,EACvE;AAEA,EAAA,MAAM,IAAA,GAAO,MAAA;AAEb,EAAA,IAAI,KAAK,SAAA,KAAc,MAAA,IAAa,CAAC,qBAAA,CAAsB,IAAA,CAAK,SAAS,CAAA,EAAG;AAC1E,IAAA,MAAM,IAAI,MAAM,gEAAgE,CAAA;AAAA,EAClF;AACA,EAAA,IAAI,IAAA,CAAK,QAAA,KAAa,MAAA,KAAc,OAAO,IAAA,CAAK,QAAA,KAAa,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,IAAA,EAAK,KAAM,EAAA,CAAA,EAAK;AACrG,IAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAAA,EACvE;AAEA,EAAA,KAAA,MAAW,CAAA,IAAK;AAAA,IACd,cAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF,EAAY;AACV,IAAA,MAAM,CAAA,GAAK,KAAa,CAAC,CAAA;AACzB,IAAA,IAAI,CAAA,KAAM,WAAc,OAAO,CAAA,KAAM,YAAY,CAAA,CAAE,IAAA,OAAW,EAAA,CAAA,EAAK;AACjE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,CAAC,CAAA,yCAAA,CAA2C,CAAA;AAAA,IACjF;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,CAAK,aAAa,MAAA,EAAW;AAC/B,IAAA,gBAAA,CAAiB,KAAK,QAAQ,CAAA;AAAA,EAChC;AACA,EAAA,IAAI,IAAA,CAAK,WAAW,MAAA,EAAW;AAC7B,IAAA,cAAA,CAAe,KAAK,MAAM,CAAA;AAAA,EAC5B;AACA,EAAA,IACE,IAAA,CAAK,iBAAA,KAAsB,MAAA,KAC1B,OAAO,KAAK,iBAAA,KAAsB,QAAA,IACjC,CAAC,MAAA,CAAO,SAAS,IAAA,CAAK,iBAAiB,CAAA,IACvC,IAAA,CAAK,oBAAoB,CAAA,CAAA,EAC3B;AACA,IAAA,MAAM,IAAI,MAAM,+EAA+E,CAAA;AAAA,EACjG;AAGA,EAAA,IAAK,IAAA,CAAa,UAAU,IAAA,CAAK,SAAA,CAAW,KAAa,MAAM,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,EAAG;AAC/E,IAAA,MAAM,IAAI,MAAM,oEAAoE,CAAA;AAAA,EACtF;AAEA,EAAA,OAAO,oBAAA,CAAqB,2BAA2B,IAAI,CAAA;AAC7D;AChJA,SAASA,UAAS,CAAA,EAA0C;AAC1D,EAAA,OAAO,OAAO,MAAM,QAAA,IAAY,CAAA,KAAM,QAAQ,CAAC,KAAA,CAAM,QAAQ,CAAC,CAAA;AAChE;AAEO,IAAM,gBAAN,MAAoB;AAAA,EACzB,UAAA,CAAW,OAAiB,QAAA,EAA8C;AACxE,IAAA,MAAM,UAA0B,EAAC;AACjC,IAAA,MAAM,WAA4B,EAAC;AAEnC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,aAAa,CAAA,GAAI,CAAA;AACvB,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AACxB,MAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,MAAA,IAAI,YAAY,EAAA,EAAI;AACpB,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,MAC7B,CAAA,CAAA,MAAQ;AACN,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,IAAA,EAAM,gBAAA;AAAA,UACN,OAAA,EAAS,yBAAA;AAAA,UACT,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM,UAAA;AAAA,UACN,GAAA,EAAK,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG;AAAA,SAC1B,CAAA;AACD,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAACA,SAAAA,CAAS,MAAM,CAAA,EAAG;AACrB,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,IAAA,EAAM,gBAAA;AAAA,UACN,OAAA,EAAS,iCAAA;AAAA,UACT,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM,UAAA;AAAA,UACN,GAAA,EAAK,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG;AAAA,SAC1B,CAAA;AACD,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,GAAA,EAAK,MAAA;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,UAAA;AAAA,QACN,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,EAAE,SAAS,QAAA,EAAS;AAAA,EAC7B;AAAA,EAEA,MAAM,UAAU,QAAA,EAAsD;AACpE,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI;AACF,MAAA,IAAA,GAAO,MAAMC,QAAAA,CAAS,QAAA,EAAU,OAAO,CAAA;AAAA,IACzC,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,QAAQ,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,IACjE;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAChC,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,KAAA,EAAO,QAAQ,CAAA;AAAA,EACxC;AACF;AC3DA,SAASD,UAAS,CAAA,EAA0C;AAC1D,EAAA,OAAO,OAAO,MAAM,QAAA,IAAY,CAAA,KAAM,QAAQ,CAAC,KAAA,CAAM,QAAQ,CAAC,CAAA;AAChE;AAEA,SAAS,4BAA4B,IAAA,EAAkC;AAGrE,EAAA,IAAI,IAAA;AACJ,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,GAAA,EAAK;AACrB,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,IAAI,MAAA,GAAS,KAAA;AACb,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,MAAA,GAAS,KAAA;AACT,UAAA;AAAA,QACF;AACA,QAAA,IAAI,OAAO,IAAA,EAAM;AACf,UAAA,MAAA,GAAS,IAAA;AACT,UAAA;AAAA,QACF;AACA,QAAA,IAAI,OAAO,GAAA,EAAK;AACd,UAAA,QAAA,GAAW,KAAA;AAAA,QACb;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,OAAO,GAAA,EAAK;AACd,QAAA,QAAA,GAAW,IAAA;AACX,QAAA;AAAA,MACF;AACA,MAAA,IAAI,EAAA,KAAO,KAAK,KAAA,IAAS,CAAA;AACzB,MAAA,IAAI,EAAA,KAAO,KAAK,KAAA,IAAS,CAAA;AACzB,MAAA,IAAI,UAAU,CAAA,EAAG;AACf,QAAA,IAAA,GAAO,EAAE,KAAA,EAAO,CAAA,EAAG,GAAA,EAAK,IAAI,CAAA,EAAE;AAC9B,QAAA,CAAA,GAAI,CAAA;AACJ,QAAA;AAAA,MACF;AACA,MAAA,IAAI,QAAQ,CAAA,EAAG;AAAA,IACjB;AAAA,EACF;AACA,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,KAAK,GAAG,CAAA;AACxC;AAEO,IAAM,eAAN,MAAmB;AAAA,EACxB,UAAA,CAAW,OAAiB,QAAA,EAA8C;AACxE,IAAA,MAAM,UAA0B,EAAC;AACjC,IAAA,MAAM,WAA4B,EAAC;AAEnC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,aAAa,CAAA,GAAI,CAAA;AACvB,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AAC5B,MAAA,MAAM,OAAA,GAAU,QAAQ,IAAA,EAAK;AAC7B,MAAA,IAAI,YAAY,EAAA,EAAI;AAEpB,MAAA,MAAM,QAAA,GAAW,4BAA4B,OAAO,CAAA;AACpD,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,IAAA,EAAM,4BAAA;AAAA,UACN,OAAA,EAAS,8CAAA;AAAA,UACT,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM,UAAA;AAAA,UACN,GAAA,EAAK,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG;AAAA,SAC1B,CAAA;AACD,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,IAAA,CAAK,MAAM,QAAQ,CAAA;AAAA,MAC9B,CAAA,CAAA,MAAQ;AACN,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,IAAA,EAAM,gBAAA;AAAA,UACN,OAAA,EAAS,+CAAA;AAAA,UACT,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM,UAAA;AAAA,UACN,GAAA,EAAK,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,GAAG;AAAA,SAC3B,CAAA;AACD,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,CAACA,SAAAA,CAAS,MAAM,CAAA,EAAG;AACrB,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,IAAA,EAAM,4BAAA;AAAA,UACN,OAAA,EAAS,yCAAA;AAAA,UACT,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM,UAAA;AAAA,UACN,GAAA,EAAK,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,GAAG;AAAA,SAC3B,CAAA;AACD,QAAA;AAAA,MACF;AAEA,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,GAAA,EAAK,MAAA;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,UAAA;AAAA,QACN,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,EAAE,SAAS,QAAA,EAAS;AAAA,EAC7B;AAAA,EAEA,MAAM,UAAU,QAAA,EAAsD;AACpE,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI;AACF,MAAA,IAAA,GAAO,MAAMC,QAAAA,CAAS,QAAA,EAAU,OAAO,CAAA;AAAA,IACzC,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,QAAQ,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,IACjE;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAChC,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,KAAA,EAAO,QAAQ,CAAA;AAAA,EACxC;AACF;;;ACzHO,SAAS,aAAA,CAAc,SAAiB,KAAA,EAAwB;AACrE,EAAA,IAAI,OAAA,KAAY,OAAO,OAAO,IAAA;AAC9B,EAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,GAAG,GAAG,OAAO,KAAA;AAEnC,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAC/B,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,IAAI,SAAS,EAAA,EAAI;AACjB,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AACrC,IAAA,IAAI,KAAA,KAAU,IAAI,OAAO,KAAA;AACzB,IAAA,IAAI,CAAA,KAAM,KAAK,CAAC,OAAA,CAAQ,WAAW,GAAG,CAAA,IAAK,KAAA,KAAU,CAAA,EAAG,OAAO,KAAA;AAC/D,IAAA,GAAA,GAAM,QAAQ,IAAA,CAAK,MAAA;AAAA,EACrB;AACA,EAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,IAAA,IAAI,SAAS,EAAA,IAAM,CAAC,MAAM,QAAA,CAAS,IAAI,GAAG,OAAO,KAAA;AACjD,IAAA,IAAI,IAAA,KAAS,EAAA,IAAM,CAAC,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,IAAK,EAAE,CAAA,EAAG,OAAO,KAAA;AAAA,EAC5E;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,YAAA,CACd,WACA,QAAA,EAC6B;AAC7B,EAAA,IAAI,CAAC,UAAU,OAAO,MAAA;AACtB,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,SAAS,SAAS,CAAA;AAElD,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,SAAA,GAAY,EAAA;AAEhB,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,EAAG;AACvC,IAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AACxB,IAAA,IAAI,CAAC,aAAA,CAAc,GAAA,EAAK,SAAS,CAAA,EAAG;AACpC,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,UAAA,CAAW,GAAA,EAAK,EAAE,CAAA,CAAE,MAAA;AACtC,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,SAAA,GAAY,KAAA;AACZ,MAAA,OAAA,GAAU,GAAA;AAAA,IACZ;AAAA,EACF;AAEA,EAAA,OAAO,OAAA,GAAU,QAAA,CAAS,OAAO,CAAA,GAAI,MAAA;AACvC;ACzCO,IAAM,mBAAA,GAAsB;AAAA,EACjC,eAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAMA,SAASD,UAAS,CAAA,EAA0C;AAC1D,EAAA,OAAO,OAAO,MAAM,QAAA,IAAY,CAAA,KAAM,QAAQ,CAAC,KAAA,CAAM,QAAQ,CAAC,CAAA;AAChE;AAEA,SAAS,MAAM,CAAA,EAAmB;AAChC,EAAA,OAAO,EAAE,WAAA,EAAY;AACvB;AAEA,SAAS,WAAW,KAAA,EAAuB;AACzC,EAAA,MAAM,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,QAAQ,CAAA,CAAE,OAAO,KAAA,EAAO,MAAM,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AACxE,EAAA,OAAO,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACrB;AAOA,SAAS,aAAa,KAAA,EAAyC;AAC7D,EAAA,MAAM,GAAA,uBAAU,GAAA,EAA0B;AAE1C,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,KAAoB;AAC/B,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,CAAA,CAAE,GAAG,CAAA;AACrB,IAAA,GAAA,CAAI,IAAI,CAAA,EAAG,EAAE,GAAG,CAAA,EAAG,GAAA,EAAK,GAAmB,CAAA;AAAA,EAC7C,CAAA;AAEA,EAAA,KAAA,MAAW,KAAK,mBAAA,EAAqB;AACnC,IAAA,GAAA,CAAI,EAAE,GAAA,EAAK,CAAA,EAAG,QAAA,EAAU,QAAQ,CAAA;AAAA,EAClC;AAEA,EAAA,KAAA,MAAW,CAAA,IAAK,KAAA,IAAS,EAAC,EAAG;AAC3B,IAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,MAAA,GAAA,CAAI,EAAE,GAAA,EAAK,CAAA,EAAG,QAAA,EAAU,QAAQ,CAAA;AAChC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAM,CAAA,CAAE,GAAA;AACd,IAAA,IAAI,CAAA,CAAE,aAAa,MAAA,EAAQ,GAAA,CAAI,EAAE,GAAA,EAAK,QAAA,EAAU,QAAQ,CAAA;AACxD,IAAA,IAAI,CAAA,CAAE,aAAa,MAAA,EAAQ,GAAA,CAAI,EAAE,GAAA,EAAK,QAAA,EAAU,QAAQ,CAAA;AACxD,IAAA,IAAI,CAAA,CAAE,aAAa,QAAA,EAAU;AAC3B,MAAA,GAAA,CAAI,EAAE,GAAA,EAAK,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,OAAO,CAAA,CAAE,IAAA,KAAS,QAAA,GAAW,CAAA,CAAE,IAAA,GAAO,CAAA,EAAG,CAAA;AAAA,IAChF;AAAA,EACF;AAEA,EAAA,OAAO,CAAC,GAAG,GAAA,CAAI,MAAA,EAAQ,CAAA;AACzB;AAEO,IAAM,WAAN,MAAe;AAAA,EACX,MAAA;AAAA,EAET,YAAY,OAAA,EAA2B;AACrC,IAAA,IAAA,CAAK,MAAA,GAAS,YAAA,CAAa,OAAA,EAAS,KAAK,CAAA;AAAA,EAC3C;AAAA,EAEA,WAAA,CAAY,KAAa,KAAA,EAAyB;AAChD,IAAA,MAAM,CAAA,GAAI,MAAM,GAAG,CAAA;AACnB,IAAA,MAAM,IAAA,GAAO,KAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,CAAC,CAAA;AAChD,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,IAAA,CAAK,cAAc,KAAK,CAAA;AAAA,IACjC;AAEA,IAAA,IAAI,IAAA,CAAK,QAAA,KAAa,MAAA,EAAQ,OAAO,YAAA;AACrC,IAAA,MAAM,WACJ,OAAO,KAAA,KAAU,QAAA,GACb,KAAA,GACA,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,aAAa,OAAO,KAAA,KAAU,QAAA,GAC1E,MAAA,CAAO,KAAK,CAAA,GACZ,MAAA;AAER,IAAA,IAAI,IAAA,CAAK,aAAa,QAAA,EAAU;AAC9B,MAAA,IAAI,QAAA,KAAa,QAAW,OAAO,YAAA;AACnC,MAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAC9C,MAAA,OAAO,QAAA,CAAS,MAAA,IAAU,IAAA,GAAO,CAAA,EAAG,QAAQ,CAAA,MAAA,CAAA,GAAM,CAAA,EAAG,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,IAAI,CAAC,CAAA,MAAA,CAAA;AAAA,IAC9E;AAEA,IAAA,IAAI,IAAA,CAAK,aAAa,MAAA,EAAQ;AAC5B,MAAA,IAAI,QAAA,KAAa,QAAW,OAAO,gBAAA;AACnC,MAAA,OAAO,CAAA,MAAA,EAAS,UAAA,CAAW,QAAQ,CAAC,CAAA,CAAA,CAAA;AAAA,IACtC;AAEA,IAAA,OAAO,IAAA,CAAK,cAAc,KAAK,CAAA;AAAA,EACjC;AAAA,EAEA,aAAa,MAAA,EAA0D;AACrE,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC3C,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA,CAAK,WAAA,CAAY,GAAG,CAAC,CAAA;AAAA,IAChC;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,cAAc,KAAA,EAAyB;AACrC,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,OAAO,MAAM,GAAA,CAAI,CAAC,MAAM,IAAA,CAAK,aAAA,CAAc,CAAC,CAAC,CAAA;AAAA,IAC/C;AACA,IAAA,IAAIA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACnB,MAAA,MAAM,MAA+B,EAAC;AACtC,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1C,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA,CAAK,WAAA,CAAY,GAAG,CAAC,CAAA;AAAA,MAChC;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACF;ACjHA,SAAS,eAAe,CAAA,EAAyB;AAC/C,EAAA,OAAO,OAAO,CAAA,KAAM,QAAA,IAAY,MAAA,CAAO,SAAS,CAAC,CAAA;AACnD;AAEA,SAAS,WAAW,CAAA,EAAgC;AAClD,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,MAAA;AAClC,EAAA,MAAM,CAAA,GAAI,EAAE,IAAA,EAAK;AACjB,EAAA,OAAO,CAAA,KAAM,KAAK,MAAA,GAAY,CAAA;AAChC;AAEA,SAAS,eAAe,CAAA,EAAgC;AACtD,EAAA,IAAI,cAAA,CAAe,CAAC,CAAA,EAAG,OAAO,CAAA;AAC9B,EAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACtB,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAG,OAAO,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,QAAA,CAAS,KAAa,KAAA,EAAwB;AACrD,EAAA,OAAO,GAAA,CAAI,SAAS,KAAK,CAAA;AAC3B;AAEA,SAAS,UAAU,SAAA,EAAgC;AACjD,EAAA,IAAI,QAAA,CAAS,SAAA,EAAW,OAAO,CAAA,EAAG,OAAO,KAAA;AACzC,EAAA,IAAI,QAAA,CAAS,SAAA,EAAW,QAAQ,CAAA,EAAG,OAAO,MAAA;AAC1C,EAAA,IAAI,QAAA,CAAS,SAAA,EAAW,SAAS,CAAA,EAAG,OAAO,OAAA;AAC3C,EAAA,IAAI,QAAA,CAAS,SAAA,EAAW,aAAa,CAAA,EAAG,OAAO,WAAA;AAC/C,EAAA,IAAI,QAAA,CAAS,SAAA,EAAW,UAAU,CAAA,EAAG,OAAO,QAAA;AAC5C,EAAA,IAAI,SAAA,CAAU,QAAA,CAAS,QAAQ,CAAA,IAAK,UAAU,QAAA,CAAS,SAAS,CAAA,IAAK,SAAA,CAAU,SAAS,QAAQ,CAAA,IAAK,SAAA,CAAU,QAAA,CAAS,SAAS,CAAA,EAAG;AAClI,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,UAAA,CAAW,WAAmB,IAAA,EAA2B;AAChE,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA;AACjC,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,IAAK,SAAA;AACxC,EAAA,IAAI,IAAA,KAAS,KAAA,EAAO,OAAO,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA;AACtC,EAAA,IAAI,IAAA,KAAS,MAAA,EAAQ,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAA;AACxC,EAAA,IAAI,IAAA,KAAS,OAAA,EAAS,OAAO,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA;AAC1C,EAAA,IAAI,IAAA,KAAS,QAAA,EAAU,OAAO,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA;AAC5C,EAAA,IAAI,IAAA,KAAS,KAAA,EAAO,OAAO,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA;AACtC,EAAA,IAAI,IAAA,KAAS,WAAA,EAAa,OAAO,CAAA,UAAA,EAAa,IAAI,CAAA,CAAA;AAClD,EAAA,IAAI,IAAA,KAAS,OAAA,EAAS,OAAO,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA;AAC1C,EAAA,OAAO,SAAA;AACT;AAOO,IAAM,kBAAN,MAAsB;AAAA,EAClB,OAAA;AAAA,EAET,YAAY,OAAA,EAA2B;AACrC,IAAA,IAAA,CAAK,UAAU,OAAA,CAAQ,MAAA;AAAA,EACzB;AAAA,EAEA,mBACE,MAAA,EACmD;AACnD,IAAA,MAAM,MAAM,MAAA,CAAO,GAAA;AACnB,IAAA,MAAM,MAAM,IAAA,CAAK,OAAA;AAGjB,IAAA,IAAI,KAAA;AACJ,IAAA,KAAA,MAAW,CAAA,IAAK,IAAI,SAAA,EAAW;AAC7B,MAAA,MAAM,CAAA,GAAI,IAAI,CAAC,CAAA;AACf,MAAA,MAAM,CAAA,GAAI,WAAW,CAAC,CAAA;AACtB,MAAA,IAAI,CAAA,EAAG;AACL,QAAA,KAAA,GAAQ,CAAA;AACR,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO;AAAA,QACL,OAAA,EAAS;AAAA,UACT,IAAA,EAAM,gBAAA;AAAA,UACN,OAAA,EAAS,4CAAA;AAAA,UACT,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,MAAM,MAAA,CAAO;AAAA;AACb,OACF;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAY,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAC,CAAA;AAC9C,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,OAAO;AAAA,QACL,OAAA,EAAS;AAAA,UACT,IAAA,EAAM,eAAA;AAAA,UACN,OAAA,EAAS,CAAA,yBAAA,EAA4B,GAAA,CAAI,QAAQ,CAAA,CAAA,CAAA;AAAA,UACjD,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,MAAM,MAAA,CAAO;AAAA;AACb,OACF;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,SAAA,EAAW,GAAA,CAAI,QAAQ,CAAA;AAGpD,IAAA,MAAM,KAAA,GAAQ,IAAI,YAAA,IAAgB,WAAA;AAClC,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAK,CAAA;AACvB,IAAA,MAAM,QAAA,GAAW,eAAe,KAAK,CAAA;AACrC,IAAA,MAAM,SAAA,GAAY,QAAA,IAAY,IAAA,CAAK,GAAA,EAAI;AACvC,IAAA,MAAM,mBAAmB,QAAA,KAAa,MAAA;AAGtC,IAAA,MAAM,cAAc,GAAA,CAAI,WAAA;AACxB,IAAA,MAAM,WAAW,WAAA,GAAc,UAAA,CAAW,GAAA,CAAI,WAAW,CAAC,CAAA,GAAI,MAAA;AAG9D,IAAA,IAAI,UAAA;AACJ,IAAA,MAAM,cAAc,GAAA,CAAI,WAAA;AACxB,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAM,CAAA,GAAI,IAAI,WAAW,CAAA;AACzB,MAAA,IAAI,cAAA,CAAe,CAAC,CAAA,EAAG,UAAA,GAAa,CAAA;AAAA,IACtC,CAAA,MAAA,IAAW,cAAA,CAAgB,GAAA,CAAY,UAAU,CAAA,EAAG;AAClD,MAAA,UAAA,GAAc,GAAA,CAAY,UAAA;AAAA,IAC5B;AAGA,IAAA,IAAI,MAAA;AACJ,IAAA,MAAM,YAAY,GAAA,CAAI,SAAA;AACtB,IAAA,MAAM,YAAY,SAAA,GAAY,UAAA,CAAW,GAAA,CAAI,SAAS,CAAC,CAAA,GAAI,MAAA;AAC3D,IAAA,IAAI,SAAA,KAAc,SAAA,IAAa,SAAA,KAAc,IAAA,IAAQ,cAAc,OAAA,EAAS;AAC1E,MAAA,MAAA,GAAS,SAAA;AAAA,IACX,CAAA,MAAA,IAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAA,GAAS,OAAA,CAAQ,MAAA;AAAA,IACnB,CAAA,MAAA,IAAW,OAAA,EAAS,IAAA,KAAS,OAAA,EAAS;AACpC,MAAA,MAAA,GAAS,OAAA;AAAA,IACX,CAAA,MAAA,IAAW,UAAU,QAAA,CAAS,SAAS,KAAK,SAAA,CAAU,QAAA,CAAS,QAAQ,CAAA,EAAG;AACxE,MAAA,MAAA,GAAS,OAAA;AAAA,IACX,CAAA,MAAA,IAAW,OAAA,EAAS,SAAA,IAAa,OAAA,EAAS,UAAA,EAAY;AACpD,MAAA,MAAA,GAAS,SAAA;AAAA,IACX,CAAA,MAAA,IAAW,OAAA,EAAS,OAAA,IAAW,OAAA,EAAS,QAAA,EAAU;AAChD,MAAA,MAAA,GAAS,IAAA;AAAA,IACX;AAGA,IAAA,MAAM,IAAA,GAAoB,OAAA,EAAS,IAAA,IAAQ,SAAA,CAAU,SAAS,CAAA;AAG9D,IAAA,MAAM,IAAA,GAAO,OAAA,EAAS,IAAA,IAAQ,UAAA,CAAW,WAAW,IAAI,CAAA;AAGxD,IAAA,IAAI,UAAA,GAAyC,YAAA;AAC7C,IAAA,IAAI,QAAA,IAAY,OAAA,EAAS,SAAA,EAAW,UAAA,GAAa,UAAA;AACjD,IAAA,IAAI,kBAAkB,UAAA,GAAa,SAAA;AAGnC,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAY;AAAA,MAC3B,GAAG,GAAA,CAAI,SAAA;AAAA,MACP,GAAA,CAAI,QAAA;AAAA,MACJ,KAAA;AAAA,MACA,IAAI,UAAA,IAAc,SAAA;AAAA,MAClB,IAAI,QAAA,IAAY,OAAA;AAAA,MAChB,IAAI,WAAA,IAAe,EAAA;AAAA,MACnB,IAAI,WAAA,IAAe,EAAA;AAAA,MACnB,IAAI,SAAA,IAAa,EAAA;AAAA,MACjB;AAAA,MACA,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,EAAE,CAAC,CAAA;AAEzB,IAAA,MAAM,aAAsC,EAAC;AAC7C,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACxC,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG;AACjB,MAAA,UAAA,CAAW,CAAC,CAAA,GAAI,CAAA;AAAA,IAClB;AAEA,IAAA,MAAM,KAAA,GAAsB;AAAA,MAC1B,OAAA,EAAS,OAAO,EAAE,CAAA;AAAA,MAClB,KAAA;AAAA,MACA,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa,EAAC;AAAA,MAC/B,IAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAI,MAAA,GAAS,EAAE,MAAA,KAAW,EAAC;AAAA,MAC3B,GAAI,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,KAAe,EAAC;AAAA,MACjD,GAAI,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,CAAE,SAAS,CAAA,GAAI,EAAE,UAAA,EAAW,GAAI,EAAC;AAAA,MAC3D,UAAA;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,MAAM,MAAA,CAAO,UAAA;AAAA,QACb,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,MAAM,MAAA,CAAO;AAAA;AACf,KACF;AAEA,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,OAAO;AAAA,QACL,KAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,mBAAA;AAAA,UACN,OAAA,EAAS,sCAAsC,KAAK,CAAA,CAAA,CAAA;AAAA,UACpD,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,KAAK,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,CAAE,KAAA,CAAM,GAAG,GAAG;AAAA;AACvC,OACF;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,KAAA,EAAM;AAAA,EACjB;AAAA,EAEA,UAAU,MAAA,EAAoD;AAC5D,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,kBAAA,CAAmB,MAAM,CAAA;AACxC,IAAA,OAAO,CAAA,CAAE,SAAU,CAAA,CAAE,OAAA;AAAA,EACvB;AAAA,EAEA,aAAa,OAAA,EAAoD;AAC/D,IAAA,MAAM,MAAsB,EAAC;AAC7B,IAAA,MAAM,WAA4B,EAAC;AACnC,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,kBAAA,CAAmB,CAAC,CAAA;AAC5C,MAAA,IAAI,UAAA,CAAW,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,WAAW,KAAK,CAAA;AAC/C,MAAA,IAAI,UAAA,CAAW,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA,IAC1D;AACA,IAAA,OAAO,EAAE,OAAA,EAAS,GAAA,EAAK,QAAA,EAAS;AAAA,EAClC;AACF;;;AC7NA,SAAS,GAAA,CAAsB,KAAwB,GAAA,EAAc;AACnE,EAAA,GAAA,CAAI,GAAG,CAAA,GAAA,CAAK,GAAA,CAAI,GAAG,KAAK,CAAA,IAAK,CAAA;AAC/B;AAEA,SAAS,iBAAiB,MAAA,EAAkD;AAC1E,EAAA,IAAI,UAAA,GAAa,KAAA;AACjB,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,OAAA,EAAS,OAAO,OAAA;AACjC,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,SAAA,EAAW,UAAA,GAAa,IAAA;AAAA,EAC3C;AACA,EAAA,IAAI,YAAY,OAAO,SAAA;AACvB,EAAA,OAAO,IAAA;AACT;AAEO,IAAM,cAAN,MAAkB;AAAA,EACvB,YAAY,OAAA,EAA8B;AACxC,IAAA,KAAK,OAAA,EAAS,MAAA;AAAA,EAChB;AAAA,EAEA,MAAM,MAAA,EAA0C;AAC9C,IAAA,MAAM,KAAA,uBAAY,GAAA,EAA4B;AAC9C,IAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,MAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,KAAK,CAAA,EAAG,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,KAAA,EAAO,EAAE,CAAA;AAC9C,MAAA,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,KAAK,CAAA,CAAG,KAAK,CAAC,CAAA;AAAA,IAC5B;AAEA,IAAA,MAAM,MAAwB,EAAC;AAC/B,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,SAAS,CAAA,IAAK,KAAA,CAAM,SAAQ,EAAG;AAChD,MAAA,MAAM,MAAA,GAAS,CAAC,GAAG,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,SAAS,CAAA;AAEtE,MAAA,MAAM,KAAA,uBAAY,GAAA,EAAyB;AAC3C,MAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,QAAA,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,OAAA,EAAS,EAAE,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,EAAC,EAAG,KAAA,EAAO,CAAA,EAAG,CAAA;AAAA,MAC3D;AAEA,MAAA,MAAM,QAAuB,EAAC;AAC9B,MAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,MAAA,EAAO,EAAG;AACjC,QAAA,MAAM,QAAA,GAAW,KAAK,KAAA,CAAM,QAAA;AAC5B,QAAA,IAAI,QAAA,IAAY,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG;AACnC,UAAA,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,CAAG,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,QACzC,CAAA,MAAO;AACL,UAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,QACjB;AAAA,MACF;AAEA,MAAA,MAAM,WAAA,GAAc,CAAC,CAAA,EAAgB,KAAA,KAAkB;AACrD,QAAA,CAAA,CAAE,KAAA,GAAQ,KAAA;AACV,QAAA,KAAA,MAAW,KAAK,CAAA,CAAE,QAAA,EAAU,WAAA,CAAY,CAAA,EAAG,QAAQ,CAAC,CAAA;AAAA,MACtD,CAAA;AACA,MAAA,KAAA,MAAW,CAAA,IAAK,KAAA,EAAO,WAAA,CAAY,CAAA,EAAG,CAAC,CAAA;AAGvC,MAAA,MAAM,mBAAA,GAAsB;AAAA,QAC1B,QAAA,EAAU,CAAA;AAAA,QACV,UAAA,EAAY,CAAA;AAAA,QACZ,SAAA,EAAW,CAAA;AAAA,QACX,OAAA,EAAS;AAAA,OACX;AACA,MAAA,MAAM,QAAQ,EAAC;AACf,MAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,QAAA,GAAA,CAAI,mBAAA,EAAqB,EAAE,UAAU,CAAA;AACrC,QAAC,KAAA,CAAc,EAAE,IAAI,CAAA,GAAA,CAAM,MAAc,CAAA,CAAE,IAAI,KAAK,CAAA,IAAK,CAAA;AAAA,MAC3D;AAEA,MAAA,MAAM,YAAY,MAAA,CAAO,MAAA,GAAS,IAAI,MAAA,CAAO,CAAC,EAAG,SAAA,GAAY,MAAA;AAC7D,MAAA,MAAM,OAAA,GAAU,OAAO,MAAA,GAAS,CAAA,GAAI,OAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,CAAG,SAAA,GAAY,MAAA;AAC3E,MAAA,MAAM,MAAA,GAAS,iBAAiB,MAAM,CAAA;AACtC,MAAA,MAAM,aACJ,SAAA,KAAc,MAAA,IACd,YAAY,MAAA,IACZ,MAAA,CAAO,SAAS,SAAS,CAAA,IACzB,MAAA,CAAO,QAAA,CAAS,OAAO,CAAA,IACvB,OAAA,IAAW,aACX,MAAA,KAAW,SAAA,GACP,UAAU,SAAA,GACV,MAAA;AAEN,MAAA,MAAM,IAAA,GAAO,OAAO,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,KAAK,CAAA,EAAG,IAAA;AAEnD,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,KAAA;AAAA,QACA,IAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,OAAA,EAAS,MAAA,KAAW,SAAA,GAAY,MAAA,GAAY,OAAA;AAAA,QAC5C,UAAA;AAAA,QACA,QAAA,EAAU,KAAA;AAAA,QACV,QAAA,EAAU;AAAA,UACR,aAAa,MAAA,CAAO,MAAA;AAAA,UACpB,mBAAA;AAAA,UACA;AAAA;AACF,OACD,CAAA;AAAA,IACH;AAGA,IAAA,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,EAAE,SAAA,IAAa,CAAA,KAAM,CAAA,CAAE,SAAA,IAAa,CAAA,CAAE,CAAA;AAC1D,IAAA,OAAO,GAAA;AAAA,EACT;AACF;;;AC/FA,SAAS,QAAA,CAAS,GAAW,GAAA,EAAqB;AAChD,EAAA,IAAI,CAAA,CAAE,MAAA,IAAU,GAAA,EAAK,OAAO,CAAA;AAC5B,EAAA,OAAO,CAAA,CAAE,MAAM,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAG,GAAA,GAAM,CAAC,CAAC,CAAA,GAAI,QAAA;AAC5C;AAEA,SAAS,YAAA,CAAa,OAAgB,MAAA,EAAoC;AACxE,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,MAAA;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,QAAA,CAAS,OAAO,MAAM,CAAA;AAC5D,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,SAAA,IAAa,OAAO,UAAU,QAAA,EAAU;AACxF,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI;AACF,MAAA,OAAO,QAAA,CAAS,IAAA,CAAK,SAAA,CAAU,KAAK,GAAG,MAAM,CAAA;AAAA,IAC/C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,UAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,YAAA,CAAa,OAA4C,MAAA,EAAwB;AACxF,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA;AACpC,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAEjC,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAoB;AACtC,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,EAAW,CAAA,KAAe;AACrC,IAAA,MAAM,CAAA,GAAI,YAAA,CAAa,CAAA,EAAG,MAAM,CAAA;AAChC,IAAA,IAAI,CAAA,KAAM,MAAA,EAAW,KAAA,CAAM,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,EACrC,CAAA;AAGA,EAAA,GAAA,CAAI,OAAO,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,GAAA,IAAO,MAAM,OAAO,CAAA;AACpD,EAAA,GAAA,CAAI,QAAQ,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,MAAA,IAAU,MAAM,IAAI,CAAA;AACxD,EAAA,GAAA,CAAI,QAAQ,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,MAAA,IAAU,MAAM,IAAI,CAAA;AACxD,EAAA,GAAA,CAAI,MAAA,EAAQ,KAAA,CAAM,YAAA,IAAgB,KAAA,CAAM,IAAI,CAAA;AAC5C,EAAA,GAAA,CAAI,OAAA,EAAS,MAAM,KAAK,CAAA;AACxB,EAAA,GAAA,CAAI,OAAA,EAAS,MAAM,KAAK,CAAA;AAGxB,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,EAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,WAAW,IAAA,EAAM;AAC3D,IAAA,MAAM,QAAS,MAAA,CAAe,KAAA;AAC9B,IAAA,MAAM,SAAU,MAAA,CAAe,MAAA;AAC/B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,WAAW,QAAA,EAAU;AAC3D,MAAA,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA,EAAG,KAAA,IAAS,GAAG,CAAA,CAAA,EAAI,MAAA,IAAU,GAAG,CAAA,CAAE,CAAA;AAAA,IACxD;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,CAAA,IAAK,CAAC,cAAA,EAAgB,SAAS,CAAA,EAAY;AACpD,IAAA,IAAI,KAAK,KAAA,EAAO,GAAA,CAAI,CAAA,EAAI,KAAA,CAAc,CAAC,CAAC,CAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,QAAA,GAAW,CAAC,GAAG,KAAA,CAAM,OAAA,EAAS,CAAA,CACjC,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,MAAM,EAAE,CAAA,CAC1B,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA;AAE9B,EAAA,OAAO,SAAS,MAAA,GAAS,CAAA,GAAI,MAAM,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,GAAI,EAAA;AAC1D;AAEA,SAAS,WAAW,IAAA,EAA2B;AAC7C,EAAA,IAAI,IAAA,CAAK,KAAA,CAAM,MAAA,KAAW,OAAA,EAAS,OAAO,SAAA;AAC1C,EAAA,IAAI,IAAA,CAAK,KAAA,CAAM,MAAA,KAAW,IAAA,EAAM,OAAO,SAAA;AACvC,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,YAAY,EAAA,EAAoB;AACvC,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA,IAAK,EAAA,GAAK,GAAG,OAAO,EAAA;AAC3C,EAAA,IAAI,KAAK,GAAA,EAAM,OAAO,GAAG,IAAA,CAAK,KAAA,CAAM,EAAE,CAAC,CAAA,EAAA,CAAA;AACvC,EAAA,OAAO,CAAA,EAAA,CAAI,EAAA,GAAK,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAClC;AAEA,SAAS,eAAA,CAAgB,IAAA,EAAmB,MAAA,EAAgB,MAAA,EAAiB,OAAA,EAAgD;AAC3H,EAAA,MAAM,MAAA,GAAS,MAAA,IAAU,MAAA,GAAS,eAAA,GAAQ,eAAA,CAAA;AAC1C,EAAA,MAAM,UAAA,GAAa,MAAA,IAAU,MAAA,GAAS,KAAA,GAAQ,UAAA,CAAA;AAC9C,EAAA,MAAM,QAAQ,YAAA,CAAa,IAAA,CAAK,KAAA,CAAM,UAAA,EAAY,QAAQ,kBAAkB,CAAA;AAC5E,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,UAAA,KAAe,MAAA,GAAY,CAAA,CAAA,EAAI,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,UAAU,CAAC,CAAA,CAAA,GAAK,EAAA;AAC7F,EAAA,MAAM,IAAA,GAAO,CAAA,EAAG,MAAM,CAAA,EAAG,KAAK,KAAA,CAAM,IAAI,CAAA,EAAG,KAAK,CAAA,EAAG,UAAA,CAAW,IAAI,CAAC,GAAG,GAAG,CAAA,CAAA;AAEzE,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAI,CAAA;AAEnB,EAAA,MAAM,QAAA,GACJ,QAAQ,cAAA,KAAmB,QAAA,IAC1B,QAAQ,cAAA,KAAmB,cAAA,IAAkB,IAAA,CAAK,KAAA,CAAM,UAAA,KAAe,UAAA;AAC1E,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,KAAA,CAAM,KAAK,CAAA,EAAG,UAAU,eAAe,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA,CAAE,CAAA;AAAA,EAChE;AAEA,EAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,eAAA,CAAgB,QAAA,CAAS,CAAC,CAAA,EAAI,UAAA,EAAY,CAAA,KAAM,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,OAAO,CAAC,CAAA;AAAA,EAC7F;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,aAAA,CAAc,MAAsB,OAAA,EAAqC;AACvF,EAAA,MAAM,IAAA,GAAoC;AAAA,IACxC,OAAA,EAAS,SAAS,OAAA,IAAW,KAAA;AAAA,IAC7B,cAAA,EAAgB,SAAS,cAAA,IAAkB,QAAA;AAAA,IAC3C,YAAA,EAAc,SAAS,YAAA,IAAgB,KAAA;AAAA,IACvC,KAAA,EAAO,SAAS,KAAA,IAAS,KAAA;AAAA,IACzB,kBAAA,EAAoB,SAAS,kBAAA,IAAsB,EAAA;AAAA,IACnD,OAAA,EAAS,SAAS,OAAA,IAAW;AAAA,GAC/B;AAEA,EAAA,MAAM,MAAA,GAAS,CAAA,IAAA,EAAO,IAAA,CAAK,KAAK,CAAA,CAAA;AAChC,EAAA,MAAM,KAAA,GAAkB,CAAC,MAAM,CAAA;AAE/B,EAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,eAAA,CAAgB,QAAA,CAAS,CAAC,CAAA,EAAI,EAAA,EAAI,CAAA,KAAM,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,IAAI,CAAC,CAAA;AAAA,EAClF;AAEA,EAAA,IAAI,KAAK,OAAA,EAAS;AAChB,IAAA,MAAM,EAAA,GAAK,KAAK,QAAA,CAAS,mBAAA;AACzB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,IAAA,IAAQ,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,GAAA,IAAO,CAAA;AACxC,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AACrB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,CAAE,CAAA;AACnD,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,KAAK,CAAA,CAAE,CAAA;AAC9B,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,IAAI,CAAA,CAAE,CAAA;AAC5B,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,cAAA,EAAiB,EAAA,CAAG,QAAQ,CAAA,WAAA,EAAc,EAAA,CAAG,UAAU,CAAA,aAAA,EAAgB,EAAA,CAAG,SAAS,CAAA,YAAA,EAAe,EAAA,CAAG,OAAO,CAAA,QAAA;AAAA,KAC9G;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,IAAA,KAAA,CAAM,KAAK,kEAAkE,CAAA;AAAA,EAC/E;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEO,SAAS,cAAA,CAAe,OAAyB,OAAA,EAAqC;AAC3F,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,aAAA,CAAc,GAAG,OAAO,CAAC,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA;AAChE;;;ACvIA,SAAS,gBAAA,CACP,KACA,OAAA,EAC2B;AAC3B,EAAA,MAAM,aACJ,OAAO,OAAA,CAAQ,IAAA,KAAS,QAAA,IAAY,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA,IAAK,QAAQ,IAAA,GAAO,CAAA,GAChF,KAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GACvB,MAAA;AACN,EAAA,MAAM,IAAA,GAAO,OAAO,OAAA,CAAQ,IAAA,KAAS,QAAA,IAAY,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAK,KAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,GAAO,MAAA;AAE7F,EAAA,IAAI,UAAA,KAAe,MAAA,IAAa,IAAA,KAAS,MAAA,EAAW,OAAO,GAAA;AAE3D,EAAA,MAAM,SAAA,GAAY,CAAC,CAAA,MAAmC;AAAA,IACpD,GAAG,CAAA;AAAA,IACH,GAAI,UAAA,KAAe,MAAA,GAAY,EAAE,IAAA,EAAM,UAAA,KAAe,EAAC;AAAA,IACvD,GAAI,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,KAAS;AAAC,GACvC,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,MAAqC;AAAA,IACvD,GAAG,CAAA;AAAA,IACH,GAAI,UAAA,KAAe,MAAA,GAAY,EAAE,IAAA,EAAM,UAAA,KAAe,EAAC;AAAA,IACvD,GAAI,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,KAAS;AAAC,GACvC,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA;AAAA,IAClC,QAAA,EAAU,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,UAAU;AAAA,GACvC;AACF;AAEA,SAAS,eAAA,CAAgB,MAAc,MAAA,EAAsD;AAC3F,EAAA,IAAI,MAAA,IAAU,MAAA,KAAW,MAAA,EAAQ,OAAO,MAAA;AACxC,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG,OAAO,MAAA;AACpC,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,YAAA,CACd,IAAA,EACA,OAAA,GAA+B,EAAC,EACL;AAC3B,EAAA,MAAM,GAAA,GAAM,OAAO,IAAA,KAAS,QAAA,GAAW,IAAA,GAAO,EAAA;AAC9C,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,EAAA,IAAI,OAAA,KAAY,IAAI,OAAO,EAAE,SAAS,EAAC,EAAG,QAAA,EAAU,EAAC,EAAE;AAEvD,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,GAAA,EAAK,OAAA,CAAQ,MAAM,CAAA;AAClD,EAAA,MAAM,IAAA,GACJ,WAAW,MAAA,GACP,IAAI,eAAc,CAAE,UAAA,CAAW,CAAC,GAAG,CAAA,EAAG,QAAQ,IAAI,CAAA,GAClD,IAAI,YAAA,EAAa,CAAE,WAAW,CAAC,GAAG,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAA;AAIvD,EAAA,OAAO,gBAAA,CAAiB,MAAM,OAAO,CAAA;AACvC;;;AC7CO,IAAM,qBAAN,MAAyB;AAAA,EACrB,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EAEA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EAET,UAA0B,EAAC;AAAA,EAC3B,YAA6B,EAAC;AAAA,EAC9B,SAA2B,EAAC;AAAA,EAE5B,YAAY,OAAA,EAAoC;AAE9C,IAAA,IAAA,CAAK,OAAA,GAAU,oBAAA,CAAqB,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AACtD,IAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,MAAA,IAAU,MAAA;AACjC,IAAA,IAAA,CAAK,QAAQ,OAAA,CAAQ,IAAA;AAErB,IAAA,IAAA,CAAK,cAAc,IAAI,eAAA,CAAgB,EAAE,MAAA,EAAQ,IAAA,CAAK,SAAS,CAAA;AAC/D,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,QAAA,CAAS,EAAE,OAAO,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAC5D,IAAA,IAAA,CAAK,eAAe,IAAI,WAAA,CAAY,EAAE,MAAA,EAAQ,IAAA,CAAK,SAAS,CAAA;AAAA,EAC9D;AAAA,EAEA,QAAA,CAAS,MAAc,UAAA,EAAoC;AACzD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,aAAa,IAAA,EAAM;AAAA,QAChC,QAAQ,IAAA,CAAK,OAAA;AAAA,QACb,MAAM,IAAA,CAAK,KAAA;AAAA,QACX,IAAA,EAAM;AAAA,OACP,CAAA;AAED,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,WAAA,CAAY,YAAA,CAAa,OAAO,OAAO,CAAA;AAG/D,MAAA,MAAM,cAAA,GAAiB,UAAA,CAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACpD,GAAG,CAAA;AAAA,QACH,UAAA,EAAY,EAAE,UAAA,GAAa,IAAA,CAAK,UAAU,YAAA,CAAa,CAAA,CAAE,UAAU,CAAA,GAAI,KAAA;AAAA,OACzE,CAAE,CAAA;AAEF,MAAA,IAAA,CAAK,UAAU,CAAC,GAAG,IAAA,CAAK,OAAA,EAAS,GAAG,cAAc,CAAA;AAClD,MAAA,IAAA,CAAK,SAAA,GAAY,CAAC,GAAG,IAAA,CAAK,SAAA,EAAW,GAAG,MAAA,CAAO,QAAA,EAAU,GAAG,UAAA,CAAW,QAAQ,CAAA;AAC/E,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,KAAA,CAAM,KAAK,OAAO,CAAA;AAElD,MAAA,OAAO;AAAA,QACL,QAAQ,IAAA,CAAK,OAAA;AAAA,QACb,OAAO,IAAA,CAAK,MAAA;AAAA,QACZ,UAAU,IAAA,CAAK;AAAA,OACjB;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,MAAA,MAAM,OAAA,GAAyB;AAAA,QAC7B,IAAA,EAAM,SAAA;AAAA,QACN,OAAA,EAAS,8CAA8C,GAAG,CAAA,CAAA,CAAA;AAAA,QAC1D,MAAM,IAAA,CAAK,KAAA;AAAA,QACX,IAAA,EAAM,UAAA;AAAA,QACN,GAAA,EAAK,OAAO,IAAA,KAAS,QAAA,GAAW,KAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,GAAI;AAAA,OACvD;AACA,MAAA,IAAA,CAAK,SAAA,GAAY,CAAC,GAAG,IAAA,CAAK,WAAW,OAAO,CAAA;AAC5C,MAAA,OAAO,EAAE,QAAQ,IAAA,CAAK,OAAA,EAAS,OAAO,IAAA,CAAK,MAAA,EAAQ,QAAA,EAAU,IAAA,CAAK,SAAA,EAAU;AAAA,IAC9E;AAAA,EACF;AAAA,EAEA,SAAA,GAA4B;AAC1B,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEA,QAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA,EAEA,WAAA,GAA+B;AAC7B,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,UAAU,EAAC;AAChB,IAAA,IAAA,CAAK,SAAS,EAAC;AACf,IAAA,IAAA,CAAK,YAAY,EAAC;AAAA,EACpB;AACF;;;AChEA,SAAS,kBAAkB,IAAA,EAAkC;AAC3D,EAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,EAAG;AACtC,IAAA,MAAM,CAAA,GAAI,KAAK,IAAA,EAAK;AACpB,IAAA,IAAI,CAAA,KAAM,IAAI,OAAO,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,MAAA;AACT;AAEA,eAAe,aACb,QAAA,EAC4B;AAC5B,EAAA,MAAM,IAAA,GAAO,MAAMC,QAAAA,CAAS,QAAA,EAAU,OAAO,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,kBAAkB,IAAI,CAAA;AACpC,EAAA,IAAI,CAAC,OAAO,OAAO,QAAA;AACnB,EAAA,IAAI,CAAC,KAAA,CAAM,UAAA,CAAW,GAAG,GAAG,OAAO,QAAA;AACnC,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC/B,IAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG,OAAO,MAAA;AAAA,EAC7E,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,cAAA,CACP,KACA,OAAA,EACiB;AACjB,EAAA,MAAM,WAAqC,EAAC;AAC5C,EAAA,KAAA,MAAW,CAAA,IAAK;AAAA,IACd,WAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF,EAAY;AACV,IAAA,MAAM,CAAA,GAAK,QAAgB,CAAC,CAAA;AAC5B,IAAA,IAAI,CAAA,KAAM,MAAA,EAAY,QAAA,CAAiB,CAAC,CAAA,GAAI,CAAA;AAAA,EAC9C;AACA,EAAA,OAAO,oBAAA,CAAqB,KAAK,QAAQ,CAAA;AAC3C;AAMA,eAAsB,gBAAA,CACpB,QAAA,EACA,OAAA,GAA4B,EAAC,EACH;AAC1B,EAAA,MAAM,OACJ,OAAA,CAAQ,MAAA,IACP,MAAM,mBAAA,CAAoB,QAAQ,UAAU,CAAA;AAC/C,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,IAAA,EAAM,OAAO,CAAA;AAE3C,EAAA,MAAM,MAAA,GACJ,OAAA,CAAQ,MAAA,KAAW,MAAA,IAAU,OAAA,CAAQ,MAAA,KAAW,MAAA,GAC5C,MAAM,YAAA,CAAa,QAAQ,CAAA,GAC3B,OAAA,CAAQ,MAAA;AAEd,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,IAAA,MAAA,GAAS,MAAM,IAAI,aAAA,EAAc,CAAE,UAAU,QAAQ,CAAA;AAAA,EACvD,CAAA,MAAO;AACL,IAAA,MAAA,GAAS,MAAM,IAAI,YAAA,EAAa,CAAE,UAAU,QAAQ,CAAA;AAAA,EACtD;AAEA,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,CAAgB,EAAE,QAAQ,CAAA;AACjD,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,YAAA,CAAa,MAAA,CAAO,OAAO,CAAA;AAGzD,EAAA,MAAM,WAAW,IAAI,QAAA,CAAS,EAAE,KAAA,EAAO,MAAA,CAAO,QAAQ,CAAA;AACtD,EAAA,MAAM,MAAA,GAAyB,UAAA,CAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IAC5D,GAAG,CAAA;AAAA,IACH,YAAY,CAAA,CAAE,UAAA,GAAa,SAAS,YAAA,CAAa,CAAA,CAAE,UAAU,CAAA,GAAI;AAAA,GACnE,CAAE,CAAA;AAEF,EAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY,EAAE,QAAQ,CAAA,CAAE,MAAM,MAAM,CAAA;AAEtD,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAU,CAAC,GAAG,OAAO,QAAA,EAAU,GAAG,WAAW,QAAQ;AAAA,GACvD;AACF;;;ACtHO,SAAS,cAAc,QAAA,EAA0B;AACtD,EAAA,MAAM,MAAM,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,CAAS,MAAK,GAAI,EAAA;AAC7D,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,oBAAoB,CAAA;AAC5C,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,4BAA4B,QAAQ,CAAA,qFAAA;AAAA,KACtC;AAAA,EACF;AAEA,EAAA,MAAM,SAAS,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,CAAC,GAAG,EAAE,CAAA;AAC3C,EAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AAEpB,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IAAK,UAAU,CAAA,EAAG;AAC3C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,4BAA4B,QAAQ,CAAA,oCAAA;AAAA,KACtC;AAAA,EACF;AAEA,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,IAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,MAAA,GAAS,GAAA;AAAA,IAClB,KAAK,GAAA;AACH,MAAA,OAAO,SAAS,EAAA,GAAK,GAAA;AAAA,IACvB,KAAK,GAAA;AACH,MAAA,OAAO,MAAA,GAAS,KAAK,EAAA,GAAK,GAAA;AAAA,IAC5B,KAAK,GAAA;AACH,MAAA,OAAO,MAAA,GAAS,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA;AAAA,IACjC,SAAS;AAEP,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAE,CAAA;AAAA,IAClD;AAAA;AAEJ;AAEO,SAAS,eAAe,EAAA,EAAoB;AACjD,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAK,CAAA,EAAG;AACV,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6CAAA,EAAgD,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,EACvE;AACA,EAAA,IAAI,KAAK,GAAA,EAAM;AACb,IAAA,OAAO,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,EAAE,CAAC,CAAA,EAAA,CAAA;AAAA,EAC1B;AACA,EAAA,IAAI,KAAK,GAAA,EAAQ;AACf,IAAA,OAAO,CAAA,EAAA,CAAI,EAAA,GAAK,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,EAClC;AACA,EAAA,IAAI,KAAK,IAAA,EAAW;AAClB,IAAA,OAAO,CAAA,EAAA,CAAI,EAAA,GAAK,GAAA,EAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,EACpC;AACA,EAAA,OAAO,CAAA,EAAA,CAAI,EAAA,GAAK,IAAA,EAAW,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AACvC;;;AClDO,IAAM,sBAAA,GAAyB;AAG/B,IAAM,aAAA,GAAgB;AAGtB,IAAM,qBAAqB,IAAA,CAAK,IAAA;AAAA,EACrC,GAAG,MAAA,EAAO;AAAA,EACV,eAAA;AAAA,EACA;AACF;AAGO,IAAM,eAAA,GAAkB;AAGxB,SAAS,WAAA,GAAsB;AACpC,EAAA,OAAO,CAAA,IAAA,EAAOC,MAAAA,CAAO,EAAE,CAAC,CAAA,CAAA;AAC1B;AAGO,SAAS,YAAA,GAAuB;AACrC,EAAA,OAAO,CAAA,KAAA,EAAQA,MAAAA,CAAO,EAAE,CAAC,CAAA,CAAA;AAC3B;AAGO,SAASC,gBAAe,EAAA,EAAoB;AACjD,EAAA,OAAO,eAAiB,EAAE,CAAA;AAC5B;AAMO,SAAS,gBAAgB,SAAA,EAA2B;AACzD,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,EAAG;AAC/B,IAAA,OAAO,cAAA;AAAA,EACT;AACA,EAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,SAAS,CAAA;AAC5B,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,CAAA,CAAE,OAAA,EAAS,CAAA,EAAG;AAC7B,IAAA,OAAO,cAAA;AAAA,EACT;AACA,EAAA,MAAM,CAAA,GAAI,EAAE,WAAA,EAAY;AACxB,EAAA,MAAM,EAAA,GAAK,OAAO,CAAA,CAAE,QAAA,KAAa,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AACnD,EAAA,MAAM,GAAA,GAAM,OAAO,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAC/C,EAAA,MAAM,CAAA,GAAI,OAAO,CAAA,CAAE,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAC9C,EAAA,MAAM,GAAA,GAAM,OAAO,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAClD,EAAA,MAAM,CAAA,GAAI,OAAO,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAChD,EAAA,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AAC3C;AAMO,SAAS,kBAAA,GAA6B;AAC3C,EAAA,MAAM,MAAA,GAAS,QAAQ,GAAA,CAAI,uBAAA;AAC3B,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,CAAO,IAAA,OAAW,EAAA,EAAI;AACtD,IAAA,OAAO,OAAO,IAAA,EAAK;AAAA,EACrB;AACA,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,GAAG,OAAA,EAAQ;AACxB,IAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,IAAA,OAAW,EAAA,EAAI;AAClD,MAAA,OAAO,kBAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,sBAAA,EAAwB,aAAa,CAAA;AAAA,EAC9D,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,kBAAA;AAAA,EACT;AACF;AAMO,SAAS,gBAAA,CAAiB,OAAe,QAAA,EAA2B;AACzE,EAAA,MAAM,OAAA,GAAU,YAAY,kBAAA,EAAmB;AAC/C,EAAA,IAAI,MAAA,GACF,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAK,KAAM,EAAA,GAAK,KAAA,CAAM,IAAA,EAAK,GAAI,aAAA;AACpE,EAAA,MAAA,GAAS,IAAA,CAAK,SAAS,MAAM,CAAA;AAC7B,EAAA,IAAI,MAAA,KAAW,EAAA,IAAM,MAAA,KAAW,GAAA,IAAO,WAAW,IAAA,EAAM;AACtD,IAAA,MAAA,GAAS,aAAA;AAAA,EACX;AACA,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG,MAAM,CAAA,MAAA,CAAQ,CAAA;AAC7C;AAOA,eAAsB,eAAe,QAAA,EAAmC;AACtE,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AACrC,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,CAAM,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AACxC,IAAA,OAAO,OAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,IAAA,CAAK,CAAA,kCAAA,EAAqC,OAAO,CAAA,CAAE,CAAA;AACnD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,kBAAkB,CAAA;AAChD,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,CAAM,QAAA,EAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AACzC,MAAA,OAAO,QAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,IAAA,CAAK,CAAA,2CAAA,EAA8C,QAAQ,CAAA,CAAE,CAAA;AAC7D,MAAA,OAAO,OAAA;AAAA,IACT;AAAA,EACF;AACF;AAMO,SAAS,YAAY,KAAA,EAA2B;AACrD,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,MAAM,GAAA,GAAiB,EAAE,OAAA,EAAS,KAAA,CAAM,OAAA,EAAQ;AAChD,IAAA,IAAI,OAAO,KAAA,CAAM,KAAA,KAAU,YAAY,KAAA,CAAM,KAAA,CAAM,SAAS,CAAA,EAAG;AAC7D,MAAA,GAAA,CAAI,QAAQ,KAAA,CAAM,KAAA;AAAA,IACpB;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,EAC1B;AACA,EAAA,IAAI,UAAU,IAAA,EAAM;AAClB,IAAA,OAAO,EAAE,SAAS,qBAAA,EAAsB;AAAA,EAC1C;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,EAAE,SAAS,0BAAA,EAA2B;AAAA,EAC/C;AACA,EAAA,IACE,OAAO,UAAU,QAAA,IACjB,OAAO,UAAU,SAAA,IACjB,OAAO,UAAU,QAAA,EACjB;AACA,IAAA,OAAO,EAAE,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA,EAAE;AAAA,EAClC;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI;AACF,MAAA,OAAO,EAAE,OAAA,EAAS,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,EAAE;AAAA,IAC1C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAE,SAAS,eAAA,EAAgB;AAAA,IACpC;AAAA,EACF;AACA,EAAA,OAAO,EAAE,SAAS,eAAA,EAAgB;AACpC;AAMO,SAAS,YAAA,CAAa,IAAA,EAAc,SAAA,GAAY,eAAA,EAAyB;AAC9E,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,IAAA,OAAW,EAAA,EAAI;AAClD,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,EAAA,IAAI,OAAA,CAAQ,UAAU,SAAA,EAAW;AAC/B,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,MAAM,QAAA,GAAW,KAAA;AACjB,EAAA,MAAM,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,SAAA,GAAY,SAAS,MAAM,CAAA;AACpD,EAAA,OAAO,GAAG,OAAA,CAAQ,KAAA,CAAM,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAA,CAAA;AAC7C;AAMO,SAAS,IAAA,CAAK,SAAiB,KAAA,EAAuB;AAC3D,EAAA,MAAM,IAAA,GAAO,kBAAkB,OAAO,CAAA,CAAA;AACtC,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AACjB,IAAA;AAAA,EACF;AACA,EAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,IAAI,CAAA,EAAA,EAAK,YAAY,KAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AACvD;AChLA,IAAM,OAAA,GAAU,IAAI,iBAAA,EAA2C;AAE/D,SAAS,gBAAgB,GAAA,EAAgD;AACvE,EAAA,OAAO;AAAA,IACL,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,UAAU,GAAA,CAAI,QAAA;AAAA,IACd,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,UAAU,GAAA,CAAI;AAAA,GAChB;AACF;AAEA,SAAS,OAAU,EAAA,EAAsC;AACvD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,QAAQ,EAAA,EAAI,CAAA,CAAE,IAAA,CAAK,SAAS,MAAM,CAAA;AAAA,IAC5C,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,CAAC,CAAA;AAAA,IACV;AAAA,EACF,CAAC,CAAA;AACH;AAGO,SAAS,iBAAA,GAAkD;AAChE,EAAA,IAAI;AACF,IAAA,MAAM,CAAA,GAAI,QAAQ,QAAA,EAAS;AAC3B,IAAA,IAAI,CAAC,GAAG,OAAO,KAAA,CAAA;AACf,IAAA,OAAO,gBAAgB,CAAC,CAAA;AAAA,EAC1B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAGO,SAAS,eAAA,GAAsC;AACpD,EAAA,IAAI;AACF,IAAA,OAAO,OAAA,CAAQ,UAAS,EAAG,KAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAGO,SAAS,iBAAA,GAAwC;AACtD,EAAA,IAAI;AACF,IAAA,OAAO,OAAA,CAAQ,UAAS,EAAG,OAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAMO,SAAS,gBAAA,GAAuC;AACrD,EAAA,IAAI;AACF,IAAA,OAAO,OAAA,CAAQ,UAAS,EAAG,aAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAGO,SAAS,eAAA,GAAsC;AACpD,EAAA,OAAO,gBAAA,EAAiB;AAC1B;AAMO,SAAS,eAAA,GAA0B;AACxC,EAAA,IAAI;AACF,IAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,QAAA,EAAS,EAAG,YAAA;AAC9B,IAAA,OAAO,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI,CAAA;AAAA,EAC3D,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,CAAA;AAAA,EACT;AACF;AAEO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,IAAI;AACF,IAAA,OAAO,OAAA,CAAQ,UAAS,KAAM,KAAA,CAAA;AAAA,EAChC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,sBAAA,GAA6C;AAC3D,EAAA,IAAI;AACF,IAAA,OAAO,OAAA,CAAQ,UAAS,EAAG,QAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEO,SAAS,eAAA,GAA2B;AACzC,EAAA,IAAI;AACF,IAAA,MAAM,CAAA,GAAI,QAAQ,QAAA,EAAS;AAC3B,IAAA,OAAO,CAAA,GAAI,EAAE,MAAA,GAAS,KAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAMO,SAAS,cAAA,CACd,SACA,EAAA,EACY;AACZ,EAAA,MAAM,OAAA,GAAmC;AAAA,IACvC,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,YAAA,EAAc;AAAA,GAChB;AAEA,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,OAAA,CAAQ,GAAA,CAAI,SAAS,MAAM;AACzB,MAAA,IAAI;AACF,QAAA,OAAA,CAAQ,QAAQ,EAAA,EAAI,CAAA,CAAE,IAAA,CAAK,SAAS,MAAM,CAAA;AAAA,MAC5C,SAAS,CAAA,EAAG;AACV,QAAA,MAAA,CAAO,CAAC,CAAA;AAAA,MACV;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAMO,SAAS,kBAAA,CACd,QACA,EAAA,EACY;AACZ,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,QAAQ,QAAA,EAAS;AAAA,EAC5B,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,GAAS,MAAA;AAAA,EACX;AAEA,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,OAAO,EAAE,CAAA;AAAA,EAClB;AAEA,EAAA,MAAM,OAAA,GAAmC;AAAA,IACvC,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,aAAA,EAAe,MAAA;AAAA,IACf,YAAA,EAAc,OAAO,YAAA,GAAe;AAAA,GACtC;AAEA,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,OAAA,CAAQ,GAAA,CAAI,SAAS,MAAM;AACzB,MAAA,IAAI;AACF,QAAA,OAAA,CAAQ,QAAQ,EAAA,EAAI,CAAA,CAAE,IAAA,CAAK,SAAS,MAAM,CAAA;AAAA,MAC5C,SAAS,CAAA,EAAG;AACV,QAAA,MAAA,CAAO,CAAC,CAAA;AAAA,MACV;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;ACzKA,SAASH,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,eAAe,KAAA,EAAiC;AACvD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAK,KAAM,EAAA;AACvD;AAEA,SAAS,aAAa,KAAA,EAAiC;AACrD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,SAAS,KAAK,CAAA;AAC3D;AAEA,SAAS,kBAAkB,KAAA,EAAyB;AAClD,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,IAAA;AAChC,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AAC7B,EAAA,IAAI,OAAO,KAAA,CAAM,OAAA,KAAY,QAAA,EAAU,OAAO,KAAA;AAC9C,EAAA,IAAI,OAAA,IAAW,KAAA,IAAS,KAAA,CAAM,KAAA,KAAU,MAAA,EAAW;AACjD,IAAA,IAAI,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AAAA,EAC9C;AACA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,cAAc,KAAA,EAAqC;AACjE,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,aAAA,KAAkB,KAAA,EAAO,OAAO,KAAA;AAC1C,EAAA,IAAI,CAAC,YAAA,CAAa,KAAA,CAAM,SAAS,GAAG,OAAO,KAAA;AAC3C,EAAA,IAAI,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AAE5C,EAAA,QAAQ,MAAM,KAAA;AAAO,IACnB,KAAK,aAAA,EAAe;AAClB,MAAA,IACE,CAAC,cAAA,CAAe,KAAA,CAAM,KAAK,KAC3B,CAAC,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA,IAC1B,CAAC,YAAA,CAAa,KAAA,CAAM,SAAS,CAAA,EAC7B;AACA,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,IAAI,MAAM,QAAA,KAAa,MAAA,IAAa,CAACA,SAAAA,CAAS,KAAA,CAAM,QAAQ,CAAA,EAAG;AAC7D,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,IACA,KAAK,eAAA,EAAiB;AACpB,MAAA,OACE,cAAA,CAAe,MAAM,KAAK,CAAA,KACzB,MAAM,MAAA,KAAW,SAAA,IAAa,MAAM,MAAA,KAAW,OAAA,CAAA,IAChD,aAAa,KAAA,CAAM,OAAO,KAC1B,YAAA,CAAa,KAAA,CAAM,UAAU,CAAA,IAC7B,iBAAA,CAAkB,MAAM,KAAK,CAAA;AAAA,IAEjC;AAAA,IACA,KAAK,cAAA,EAAgB;AACnB,MAAA,IACE,CAAC,cAAA,CAAe,KAAA,CAAM,KAAK,CAAA,IAC3B,CAAC,cAAA,CAAe,KAAA,CAAM,MAAM,CAAA,IAC5B,CAAC,cAAA,CAAe,MAAM,IAAI,CAAA,IAC1B,CAAC,UAAA,CAAW,KAAA,CAAM,IAAI,KACtB,CAAC,YAAA,CAAa,KAAA,CAAM,SAAS,CAAA,EAC7B;AACA,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,IAAI,MAAM,QAAA,KAAa,MAAA,IAAa,OAAO,KAAA,CAAM,aAAa,QAAA,EAAU;AACtE,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,IAAI,MAAM,QAAA,KAAa,MAAA,IAAa,CAACA,SAAAA,CAAS,KAAA,CAAM,QAAQ,CAAA,EAAG;AAC7D,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,IACA,KAAK,gBAAA,EAAkB;AACrB,MAAA,OACE,cAAA,CAAe,KAAA,CAAM,KAAK,CAAA,IAC1B,cAAA,CAAe,MAAM,MAAM,CAAA,KAC1B,KAAA,CAAM,MAAA,KAAW,SAAA,IAAa,KAAA,CAAM,WAAW,OAAA,CAAA,IAChD,YAAA,CAAa,KAAA,CAAM,OAAO,CAAA,IAC1B,YAAA,CAAa,MAAM,UAAU,CAAA,IAC7B,iBAAA,CAAkB,KAAA,CAAM,KAAK,CAAA;AAAA,IAEjC;AAAA,IACA;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAGO,SAAS,eAAe,KAAA,EAA2B;AACxD,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAA;AAAA,EACT;AACF;AAMA,eAAsB,mBAAA,CACpB,OACA,QAAA,EAC6B;AAC7B,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,QAAQ,CAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,KAAA,EAAO,MAAM,CAAA;AAC/C,IAAA,MAAM,SAAA,CAAU,QAAA,EAAU,EAAA,EAAI,OAAO,CAAA;AACrC,IAAA,OAAO,QAAA;AAAA,EACT,SAAS,CAAA,EAAG;AACV,IAAA,IAAA,CAAK,mCAAmC,CAAC,CAAA;AAAA,EAC3C;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,kBAAkB,CAAA;AACtD,IAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,KAAA,EAAO,MAAM,CAAA;AAC/C,IAAA,MAAM,SAAA,CAAU,QAAA,EAAU,EAAA,EAAI,OAAO,CAAA;AACrC,IAAA,OAAO,QAAA;AAAA,EACT,SAAS,CAAA,EAAG;AACV,IAAA,IAAA,CAAK,yDAAyD,CAAC,CAAA;AAC/D,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKA,eAAsB,eAAA,CACpB,OACA,QAAA,EACe;AACf,EAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG;AACzB,IAAA,IAAA,CAAK,iDAAiD,CAAA;AACtD,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,eAAe,KAAK,CAAA;AACjC,EAAA,IAAI,SAAS,EAAA,EAAI;AACf,IAAA,IAAA,CAAK,4CAA4C,CAAA;AACjD,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,GAAG,IAAI;AAAA,CAAA;AAEvB,EAAA,MAAM,SAAA,GAAY,OAAO,GAAA,KAAkC;AACzD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,GAAG,CAAA;AACvC,MAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,KAAA,CAAM,KAAA,EAAO,MAAM,CAAA;AACrD,MAAA,MAAM,UAAA,CAAW,QAAA,EAAU,OAAA,EAAS,OAAO,CAAA;AAC3C,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,MAAM,SAAA,CAAU,QAAQ,CAAA,EAAG;AAC7B,IAAA;AAAA,EACF;AAEA,EAAA,IAAA,CAAK,CAAA,qCAAA,EAAwC,KAAA,CAAM,KAAK,CAAA,CAAE,CAAA;AAE1D,EAAA,IAAI,MAAM,SAAA,CAAU,kBAAkB,CAAA,EAAG;AACvC,IAAA;AAAA,EACF;AAEA,EAAA,IAAA,CAAK,oDAAoD,CAAA;AAC3D;AAKA,eAAsB,aAAA,CACpB,OACA,QAAA,EAC6B;AAC7B,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,KAAA,EAAO,QAAQ,CAAA;AACjD,IAAA,OAAO,MAAMC,QAAAA,CAAS,QAAA,EAAU,OAAO,CAAA;AAAA,EACzC,SAAS,CAAA,EAAG;AACV,IAAA,IAAI,CAAA,IAAK,OAAO,CAAA,KAAM,QAAA,IAAY,UAAU,CAAA,IAAK,CAAA,CAAE,SAAS,QAAA,EAAU;AACpE,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,uCAAuC,CAAC,CAAA;AAC7C,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAGA,eAAsB,eAAA,CACpB,OACA,QAAA,EACuB;AACvB,EAAA,MAAM,MAAoB,EAAC;AAC3B,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,aAAA,CAAc,KAAA,EAAO,QAAQ,CAAA;AAC/C,IAAA,IAAI,QAAQ,KAAA,CAAA,EAAW;AACrB,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAC5B,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,MAAA,IAAI,YAAY,EAAA,EAAI;AACpB,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,MAC7B,CAAA,CAAA,MAAQ;AACN,QAAA,IAAA,CAAK,yCAAyC,CAAA;AAC9C,QAAA;AAAA,MACF;AACA,MAAA,IAAI,aAAA,CAAc,MAAM,CAAA,EAAG;AACzB,QAAA,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,MACjB,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,gDAAgD,CAAA;AAAA,MACvD;AAAA,IACF;AAAA,EACF,SAAS,CAAA,EAAG;AACV,IAAA,IAAA,CAAK,+BAA+B,CAAC,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,GAAA;AACT;AAKA,eAAsB,eAAe,QAAA,EAAqC;AACxE,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAASG,IAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AACpC,IAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,MAAM,CAAA;AAClC,IAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAC,CAAA;AACtD,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC7B,KAAA,CAAM,GAAA,CAAI,OAAO,IAAA,KAAS;AACxB,QAAA,IAAI;AACF,UAAA,MAAM,KAAK,MAAM,IAAA,CAAKA,KAAK,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAC,CAAA;AAC7C,UAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,CAAG,OAAA,EAAQ;AAAA,QACnC,CAAA,CAAA,MAAQ;AACN,UAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA,EAAE;AAAA,QAC1B;AAAA,MACF,CAAC;AAAA,KACH;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACtB,MAAA,IAAI,EAAE,KAAA,KAAU,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,QAAQ,CAAA,CAAE,KAAA;AAC5C,MAAA,OAAO,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAA;AAAA,IACpC,CAAC,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,EACnC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAGO,SAAS,0BAA0B,QAAA,EAAsC;AAC9E,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAOA,IAAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AACnC,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,QAAQ,GAAG,OAAO,KAAA,CAAA;AACrC,IAAA,MAAM,KAAK,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,SAAS,MAAM,CAAA;AACzC,IAAA,OAAO,EAAA,KAAO,KAAK,KAAA,CAAA,GAAY,EAAA;AAAA,EACjC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;ACrQO,SAAS,eAAA,CAAgB,OAAA,GAAiC,EAAC,EAAW;AAC3E,EAAA,IAAI,OAAO,QAAQ,GAAA,KAAQ,QAAA,IAAY,QAAQ,GAAA,CAAI,IAAA,OAAW,EAAA,EAAI;AAChE,IAAA,OAAO,OAAA,CAAQ,IAAI,IAAA,EAAK;AAAA,EAC1B;AACA,EAAA,MAAM,MAAA,GAAS,QAAQ,GAAA,CAAI,uBAAA;AAC3B,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,CAAO,IAAA,OAAW,EAAA,EAAI;AACtD,IAAA,OAAO,OAAO,IAAA,EAAK;AAAA,EACrB;AACA,EAAA,OAAO,kBAAA,EAAmB;AAC5B;AAEO,IAAM,iBAAN,MAAqB;AAAA,EACjB,IAAA;AAAA,EAET,WAAA,CAAY,OAAA,GAAiC,EAAC,EAAG;AAC/C,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAgB,OAAO,CAAA;AAAA,EACrC;AAAA,EAEA,QAAQ,QAAA,EAA2B;AACjC,IAAA,OAAO,WAAWA,IAAAA,CAAK,IAAA,CAAK,KAAK,IAAA,EAAM,QAAQ,IAAI,IAAA,CAAK,IAAA;AAAA,EAC1D;AAAA,EAEA,MAAM,IAAA,GAA0B;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAMC,OAAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AACrC,MAAA,OAAO,MAAM,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAC,CAAA;AAAA,IACjD,SAAS,CAAA,EAAG;AACV,MAAA,IAAI,CAAA,IAAK,OAAO,CAAA,KAAM,QAAA,IAAY,UAAU,CAAA,IAAK,CAAA,CAAE,SAAS,QAAA,EAAU;AACpE,QAAA,OAAO,EAAC;AAAA,MACV;AACA,MAAA,MAAM,CAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,QAAA,EAAkC;AACnD,IAAA,OAAO,MAAMC,IAAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,EAC1C;AACF;AC7BA,SAASC,gBAAe,CAAA,EAAyB;AAC/C,EAAA,OAAO,OAAO,CAAA,KAAM,QAAA,IAAY,MAAA,CAAO,SAAS,CAAC,CAAA;AACnD;AAEA,SAAS,cAAc,IAAA,EAAmC;AACxD,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,eAAsB,eAAA,CACpB,UACA,UAAA,EACwB;AACxB,EAAA,MAAM,KAAA,GAAQ,MAAMD,IAAAA,CAAK,QAAQ,CAAA;AAEjC,EAAA,IAAI,aAAA,GAAgBF,IAAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAC1C,EAAA,IAAI,aAAA,CAAc,QAAA,CAAS,QAAQ,CAAA,EAAG;AACpC,IAAA,aAAA,GAAgB,aAAA,CAAc,KAAA,CAAM,CAAA,EAAG,CAAC,SAAS,MAAM,CAAA;AAAA,EACzD;AAEA,EAAA,MAAM,GAAA,GAAM,MAAMH,QAAAA,CAAS,QAAA,EAAU,OAAO,CAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA;AAE/B,EAAA,IAAI,UAAA,GAAa,CAAA;AACjB,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,kBAAA;AAEJ,EAAA,IAAI,aAAA,GAAgB,KAAA;AACpB,EAAA,IAAI,eAAA,GAAkB,KAAA;AACtB,EAAA,IAAI,kBAAA;AACJ,EAAA,IAAI,YAAA,GAAe,KAAA;AACnB,EAAA,IAAI,aAAA,GAAgB,KAAA;AAEpB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,IAAA,IAAI,YAAY,EAAA,EAAI;AACpB,IAAA,MAAM,MAAA,GAAS,cAAc,OAAO,CAAA;AACpC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,IAAI,CAAC,YAAA,CAAa,MAAM,CAAA,EAAG;AAE3B,IAAA,MAAM,CAAA,GAAI,MAAA;AACV,IAAA,aAAA,GAAgB,IAAA;AAChB,IAAA,UAAA,IAAc,CAAA;AAEd,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,OAAQ,CAAA,CAAU,UAAU,QAAA,EAAU;AAC/D,MAAA,KAAA,GAAS,CAAA,CAAU,KAAA;AAAA,IACrB;AAEA,IAAA,IAAI,CAAA,CAAE,UAAU,aAAA,EAAe;AAC7B,MAAA,aAAA,GAAgB,IAAA;AAChB,MAAA,MAAM,EAAA,GAAK,CAAA;AACX,MAAA,IAAI,OAAO,GAAG,IAAA,KAAS,QAAA,IAAY,GAAG,IAAA,CAAK,IAAA,OAAW,EAAA,EAAI;AACxD,QAAA,IAAA,GAAO,EAAA,CAAG,IAAA;AAAA,MACZ;AACA,MAAA,IAAIM,eAAAA,CAAe,EAAA,CAAG,SAAS,CAAA,EAAG;AAChC,QAAA,SAAA,GAAY,EAAA,CAAG,SAAA;AAAA,MACjB,CAAA,MAAA,IAAWA,eAAAA,CAAe,EAAA,CAAG,SAAS,CAAA,EAAG;AACvC,QAAA,SAAA,GAAY,EAAA,CAAG,SAAA;AAAA,MACjB;AAAA,IACF;AAEA,IAAA,IAAI,CAAA,CAAE,UAAU,eAAA,EAAiB;AAC/B,MAAA,eAAA,GAAkB,IAAA;AAClB,MAAA,MAAM,EAAA,GAAK,CAAA;AACX,MAAA,kBAAA,GAAqB,EAAA,CAAG,MAAA;AACxB,MAAA,IAAIA,eAAAA,CAAe,EAAA,CAAG,OAAO,CAAA,YAAa,EAAA,CAAG,OAAA;AAAA,WAAA,IACpCA,eAAAA,CAAe,EAAA,CAAG,SAAS,CAAA,YAAa,EAAA,CAAG,SAAA;AACpD,MAAA,IAAIA,eAAAA,CAAe,EAAA,CAAG,UAAU,CAAA,uBAAwB,EAAA,CAAG,UAAA;AAAA,IAC7D;AAEA,IAAA,IAAI,CAAA,CAAE,UAAU,gBAAA,EAAkB;AAChC,MAAA,MAAM,EAAA,GAAK,CAAA;AACX,MAAA,IAAI,EAAA,CAAG,WAAW,OAAA,EAAS;AACzB,QAAA,YAAA,GAAe,IAAA;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,gBAAgB,KAAA,IAAS,aAAA;AAE/B,EAAA,IAAI,MAAA,GAA8B,SAAA;AAClC,EAAA,IAAI,eAAA,KAAoB,kBAAA,KAAuB,SAAA,IAAa,kBAAA,KAAuB,OAAA,CAAA,EAAU;AAC3F,IAAA,MAAA,GAAS,kBAAA;AAAA,EACX,WAAW,YAAA,EAAc;AAEvB,IAAA,MAAA,GAAS,OAAA;AAAA,EACX,CAAA,MAAA,IAAW,aAAA,IAAiB,CAAC,eAAA,EAAiB;AAC5C,IAAA,MAAA,GAAS,SAAA;AAAA,EACX,WAAW,aAAA,EAAe;AACxB,IAAA,MAAA,GAAS,SAAA;AAAA,EACX,CAAA,MAAO;AACL,IAAA,MAAA,GAAS,SAAA;AAAA,EACX;AAEA,EAAA,MAAM,aACJ,kBAAA,KACC,SAAA,KAAc,MAAA,IACf,OAAA,KAAY,UACZ,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,IACzB,OAAO,QAAA,CAAS,OAAO,KACvB,OAAA,IAAW,SAAA,GACP,UAAU,SAAA,GACV,MAAA,CAAA;AAEN,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,aAAA;AAAA,IACP,IAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAU,KAAA,CAAM,IAAA;AAAA,IAChB,WAAW,KAAA,CAAM;AAAA,GACnB;AACF;AAYO,SAAS,gBAAgB,MAAA,EAAkC;AAChE,EAAA,MAAM,UAAU,MAAA,CAAO,IAAA;AAAA,IACrB,CAAC,CAAA,KAA4B,CAAA,CAAE,KAAA,KAAU;AAAA,GAC3C;AACA,EAAA,MAAM,YAAY,MAAA,CAAO,MAAA;AAAA,IACvB,CAAC,CAAA,KAA8B,CAAA,CAAE,KAAA,KAAU;AAAA,GAC7C;AACA,EAAA,MAAM,aAAA,GAAgB,SAAA,CAAU,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA;AAEpD,EAAA,MAAM,KAAA,GAAQ,OAAA,EAAS,KAAA,IAAS,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAW,OAAO,CAAA,CAAE,KAAA,KAAU,QAAQ,CAAA,EAAG,KAAA,IAAS,aAAA;AAE/F,EAAA,MAAM,IAAA,GACJ,OAAO,OAAA,EAAS,IAAA,KAAS,QAAA,IAAY,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAK,KAAM,EAAA,GACzD,OAAA,CAAQ,IAAA,GACR,MAAA;AAEN,EAAA,MAAM,MAAA,GAA8B,aAAA,GAChC,aAAA,CAAc,MAAA,GACd,UACE,SAAA,GACA,SAAA;AAEN,EAAA,MAAM,aACJ,aAAA,IAAiBA,eAAAA,CAAe,cAAc,UAAU,CAAA,GACpD,cAAc,UAAA,GACd,MAAA;AAEN,EACE,OAAA,IAAWA,eAAAA,CAAe,QAAQ,SAAS,CAAA,GACvC,QAAQ,SAAA,GACR;AAEN,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAqB;AAEvC,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAA,CAAE,UAAU,cAAA,EAAgB;AAC9B,MAAA,MAAM,CAAA,GAAI,CAAA;AACV,MAAA,KAAA,CAAM,GAAA,CAAI,EAAE,MAAA,EAAQ;AAAA,QAClB,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,MAAA,EAAQ,SAAA;AAAA,QACR,UAAU,CAAA,CAAE,QAAA;AAAA,QACZ,WAAA,EACE,OAAO,CAAA,CAAE,QAAA,EAAU,MAAA,EAAQ,UAAU,QAAA,GAAW,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,KAAA,GAAQ,MAAA;AAAA,QAC5E,YAAA,EACE,OAAO,CAAA,CAAE,QAAA,EAAU,MAAA,EAAQ,WAAW,QAAA,GAAW,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,MAAA,GAAS;AAAA,OAC/E,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAA,CAAE,UAAU,gBAAA,EAAkB;AAChC,MAAA,MAAM,CAAA,GAAI,CAAA;AACV,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA;AACnC,MAAA,IAAI,CAAC,QAAA,EAAU;AACf,MAAA,QAAA,CAAS,SAAS,CAAA,CAAE,MAAA;AACpB,MAAA,QAAA,CAAS,aAAa,CAAA,CAAE,UAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,IAAI,UAAA,GAAa,CAAA;AACjB,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,IAAI,UAAA,GAAa,CAAA;AACjB,EAAA,IAAI,UAAA,GAAa,CAAA;AACjB,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,IAAI,WAAA;AAEJ,EAAA,IAAI,gBAAA,GAAmB,CAAA;AACvB,EAAA,IAAI,iBAAA,GAAoB,CAAA;AACxB,EAAA,IAAI,YAAA,GAAe,KAAA;AAEnB,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAoB;AAC3C,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,KAA2B;AAC/C,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA;AACpC,IAAA,IAAI,MAAA,KAAW,QAAW,OAAO,MAAA;AACjC,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA;AAC7B,IAAA,IAAI,CAAC,MAAM,OAAO,CAAA;AAClB,IAAA,MAAM,SAAS,IAAA,CAAK,QAAA;AACpB,IAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,CAAO,IAAA,EAAK,KAAM,EAAA,IAAM,CAAC,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,EAAG;AAC5E,MAAA,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAC,CAAA;AACxB,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,KAAM,YAAA,CAAa,MAAM,IAAI,CAAC,CAAA;AACjD,IAAA,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAC,CAAA;AACxB,IAAA,OAAO,CAAA;AAAA,EACT,CAAA;AAEA,EAAA,KAAA,MAAW,CAAC,EAAA,EAAI,CAAC,CAAA,IAAK,KAAA,CAAM,SAAQ,EAAG;AACrC,IAAA,UAAA,IAAc,CAAA;AACd,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,KAAA,EAAO,QAAA,IAAY,CAAA;AAAA,SAAA,IACzB,CAAA,CAAE,IAAA,KAAS,MAAA,EAAQ,SAAA,IAAa,CAAA;AAAA,SACpC,UAAA,IAAc,CAAA;AAEnB,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,OAAA,EAAS,UAAA,IAAc,CAAA;AACxC,IAAA,MAAM,KAAA,GAAQ,aAAa,EAAE,CAAA;AAC7B,IAAA,IAAI,KAAA,GAAQ,UAAU,QAAA,GAAW,KAAA;AAEjC,IAAA,IAAI,OAAO,EAAE,UAAA,KAAe,QAAA,IAAY,OAAO,QAAA,CAAS,CAAA,CAAE,UAAU,CAAA,EAAG;AACrE,MAAA,IAAI,CAAC,WAAA,IAAe,CAAA,CAAE,UAAA,GAAa,YAAY,UAAA,EAAY;AACzD,QAAA,WAAA,GAAc,EAAE,MAAM,CAAA,CAAE,IAAA,EAAM,YAAY,CAAA,CAAE,UAAA,EAAY,IAAA,EAAM,CAAA,CAAE,IAAA,EAAK;AAAA,MACvE;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,CAAA,CAAE,WAAA,KAAgB,YAAY,OAAO,CAAA,CAAE,iBAAiB,QAAA,EAAU;AAC3E,MAAA,YAAA,GAAe,IAAA;AACf,MAAA,IAAI,OAAO,CAAA,CAAE,WAAA,KAAgB,QAAA,sBAA8B,CAAA,CAAE,WAAA;AAC7D,MAAA,IAAI,OAAO,CAAA,CAAE,YAAA,KAAiB,QAAA,uBAA+B,CAAA,CAAE,YAAA;AAAA,IACjE;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAsB;AAAA,IAC1B,KAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAI,WAAA,GAAc,EAAE,WAAA,KAAgB,EAAC;AAAA,IACrC,GAAI,YAAA,GACA,EAAE,WAAA,EAAa,EAAE,KAAA,EAAO,gBAAA,EAAkB,MAAA,EAAQ,iBAAA,EAAkB,EAAE,GACtE;AAAC,GACP;AAIA,EAAA,OAAO,OAAA;AACT;;;AClRA,SAAS,QAAQ,CAAA,EAA+B;AAC9C,EAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,CAAE,aAAY,GAAI,EAAA;AACnD;AAEO,SAAS,YAAA,CACd,QACA,OAAA,EACiB;AACjB,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,MAAM,CAAA;AAExB,EAAA,IAAI,GAAA,GAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM;AAC5B,IAAA,IAAI,QAAQ,MAAA,IAAU,CAAA,CAAE,MAAA,KAAW,OAAA,CAAQ,QAAQ,OAAO,KAAA;AAE1D,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,IAAA,CAAK,WAAA,EAAY;AACnC,MAAA,MAAM,GAAA,GAAM,CAAA,EAAG,OAAA,CAAQ,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA,EAAI,OAAA,CAAQ,CAAA,CAAE,KAAK,CAAC,CAAA,CAAA;AAClD,MAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,CAAC,GAAG,OAAO,KAAA;AAAA,IAC/B;AAEA,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,MAAM,QAAA,GAAW,aAAA,CAAc,OAAA,CAAQ,KAAK,CAAA;AAC5C,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,EAAI,GAAI,QAAA;AAC5B,MAAA,MAAM,UAAU,OAAO,CAAA,CAAE,SAAA,KAAc,QAAA,GAAW,EAAE,SAAA,GAAY,MAAA;AAChE,MAAA,MAAM,KAAA,GAAQ,OAAA,IAAW,CAAA,CAAE,SAAA,CAAU,OAAA,EAAQ;AAC7C,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAK,KAAA,GAAQ,QAAQ,OAAO,KAAA;AAAA,IACxD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACjB,IAAA,MAAM,KAAA,GAAA,CAAS,OAAO,CAAA,CAAE,SAAA,KAAc,QAAA,GAAW,EAAE,SAAA,GAAY,MAAA,KAAc,CAAA,CAAE,SAAA,CAAU,OAAA,EAAQ;AACjG,IAAA,MAAM,KAAA,GAAA,CAAS,OAAO,CAAA,CAAE,SAAA,KAAc,QAAA,GAAW,EAAE,SAAA,GAAY,MAAA,KAAc,CAAA,CAAE,SAAA,CAAU,OAAA,EAAQ;AACjG,IAAA,OAAO,KAAA,GAAQ,KAAA;AAAA,EACjB,CAAC,CAAA;AAED,EAAA,IAAI,OAAO,QAAQ,KAAA,KAAU,QAAA,IAAY,OAAO,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,EAAG;AACvE,IAAA,MAAM,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAC,CAAA;AAC/C,IAAA,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAAA,EACtB;AAEA,EAAA,OAAO,GAAA;AACT;AC/CA,IAAM,YAAA,uBAAmB,GAAA,CAAI;AAAA,EAC3B,aAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAASP,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,UAAU,IAAA,EAAmC;AACpD,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAMA,eAAsB,oBAAoB,QAAA,EAAoC;AAC5E,EAAA,IAAI;AACF,IAAA,MAAM,KAAK,eAAA,CAAgB;AAAA,MACzB,OAAO,gBAAA,CAAiB,QAAA,EAAU,EAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,MACtD,SAAA,EAAW;AAAA,KACZ,CAAA;AAED,IAAA,IAAI,OAAA,GAAU,CAAA;AACd,IAAA,WAAA,MAAiB,QAAQ,EAAA,EAAI;AAC3B,MAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,MAAA,IAAI,YAAY,EAAA,EAAI;AACpB,MAAA,MAAM,MAAA,GAAS,UAAU,OAAO,CAAA;AAChC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,IAAI,CAACA,SAAAA,CAAS,MAAM,CAAA,EAAG;AAEvB,MAAA,OAAA,IAAW,CAAA;AAGX,MAAA,IAAI,YAAA,CAAa,MAAM,CAAA,EAAG,OAAO,IAAA;AAGjC,MAAA,MAAM,KAAK,MAAA,CAAO,KAAA;AAClB,MAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,MAAA,IAAI,OAAO,OAAO,QAAA,IAAY,YAAA,CAAa,IAAI,EAAE,CAAA,IAAK,OAAO,KAAA,KAAU,QAAA,EAAU;AAC/E,QAAA,OAAO,IAAA;AAAA,MACT;AAGA,MAAA,IAAI,WAAW,EAAA,EAAI;AAAA,IACrB;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;;;ACvCA,SAAS,qBAAqB,IAAA,EAAoD;AAChF,EAAA,IAAI,IAAA,KAAS,QAAW,OAAO,MAAA;AAC/B,EAAA,IAAI,eAAA,IAAmB,IAAA,EAAM,OAAO,IAAA,CAAK,aAAA;AACzC,EAAA,IAAI,eAAA,IAAmB,IAAA,EAAM,OAAO,IAAA,CAAK,aAAA;AACzC,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,cAAc,CAAA,EAA4C;AACjE,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,SAAA;AAC5B,EAAA,OAAO,CAAA;AACT;AAMO,SAAS,iCAAiC,MAAA,EAAqC;AACpF,EAAA,MAAM,UAAU,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,aAAa,CAAA;AAC5D,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,KAAA,KAAU,aAAA,EAAe;AAC/C,IAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,EACtD;AAEA,EAAA,MAAM,EAAA,GAAK,OAAA;AACX,EAAA,MAAM,QAAQ,EAAA,CAAG,KAAA;AAEjB,EAAA,MAAM,eAAe,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,eAAe,CAAA;AACrE,EAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,YAAA,CAAa,MAAA,GAAS,CAAC,CAAA;AAE1D,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,aAAA,KAAkB,QAAW,SAAA,GAAY,SAAA;AAAA,mBAC5B,aAAA,CAAc,MAAA;AAE/B,EAAA,MAAM,UAAA,GACJ,kBAAkB,MAAA,IAAa,MAAA,CAAO,SAAS,aAAA,CAAc,UAAU,CAAA,GACnE,aAAA,CAAc,UAAA,GACd,MAAA;AAEN,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAqB;AACvC,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAA,CAAE,UAAU,cAAA,EAAgB;AAChC,IAAA,MAAM,CAAA,GAAI,CAAA;AACV,IAAA,MAAM,OAAO,CAAA,CAAE,QAAA,GAAW,EAAE,GAAI,CAAA,CAAE,UAAqC,GAAI,MAAA;AAC3E,IAAA,KAAA,CAAM,GAAA,CAAI,EAAE,MAAA,EAAQ;AAAA,MAClB,IAAI,CAAA,CAAE,MAAA;AAAA,MACN,UAAU,CAAA,CAAE,QAAA;AAAA,MACZ,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,KAAA,EAAO,KAAA,EAAA;AAAA,MACP,WAAW,CAAA,CAAE,SAAA;AAAA,MACb,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH;AAEA,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAA,CAAE,UAAU,gBAAA,EAAkB;AAClC,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA;AAC9B,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,GAAA,CAAI,SAAS,CAAA,CAAE,MAAA;AACf,IAAA,GAAA,CAAI,aAAa,CAAA,CAAE,UAAA;AACnB,IAAA,IAAI,EAAE,KAAA,EAAO,OAAA,EAAS,GAAA,CAAI,QAAA,GAAW,EAAE,KAAA,CAAM,OAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,CAAA;AACd,IAAA,IAAI,MAAM,QAAA,KAAa,MAAA,IAAa,OAAO,KAAA,CAAM,aAAa,QAAA,EAAU;AACtE,MAAA,GAAA,CAAI,QAAA,GAAW,EAAE,GAAI,GAAA,CAAI,YAAY,EAAC,EAAI,GAAG,KAAA,CAAM,QAAA,EAAS;AAAA,IAC9D;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,uBAAY,GAAA,EAA4B;AAE9C,EAAA,KAAA,MAAW,GAAA,IAAO,KAAA,CAAM,MAAA,EAAO,EAAG;AAChC,IAAA,IAAI,OAAO,GAAA,CAAI,QAAA,GAAW,EAAE,GAAG,GAAA,CAAI,UAAS,GAAI,MAAA;AAChD,IAAA,IAAI,GAAA,CAAI,aAAa,MAAA,IAAa,CAAC,MAAM,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC1D,MAAA,IAAA,GAAO,EAAE,GAAI,IAAA,IAAQ,EAAC,EAAI,mCAAmC,IAAA,EAAK;AAAA,IACpE;AAEA,IAAA,MAAM,aAAA,GAAgB,qBAAqB,IAAI,CAAA;AAE/C,IAAA,MAAM,EAAA,GAAqB;AAAA,MACzB,IAAI,GAAA,CAAI,EAAA;AAAA,MACR,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,MAAA,EAAQ,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA;AAAA,MAChC,YAAY,GAAA,CAAI,UAAA;AAAA,MAChB,OAAO,GAAA,CAAI,QAAA;AAAA,MACX,QAAA,EAAU,QAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA,GAAS,IAAI,IAAA,GAAO,MAAA;AAAA,MACxD,aAAA;AAAA,MACA,UAAU;AAAC,KACb;AACA,IAAA,KAAA,CAAM,GAAA,CAAI,GAAA,CAAI,EAAA,EAAI,EAAE,CAAA;AAAA,EACtB;AAEA,EAAA,MAAM,QAA0B,EAAC;AACjC,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,EAAmB,CAAA,KAAsB;AAC5D,IAAA,MAAM,KAAK,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,EAAE,GAAG,KAAA,IAAS,CAAA;AACrC,IAAA,MAAM,KAAK,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,EAAE,GAAG,KAAA,IAAS,CAAA;AACrC,IAAA,OAAO,EAAA,GAAK,EAAA;AAAA,EACd,CAAA;AAEA,EAAA,KAAA,MAAW,GAAA,IAAO,KAAA,CAAM,MAAA,EAAO,EAAG;AAChC,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA;AAC7B,IAAA,IAAI,IAAI,QAAA,KAAa,MAAA,IAAa,MAAM,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAA,EAAG;AACzD,MAAA,KAAA,CAAM,IAAI,GAAA,CAAI,QAAQ,CAAA,CAAG,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IAC7C,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,IACjB;AAAA,EACF;AAEA,EAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AACtB,EAAA,KAAA,MAAW,CAAA,IAAK,KAAA,CAAM,MAAA,EAAO,EAAG;AAC9B,IAAA,CAAA,CAAE,QAAA,CAAS,KAAK,WAAW,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,MAAM,EAAA,CAAG,IAAA;AAAA,IACT,MAAA,EAAQ,SAAA;AAAA,IACR,UAAA;AAAA,IACA,KAAA,EAAO;AAAA,GACT;AACF;;;AC9IA,IAAM,iBAAA,GAAoB;AAAA,EACxB,eAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,gBAAgB,GAAA,EAAsB;AAC7C,EAAA,MAAM,CAAA,GAAI,IAAI,WAAA,EAAY;AAC1B,EAAA,KAAA,MAAW,KAAK,iBAAA,EAAmB;AACjC,IAAA,IAAI,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,EAAG,OAAO,IAAA;AAAA,EAC5B;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAASQ,WAAAA,CAAW,OAAgB,SAAA,EAA4B;AACrE,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,EAAA;AAClD,EAAA,IAAI,CAAA;AACJ,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,CAAA,GAAI,KAAA;AAAA,OAAA,IAC1B,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,SAAA,EAAW,CAAA,GAAI,OAAO,KAAK,CAAA;AAAA,OAC7E,CAAA,GAAI,UAAA,CAAW,KAAA,EAAO,KAAK,CAAA;AAChC,EAAA,IAAI,cAAc,MAAA,IAAa,SAAA,IAAa,CAAA,IAAK,CAAA,CAAE,SAAS,SAAA,EAAW;AACrE,IAAA,OAAO,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,SAAS,CAAC,CAAA,MAAA,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,CAAA;AACT;AAGO,SAAS,eAAe,KAAA,EAAuB;AACpD,EAAA,OAAO,KAAA,CACJ,OAAA,CAAQ,KAAA,EAAO,KAAK,EACpB,OAAA,CAAQ,OAAA,EAAS,IAAI,CAAA,CACrB,QAAQ,KAAA,EAAO,IAAI,CAAA,CACnB,OAAA,CAAQ,OAAO,GAAG,CAAA;AACvB;AAEO,SAAS,WAAW,KAAA,EAAuB;AAChD,EAAA,OAAO,MACJ,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA,CACrB,OAAA,CAAQ,MAAM,MAAM,CAAA,CACpB,QAAQ,IAAA,EAAM,MAAM,EACpB,OAAA,CAAQ,IAAA,EAAM,QAAQ,CAAA,CACtB,OAAA,CAAQ,MAAM,OAAO,CAAA;AAC1B;AAEA,SAAS,aAAa,KAAA,EAAyB;AAC7C,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AACxD,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,KAAA,CAAM,IAAI,YAAY,CAAA;AACvD,EAAA,MAAM,CAAA,GAAI,KAAA;AACV,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,KAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,MAAK,EAAG;AACrC,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,YAAA,CAAa,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,UAAA,CAAW,OAAgB,MAAA,EAA0B;AACnE,EAAA,MAAM,MAAA,GAAS,aAAa,KAAK,CAAA;AACjC,EAAA,OAAO,MAAA,KAAW,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,MAAM,CAAC,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AAClF;AAEO,SAAS,iBAAA,CACd,OACA,OAAA,EACyB;AACzB,EAAA,IAAI,KAAA,KAAU,MAAA,EAAW,OAAO,EAAC;AACjC,EAAA,MAAM,MAAA,GAAS,SAAS,SAAA,IAAa,GAAA;AACrC,EAAA,MAAM,QAAA,GAAW,SAAS,QAAA,IAAY,IAAA;AACtC,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAK,EAAG;AAC3C,IAAA,IAAI,QAAA,IAAY,eAAA,CAAgB,GAAG,CAAA,EAAG;AACpC,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,YAAA;AACX,MAAA;AAAA,IACF;AACA,IAAA,MAAM,CAAA,GAAI,MAAM,GAAG,CAAA;AACnB,IAAA,GAAA,CAAI,GAAG,CAAA,GAAI,YAAA,CAAa,CAAA,EAAG,QAAQ,QAAQ,CAAA;AAAA,EAC7C;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,YAAA,CAAa,KAAA,EAAgB,MAAA,EAAgB,QAAA,EAA4B;AAChF,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,EAAU;AAC/C,IAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAWA,WAAAA,CAAW,KAAA,EAAO,MAAM,CAAA,GAAI,KAAA;AAAA,EACjE;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,EAAG,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAC3E,IAAA,IAAI,KAAA,CAAM,SAAS,EAAA,EAAI,GAAA,CAAI,KAAK,CAAA,QAAA,EAAM,KAAA,CAAM,MAAA,GAAS,EAAE,CAAA,MAAA,CAAQ,CAAA;AAC/D,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,MAAM,CAAA,GAAI,KAAA;AACV,EAAA,MAAM,QAAiC,EAAC;AACxC,EAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG;AAC9B,IAAA,IAAI,YAAY,eAAA,CAAgB,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,GAAI,YAAA;AAAA,SAC1C,KAAA,CAAM,CAAC,CAAA,GAAI,YAAA,CAAa,EAAE,CAAC,CAAA,EAAG,QAAQ,QAAQ,CAAA;AAAA,EACrD;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,cAAc,IAAA,EAA+C;AAC3E,EAAA,MAAM,IAAA,GAAO,YAAY,IAAI,CAAA;AAC7B,EAAA,MAAM,UAAA,GAAa,KAAK,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,KAAA,CAAM,MAAA,KAAW,OAAO,CAAA,CAAE,MAAA;AAClE,EAAA,OAAO;AAAA,IACL,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,WAAW,IAAA,CAAK,MAAA;AAAA,IAChB,cAAA,EAAgB,UAAA;AAAA,IAChB,WAAA,EAAa,KAAK,QAAA,CAAS,WAAA;AAAA,IAC3B,mBAAA,EAAqB,EAAE,GAAG,IAAA,CAAK,SAAS,mBAAA,EAAoB;AAAA,IAC5D,KAAA,EAAO,EAAE,GAAG,IAAA,CAAK,SAAS,KAAA;AAAM,GAClC;AACF;AAGO,SAAS,YAAY,IAAA,EAAqC;AAC/D,EAAA,MAAM,MAAqB,EAAC;AAC5B,EAAA,SAAS,KAAK,KAAA,EAA4B;AACxC,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,GAAA,CAAI,KAAK,CAAC,CAAA;AACV,MAAA,IAAI,EAAE,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,EAAE,QAAQ,CAAA;AAAA,IAC5C;AAAA,EACF;AACA,EAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAClB,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,SAAA,GAAyC;AACvD,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,CAAA;AAAA,IACL,KAAA,EAAO,CAAA;AAAA,IACP,GAAA,EAAK,CAAA;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,SAAA,EAAW,CAAA;AAAA,IACX,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ,CAAA;AAAA,IACR,KAAA,EAAO,CAAA;AAAA,IACP,KAAA,EAAO,CAAA;AAAA,IACP,GAAA,EAAK;AAAA,GACP;AACF;;;ACtIA,IAAM,oBAAA,GAAuB,CAAA;AAE7B,SAAS,OAAA,CAAQC,OAAsB,KAAA,EAAgC;AACrE,EAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAMA,MAAK,IAAA,EAAM,MAAA,EAAQA,MAAK,EAAA,EAAG;AACnD;AAEA,SAAS,UAAU,QAAA,EAAuC;AACxD,EAAA,OAAO,EAAE,IAAA,EAAM,CAAC,GAAG,QAAQ,CAAA,EAAE;AAC/B;AAGO,SAAS,SAAA,CACd,MACA,KAAA,EACiE;AACjE,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAY;AAClC,EAAA,MAAM,QAAyE,EAAC;AAEhF,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,CAAA,GAAI,KAAK,CAAC,CAAA;AAChB,IAAA,IAAI,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,CAAC,MAAM,CAAC,SAAA,CAAU,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,IAAK,CAAA,CAAE,EAAA,KAAO,EAAE,EAAE,CAAA;AAC/D,IAAA,IAAI,CAAA,KAAM,MAAA,IAAa,CAAA,GAAI,KAAA,CAAM,MAAA,IAAU,CAAC,SAAA,CAAU,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,CAAG,EAAE,CAAA,EAAG;AACvE,MAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,CAAE,IAAA,IAAA,CAAS,KAAK,IAAA,IAAQ,EAAA,OAAS,CAAA,CAAE,IAAA,IAAQ,EAAA,CAAA,EAAK;AAChE,QAAA,CAAA,GAAI,IAAA;AAAA,MACN;AAAA,IACF;AACA,IAAA,IAAI,MAAM,MAAA,EAAW;AACnB,MAAA,CAAA,GAAI,KAAA,CAAM,IAAA;AAAA,QACR,CAAC,CAAA,KACC,CAAC,SAAA,CAAU,GAAA,CAAI,EAAE,EAAE,CAAA,IACnB,CAAA,CAAE,IAAA,KAAS,EAAE,IAAA,IAAA,CACZ,CAAA,CAAE,IAAA,IAAQ,EAAA,OAAS,EAAE,IAAA,IAAQ,EAAA;AAAA,OAClC;AAAA,IACF;AACA,IAAA,IAAI,MAAM,MAAA,EAAW;AACnB,MAAA,SAAA,CAAU,GAAA,CAAI,EAAE,EAAE,CAAA;AAClB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACnB,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,MAAS,CAAC,CAAA;AAAA,IAC3B;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,CAAC,SAAA,CAAU,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,EAAG;AACxB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAC,MAAA,EAAW,CAAC,CAAC,CAAA;AAAA,IAC3B;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,gBAAA,CACP,CAAA,EACA,CAAA,EACA,QAAA,EACA,MACA,GAAA,EACM;AACN,EAAA,MAAML,KAAAA,GAAO,UAAU,QAAQ,CAAA;AAE/B,EAAA,IAAI,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,IAAA,EAAM;AACrB,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,WAAA;AAAA,MACN,QAAA,EAAU,SAAA;AAAA,MACV,OAAA,EAAS,mBAAA;AAAA,MACT,IAAA,EAAAA,KAAAA;AAAA,MACA,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,OAAO,CAAA,CAAE;AAAA,KACV,CAAA;AAAA,EACH;AAEA,EAAA,IAAA,CAAK,CAAA,CAAE,IAAA,IAAQ,EAAA,OAAS,CAAA,CAAE,QAAQ,EAAA,CAAA,EAAK;AACrC,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,WAAA;AAAA,MACN,QAAA,EAAU,SAAA;AAAA,MACV,OAAA,EAAS,mBAAA;AAAA,MACT,IAAA,EAAAA,KAAAA;AAAA,MACA,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,OAAO,CAAA,CAAE;AAAA,KACV,CAAA;AAAA,EACH;AAEA,EAAA,IAAA,CAAK,CAAA,CAAE,MAAA,IAAU,EAAA,OAAS,CAAA,CAAE,UAAU,EAAA,CAAA,EAAK;AACzC,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,aAAA;AAAA,MACN,QAAA,EAAU,SAAA;AAAA,MACV,OAAA,EAAS,qBAAA;AAAA,MACT,IAAA,EAAAA,KAAAA;AAAA,MACA,MAAM,CAAA,CAAE,MAAA;AAAA,MACR,OAAO,CAAA,CAAE;AAAA,KACV,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,EAAA,GAAK,EAAE,KAAA,IAAS,EAAA;AACtB,EAAA,MAAM,EAAA,GAAK,EAAE,KAAA,IAAS,EAAA;AACtB,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,OAAA;AAAA,MACN,QAAA,EAAU,OAAA;AAAA,MACV,OAAA,EAAS,4BAAA;AAAA,MACT,IAAA,EAAAA,KAAAA;AAAA,MACA,MAAM,EAAA,IAAM,MAAA;AAAA,MACZ,OAAO,EAAA,IAAM;AAAA,KACd,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AACxB,IAAA,MAAM,KAAK,CAAA,CAAE,UAAA;AACb,IAAA,MAAM,KAAK,CAAA,CAAE,UAAA;AACb,IAAA,MAAM,KAAK,IAAA,CAAK,mBAAA;AAChB,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,IAAI,EAAA,KAAO,MAAA,IAAa,EAAA,KAAO,MAAA,EAAW,OAAA,GAAU,KAAA;AAAA,SAAA,IAC3C,EAAA,KAAO,MAAA,IAAa,EAAA,KAAO,MAAA,EAAW,OAAA,GAAU,IAAA;AAAA,SACpD,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,EAAA,GAAK,EAAE,CAAA,GAAI,EAAA;AACnC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU,MAAA;AAAA,QACV,OAAA,EAAS,uBAAA;AAAA,QACT,IAAA,EAAAA,KAAAA;AAAA,QACA,IAAA,EAAM,EAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,MAAM,EAAA,GAAK,UAAA,CAAW,CAAA,CAAE,QAAA,IAAY,EAAE,CAAA;AACtC,EAAA,MAAM,EAAA,GAAK,UAAA,CAAW,CAAA,CAAE,QAAA,IAAY,EAAE,CAAA;AACtC,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,UAAA;AAAA,MACN,QAAA,EAAU,MAAA;AAAA,MACV,OAAA,EAAS,uBAAA;AAAA,MACT,IAAA,EAAAA,KAAAA;AAAA,MACA,MAAM,CAAA,CAAE,QAAA;AAAA,MACR,OAAO,CAAA,CAAE;AAAA,KACV,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,EAAA,GAAK,UAAA,CAAW,CAAA,CAAE,aAAA,IAAiB,IAAI,CAAA;AAC7C,EAAA,MAAM,EAAA,GAAK,UAAA,CAAW,CAAA,CAAE,aAAA,IAAiB,IAAI,CAAA;AAC7C,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,MAAA;AAAA,MACV,OAAA,EAAS,wBAAA;AAAA,MACT,IAAA,EAAAA,KAAAA;AAAA,MACA,MAAM,CAAA,CAAE,aAAA;AAAA,MACR,OAAO,CAAA,CAAE;AAAA,KACV,CAAA;AAAA,EACH;AACF;AAEA,SAAS,gBAAA,CACP,CAAA,EACA,CAAA,EACA,QAAA,EACA,MACA,GAAA,EACM;AACN,EAAA,gBAAA,CAAiB,CAAA,EAAG,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,GAAG,CAAA;AAE1C,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,CAAA,CAAE,QAAA,EAAU,EAAE,QAAQ,CAAA;AAC9C,EAAA,IAAI,EAAA,GAAK,CAAA;AACT,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,CAAA,IAAK,KAAA,EAAO;AAC9B,IAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,KAAQ,MAAA,EAAW;AAC1C,MAAA,gBAAA,CAAiB,GAAA,EAAK,GAAA,EAAK,CAAC,GAAG,QAAA,EAAU,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAC,CAAA,EAAG,IAAA,EAAM,GAAG,CAAA;AAAA,IACvE,CAAA,MAAA,IAAW,QAAQ,MAAA,EAAW;AAC5B,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,IAAA,EAAM,cAAA;AAAA,QACN,QAAA,EAAU,SAAA;AAAA,QACV,OAAA,EAAS,CAAA,uBAAA,EAA0B,GAAA,CAAI,IAAI,CAAA,CAAA;AAAA,QAC3C,IAAA,EAAM,UAAU,CAAC,GAAG,UAAU,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAC,CAAC,CAAA;AAAA,QAC/C,MAAM,GAAA,CAAI,EAAA;AAAA,QACV,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH,CAAA,MAAA,IAAW,QAAQ,MAAA,EAAW;AAC5B,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,IAAA,EAAM,YAAA;AAAA,QACN,QAAA,EAAU,SAAA;AAAA,QACV,OAAA,EAAS,CAAA,wBAAA,EAA2B,GAAA,CAAI,IAAI,CAAA,CAAA;AAAA,QAC5C,IAAA,EAAM,UAAU,CAAC,GAAG,UAAU,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAC,CAAC,CAAA;AAAA,QAC/C,IAAA,EAAM,MAAA;AAAA,QACN,OAAO,GAAA,CAAI;AAAA,OACZ,CAAA;AAAA,IACH;AACA,IAAA,EAAA,IAAM,CAAA;AAAA,EACR;AACF;AAEA,SAAS,kBAAkB,OAAA,EAEzB;AACA,EAAA,OAAO;AAAA,IACL,cAAA,EAAgB,SAAS,cAAA,IAAkB,KAAA;AAAA,IAC3C,mBAAA,EACE,OAAA,EAAS,mBAAA,KAAwB,MAAA,GAC7B,QAAQ,mBAAA,GACR,oBAAA;AAAA,IACN,KAAA,EAAO,SAAS,KAAA,IAAS,KAAA;AAAA,IACzB,KAAA,EAAO,SAAS,KAAA,IAAS;AAAA,GAC3B;AACF;AAEA,SAAS,iBAAA,CAAkB,MAAgB,MAAA,EAAuD;AAChG,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,MAAA;AAEzB,EAAA,IAAI,UAAU,KAAA,EAAO;AACnB,IAAA,IAAI,UAAU,WAAA,EAAa;AACzB,MAAA,IAAI,CAAC,CAAC,YAAA,EAAc,cAAA,EAAgB,WAAA,EAAa,WAAW,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,KAAA;AAAA,IACvF,CAAA,MAAA,IAAW,UAAU,SAAA,EAAW;AAC9B,MAAA,IAAI,CAAC,CAAC,UAAA,EAAY,QAAQ,EAAE,QAAA,CAAS,IAAI,GAAG,OAAO,KAAA;AAAA,IACrD,CAAA,MAAA,IAAW,UAAU,QAAA,EAAU;AAC7B,MAAA,IAAI,CAAC,CAAC,YAAA,EAAc,aAAA,EAAe,OAAO,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,KAAA;AAAA,IACrE,CAAA,MAAA,IAAW,UAAU,QAAA,EAAU;AAC7B,MAAA,IAAI,IAAA,KAAS,YAAY,OAAO,KAAA;AAAA,IAClC;AAAA,EACF;AAEA,EAAA,IAAI,UAAU,KAAA,EAAO;AACnB,IAAA,IAAI,UAAU,QAAA,EAAU;AACtB,MAAA,IAAI,CAAC,CAAC,YAAA,EAAc,aAAA,EAAe,OAAO,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,KAAA;AAAA,IACrE,CAAA,MAAA,IAAW,UAAU,WAAA,EAAa;AAChC,MAAA,IAAI,CAAC,CAAC,YAAA,EAAc,cAAA,EAAgB,WAAA,EAAa,WAAW,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,KAAA;AAAA,IACvF,CAAA,MAAA,IAAW,UAAU,SAAA,EAAW;AAC9B,MAAA,IAAI,CAAC,CAAC,UAAA,EAAY,QAAQ,EAAE,QAAA,CAAS,IAAI,GAAG,OAAO,KAAA;AAAA,IACrD;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,QAAA,CACd,IAAA,EACA,KAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,kBAAkB,OAAO,CAAA;AACxC,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,gBAAgB,MAAA,CAAO,cAAA;AAAA,IACvB,qBAAqB,MAAA,CAAO;AAAA,GAC9B;AAEA,EAAA,MAAM,MAAqB,EAAC;AAE5B,EAAA,IAAA,CAAK,IAAA,CAAK,MAAA,IAAU,EAAA,OAAS,KAAA,CAAM,UAAU,EAAA,CAAA,EAAK;AAChD,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,YAAA;AAAA,MACN,QAAA,EAAU,SAAA;AAAA,MACV,OAAA,EAAS,+BAAA;AAAA,MACT,MAAM,IAAA,CAAK,MAAA;AAAA,MACX,OAAO,KAAA,CAAM;AAAA,KACd,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,CAAC,OAAO,cAAA,EAAgB;AAC1B,IAAA,MAAM,KAAK,IAAA,CAAK,UAAA;AAChB,IAAA,MAAM,KAAK,KAAA,CAAM,UAAA;AACjB,IAAA,MAAM,KAAK,MAAA,CAAO,mBAAA;AAClB,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,IAAI,EAAA,KAAO,MAAA,IAAa,EAAA,KAAO,MAAA,EAAW,OAAA,GAAU,KAAA;AAAA,SAAA,IAC3C,EAAA,KAAO,MAAA,IAAa,EAAA,KAAO,MAAA,EAAW,OAAA,GAAU,IAAA;AAAA,SACpD,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,EAAA,GAAK,EAAE,CAAA,GAAI,EAAA;AACnC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU,MAAA;AAAA,QACV,OAAA,EAAS,sBAAA;AAAA,QACT,IAAA,EAAM,EAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,IAAA,CAAK,KAAA,EAAO,MAAM,KAAK,CAAA;AAC/C,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,KAAA,MAAW,CAAC,EAAA,EAAI,EAAE,CAAA,IAAK,KAAA,EAAO;AAC5B,IAAA,IAAI,EAAA,KAAO,MAAA,IAAa,EAAA,KAAO,MAAA,EAAW;AACxC,MAAA,gBAAA,CAAiB,EAAA,EAAI,IAAI,CAAC,OAAA,CAAQ,IAAI,GAAG,CAAC,CAAA,EAAG,IAAA,EAAM,GAAG,CAAA;AACtD,MAAA,GAAA,IAAO,CAAA;AAAA,IACT,CAAA,MAAA,IAAW,OAAO,MAAA,EAAW;AAC3B,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,IAAA,EAAM,cAAA;AAAA,QACN,QAAA,EAAU,SAAA;AAAA,QACV,OAAA,EAAS,CAAA,uBAAA,EAA0B,EAAA,CAAG,IAAI,CAAA,CAAA;AAAA,QAC1C,MAAM,SAAA,CAAU,CAAC,QAAQ,EAAA,EAAI,GAAG,CAAC,CAAC,CAAA;AAAA,QAClC,MAAM,EAAA,CAAG,EAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,GAAA,IAAO,CAAA;AAAA,IACT,CAAA,MAAA,IAAW,OAAO,MAAA,EAAW;AAC3B,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,IAAA,EAAM,YAAA;AAAA,QACN,QAAA,EAAU,SAAA;AAAA,QACV,OAAA,EAAS,CAAA,wBAAA,EAA2B,EAAA,CAAG,IAAI,CAAA,CAAA;AAAA,QAC3C,MAAM,SAAA,CAAU,CAAC,QAAQ,EAAA,EAAI,GAAG,CAAC,CAAC,CAAA;AAAA,QAClC,IAAA,EAAM,MAAA;AAAA,QACN,OAAO,EAAA,CAAG;AAAA,OACX,CAAA;AACD,MAAA,GAAA,IAAO,CAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,IAAI,MAAA,CAAO,CAAC,MAAM,iBAAA,CAAkB,CAAA,CAAE,IAAA,EAAM,MAAM,CAAC,CAAA;AAEvE,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAC3B,IAAA,IAAI,CAAA,CAAE,QAAA,KAAa,OAAA,EAAS,MAAA,IAAU,CAAA;AAAA,SAAA,IAC7B,CAAA,CAAE,QAAA,KAAa,SAAA,EAAW,QAAA,IAAY,CAAA;AAAA,SAC1C,IAAA,IAAQ,CAAA;AAAA,EACf;AAEA,EAAA,MAAM,YAAA,GAAe,YAAY,CAAC,CAAA;AAClC,EAAA,MAAM,eAAA,GACJ,iBAAiB,MAAA,GACb;AAAA,IACE,IAAA,EAAM,kBAAA;AAAA,IACN,UAAU,YAAA,CAAa,QAAA;AAAA,IACvB,OAAA,EAAS,CAAA,kBAAA,EAAqB,YAAA,CAAa,OAAO,CAAA,CAAA;AAAA,IAClD,MAAM,YAAA,CAAa,IAAA;AAAA,IACnB,MAAM,YAAA,CAAa,IAAA;AAAA,IACnB,OAAO,YAAA,CAAa;AAAA,GACtB,GACA,MAAA;AAEN,EAAA,MAAM,OAAA,GAA0B;AAAA,IAC9B,WAAW,IAAA,CAAK,KAAA;AAAA,IAChB,YAAY,KAAA,CAAM,KAAA;AAAA,IAClB,kBAAkB,WAAA,CAAY,MAAA;AAAA,IAC9B,MAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO,EAAE,SAAS,WAAA,EAAY;AAChC;AC7VA,SAAS,WAAWA,KAAAA,EAA8C;AAChE,EAAA,IAAIA,KAAAA,KAAS,MAAA,IAAaA,KAAAA,CAAK,IAAA,CAAK,WAAW,CAAA,EAAG;AAChD,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAOA,KAAAA,CAAK,KAAK,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA;AAChD;AAEA,SAAS,WAAA,CAAY,GAAY,OAAA,EAA0B;AACzD,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,aAAA;AAC5B,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,CAAA;AAClC,EAAA,IAAI,OAAO,MAAM,QAAA,IAAY,OAAO,MAAM,SAAA,EAAW,OAAO,OAAO,CAAC,CAAA;AACpE,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA;AAC1B,EAAA,IAAI,OAAA,IAAW,CAAA,CAAE,MAAA,IAAU,GAAA,EAAK,OAAO,CAAA;AACvC,EAAA,OAAO,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,GAAA,CAAA;AAC3B;AAEO,SAAS,aAAA,CAAc,QAAuB,OAAA,EAAqC;AACxF,EAAA,MAAM,IAAA,GAAO,SAAS,IAAA,KAAS,IAAA;AAC/B,EAAA,MAAM,OAAA,GAAU,SAAS,OAAA,KAAY,IAAA;AACrC,EAAA,MAAM,KAAA,GAAQ,SAAS,KAAA,KAAU,IAAA;AAEjC,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,EAAW,KAAA,KAAgD;AACtE,IAAA,IAAI,CAAC,OAAO,OAAO,CAAA;AACnB,IAAA,IAAI,KAAA,KAAU,OAAA,EAAS,OAAOM,MAAA,CAAM,IAAI,CAAC,CAAA;AACzC,IAAA,IAAI,KAAA,KAAU,SAAA,EAAW,OAAOA,MAAA,CAAM,OAAO,CAAC,CAAA;AAC9C,IAAA,OAAOA,MAAA,CAAM,KAAK,CAAC,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,EAAE,SAAQ,GAAI,MAAA;AAEpB,EAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AACrB,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,OAAA,CAAQ,SAAS,CAAA,CAAE,CAAA;AACxC,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,OAAA,CAAQ,UAAU,CAAA,CAAE,CAAA;AACzC,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AACrB,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,eAAA,EAAkB,OAAA,CAAQ,gBAAgB,CAAA,CAAE,CAAA;AACvD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AACxC,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,YAAA,EAAe,OAAA,CAAQ,QAAQ,CAAA,CAAE,CAAA;AAC5C,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AACpC,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,EAAA,MAAM,KAAK,OAAA,CAAQ,eAAA;AACnB,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,WAAA,CAAY,CAAC,CAAA,EAAG,IAAA;AACzC,EAAA,IAAI,OAAO,MAAA,EAAW;AACpB,IAAA,KAAA,CAAM,KAAK,mBAAmB,CAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,EAAA,CAAG,IAAI,CAAA;AAChC,IAAA,MAAM,WAAA,GAAc,aAAa,EAAA,CAAG,IAAA;AACpC,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,WAAW,CAAA,IAAA,EAAO,KAAK,CAAA,CAAE,CAAA;AACzC,IAAA,IAAI,EAAA,CAAG,IAAA,KAAS,MAAA,IAAa,EAAA,CAAG,UAAU,MAAA,EAAW;AACnD,MAAA,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,WAAA,CAAY,GAAG,IAAA,EAAM,OAAO,CAAC,CAAA,CAAE,CAAA;AACvD,MAAA,KAAA,CAAM,KAAK,CAAA,WAAA,EAAc,WAAA,CAAY,GAAG,KAAA,EAAO,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,IAC3D;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,KAAA,CAAM,KAAK,cAAc,CAAA;AACzB,EAAA,IAAI,MAAA,CAAO,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG;AACnC,IAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AACrB,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,IAAA,KACjB,OAAA,IACA;AAAA,IACE,YAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,CAAE,SAAS,IAAI,CAAA;AAEjB,EAAA,KAAA,MAAW,CAAA,IAAK,OAAO,WAAA,EAAa;AAClC,IAAA,MAAM,MAAM,GAAA,CAAI,CAAA,CAAA,EAAI,EAAE,QAAQ,CAAA,CAAA,CAAA,EAAK,EAAE,QAAQ,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,EAAE,IAAA,KAAS,MAAA,GAAY,IAAI,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA,GAAK,EAAA;AAClE,IAAA,KAAA,CAAM,IAAA,CAAK,KAAK,GAAG,CAAA,CAAA,EAAI,EAAE,IAAI,CAAA,EAAG,OAAO,CAAA,CAAE,CAAA;AACzC,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AAC7B,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,MAAA,IAAa,CAAA,CAAE,UAAU,MAAA,EAAW;AACjD,MAAA,IAAI,SAAA,CAAU,CAAA,CAAE,IAAI,CAAA,EAAG;AACrB,QAAA,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,WAAA,CAAY,EAAE,IAAA,EAAM,OAAO,CAAC,CAAA,CAAE,CAAA;AACtD,QAAA,KAAA,CAAM,KAAK,CAAA,WAAA,EAAc,WAAA,CAAY,EAAE,KAAA,EAAO,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;;;ACrEO,SAAS,eAAA,CACd,UAAA,EACA,WAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,IAAA,GAAO,iCAAiC,UAAU,CAAA;AACxD,EAAA,MAAM,KAAA,GAAQ,iCAAiC,WAAW,CAAA;AAC1D,EAAA,OAAO,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,OAAO,CAAA;AACtC;AC7BO,IAAM,eAAA,GAAkB;AAGxB,IAAM,wBAAA,GAA2B;AAGjC,IAAM,kBAAA,GAAqB;AAElC,SAAS,eAAe,KAAA,EAAuB;AAC7C,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAK,QAAQ,CAAA,EAAG;AACxC,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,KAAK,GAAG,kBAAkB,CAAA;AACvD;AAEA,SAAS,SAAA,CAAU,OAAO,EAAA,EAAU;AAClC,EAAA,IAAI;AACF,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAAA,EAClB,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAGO,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,OAAO,eAAA,CAAgB,MAAA,CAAO,cAAA,CAAe,KAAK,CAAC,CAAA;AACrD;AAGO,SAAS,mBAAmB,IAAA,EAAsB;AACvD,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,IAAA,OAAW,EAAA,EAAI;AAClD,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,OAAO,YAAA,CAAa,MAAM,wBAAwB,CAAA;AACpD;AAEA,SAAS,cAAc,MAAA,EAAwC;AAC7D,EAAA,IAAI,MAAA,KAAW,SAAA,EAAW,OAAOA,MAAAA,CAAM,MAAM,QAAG,CAAA;AAChD,EAAA,IAAI,MAAA,KAAW,OAAA,EAAS,OAAOA,MAAAA,CAAM,IAAI,QAAG,CAAA;AAC5C,EAAA,OAAOA,MAAAA,CAAM,OAAO,QAAG,CAAA;AACzB;AAGO,SAAS,cAAA,CACd,IAAA,EACA,UAAA,EACA,MAAA,EACA,KAAA,EACQ;AACR,EAAA,IAAI;AACF,IAAA,MAAM,EAAA,GAAK,mBAAmB,IAAI,CAAA;AAClC,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,KAAA,IAAS,CAAC,CAAA;AAChC,IAAA,IAAI,MAAA,KAAW,SAAA,IAAa,UAAA,KAAe,KAAA,CAAA,EAAW;AACpD,MAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAGA,MAAAA,CAAM,OAAO,QAAG,CAAC,IAAI,EAAE,CAAA,CAAA;AAAA,IACzC;AACA,IAAA,MAAM,MAAA,GACJ,UAAA,KAAe,KAAA,CAAA,IAAa,MAAA,CAAO,SAAS,UAAoB,CAAA;AAClE,IAAA,MAAM,GAAA,GAAM,MAAA,GAASP,eAAAA,CAAe,UAAoB,CAAA,GAAI,KAAA,CAAA;AAC5D,IAAA,IAAI,WAAW,SAAA,EAAW;AACxB,MAAA,OAAO,GAAA,KAAQ,SACX,CAAA,EAAG,GAAG,GAAGO,MAAAA,CAAM,MAAA,CAAO,QAAG,CAAC,CAAA,CAAA,EAAI,EAAE,KAAK,GAAG,CAAA,CAAA,CAAA,GACxC,GAAG,GAAG,CAAA,EAAGA,OAAM,MAAA,CAAO,QAAG,CAAC,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA;AAAA,IACtC;AACA,IAAA,IAAI,CAAC,MAAA,IAAU,GAAA,KAAQ,KAAA,CAAA,EAAW;AAChC,MAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAGA,MAAAA,CAAM,OAAO,QAAG,CAAC,IAAI,EAAE,CAAA,CAAA;AAAA,IACzC;AACA,IAAA,IAAI,WAAW,SAAA,EAAW;AACxB,MAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,aAAA,CAAc,SAAS,CAAC,CAAA,CAAA,EAAI,EAAE,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAA;AAAA,IACxD;AACA,IAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,aAAA,CAAc,OAAO,CAAC,CAAA,CAAA,EAAI,EAAE,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAA;AAAA,EACtD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAA;AAAA,EACT;AACF;AAGO,SAAS,eAAA,CAAgB,OAAkB,KAAA,EAAwB;AACxE,EAAA,IAAI;AACF,IAAA,MAAM,MACJ,OAAO,KAAA,CAAM,OAAA,KAAY,QAAA,GAAW,MAAM,OAAA,GAAU,EAAA;AACtD,IAAA,MAAM,GAAA,GAAM,SAAA,CAAA,CAAW,KAAA,IAAS,CAAA,IAAK,CAAC,CAAA;AACtC,IAAA,OAAO,CAAA,EAAG,GAAG,CAAA,OAAA,EAAU,GAAG,CAAA,CAAA;AAAA,EAC5B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAA;AAAA,EACT;AACF;AAGO,SAAS,gBAAA,CACd,UAAA,EACA,MAAA,EACA,aAAA,EACU;AACV,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,OAAO,QAAA,CAAS,UAAU,IAClCP,eAAAA,CAAe,UAAU,CAAA,GACzBA,eAAAA,CAAe,CAAC,CAAA;AACpB,IAAA,MAAM,OACJ,MAAA,KAAW,OAAA,GAAU,aAAa,GAAG,CAAA,CAAA,GAAK,gBAAgB,GAAG,CAAA,CAAA;AAC/D,IAAA,MAAM,KAAA,GAAQ,CAAC,IAAI,CAAA;AACnB,IAAA,IAAI,aAAA,KAAkB,KAAA,CAAA,IAAa,aAAA,CAAc,IAAA,OAAW,EAAA,EAAI;AAC9D,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,aAAa,CAAA,CAAE,CAAA;AAAA,IACtC;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAGO,SAAS,aAAA,CAAc,OAAe,IAAA,EAAoB;AAC/D,EAAA,IAAI,iBAAgB,EAAG;AACvB,EAAA,IAAI;AACF,IAAA,SAAA,CAAU,EAAE,CAAA;AACZ,IAAA,MAAM,SAAS,CAAA,EAAGO,MAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,yBAAkB,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAI,CAAA,CAAA,EAAI,KAAK,GAAG,CAAC,CAAA,CAAA;AAC5G,IAAA,SAAA,CAAU,MAAM,CAAA;AAAA,EAClB,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAGO,SAAS,cAAA,CAAe,IAAA,EAAc,KAAA,GAAQ,CAAA,EAAS;AAC5D,EAAA,IAAI,iBAAgB,EAAG;AACvB,EAAA,IAAI;AACF,IAAA,SAAA,CAAU,cAAA,CAAe,IAAA,EAAM,KAAA,CAAA,EAAW,SAAA,EAAW,KAAK,CAAC,CAAA;AAAA,EAC7D,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAGO,SAAS,iBAAA,CACd,IAAA,EACA,UAAA,EACA,MAAA,EACA,QAAQ,CAAA,EACF;AACN,EAAA,IAAI,iBAAgB,EAAG;AACvB,EAAA,IAAI;AACF,IAAA,SAAA,CAAU,cAAA,CAAe,IAAA,EAAM,UAAA,EAAY,MAAA,EAAQ,KAAK,CAAC,CAAA;AAAA,EAC3D,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAGO,SAAS,UAAA,CAAW,KAAA,EAAkB,KAAA,GAAQ,CAAA,EAAS;AAC5D,EAAA,IAAI,iBAAgB,EAAG;AACvB,EAAA,IAAI;AACF,IAAA,SAAA,CAAU,eAAA,CAAgB,KAAA,EAAO,KAAK,CAAC,CAAA;AAAA,EACzC,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAGO,SAAS,gBAAA,CACd,KAAA,EACA,MAAA,EACA,UAAA,EACA,QACA,aAAA,EACM;AACN,EAAA,IAAI,iBAAgB,EAAG;AACvB,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,UAAA,EAAY,MAAA,EAAQ,aAAa,CAAA;AAChE,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,MAAA,IAAI,MAAM,CAAA,EAAG;AACX,QAAA,MAAM,KAAA,GACJ,WAAW,OAAA,GACPA,MAAAA,CAAM,MACN,MAAA,KAAW,SAAA,GACTA,MAAAA,CAAM,MAAA,GACNA,MAAAA,CAAM,KAAA;AACd,QAAA,SAAA,CAAU,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,MACvB,CAAA,MAAO;AACL,QAAA,SAAA,CAAUA,MAAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA;AAAA,MAC3B;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAGO,SAAS,cAAc,QAAA,EAAwB;AACpD,EAAA,IAAI,iBAAgB,EAAG;AACvB,EAAA,IAAI;AACF,IAAA,SAAA,CAAU,CAAA,WAAA,EAAc,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,EACxD,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;;;AC5LA,SAAS,iBAAiB,IAAA,EAAuB;AAC/C,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,IAAA,OAAW,EAAA,EAAI;AAClD,IAAA,OAAO,aAAA;AAAA,EACT;AACA,EAAA,OAAO,YAAA,CAAa,IAAA,CAAK,IAAA,EAAK,EAAG,GAAG,CAAA;AACtC;AAEA,eAAe,mBAAA,CACb,OACA,EAAA,EACe;AACf,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,CAAQ,OAAA,CAAQ,EAAA,EAAI,CAAA;AAAA,EAC5B,SAAS,CAAA,EAAG;AACV,IAAA,IAAA,CAAK,CAAA,YAAA,EAAe,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA;AAAA,EAChC;AACF;AAQA,eAAsB,UAAA,CACpB,IAAA,EACA,EAAA,EACA,OAAA,EACY;AACZ,EAAA,IAAI,OAAO,OAAO,UAAA,EAAY;AAC5B,IAAA,MAAM,IAAI,UAAU,2CAA2C,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,OAAA,GAAU,iBAAiB,IAAI,CAAA;AACrC,EAAA,MAAM,QAAQ,WAAA,EAAY;AAC1B,EAAA,MAAM,WAAW,eAAA,CAAgB,EAAE,GAAA,EAAK,OAAA,EAAS,UAAU,CAAA;AAE3D,EAAA,MAAM,OAAA,GAA4B;AAAA,IAChC,KAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA,EAAQ,SAAS,MAAA,IAAU,KAAA;AAAA,IAC3B,UAAU,OAAA,EAAS;AAAA,GACrB;AAEA,EAAA,OAAO,cAAA,CAAe,SAAS,YAAY;AACzC,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,IAAI,aAAA;AAEJ,IAAA,MAAM,mBAAA,CAAoB,uBAAuB,YAAY;AAC3D,MAAA,aAAA,GAAgB,MAAM,mBAAA,CAAoB,KAAA,EAAO,QAAQ,CAAA;AAAA,IAC3D,CAAC,CAAA;AAED,IAAA,MAAM,mBAAA,CAAoB,gCAAgC,YAAY;AACpE,MAAA,MAAM,OAAA,GAAsB;AAAA,QAC1B,aAAA,EAAe,KAAA;AAAA,QACf,KAAA,EAAO,aAAA;AAAA,QACP,SAAA,EAAW,SAAA;AAAA,QACX,KAAA;AAAA,QACA,IAAA,EAAM,OAAA;AAAA,QACN,SAAA;AAAA,QACA,GAAI,SAAS,QAAA,KAAa,MAAA,GACtB,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAS,GAC7B;AAAC,OACP;AACA,MAAA,MAAM,eAAA,CAAgB,SAAS,QAAQ,CAAA;AAAA,IACzC,CAAC,CAAA;AAED,IAAA,MAAM,mBAAA,CAAoB,iBAAiB,MAAM;AAC/C,MAAA,aAAA,CAAc,OAAO,OAAO,CAAA;AAAA,IAC9B,CAAC,CAAA;AAED,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,MAAM,OAAA,CAAQ,OAAA,CAAQ,EAAA,EAAI,CAAA;AAAA,IACrC,SAAS,SAAA,EAAW;AAClB,MAAA,MAAMC,QAAAA,GAAU,KAAK,GAAA,EAAI;AACzB,MAAA,MAAMC,cAAaD,QAAAA,GAAU,SAAA;AAC7B,MAAA,MAAM,SAAA,GAAY,YAAY,SAAS,CAAA;AACvC,MAAA,MAAME,UAAAA,GAAY,aAAA,IAAiB,gBAAA,CAAiB,KAAA,EAAO,QAAQ,CAAA;AAEnE,MAAA,MAAM,mBAAA,CAAoB,wCAAwC,YAAY;AAC5E,QAAA,MAAM,SAAA,GAAwB;AAAA,UAC5B,aAAA,EAAe,KAAA;AAAA,UACf,KAAA,EAAO,eAAA;AAAA,UACP,SAAA,EAAWF,QAAAA;AAAA,UACX,KAAA;AAAA,UACA,MAAA,EAAQ,OAAA;AAAA,UACR,OAAA,EAAAA,QAAAA;AAAA,UACA,UAAA,EAAAC,WAAAA;AAAA,UACA,KAAA,EAAO;AAAA,SACT;AACA,QAAA,MAAM,eAAA,CAAgB,WAAW,QAAQ,CAAA;AAAA,MAC3C,CAAC,CAAA;AAED,MAAA,MAAM,mBAAA,CAAoB,2BAA2B,MAAM;AACzD,QAAA,gBAAA,CAAiB,OAAA,EAAS,KAAA,EAAOA,WAAAA,EAAY,OAAA,EAASC,UAAS,CAAA;AAAA,MACjE,CAAC,CAAA;AAED,MAAA,MAAM,SAAA;AAAA,IACR;AAEA,IAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,IAAA,MAAM,aAAa,OAAA,GAAU,SAAA;AAC7B,IAAA,MAAM,SAAA,GAAY,aAAA,IAAiB,gBAAA,CAAiB,KAAA,EAAO,QAAQ,CAAA;AAEnE,IAAA,MAAM,mBAAA,CAAoB,0CAA0C,YAAY;AAC9E,MAAA,MAAM,SAAA,GAAwB;AAAA,QAC5B,aAAA,EAAe,KAAA;AAAA,QACf,KAAA,EAAO,eAAA;AAAA,QACP,SAAA,EAAW,OAAA;AAAA,QACX,KAAA;AAAA,QACA,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,MAAM,eAAA,CAAgB,WAAW,QAAQ,CAAA;AAAA,IAC3C,CAAC,CAAA;AAED,IAAA,MAAM,mBAAA,CAAoB,6BAA6B,MAAM;AAC3D,MAAA,gBAAA,CAAiB,OAAA,EAAS,KAAA,EAAO,UAAA,EAAY,SAAA,EAAW,SAAS,CAAA;AAAA,IACnE,CAAC,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACT,CAAC,CAAA;AACH;;;ACpIA,SAAS,kBAAkB,IAAA,EAAuB;AAChD,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,IAAA,OAAW,EAAA,EAAI;AAClD,IAAA,OAAO,cAAA;AAAA,EACT;AACA,EAAA,OAAO,YAAA,CAAa,IAAA,CAAK,IAAA,EAAK,EAAG,GAAG,CAAA;AACtC;AAEA,eAAeC,oBAAAA,CACb,OACA,EAAA,EACe;AACf,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,CAAQ,OAAA,CAAQ,EAAA,EAAI,CAAA;AAAA,EAC5B,SAAS,CAAA,EAAG;AACV,IAAA,IAAA,CAAK,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA;AAAA,EAC1B;AACF;AAEA,eAAe,QAAA,CACb,IAAA,EACA,EAAA,EACA,OAAA,EACY;AACZ,EAAA,IAAI,OAAO,OAAO,UAAA,EAAY;AAC5B,IAAA,MAAM,IAAI,UAAU,qCAAqC,CAAA;AAAA,EAC3D;AAEA,EAAA,MAAM,QAAA,GAAW,kBAAkB,IAAI,CAAA;AACvC,EAAA,MAAM,UAAU,iBAAA,EAAkB;AAElC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,IAAA,CAAK,uEAAuE,CAAA;AAC5E,IAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,EAAA,EAAI,CAAA;AAAA,EAC7B;AAEA,EAAA,MAAM,SAAS,YAAA,EAAa;AAC5B,EAAA,MAAM,cAAc,eAAA,EAAgB;AACpC,EAAA,MAAM,WAAW,eAAA,EAAgB;AACjC,EAAA,MAAM,QAAA,GAAqB,SAAS,IAAA,IAAQ,OAAA;AAC5C,EAAA,MAAM,WAAW,OAAA,EAAS,QAAA;AAC1B,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,EAAA,MAAMA,oBAAAA,CAAoB,iCAAiC,YAAY;AACrE,IAAA,MAAM,OAAA,GAAsB;AAAA,MAC1B,aAAA,EAAe,KAAA;AAAA,MACf,KAAA,EAAO,cAAA;AAAA,MACP,SAAA,EAAW,SAAA;AAAA,MACX,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAA;AAAA,MACA,GAAI,OAAO,QAAA,KAAa,QAAA,IAAY,QAAA,CAAS,IAAA,EAAK,KAAM,EAAA,GACpD,EAAE,QAAA,EAAS,GACX,EAAC;AAAA,MACL,IAAA,EAAM,QAAA;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,SAAA;AAAA,MACA,GAAI,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,KAAa;AAAC,KAC/C;AACA,IAAA,MAAM,eAAA,CAAgB,OAAA,EAAS,OAAA,CAAQ,QAAQ,CAAA;AAAA,EACjD,CAAC,CAAA;AAED,EAAA,MAAMA,oBAAAA,CAAoB,kBAAkB,MAAM;AAChD,IAAA,cAAA,CAAe,UAAU,WAAW,CAAA;AAAA,EACtC,CAAC,CAAA;AAED,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,MAAM,kBAAA,CAAmB,MAAA,EAAQ,YAAY;AACpD,MAAA,OAAO,MAAM,OAAA,CAAQ,OAAA,CAAQ,EAAA,EAAI,CAAA;AAAA,IACnC,CAAC,CAAA;AAAA,EACH,SAAS,SAAA,EAAW;AAClB,IAAA,MAAMH,QAAAA,GAAU,KAAK,GAAA,EAAI;AACzB,IAAA,MAAMC,cAAaD,QAAAA,GAAU,SAAA;AAC7B,IAAA,MAAM,SAAA,GAAY,YAAY,SAAS,CAAA;AAEvC,IAAA,MAAMG,oBAAAA,CAAoB,yCAAyC,YAAY;AAC7E,MAAA,MAAM,SAAA,GAAwB;AAAA,QAC5B,aAAA,EAAe,KAAA;AAAA,QACf,KAAA,EAAO,gBAAA;AAAA,QACP,SAAA,EAAWH,QAAAA;AAAA,QACX,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,MAAA;AAAA,QACA,MAAA,EAAQ,OAAA;AAAA,QACR,OAAA,EAAAA,QAAAA;AAAA,QACA,UAAA,EAAAC,WAAAA;AAAA,QACA,KAAA,EAAO;AAAA,OACT;AACA,MAAA,MAAM,eAAA,CAAgB,SAAA,EAAW,OAAA,CAAQ,QAAQ,CAAA;AAAA,IACnD,CAAC,CAAA;AAED,IAAA,MAAME,oBAAAA,CAAoB,4BAA4B,MAAM;AAC1D,MAAA,iBAAA,CAAkB,QAAA,EAAUF,WAAAA,EAAY,OAAA,EAAS,WAAW,CAAA;AAAA,IAC9D,CAAC,CAAA;AACD,IAAA,MAAME,oBAAAA,CAAoB,cAAc,MAAM;AAC5C,MAAA,UAAA,CAAW,WAAW,WAAW,CAAA;AAAA,IACnC,CAAC,CAAA;AACD,IAAA,MAAMA,oBAAAA,CAAoB,iBAAiB,MAAM;AAC/C,MAAA,aAAA,CAAc,QAAQ,CAAA;AAAA,IACxB,CAAC,CAAA;AAED,IAAA,MAAM,SAAA;AAAA,EACR;AAEA,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,EAAA,MAAM,aAAa,OAAA,GAAU,SAAA;AAE7B,EAAA,MAAMA,oBAAAA,CAAoB,2CAA2C,YAAY;AAC/E,IAAA,MAAM,SAAA,GAAwB;AAAA,MAC5B,aAAA,EAAe,KAAA;AAAA,MACf,KAAA,EAAO,gBAAA;AAAA,MACP,SAAA,EAAW,OAAA;AAAA,MACX,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAA;AAAA,MACA,MAAA,EAAQ,SAAA;AAAA,MACR,OAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,eAAA,CAAgB,SAAA,EAAW,OAAA,CAAQ,QAAQ,CAAA;AAAA,EACnD,CAAC,CAAA;AAED,EAAA,MAAMA,oBAAAA,CAAoB,8BAA8B,MAAM;AAC5D,IAAA,iBAAA,CAAkB,QAAA,EAAU,UAAA,EAAY,SAAA,EAAW,WAAW,CAAA;AAAA,EAChE,CAAC,CAAA;AAED,EAAA,OAAO,MAAA;AACT;AAaA,eAAe,OAAA,CAAW,OAAe,EAAA,EAAsC;AAC7E,EAAA,MAAM,SAAA,GACJ,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAK,KAAM,EAAA,GAC1C,KAAA,CAAM,IAAA,EAAK,GACX,eAAA;AACN,EAAA,OAAO,QAAA,CAAY,CAAA,IAAA,EAAO,SAAS,CAAA,CAAA,EAAI,EAAA,EAAI;AAAA,IACzC,IAAA,EAAM,KAAA;AAAA,IACN,QAAA,EAAU,EAAE,KAAA,EAAO,SAAA;AAAU,GAC9B,CAAA;AACH;AAEA,eAAe,QAAA,CACb,UACA,EAAA,EACY;AACZ,EAAA,MAAM,UAAA,GACJ,OAAO,QAAA,KAAa,QAAA,IAAY,QAAA,CAAS,MAAK,KAAM,EAAA,GAChD,QAAA,CAAS,IAAA,EAAK,GACd,cAAA;AACN,EAAA,OAAO,QAAA,CAAY,CAAA,KAAA,EAAQ,UAAU,CAAA,CAAA,EAAI,EAAA,EAAI;AAAA,IAC3C,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU,EAAE,QAAA,EAAU,UAAA;AAAW,GAClC,CAAA;AACH;AASO,IAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU;AAAA,EAC1C,GAAA,EAAK,OAAA;AAAA,EACL,IAAA,EAAM;AACR,CAAC;;;AC9KD,IAAM,sBAAA,GAAyB,CAAC,KAAA,EAAO,SAAA,EAAW,QAAQ,CAAA;AAE1D,SAAS,qBACP,IAAA,EACiD;AACjD,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,KAAA;AACrC,EAAA,OAAQ,sBAAA,CAA6C,SAAS,IAAI,CAAA;AACpE;AAEA,SAAS,cAAc,MAAA,EAAwB;AAC7C,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,aAAa,CAAA;AAC9C,IAAA,MAAM,OAAO,IAAA,EAAM,IAAA;AACnB,IAAA,IAAI,OAAO,SAAS,QAAA,IAAY,IAAA,CAAK,MAAK,KAAM,EAAA,IAAM,SAAS,QAAA,EAAU;AACvE,MAAA,OAAO,KAAK,IAAA,EAAK;AAAA,IACnB;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,YAAA,CAAa,QAAgB,SAAA,EAA2B;AAC/D,EAAA,MAAM,KAAA,GAAQ,cAAc,MAAM,CAAA;AAClC,EAAA,OAAO,aAAa,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,SAAS,IAAI,GAAG,CAAA;AAClD;AASO,SAAS,OAAA,CAAW,OAAU,OAAA,EAA6B;AAChE,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,IAAA,CAAK,8BAA8B,CAAA;AACnC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,YAAY,OAAO,KAAA;AACzB,EAAA,IAAI,SAAA,KAAc,QAAA,IAAY,SAAA,KAAc,UAAA,EAAY;AACtD,IAAA,IAAA,CAAK,8BAA8B,CAAA;AACnC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,KAAA;AAEf,EAAA,MAAM,QAAA,GAAiC;AAAA,IACrC,GAAA,CAAI,WAAA,EAAa,IAAA,EAAM,QAAA,EAAU;AAC/B,MAAA,IAAI;AACF,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,WAAA,EAAa,MAAM,QAAQ,CAAA;AAErD,QAAA,IAAI,oBAAA,CAAqB,IAAI,CAAA,EAAG;AAC9B,UAAA,IAAI,OAAO,UAAU,UAAA,EAAY;AAC/B,YAAA,OAAO,KAAA;AAAA,UACT;AACA,UAAA,MAAM,SAAA,GAAY,IAAA;AAClB,UAAA,OAAO,SAAS,mBAAmB,IAAA,EAAiB;AAClD,YAAA,IAAI,OAAA;AACJ,YAAA,IAAI;AACF,cAAA,OAAA,GAAU,YAAA,CAAa,aAAa,SAAS,CAAA;AAAA,YAC/C,SAAS,CAAA,EAAG;AACV,cAAA,IAAA,CAAK,oCAAoC,CAAC,CAAA;AAC1C,cAAA,OAAO,KAAA,CAAM,KAAA,CAAM,WAAA,EAAa,IAAI,CAAA;AAAA,YACtC;AACA,YAAA,OAAO,UAAA,CAAW,SAAS,MAAM,KAAA,CAAM,MAAM,WAAA,EAAa,IAAI,GAAG,OAAO,CAAA;AAAA,UAC1E,CAAA;AAAA,QACF;AAEA,QAAA,IAAI,OAAO,KAAA,KAAU,UAAA,IAAc,IAAA,KAAS,aAAA,EAAe;AACzD,UAAA,OAAO,KAAA,CAAM,KAAK,WAAW,CAAA;AAAA,QAC/B;AACA,QAAA,OAAO,KAAA;AAAA,MACT,SAAS,CAAA,EAAG;AACV,QAAA,IAAA,CAAK,oCAAoC,CAAC,CAAA;AAC1C,QAAA,IAAI;AACF,UAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,WAAA,EAAa,IAAA,EAAM,QAAQ,CAAA;AAAA,QAChD,CAAA,CAAA,MAAQ;AACN,UAAA,OAAO,MAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,GACF;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,KAAA,CAAM,MAAA,EAAQ,QAAQ,CAAA;AAAA,EACnC,SAAS,CAAA,EAAG;AACV,IAAA,IAAA,CAAK,oBAAoB,CAAC,CAAA;AAC1B,IAAA,OAAO,KAAA;AAAA,EACT;AACF;;;ACrDO,IAAM,sBAAA,GAAyB;;;AC9BtC,SAAS,cAAA,CAAe,KAAA,EAAsB,OAAA,GAAU,MAAA,EAAgB;AACtE,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAC/B,EAAA,MAAM,KAAA,GAAkB,CAAC,CAAA,WAAA,EAAc,OAAO,CAAA,EAAA,CAAI,CAAA;AAClD,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,KAAK,CAAA,CAAE,KAAA;AACb,IAAA,MAAM,MAAA,GAAS,GAAG,MAAA,IAAU,GAAA;AAC5B,IAAA,MAAM,GAAA,GACJ,EAAA,CAAG,UAAA,KAAe,MAAA,IAAa,MAAA,CAAO,QAAA,CAAS,EAAA,CAAG,UAAU,CAAA,GACxD,CAAA,EAAG,EAAA,CAAG,UAAU,CAAA,EAAA,CAAA,GAChB,GAAA;AACN,IAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AACjB,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,oBAAoB,UAAA,CAAW,EAAA,CAAG,IAAI,CAAC,+BAA+B,UAAA,CAAW,EAAA,CAAG,IAAI,CAAC,KAAK,UAAA,CAAW,MAAM,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,GAAG,CAAC,CAAA,QAAA;AAAA,KACtI;AACA,IAAA,IAAI,CAAA,CAAE,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACzB,MAAA,KAAA,CAAM,IAAA,CAAK,cAAA,CAAe,CAAA,CAAE,QAAA,EAAU,aAAa,CAAC,CAAA;AAAA,IACtD;AACA,IAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,EACpB;AACA,EAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,EAAA,OAAO,KAAA,CAAM,KAAK,EAAE,CAAA;AACtB;AAEO,SAAS,UAAA,CAAW,MAAsB,OAAA,EAAgD;AAC/F,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,MAAM,eAAA,GAAkB,SAAS,eAAA,IAAmB,IAAA;AACpD,EAAA,MAAM,iBAAA,GAAoB,SAAS,iBAAA,IAAqB,KAAA;AACxD,EAAA,MAAM,aAAA,GAAgB,SAAS,aAAA,IAAiB,IAAA;AAChD,EAAA,MAAM,MAAA,GAAS,SAAS,kBAAA,IAAsB,GAAA;AAC9C,EAAA,MAAM,QAAA,GAAW,SAAS,QAAA,IAAY,IAAA;AAEtC,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,IAAA,CAAK,IAAA,IAAQ,KAAK,KAAK,CAAA;AAEpD,EAAA,MAAM,cAAwB,EAAC;AAC/B,EAAA,WAAA,CAAY,IAAA;AAAA,IACV,CAAA,wCAAA,EAA2C,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA,iBAAA;AAAA,GACnE;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAW;AAC3B,IAAA,WAAA,CAAY,KAAK,CAAA,iCAAA,EAAoC,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,UAAA,CAAY,CAAA;AAAA,EACxF;AACA,EAAA,WAAA,CAAY,IAAA;AAAA,IACV,sCAAsC,UAAA,CAAW,MAAA,CAAO,KAAK,MAAA,IAAU,SAAS,CAAC,CAAC,CAAA,UAAA;AAAA,GACpF;AACA,EAAA,WAAA,CAAY,IAAA;AAAA,IACV,CAAA,uCAAA,EAA0C,IAAA,CAAK,UAAA,KAAe,MAAA,GAAY,UAAA,CAAW,OAAO,IAAA,CAAK,UAAU,CAAC,CAAA,GAAI,QAAG,CAAA,UAAA;AAAA,GACrH;AACA,EAAA,WAAA,CAAY,IAAA;AAAA,IACV,CAAA,sCAAA,EAAyC,IAAA,CAAK,SAAA,KAAc,MAAA,GAAY,UAAA,CAAW,OAAO,IAAA,CAAK,SAAS,CAAC,CAAA,GAAI,QAAG,CAAA,UAAA;AAAA,GAClH;AACA,EAAA,WAAA,CAAY,IAAA;AAAA,IACV,CAAA,oCAAA,EAAuC,IAAA,CAAK,OAAA,KAAY,MAAA,GAAY,UAAA,CAAW,OAAO,IAAA,CAAK,OAAO,CAAC,CAAA,GAAI,QAAG,CAAA,UAAA;AAAA,GAC5G;AACA,EAAA,WAAA,CAAY,IAAA;AAAA,IACV,2CAA2C,UAAA,CAAW,MAAA,CAAO,KAAK,QAAA,CAAS,WAAW,CAAC,CAAC,CAAA,UAAA;AAAA,GAC1F;AAEA,EAAA,IAAI,cAAA,GAAiB,EAAA;AACrB,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,MAAM,EAAA,GAAK,KAAK,QAAA,CAAS,mBAAA;AACzB,IAAA,cAAA,IAAkB,kGAAA;AAClB,IAAA,KAAA,MAAW,KAAK,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA,CAAE,MAAK,EAAG;AACtC,MAAA,MAAM,GAAA,GAAM,CAAA;AACZ,MAAA,cAAA,IAAkB,WAAW,UAAA,CAAW,GAAG,CAAC,CAAA,SAAA,EAAY,EAAA,CAAG,GAAG,CAAC,CAAA,UAAA,CAAA;AAAA,IACjE;AACA,IAAA,cAAA,IAAkB,kBAAA;AAElB,IAAA,cAAA,IAAkB,0FAAA;AAClB,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,IAAA,CAAK,IAAA,CAAK,SAAS,KAAK,CAAA,CAAE,MAAK,EAAG;AACvD,MAAA,MAAM,GAAA,GAAM,CAAA;AACZ,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;AACjC,MAAA,IAAI,CAAA,GAAI,GAAG,cAAA,IAAkB,CAAA,QAAA,EAAW,WAAW,GAAG,CAAC,YAAY,CAAC,CAAA,UAAA,CAAA;AAAA,IACtE;AACA,IAAA,cAAA,IAAkB,kBAAA;AAAA,EACpB;AAEA,EAAA,MAAM,IAAA,GAAO,YAAY,IAAI,CAAA;AAC7B,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,KAAA,CAAM,WAAW,OAAO,CAAA;AAC5D,EAAA,IAAI,UAAA,GAAa,EAAA;AACjB,EAAA,IAAI,aAAA,IAAiB,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AACtC,IAAA,UAAA,IAAc,qBAAA;AACd,IAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,MAAA,MAAM,GAAA,GACJ,EAAE,KAAA,CAAM,UAAA,IAAc,OAAO,CAAA,CAAE,KAAA,CAAM,UAAA,CAAW,KAAA,KAAU,QAAA,GACtDN,WAAAA;AAAA,QACG,CAAA,CAAE,KAAA,CAAM,UAAA,CAAW,KAAA,CAA+B,OAAA;AAAA,QACnD;AAAA,OACF,GACA,EAAA;AACN,MAAA,UAAA,IAAc,eAAe,UAAA,CAAW,CAAA,CAAE,KAAA,CAAM,IAAI,CAAC,CAAA,WAAA,EAAc,UAAA,CAAW,CAAA,CAAE,KAAA,CAAM,OAAO,CAAC,CAAA,GAAA,EAAM,UAAA,CAAW,GAAA,IAAO,OAAO,CAAC,CAAA,KAAA,CAAA;AAAA,IAChI;AACA,IAAA,UAAA,IAAc,OAAA;AAAA,EAChB;AAEA,EAAA,IAAI,SAAA,GAAY,EAAA;AAChB,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,SAAA,IAAa,+BAAA;AACb,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,IAAI,CAAC,CAAA,CAAE,KAAA,CAAM,UAAA,IAAc,MAAA,CAAO,IAAA,CAAK,CAAA,CAAE,KAAA,CAAM,UAAU,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG;AACzE,MAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,CAAA,CAAE,KAAA,CAAM,UAAA,EAAY;AAAA,QACpD,SAAA,EAAW,MAAA;AAAA,QACX;AAAA,OACD,CAAA;AACD,MAAA,SAAA,IAAa,CAAA,IAAA,EAAO,UAAA,CAAW,CAAA,CAAE,KAAA,CAAM,IAAI,CAAC,CAAA,uBAAA,EAA0B,UAAA,CAAW,UAAA,CAAW,OAAA,EAAS,IAAI,CAAC,CAAC,CAAA,MAAA,CAAA;AAAA,IAC7G;AACA,IAAA,QAAA,CAAS,IAAA;AAAA,MACP;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAaZ,IAAA,EAAK;AAEL,EAAA,MAAM,IAAA,GAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAA,EAKN,SAAS,CAAA;AAAA,OAAA,EACT,GAAG,CAAA;AAAA;AAAA;AAAA,8BAAA,EAGoB,SAAS,CAAA;AAAA;AAAA,EAEvC,eAAA,GAAkB,mDAAmD,WAAA,CAAY,IAAA,CAAK,EAAE,CAAC,CAAA,QAAA,EAAW,cAAc,CAAA,UAAA,CAAA,GAAe,EAAE;AAAA,6CAAA,EACtF,IAAA,CAAK,SAAS,MAAA,GAAS,CAAA,GAAI,eAAe,IAAA,CAAK,QAAQ,IAAI,2BAA2B,CAAA;AAAA,EACnI,UAAU;AAAA,EACV,SAAS;AAAA;AAAA;AAAA,OAAA,CAAA;AAKT,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,IAAA;AAAA,IACT,WAAA,EAAa,WAAA;AAAA,IACb,aAAA,EAAe,OAAA;AAAA,IACf;AAAA,GACF;AACF;;;ACtJA,SAAS,eAAA,CAAgB,KAAA,EAAsB,MAAA,GAAS,EAAA,EAAY;AAClE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,IAAA,MAAM,IAAA,GAAO,CAAA,KAAM,KAAA,CAAM,MAAA,GAAS,CAAA;AAClC,IAAA,MAAM,MAAA,GAAS,OAAO,eAAA,GAAQ,eAAA;AAC9B,IAAA,MAAM,KAAK,CAAA,CAAE,KAAA;AACb,IAAA,MAAM,MAAA,GAAS,GAAG,MAAA,IAAU,GAAA;AAC5B,IAAA,MAAM,GAAA,GACJ,EAAA,CAAG,UAAA,KAAe,MAAA,IAAa,MAAA,CAAO,QAAA,CAAS,EAAA,CAAG,UAAU,CAAA,GACxD,CAAA,EAAG,EAAA,CAAG,UAAU,CAAA,EAAA,CAAA,GAChB,GAAA;AACN,IAAA,KAAA,CAAM,KAAK,CAAA,EAAG,MAAM,CAAA,EAAG,MAAM,GAAG,cAAA,CAAe,EAAA,CAAG,IAAI,CAAC,KAAK,EAAA,CAAG,IAAI,KAAK,MAAM,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG,CAAA;AACzF,IAAA,MAAM,UAAA,GAAa,MAAA,IAAU,IAAA,GAAO,KAAA,GAAQ,UAAA,CAAA;AAC5C,IAAA,IAAI,CAAA,CAAE,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACzB,MAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,CAAA,CAAE,QAAA,EAAU,UAAU,CAAA;AACvD,MAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,KAAA,CAAM,KAAK,QAAQ,CAAA;AAAA,IAC9C;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEO,SAAS,cAAA,CACd,MACA,OAAA,EACc;AACd,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,MAAM,eAAA,GAAkB,SAAS,eAAA,IAAmB,IAAA;AACpD,EAAA,MAAM,iBAAA,GAAoB,SAAS,iBAAA,IAAqB,KAAA;AACxD,EAAA,MAAM,aAAA,GAAgB,SAAS,aAAA,IAAiB,IAAA;AAChD,EAAA,MAAM,MAAA,GAAS,SAAS,kBAAA,IAAsB,GAAA;AAC9C,EAAA,MAAM,QAAA,GAAW,SAAS,QAAA,IAAY,IAAA;AAEtC,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,KAAA;AACpC,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,oBAAA,EAAuB,cAAA,CAAe,SAAS,CAAC,CAAA,CAAE,CAAA;AAC7D,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,8EAA8E,CAAA;AACzF,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,KAAA,CAAM,KAAK,YAAY,CAAA;AACvB,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,CAAA,aAAA,EAAgB,cAAA,CAAe,IAAA,CAAK,KAAK,CAAC,CAAA,CAAE,CAAA;AACvD,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,EAAW,KAAA,CAAM,IAAA,CAAK,eAAe,cAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAClF,IAAA,KAAA,CAAM,IAAA,CAAK,iBAAiB,cAAA,CAAe,MAAA,CAAO,KAAK,MAAA,IAAU,SAAS,CAAC,CAAC,CAAA,CAAE,CAAA;AAC9E,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,kBAAA,EAAqB,IAAA,CAAK,UAAA,KAAe,MAAA,GAAY,cAAA,CAAe,OAAO,IAAA,CAAK,UAAU,CAAC,CAAA,GAAI,GAAG,CAAA;AAAA,KACpG;AACA,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,iBAAA,EAAoB,IAAA,CAAK,SAAA,KAAc,MAAA,GAAY,cAAA,CAAe,OAAO,IAAA,CAAK,SAAS,CAAC,CAAA,GAAI,GAAG,CAAA;AAAA,KACjG;AACA,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,eAAA,EAAkB,IAAA,CAAK,OAAA,KAAY,MAAA,GAAY,cAAA,CAAe,OAAO,IAAA,CAAK,OAAO,CAAC,CAAA,GAAI,GAAG,CAAA;AAAA,KAC3F;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,mBAAA,EAAsB,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,CAAE,CAAA;AAC5D,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,0BAA0B,CAAA;AACrC,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,oBAAoB,CAAA;AAC/B,IAAA,KAAA,CAAM,KAAK,eAAe,CAAA;AAC1B,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,IAAA,CAAK,IAAA,CAAK,SAAS,mBAAmB,CAAA,CAAE,MAAK,EAAG;AACrE,MAAA,MAAM,GAAA,GAAM,CAAA;AACZ,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,CAAA,EAAA,EAAK,eAAe,GAAG,CAAC,MAAM,IAAA,CAAK,QAAA,CAAS,mBAAA,CAAoB,GAAG,CAAC,CAAA,EAAA;AAAA,OACtE;AAAA,IACF;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,oBAAoB,CAAA;AAC/B,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,kBAAkB,CAAA;AAC7B,IAAA,KAAA,CAAM,KAAK,eAAe,CAAA;AAC1B,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,IAAA,CAAK,IAAA,CAAK,SAAS,KAAK,CAAA,CAAE,MAAK,EAAG;AACvD,MAAA,MAAM,GAAA,GAAM,CAAA;AACZ,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;AACjC,MAAA,IAAI,CAAA,GAAI,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,eAAe,GAAG,CAAC,CAAA,GAAA,EAAM,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,IAC3D;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,KAAA,CAAM,KAAK,mBAAmB,CAAA;AAC9B,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AACpB,EAAA,KAAA,CAAM,IAAA;AAAA,IACJ,KAAK,QAAA,CAAS,MAAA,GAAS,IAAI,eAAA,CAAgB,IAAA,CAAK,QAAQ,CAAA,GAAI;AAAA,GAC9D;AACA,EAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAChB,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,EAAA,MAAM,IAAA,GAAO,YAAY,IAAI,CAAA;AAC7B,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,KAAA,CAAM,WAAW,OAAO,CAAA;AAC5D,EAAA,IAAI,aAAA,IAAiB,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AACtC,IAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AACtB,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,MAAA,MAAM,GAAA,GACJ,EAAE,KAAA,CAAM,UAAA,IAAc,OAAO,CAAA,CAAE,KAAA,CAAM,UAAA,CAAW,KAAA,KAAU,QAAA,GACtDA,WAAAA;AAAA,QACG,CAAA,CAAE,KAAA,CAAM,UAAA,CAAW,KAAA,CAA+B,OAAA;AAAA,QACnD;AAAA,OACF,GACA,EAAA;AACN,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,OAAO,cAAA,CAAe,CAAA,CAAE,KAAA,CAAM,IAAI,CAAC,CAAA,IAAA,EAAO,cAAA,CAAe,CAAA,CAAE,KAAA,CAAM,OAAO,CAAC,CAAA,GAAA,EAAM,cAAA,CAAe,GAAA,IAAO,OAAO,CAAC,CAAA;AAAA,OAC/G;AAAA,IACF;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,KAAA,CAAM,KAAK,yBAAyB,CAAA;AACpC,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,IAAI,CAAC,CAAA,CAAE,KAAA,CAAM,UAAA,IAAc,MAAA,CAAO,IAAA,CAAK,CAAA,CAAE,KAAA,CAAM,UAAU,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG;AACzE,MAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,CAAA,CAAE,KAAA,CAAM,UAAA,EAAY;AAAA,QACpD,SAAA,EAAW,MAAA;AAAA,QACX;AAAA,OACD,CAAA;AACD,MAAA,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,cAAA,CAAe,EAAE,KAAA,CAAM,IAAI,CAAC,CAAA,CAAE,CAAA;AAChD,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,MAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AACpB,MAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,OAAA,EAAS,IAAI,CAAC,CAAA;AACpC,MAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAChB,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AACA,IAAA,QAAA,CAAS,IAAA;AAAA,MACP;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,UAAA;AAAA,IACR,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,IACxB,WAAA,EAAa,eAAA;AAAA,IACb,aAAA,EAAe,KAAA;AAAA,IACf;AAAA,GACF;AACF;ACpHA,SAAS,OAAA,CAAQ,MAAc,OAAA,EAAyB;AACtD,EAAA,OAAOO,MAAAA,CAAO,UAAA,CAAW,QAAQ,CAAA,CAAE,OAAO,IAAA,EAAM,MAAM,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,UAAU,CAAC,CAAA;AAC5F;AAEA,SAAS,kBAAA,CACP,MACA,QAAA,EACuD;AACvD,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,KAAA;AACH,MAAA,OAAO,EAAE,mBAAmB,KAAA,EAAM;AAAA,IACpC,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,mBAAmB,MAAA,EAAO;AAAA,IACrC,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,mBAAmB,OAAA,EAAQ;AAAA,IACtC,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,mBAAmB,WAAA,EAAY;AAAA,IAC1C,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,mBAAmB,OAAA,EAAQ;AAAA,IACtC,KAAK,UAAA;AACH,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,mEAAmE,sBAAsB,CAAA,EAAA;AAAA,OAC3F;AACA,MAAA,OAAO,EAAE,mBAAmB,OAAA,EAAQ;AAAA,IACtC,KAAK,QAAA;AACH,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,mEAAmE,sBAAsB,CAAA,EAAA;AAAA,OAC3F;AACA,MAAA,OAAO,EAAE,mBAAmB,SAAA,EAAU;AAAA,IACxC,KAAK,OAAA;AACH,MAAA,QAAA,CAAS,KAAK,CAAA,kDAAA,CAAoD,CAAA;AAClE,MAAA,OAAO,EAAE,mBAAmB,OAAA,EAAQ;AAAA,IACtC,KAAK,KAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,KAAA;AACH,MAAA,QAAA,CAAS,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA,wCAAA,CAA0C,CAAA;AAC/D,MAAA,OAAO,EAAE,mBAAmB,OAAA,EAAQ;AAAA,IACtC;AACE,MAAA,QAAA,CAAS,IAAA,CAAK,CAAA,sBAAA,EAAyB,IAAI,CAAA,mBAAA,CAAqB,CAAA;AAChE,MAAA,OAAO,EAAE,mBAAmB,SAAA,EAAU;AAAA;AAE5C;AAEO,SAAS,mBAAA,CACd,MACA,OAAA,EACc;AACd,EAAA,MAAM,QAAA,GAAqB;AAAA,IACzB,gGAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,UAAU,OAAA,CAAQ,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,IAAI,EAAE,CAAA;AACjD,EAAA,MAAM,iBAAA,GAAoB,SAAS,iBAAA,IAAqB,KAAA;AACxD,EAAA,MAAM,MAAA,GAAS,SAAS,kBAAA,IAAsB,GAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,SAAS,MAAA,IAAU,IAAA;AAElC,EAAA,MAAM,QAA6B,EAAC;AAEpC,EAAA,KAAA,MAAW,CAAA,IAAK,WAAA,CAAY,IAAI,CAAA,EAAG;AACjC,IAAA,MAAM,KAAK,CAAA,CAAE,KAAA;AACb,IAAA,MAAM,MAAA,GAAS,QAAQ,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA;AACvD,IAAA,MAAM,aAAA,GAAgB,EAAA,CAAG,QAAA,GACrB,OAAA,CAAQ,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,QAAQ,CAAA,CAAA,EAAI,CAAC,CAAA,GACzC,MAAA;AACJ,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,YAAY,GAAG,CAAA;AAC7C,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,GAAG,UAAA,KAAe,MAAA,IAAa,OAAO,QAAA,CAAS,EAAA,CAAG,UAAU,CAAA,EAAG;AACjE,MAAA,KAAA,GAAQ,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,aAAa,GAAG,CAAA;AAAA,IAClD;AAEA,IAAA,MAAM,EAAE,iBAAA,EAAkB,GAAI,kBAAA,CAAmB,EAAA,CAAG,MAAM,QAAQ,CAAA;AAElE,IAAA,MAAM,KAAA,GAAiC;AAAA,MACrC,yBAAA,EAA2B,iBAAA;AAAA,MAC3B,sBAAsB,EAAA,CAAG,IAAA;AAAA,MACzB,4BAA4B,EAAA,CAAG,UAAA;AAAA,MAC/B,2BAAA,EAA6B,GAAG,MAAA,CAAO,IAAA;AAAA,MACvC,wBAAwB,IAAA,CAAK,KAAA;AAAA,MAC7B,0BAA0B,EAAA,CAAG,OAAA;AAAA,MAC7B,sBAAA,EAAwB,GAAG,MAAA,IAAU;AAAA,KACvC;AACA,IAAA,IAAI,EAAA,CAAG,eAAe,MAAA,EAAW;AAC/B,MAAA,KAAA,CAAM,2BAA2B,IAAI,EAAA,CAAG,UAAA;AAAA,IAC1C;AAEA,IAAA,MAAM,OAAO,EAAA,CAAG,UAAA;AAChB,IAAA,IAAI,MAAM,KAAA,KAAU,MAAA,IAAa,OAAO,IAAA,CAAK,UAAU,QAAA,EAAU;AAC/D,MAAA,KAAA,CAAM,gBAAgB,IAAI,IAAA,CAAK,KAAA;AAAA,IACjC;AACA,IAAA,MAAM,SAAS,IAAA,EAAM,MAAA;AACrB,IAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,WAAW,IAAA,EAAM;AAC3D,MAAA,MAAM,MAAO,MAAA,CAA8B,KAAA;AAC3C,MAAA,MAAM,OAAQ,MAAA,CAA+B,MAAA;AAC7C,MAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,KAAA,CAAM,wBAAwB,CAAA,GAAI,GAAA;AAC/D,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,KAAA,CAAM,4BAA4B,CAAA,GAAI,IAAA;AAAA,IACtE;AAEA,IAAA,IAAI,iBAAA,IAAqB,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACzD,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AACzC,QAAA,IAAI,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,OAAA,EAAS;AACrC,QAAA,IAAI,MAAM,MAAA,IAAa,CAAA,KAAM,IAAA,IAAQ,OAAO,MAAM,QAAA,EAAU;AAC1D,UAAA,KAAA,CAAM,CAAA,sBAAA,EAAyB,CAAC,CAAA,CAAE,CAAA,GAChC,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,GAAI,CAAA;AAAA,QACjD;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,EAAA,CAAG,WAAW,OAAA,EAAS;AACzB,MAAA,MAAM,GAAA,GACJ,IAAA,IAAQ,OAAO,IAAA,CAAK,UAAU,QAAA,IAAY,IAAA,CAAK,KAAA,KAAU,IAAA,GACrD,MAAA,CAAQ,IAAA,CAAK,KAAA,CAA+B,OAAA,IAAW,OAAO,CAAA,GAC9D,OAAA;AACN,MAAA,MAAA,GAAS,EAAE,MAAM,OAAA,EAAS,OAAA,EAAS,IAAI,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,EAAE;AAAA,IAC1D,CAAA,MAAA,IAAW,EAAA,CAAG,MAAA,KAAW,IAAA,EAAM;AAC7B,MAAA,MAAA,GAAS,EAAE,MAAM,IAAA,EAAK;AAAA,IACxB,CAAA,MAAO;AACL,MAAA,MAAA,GAAS,EAAE,MAAM,OAAA,EAAQ;AAAA,IAC3B;AAEA,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,QAAA,EAAU,OAAA;AAAA,MACV,OAAA,EAAS,MAAA;AAAA,MACT,cAAA,EAAgB,aAAA;AAAA,MAChB,MAAM,EAAA,CAAG,IAAA;AAAA,MACT,oBAAA,EAAsB,OAAA;AAAA,MACtB,kBAAA,EAAoB,KAAA;AAAA,MACpB,UAAA,EAAY,KAAA;AAAA,MACZ;AAAA,KACD,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,OAAA,GAA+B;AAAA,IACnC,QAAA,EAAU,eAAA;AAAA,IACV,MAAA,EAAQ,eAAA;AAAA,IACR,aAAA,EAAe,0BAAA;AAAA,IACf,OAAA,EAAS,sBAAA;AAAA,IACT,QAAA,EAAU,OAAA;AAAA,IACV,KAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,eAAA;AAAA,IACR,SAAS,IAAA,CAAK,SAAA,CAAU,SAAS,IAAA,EAAM,MAAA,GAAS,IAAI,MAAS,CAAA;AAAA,IAC7D,WAAA,EAAa,kBAAA;AAAA,IACb,aAAA,EAAe,qBAAA;AAAA,IACf;AAAA,GACF;AACF;AC9KA,SAASC,QAAAA,CAAQ,MAAc,OAAA,EAAyB;AACtD,EAAA,OAAOD,MAAAA,CAAO,UAAA,CAAW,QAAQ,CAAA,CAAE,OAAO,IAAA,EAAM,MAAM,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,UAAU,CAAC,CAAA;AAC5F;AAEA,SAAS,UAAA,CAAW,KAAa,KAAA,EAAgE;AAC/F,EAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,EAAE,WAAA,EAAa,OAAM,EAAE;AAC9C;AAEA,SAAS,OAAA,CAAQ,KAAa,KAAA,EAA6D;AACzF,EAAA,OAAO,EAAE,KAAK,KAAA,EAAO,EAAE,UAAU,MAAA,CAAO,KAAK,GAAE,EAAE;AACnD;AAMA,SAAS,mBAAmB,IAAA,EAAuC;AACjE,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,KAAA;AACH,MAAA,OAAO,kBAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,cAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,cAAA;AAAA,IACT;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEO,SAAS,cAAA,CACd,MACA,OAAA,EACc;AACd,EAAA,MAAM,QAAA,GAAqB;AAAA,IACzB,gIAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,UAAUC,QAAAA,CAAQ,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,IAAI,EAAE,CAAA;AACjD,EAAA,MAAM,iBAAA,GAAoB,SAAS,iBAAA,IAAqB,KAAA;AACxD,EAAA,MAAM,MAAA,GAAS,SAAS,kBAAA,IAAsB,GAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,SAAS,MAAA,IAAU,IAAA;AAElC,EAAA,MAAM,IAAA,GAAO,YAAY,IAAI,CAAA;AAC7B,EAAA,MAAM,QAAmC,EAAC;AAE1C,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,MAAM,KAAK,CAAA,CAAE,KAAA;AACb,IAAA,MAAM,MAAA,GAASA,SAAQ,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA;AACvD,IAAA,MAAM,YAAA,GAAe,EAAA,CAAG,QAAA,GACpBA,QAAAA,CAAQ,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,QAAQ,CAAA,CAAA,EAAI,CAAC,CAAA,GACzC,MAAA;AAEJ,IAAA,MAAM,UAAU,MAAA,CAAO,IAAA,CAAK,MAAM,EAAA,CAAG,SAAA,GAAY,GAAG,CAAC,CAAA;AACrD,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,GAAG,UAAA,KAAe,MAAA,IAAa,OAAO,QAAA,CAAS,EAAA,CAAG,UAAU,CAAA,EAAG;AACjE,MAAA,KAAA,GAAQ,MAAA,CAAO,KAAK,KAAA,CAAM,EAAA,CAAG,YAAY,GAAA,GAAM,EAAA,CAAG,UAAA,GAAa,GAAG,CAAC,CAAA;AAAA,IACrE;AAEA,IAAA,MAAM,KAAA,GAAoB;AAAA,MACxB,UAAA,CAAW,oBAAA,EAAsB,EAAA,CAAG,IAAI,CAAA;AAAA,MACxC,UAAA,CAAW,0BAAA,EAA4B,EAAA,CAAG,UAAU,CAAA;AAAA,MACpD,UAAA,CAAW,2BAAA,EAA6B,EAAA,CAAG,MAAA,CAAO,IAAI,CAAA;AAAA,MACtD,UAAA,CAAW,sBAAA,EAAwB,IAAA,CAAK,KAAK,CAAA;AAAA,MAC7C,UAAA,CAAW,wBAAA,EAA0B,EAAA,CAAG,OAAO,CAAA;AAAA,MAC/C,UAAA,CAAW,sBAAA,EAAwB,EAAA,CAAG,MAAA,IAAU,OAAO;AAAA,KACzD;AAEA,IAAA,IAAI,EAAA,CAAG,eAAe,MAAA,EAAW;AAC/B,MAAA,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,2BAAA,EAA6B,EAAA,CAAG,UAAU,CAAC,CAAA;AAAA,IAChE;AAEA,IAAA,MAAM,EAAA,GAAK,kBAAA,CAAmB,EAAA,CAAG,IAAI,CAAA;AACrC,IAAA,IAAI,OAAO,MAAA,EAAW;AACpB,MAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,uBAAA,EAAyB,EAAE,CAAC,CAAA;AAAA,IACpD;AAEA,IAAA,MAAM,OAAO,EAAA,CAAG,UAAA;AAChB,IAAA,IAAI,MAAM,KAAA,KAAU,MAAA,IAAa,OAAO,IAAA,CAAK,UAAU,QAAA,EAAU;AAC/D,MAAA,KAAA,CAAM,IAAA,CAAK,WAAW,sBAAA,EAAwB,IAAA,CAAK,MAAM,KAAA,CAAM,CAAA,EAAG,MAAM,CAAC,CAAC,CAAA;AAAA,IAC5E;AAEA,IAAA,MAAM,SAAS,IAAA,EAAM,MAAA;AACrB,IAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,WAAW,IAAA,EAAM;AAC3D,MAAA,MAAM,MAAO,MAAA,CAA8B,KAAA;AAC3C,MAAA,MAAM,OAAQ,MAAA,CAA+B,MAAA;AAC7C,MAAA,IAAI,OAAO,QAAQ,QAAA,EAAU,KAAA,CAAM,KAAK,OAAA,CAAQ,2BAAA,EAA6B,GAAG,CAAC,CAAA;AACjF,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU,KAAA,CAAM,KAAK,OAAA,CAAQ,4BAAA,EAA8B,IAAI,CAAC,CAAA;AAAA,IACtF;AAEA,IAAA,IAAI,iBAAA,IAAqB,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACzD,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AACzC,QAAA,IAAI,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,OAAA,EAAS;AACrC,QAAA,IAAI,OAAO,MAAM,QAAA,IAAY,OAAO,MAAM,QAAA,IAAY,OAAO,MAAM,SAAA,EAAW;AAC5E,UAAA,KAAA,CAAM,IAAA;AAAA,YACJ,UAAA;AAAA,cACE,yBAAyB,CAAC,CAAA,CAAA;AAAA,cAC1B,OAAO,MAAM,QAAA,GAAW,CAAA,CAAE,MAAM,CAAA,EAAG,MAAM,CAAA,GAAI,MAAA,CAAO,CAAC;AAAA;AACvD,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,UAAA,GAAa,mBAAA;AACjB,IAAA,IAAI,aAAA;AACJ,IAAA,IAAI,EAAA,CAAG,WAAW,OAAA,EAAS;AACzB,MAAA,UAAA,GAAa,mBAAA;AACb,MAAA,aAAA,GACE,QAAQ,OAAO,IAAA,CAAK,KAAA,KAAU,QAAA,IAAY,KAAK,KAAA,KAAU,IAAA,GACrD,MAAA,CAAQ,IAAA,CAAK,MAA+B,OAAA,IAAW,OAAO,EAAE,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,GAC/E,OAAA;AAAA,IACR,CAAA,MAAA,IAAW,EAAA,CAAG,MAAA,KAAW,IAAA,EAAM;AAC7B,MAAA,UAAA,GAAa,gBAAA;AAAA,IACf;AAEA,IAAA,MAAM,QAAA,GAAoC;AAAA,MACxC,OAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAM,EAAA,CAAG,IAAA;AAAA,MACT,IAAA,EAAM,oBAAA;AAAA,MACN,iBAAA,EAAmB,OAAA;AAAA,MACnB,UAAA,EAAY,KAAA;AAAA,MACZ,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,UAAA;AAAA,QACN,GAAI,aAAA,KAAkB,MAAA,GAAY,EAAE,OAAA,EAAS,aAAA,KAAkB;AAAC;AAClE,KACF;AAEA,IAAA,IAAI,iBAAiB,MAAA,EAAW;AAC9B,MAAA,QAAA,CAAS,YAAA,GAAe,YAAA;AAAA,IAC1B;AACA,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,QAAA,CAAS,eAAA,GAAkB,KAAA;AAAA,IAC7B;AAEA,IAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AAAA,EACrB;AAEA,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,aAAA,EAAe;AAAA,MACb;AAAA,QACE,QAAA,EAAU;AAAA,UACR,UAAA,EAAY,CAAC,UAAA,CAAW,cAAA,EAAgB,eAAe,CAAC;AAAA,SAC1D;AAAA,QACA,UAAA,EAAY;AAAA,UACV;AAAA,YACE,KAAA,EAAO,EAAE,IAAA,EAAM,eAAA,EAAgB;AAAA,YAC/B;AAAA;AACF;AACF;AACF;AACF,GACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,WAAA;AAAA,IACR,SAAS,IAAA,CAAK,SAAA,CAAU,SAAS,IAAA,EAAM,MAAA,GAAS,IAAI,MAAS,CAAA;AAAA,IAC7D,WAAA,EAAa,kBAAA;AAAA,IACb,aAAA,EAAe,YAAA;AAAA,IACf;AAAA,GACF;AACF;;;ACxKA,IAAM,YAAA,GACJ,mGAAA;AAEK,SAAS,qBAAA,CACd,QACA,OAAA,EACwB;AACxB,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,MAAM,QAAA,GAAqB,CAAC,YAAY,CAAA;AAExC,EAAA,IAAI,WAAW,UAAA,EAAY;AACzB,IAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,oBAAoB,CAAA,EAAG;AAC7C,MAAA,MAAA,CAAO,KAAK,sDAAsD,CAAA;AAAA,IACpE;AACA,IAAA,OAAO,EAAE,EAAA,EAAI,MAAA,CAAO,WAAW,CAAA,EAAG,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,EAC7D;AAEA,EAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,IAAA,MAAM,KAAA,GAAQ,QAAQ,WAAA,EAAY;AAClC,IAAA,IAAI,CAAC,KAAA,CAAM,QAAA,CAAS,gBAAgB,CAAA,EAAG;AACrC,MAAA,MAAA,CAAO,KAAK,0CAA0C,CAAA;AAAA,IACxD;AACA,IAAA,IAAI,eAAA,CAAgB,IAAA,CAAK,OAAO,CAAA,EAAG;AACjC,MAAA,MAAA,CAAO,KAAK,0CAA0C,CAAA;AAAA,IACxD;AACA,IAAA,IAAI,0BAAA,CAA2B,IAAA,CAAK,OAAO,CAAA,EAAG;AAC5C,MAAA,QAAA,CAAS,KAAK,uEAAkE,CAAA;AAAA,IAClF;AACA,IAAA,OAAO,EAAE,EAAA,EAAI,MAAA,CAAO,WAAW,CAAA,EAAG,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,EAC7D;AAEA,EAAA,IAAI,WAAW,eAAA,EAAiB;AAC9B,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAC7B,CAAA,CAAA,MAAQ;AACN,MAAA,MAAA,CAAO,KAAK,wCAAwC,CAAA;AACpD,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,IAC/C;AACA,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AACzC,MAAA,MAAA,CAAO,KAAK,6CAA6C,CAAA;AACzD,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,IAC/C;AACA,IAAA,MAAM,CAAA,GAAI,MAAA;AACV,IAAA,IAAI,CAAA,CAAE,WAAW,eAAA,EAAiB;AAChC,MAAA,MAAA,CAAO,KAAK,2DAA2D,CAAA;AAAA,IACzE;AACA,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,KAAK,CAAA,EAAG;AAC3B,MAAA,MAAA,CAAO,KAAK,iDAAiD,CAAA;AAAA,IAC/D;AACA,IAAA,QAAA,CAAS,KAAK,oEAAoE,CAAA;AAClF,IAAA,OAAO,EAAE,EAAA,EAAI,MAAA,CAAO,WAAW,CAAA,EAAG,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,EAC7D;AAEA,EAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAC7B,CAAA,CAAA,MAAQ;AACN,MAAA,MAAA,CAAO,KAAK,oCAAoC,CAAA;AAChD,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,IAC/C;AACA,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AACzC,MAAA,MAAA,CAAO,KAAK,oCAAoC,CAAA;AAChD,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,IAC/C;AACA,IAAA,MAAM,CAAA,GAAI,MAAA;AACV,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,aAAa,CAAA,EAAG;AACnC,MAAA,MAAA,CAAO,KAAK,mDAAmD,CAAA;AAAA,IACjE;AACA,IAAA,QAAA,CAAS,IAAA;AAAA,MACP;AAAA,KACF;AACA,IAAA,OAAO,EAAE,EAAA,EAAI,MAAA,CAAO,WAAW,CAAA,EAAG,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,EAC7D;AAEA,EAAA,MAAA,CAAO,KAAK,CAAA,yBAAA,CAA2B,CAAA;AACvC,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAC/C;;;ACvEA,SAAS,sBAAsB,CAAA,EAA0B;AACvD,EAAA,QAAQ,CAAA;AAAG,IACT,KAAK,KAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,UAAA;AAAA,IACT,KAAK,KAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT;AACE,MAAA,OAAO,OAAA;AAAA;AAEb;AAEA,SAASC,eACP,CAAA,EACoC;AACpC,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,SAAA;AAC5B,EAAA,IAAI,CAAA,KAAM,WAAW,OAAO,IAAA;AAC5B,EAAA,OAAO,OAAA;AACT;AAoBO,SAAS,2BAA2B,MAAA,EAAsC;AAC/E,EAAA,MAAM,UAAU,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,aAAa,CAAA;AAC5D,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,KAAA,KAAU,aAAA,EAAe;AAC/C,IAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,EACtD;AAEA,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,EAAA,MAAM,UAAU,OAAA,CAAQ,IAAA;AAExB,EAAA,MAAM,eAAe,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,eAAe,CAAA;AACrE,EAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,YAAA,CAAa,MAAA,GAAS,CAAC,CAAA;AAE1D,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,IAAA,SAAA,GAAY,SAAA;AAAA,EACd,CAAA,MAAA,IAAW,aAAA,CAAc,MAAA,KAAW,SAAA,EAAW;AAC7C,IAAA,SAAA,GAAY,IAAA;AAAA,EACd,CAAA,MAAO;AACL,IAAA,SAAA,GAAY,OAAA;AAAA,EACd;AAEA,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;AAC1B,EAAA,MAAM,UACJ,aAAA,KAAkB,MAAA,IAAa,SAAA,KAAc,SAAA,GAAY,cAAc,OAAA,GAAU,MAAA;AACnF,EAAA,MAAM,UAAA,GACJ,kBAAkB,MAAA,IAAa,MAAA,CAAO,SAAS,aAAA,CAAc,UAAU,CAAA,GACnE,aAAA,CAAc,UAAA,GACd,MAAA;AAEN,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAqB;AAEvC,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAA,CAAE,UAAU,cAAA,EAAgB;AAChC,IAAA,MAAM,CAAA,GAAI,CAAA;AACV,IAAA,KAAA,CAAM,GAAA,CAAI,EAAE,MAAA,EAAQ;AAAA,MAClB,IAAI,CAAA,CAAE,MAAA;AAAA,MACN,UAAU,CAAA,CAAE,QAAA;AAAA,MACZ,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,WAAW,CAAA,CAAE,SAAA;AAAA,MACb,WAAW,CAAA,CAAE,SAAA;AAAA,MACb,UAAU,CAAA,CAAE;AAAA,KACb,CAAA;AAAA,EACH;AAEA,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAA,CAAE,UAAU,gBAAA,EAAkB;AAClC,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA;AAC9B,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,GAAA,CAAI,SAAS,CAAA,CAAE,MAAA;AACf,IAAA,GAAA,CAAI,UAAU,CAAA,CAAE,OAAA;AAChB,IAAA,GAAA,CAAI,aAAa,CAAA,CAAE,UAAA;AACnB,IAAA,IAAI,CAAA,CAAE,OAAO,OAAA,EAAS;AACpB,MAAA,GAAA,CAAI,QAAQ,CAAA,CAAE,KAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAyB;AAElD,EAAA,KAAA,MAAW,GAAA,IAAO,KAAA,CAAM,MAAA,EAAO,EAAG;AAChC,IAAA,MAAM,IAAA,GAAO,qBAAA,CAAsB,GAAA,CAAI,IAAI,CAAA;AAC3C,IAAA,MAAM,MAAA,GAASA,cAAAA,CAAc,GAAA,CAAI,MAAM,CAAA;AACvC,IAAA,MAAM,QAAiC,EAAE,GAAI,GAAA,CAAI,QAAA,IAAY,EAAC,EAAG;AACjE,IAAA,IAAI,GAAA,CAAI,OAAO,OAAA,EAAS;AACtB,MAAA,KAAA,CAAM,QAAQ,GAAA,CAAI,KAAA;AAAA,IACpB;AAEA,IAAA,MAAM,GAAA,GAAoB;AAAA,MACxB,SAAS,GAAA,CAAI,EAAA;AAAA,MACb,KAAA;AAAA,MACA,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,IAAA;AAAA,MACA,WAAW,GAAA,CAAI,SAAA;AAAA,MACf,MAAA;AAAA,MACA,YAAY,GAAA,CAAI,UAAA;AAAA,MAChB,YAAY,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,GAAS,IAAI,KAAA,GAAQ,MAAA;AAAA,MACpD,UAAA,EAAY,UAAA;AAAA,MACZ,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA;AAAS,KAC3B;AAEA,IAAA,YAAA,CAAa,GAAA,CAAI,GAAA,CAAI,EAAA,EAAI,EAAE,KAAA,EAAO,GAAA,EAAK,QAAA,EAAU,EAAC,EAAG,KAAA,EAAO,CAAA,EAAG,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,QAAuB,EAAC;AAC9B,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,EAAgB,CAAA,KACnC,EAAE,KAAA,CAAM,SAAA,GAAY,EAAE,KAAA,CAAM,SAAA;AAE9B,EAAA,KAAA,MAAW,IAAA,IAAQ,YAAA,CAAa,MAAA,EAAO,EAAG;AACxC,IAAA,MAAM,GAAA,GAAM,KAAK,KAAA,CAAM,QAAA;AACvB,IAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA,EAAG;AAC9C,MAAA,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA,CAAG,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IAC3C,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,IACjB;AAAA,EACF;AAEA,EAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AACtB,EAAA,KAAA,MAAW,CAAA,IAAK,YAAA,CAAa,MAAA,EAAO,EAAG;AACrC,IAAA,CAAA,CAAE,QAAA,CAAS,KAAK,WAAW,CAAA;AAAA,EAC7B;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,EAAgB,KAAA,KAAkB;AACrD,IAAA,CAAA,CAAE,KAAA,GAAQ,KAAA;AACV,IAAA,KAAA,MAAW,KAAK,CAAA,CAAE,QAAA,EAAU,WAAA,CAAY,CAAA,EAAG,QAAQ,CAAC,CAAA;AAAA,EACtD,CAAA;AACA,EAAA,KAAA,MAAW,CAAA,IAAK,KAAA,EAAO,WAAA,CAAY,CAAA,EAAG,CAAC,CAAA;AAEvC,EAAA,MAAM,mBAAA,GAAsB;AAAA,IAC1B,QAAA,EAAU,CAAA;AAAA,IACV,UAAA,EAAY,CAAA;AAAA,IACZ,SAAA,EAAW,CAAA;AAAA,IACX,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,QAAQ,SAAA,EAAU;AAExB,EAAA,SAAS,UAAU,KAAA,EAA4B;AAC7C,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,mBAAA,CAAoB,CAAA,CAAE,KAAA,CAAM,UAAU,CAAA,IAAK,CAAA;AAC3C,MAAA,KAAA,CAAM,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA,IAAK,CAAA;AACvB,MAAA,IAAI,EAAE,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,SAAA,CAAU,EAAE,QAAQ,CAAA;AAAA,IACjD;AAAA,EACF;AACA,EAAA,SAAA,CAAU,KAAK,CAAA;AAEf,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,IAAA,EAAM,OAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,SAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA,EAAU,KAAA;AAAA,IACV,QAAA,EAAU;AAAA,MACR,aAAa,YAAA,CAAa,IAAA;AAAA,MAC1B,mBAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;;;ACrLO,SAAS,oBAAoB,OAAA,EAAuC;AACzE,EAAA,OAAO;AAAA,IACL,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,eAAA,EAAiB,QAAQ,eAAA,IAAmB,IAAA;AAAA,IAC5C,iBAAA,EAAmB,QAAQ,iBAAA,IAAqB,KAAA;AAAA,IAChD,aAAA,EAAe,QAAQ,aAAA,IAAiB,IAAA;AAAA,IACxC,MAAA,EAAQ,QAAQ,MAAA,IAAU,IAAA;AAAA,IAC1B,QAAA,EAAU,QAAQ,QAAA,IAAY,IAAA;AAAA,IAC9B,kBAAA,EAAoB,QAAQ,kBAAA,IAAsB;AAAA,GACpD;AACF;AAMO,SAAS,aAAA,CAAc,MAAsB,OAAA,EAAsC;AACxF,EAAA,MAAM,IAAA,GAAO,oBAAoB,OAAO,CAAA;AACxC,EAAA,QAAQ,KAAK,MAAA;AAAQ,IACnB,KAAK,UAAA;AACH,MAAA,OAAO,cAAA,CAAe,MAAM,IAAI,CAAA;AAAA,IAClC,KAAK,MAAA;AACH,MAAA,OAAO,UAAA,CAAW,MAAM,IAAI,CAAA;AAAA,IAC9B,KAAK,eAAA;AACH,MAAA,OAAO,mBAAA,CAAoB,MAAM,IAAI,CAAA;AAAA,IACvC,KAAK,WAAA;AACH,MAAA,OAAO,cAAA,CAAe,MAAM,IAAI,CAAA;AAAA,IAClC,SAAS;AACP,MAAA,MAAM,KAAY,IAAA,CAAK,MAAA;AACvB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,MAAA,CAAO,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,IAC5D;AAAA;AAEJ;AAEO,SAAS,eAAe,MAAA,EAA8C;AAC3E,EAAA,MAAM,IAAA,GAAO,qBAAA,CAAsB,MAAA,CAAO,MAAA,EAAQ,OAAO,OAAO,CAAA;AAChE,EAAA,OAAO;AAAA,IACL,IAAI,IAAA,CAAK,EAAA;AAAA,IACT,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,UAAU,CAAC,GAAG,OAAO,QAAA,EAAU,GAAG,KAAK,QAAQ;AAAA,GACjD;AACF","file":"index.mjs","sourcesContent":["/**\n * Discriminator for what kind of work a {@link Step} represents.\n * `\"decision\"` captures agent branching/choices; other values cover runs, LLM calls, tools, and user-defined steps.\n */\nexport type StepType =\n | \"run\"\n | \"llm\"\n | \"tool\"\n | \"decision\"\n | \"logic\"\n | \"state\"\n | \"custom\";\n\n/** Lifecycle state of a single {@link Step}. */\nexport type StepStatus = \"running\" | \"success\" | \"error\";\n\n/** Lifecycle state of an entire {@link Run}. */\nexport type RunStatus = \"running\" | \"success\" | \"error\";\n\n/** Structured error attached to a run or step when status is `\"error\"`. */\nexport interface ErrorInfo {\n message: string;\n stack?: string;\n}\n\n/**\n * Optional token counts for a step (e.g. LLM usage).\n * Reserved for future roadmap; MVP does not compute or persist token usage.\n */\nexport interface TokenMetadata {\n input?: number;\n output?: number;\n}\n\n/** Arbitrary structured fields for a step; safe extensions use string keys. */\nexport interface StepMetadata {\n model?: string;\n toolName?: string;\n tokens?: TokenMetadata;\n retryCount?: number;\n [key: string]: unknown;\n}\n\n/**\n * One traced agent run (root of an execution tree).\n * MVP intentionally omits `input` / `output` on the run to limit PII, secrets, and serialization risk.\n */\nexport interface Run {\n id: string;\n name: string;\n status: RunStatus;\n startTime: number;\n endTime?: number;\n durationMs?: number;\n error?: ErrorInfo;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * One node in the execution tree under a {@link Run}.\n * MVP intentionally omits `input` / `output`; capture/redaction may come in a later version.\n */\nexport interface Step {\n id: string;\n runId: string;\n parentId?: string;\n name: string;\n type: StepType;\n status: StepStatus;\n startTime: number;\n endTime?: number;\n durationMs?: number;\n error?: ErrorInfo;\n metadata?: StepMetadata;\n}\n\n/** Version of the JSONL trace line schema consumed by AgentInspect tooling. */\nexport type TraceSchemaVersion = \"0.1\";\n\n/**\n * Status for lightweight trace metadata extraction.\n * `\"unknown\"` means the file contained valid events but a run status could not be determined safely.\n */\nexport type TraceMetadataStatus = \"success\" | \"error\" | \"running\" | \"unknown\";\n\nexport interface TraceMetadata {\n runId: string;\n name?: string;\n status: TraceMetadataStatus;\n startedAt?: number;\n endedAt?: number;\n durationMs?: number;\n eventCount: number;\n filePath: string;\n fileSize: number;\n createdAt: Date;\n}\n\nexport interface RunSummary {\n runId: string;\n name?: string;\n status: TraceMetadataStatus;\n durationMs?: number;\n totalSteps: number;\n llmSteps: number;\n toolSteps: number;\n logicSteps: number;\n errorSteps: number;\n maxDepth: number;\n longestStep?: {\n name: string;\n durationMs: number;\n type: string;\n };\n totalTokens?: {\n input: number;\n output: number;\n };\n}\n\n/** Fields shared by every persisted trace event line. */\nexport interface TraceEventBase {\n schemaVersion: TraceSchemaVersion;\n event: string;\n timestamp: number;\n}\n\n/** Emitted when a run begins. */\nexport interface RunStartedEvent extends TraceEventBase {\n event: \"run_started\";\n runId: string;\n name: string;\n startTime: number;\n metadata?: Record<string, unknown>;\n}\n\n/** Emitted when a run finishes successfully or with an error. */\nexport interface RunCompletedEvent extends TraceEventBase {\n event: \"run_completed\";\n runId: string;\n status: \"success\" | \"error\";\n endTime: number;\n durationMs: number;\n error?: ErrorInfo;\n}\n\n/** Emitted when a step begins (including nested steps under `parentId`). */\nexport interface StepStartedEvent extends TraceEventBase {\n event: \"step_started\";\n runId: string;\n stepId: string;\n parentId?: string;\n name: string;\n type: StepType;\n startTime: number;\n metadata?: StepMetadata;\n}\n\n/**\n * Emitted when a step finishes (success or failure).\n * Failures use `status: \"error\"` and optional {@link ErrorInfo}; there is no separate `step_failed` event in MVP.\n */\nexport interface StepCompletedEvent extends TraceEventBase {\n event: \"step_completed\";\n runId: string;\n stepId: string;\n status: \"success\" | \"error\";\n endTime: number;\n durationMs: number;\n error?: ErrorInfo;\n}\n\n/** Discriminated union of all MVP trace events written as JSONL lines. */\nexport type TraceEvent =\n | RunStartedEvent\n | RunCompletedEvent\n | StepStartedEvent\n | StepCompletedEvent;\n\n/** Options for `inspectRun()` (implemented in a later step). */\nexport interface InspectRunOptions {\n traceDir?: string;\n silent?: boolean;\n metadata?: Record<string, unknown>;\n}\n\n/** Options passed when opening a logical step (implemented in a later step). */\nexport interface StepOptions {\n type?: StepType;\n metadata?: StepMetadata;\n}\n\n/** Options for `observe()` — same surface as {@link InspectRunOptions} in MVP. */\nexport type ObserveOptions = InspectRunOptions;\n\n/**\n * Resolved settings for the active run while tracing is enabled.\n * Populated by runtime code in a later step; defined here for `context.ts`.\n */\nexport interface ExecutionContext {\n runId: string;\n runName: string;\n traceDir: string;\n silent: boolean;\n metadata?: Record<string, unknown>;\n}\n\n/** Stack position of the step currently executing (used by future context tracking). */\nexport interface ActiveStepContext {\n stepId: string;\n parentId?: string;\n depth: number;\n}\n\nconst STEP_TYPES: readonly StepType[] = [\n \"run\",\n \"llm\",\n \"tool\",\n \"decision\",\n \"logic\",\n \"state\",\n \"custom\",\n] as const;\n\nconst STEP_STATUSES: readonly StepStatus[] = [\n \"running\",\n \"success\",\n \"error\",\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/** Returns true if `value` is one of the MVP {@link StepType} literals. */\nexport function isStepType(value: unknown): value is StepType {\n return (\n typeof value === \"string\" &&\n (STEP_TYPES as readonly string[]).includes(value)\n );\n}\n\n/** Returns true if `value` is one of the MVP {@link StepStatus} literals. */\nexport function isStepStatus(value: unknown): value is StepStatus {\n return (\n typeof value === \"string\" &&\n (STEP_STATUSES as readonly string[]).includes(value)\n );\n}\n\n/**\n * Narrowing guard for a {@link TraceEvent} object with required MVP fields.\n * Does not deeply validate optional `metadata` shapes.\n */\nexport function isTraceEvent(value: unknown): value is TraceEvent {\n if (!isRecord(value)) return false;\n if (value.schemaVersion !== \"0.1\") return false;\n if (typeof value.timestamp !== \"number\") return false;\n if (typeof value.event !== \"string\") return false;\n\n switch (value.event) {\n case \"run_started\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.name === \"string\" &&\n typeof value.startTime === \"number\"\n );\n }\n case \"run_completed\": {\n return (\n typeof value.runId === \"string\" &&\n (value.status === \"success\" || value.status === \"error\") &&\n typeof value.endTime === \"number\" &&\n typeof value.durationMs === \"number\"\n );\n }\n case \"step_started\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.stepId === \"string\" &&\n typeof value.name === \"string\" &&\n isStepType(value.type) &&\n typeof value.startTime === \"number\"\n );\n }\n case \"step_completed\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.stepId === \"string\" &&\n (value.status === \"success\" || value.status === \"error\") &&\n typeof value.endTime === \"number\" &&\n typeof value.durationMs === \"number\"\n );\n }\n default:\n return false;\n }\n}\n","import { readFile } from \"node:fs/promises\";\n\nimport type { LogEventMapping, LogIngestConfig, RedactionRule } from \"../types/log-config.js\";\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction isNonEmptyStringArray(v: unknown): v is string[] {\n return (\n Array.isArray(v) &&\n v.length > 0 &&\n v.every((x) => typeof x === \"string\" && x.trim() !== \"\")\n );\n}\n\nfunction validateRedact(redact: unknown): asserts redact is RedactionRule[] {\n if (!Array.isArray(redact)) {\n throw new Error(\"Invalid config: redact must be an array\");\n }\n for (const r of redact) {\n if (typeof r === \"string\") continue;\n if (!isRecord(r)) {\n throw new Error(\"Invalid config: redact entries must be strings or objects\");\n }\n if (typeof r.key !== \"string\" || r.key.trim() === \"\") {\n throw new Error(\"Invalid config: redact.key must be a non-empty string\");\n }\n if (r.strategy !== \"full\" && r.strategy !== \"prefix\" && r.strategy !== \"hash\") {\n throw new Error(\n `Invalid config: redact.strategy must be one of full, prefix, hash (got ${String(\n r.strategy,\n )})`,\n );\n }\n if (r.keep !== undefined && (typeof r.keep !== \"number\" || !Number.isFinite(r.keep) || r.keep < 0)) {\n throw new Error(\"Invalid config: redact.keep must be a non-negative number when provided\");\n }\n }\n}\n\nfunction validateMappings(mappings: unknown): asserts mappings is Record<string, LogEventMapping> {\n if (!isRecord(mappings)) {\n throw new Error(\"Invalid config: mappings must be an object\");\n }\n}\n\nexport const DEFAULT_LOG_INGEST_CONFIG: LogIngestConfig = {\n runIdKeys: [\"runId\", \"traceId\", \"requestId\", \"decisionId\", \"jobId\"],\n eventKey: \"event\",\n timestampKey: \"timestamp\",\n messageKey: \"message\",\n levelKey: \"level\",\n heuristicWindowMs: 2000,\n mappings: {\n \"*.error\": { kind: \"ERROR\", status: \"error\" },\n \"*.failed\": { kind: \"ERROR\", status: \"error\" },\n \"*.llm.*\": { kind: \"LLM\" },\n \"*.tool.*\": { kind: \"TOOL\" },\n \"*.agent.*\": { kind: \"AGENT\" },\n \"*.retriever.*\": { kind: \"RETRIEVER\" },\n \"*.result.*\": { kind: \"RESULT\" },\n },\n};\n\nexport function mergeLogIngestConfig(\n base: LogIngestConfig,\n override: Partial<LogIngestConfig>,\n): LogIngestConfig {\n const merged: LogIngestConfig = {\n ...base,\n ...override,\n mappings: {\n ...(base.mappings ?? {}),\n ...(override.mappings ?? {}),\n },\n };\n return merged;\n}\n\nexport async function loadLogIngestConfig(configPath?: string): Promise<LogIngestConfig> {\n if (configPath === undefined || configPath.trim() === \"\") {\n return DEFAULT_LOG_INGEST_CONFIG;\n }\n\n let rawText: string;\n try {\n rawText = await readFile(configPath, \"utf-8\");\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`Failed to read config file: ${configPath} (${msg})`);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(rawText) as unknown;\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`Invalid JSON in config file: ${configPath} (${msg})`);\n }\n\n if (!isRecord(parsed)) {\n throw new Error(\"Invalid config: expected a JSON object at top-level\");\n }\n\n const user = parsed as Partial<LogIngestConfig>;\n\n if (user.runIdKeys !== undefined && !isNonEmptyStringArray(user.runIdKeys)) {\n throw new Error(\"Invalid config: runIdKeys must be a non-empty array of strings\");\n }\n if (user.eventKey !== undefined && (typeof user.eventKey !== \"string\" || user.eventKey.trim() === \"\")) {\n throw new Error(\"Invalid config: eventKey must be a non-empty string\");\n }\n\n for (const k of [\n \"timestampKey\",\n \"messageKey\",\n \"levelKey\",\n \"parentIdKey\",\n \"durationKey\",\n \"statusKey\",\n ] as const) {\n const v = (user as any)[k];\n if (v !== undefined && (typeof v !== \"string\" || v.trim() === \"\")) {\n throw new Error(`Invalid config: ${k} must be a non-empty string when provided`);\n }\n }\n\n if (user.mappings !== undefined) {\n validateMappings(user.mappings);\n }\n if (user.redact !== undefined) {\n validateRedact(user.redact);\n }\n if (\n user.heuristicWindowMs !== undefined &&\n (typeof user.heuristicWindowMs !== \"number\" ||\n !Number.isFinite(user.heuristicWindowMs) ||\n user.heuristicWindowMs < 0)\n ) {\n throw new Error(\"Invalid config: heuristicWindowMs must be a non-negative number when provided\");\n }\n\n // Explicitly reject obviously unsafe config patterns.\n if ((user as any).redact && JSON.stringify((user as any).redact).includes(\"=>\")) {\n throw new Error(\"Invalid config: function strings are not supported in redact rules\");\n }\n\n return mergeLogIngestConfig(DEFAULT_LOG_INGEST_CONFIG, user);\n}\n\n","import { readFile } from \"node:fs/promises\";\n\nimport type { RawLogRecord } from \"./raw-record.js\";\nimport type { ParseResult, ParserWarning } from \"./warnings.js\";\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nexport class JsonLogParser {\n parseLines(lines: string[], filePath?: string): ParseResult<RawLogRecord> {\n const records: RawLogRecord[] = [];\n const warnings: ParserWarning[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const lineNumber = i + 1;\n const raw = lines[i] ?? \"\";\n const trimmed = raw.trim();\n if (trimmed === \"\") continue;\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed) as unknown;\n } catch {\n warnings.push({\n code: \"MALFORMED_JSON\",\n message: \"Malformed JSON log line\",\n file: filePath,\n line: lineNumber,\n raw: trimmed.slice(0, 500),\n });\n continue;\n }\n if (!isRecord(parsed)) {\n warnings.push({\n code: \"MALFORMED_JSON\",\n message: \"JSON log line must be an object\",\n file: filePath,\n line: lineNumber,\n raw: trimmed.slice(0, 500),\n });\n continue;\n }\n records.push({\n raw: parsed,\n file: filePath,\n line: lineNumber,\n sourceType: \"json-log\",\n });\n }\n\n return { records, warnings };\n }\n\n async parseFile(filePath: string): Promise<ParseResult<RawLogRecord>> {\n let text: string;\n try {\n text = await readFile(filePath, \"utf-8\");\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`Failed to read log file: ${filePath} (${msg})`);\n }\n const lines = text.split(/\\r?\\n/);\n return this.parseLines(lines, filePath);\n }\n}\n\n","import { readFile } from \"node:fs/promises\";\n\nimport type { RawLogRecord } from \"./raw-record.js\";\nimport type { ParseResult, ParserWarning } from \"./warnings.js\";\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction findLastJsonObjectSubstring(line: string): string | undefined {\n // Scan for balanced {...} regions and keep the last one.\n // This is deliberately conservative: it does not attempt to parse JS object literal syntax.\n let last: { start: number; end: number } | undefined;\n for (let i = 0; i < line.length; i++) {\n if (line[i] !== \"{\") continue;\n let depth = 0;\n let inString = false;\n let escape = false;\n for (let j = i; j < line.length; j++) {\n const ch = line[j]!;\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (ch === \"\\\\\") {\n escape = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n continue;\n }\n if (ch === \"{\") depth += 1;\n if (ch === \"}\") depth -= 1;\n if (depth === 0) {\n last = { start: i, end: j + 1 };\n i = j;\n break;\n }\n if (depth < 0) break;\n }\n }\n if (!last) return undefined;\n return line.slice(last.start, last.end);\n}\n\nexport class Log4jsParser {\n parseLines(lines: string[], filePath?: string): ParseResult<RawLogRecord> {\n const records: RawLogRecord[] = [];\n const warnings: ParserWarning[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const lineNumber = i + 1;\n const rawLine = lines[i] ?? \"\";\n const trimmed = rawLine.trim();\n if (trimmed === \"\") continue;\n\n const jsonText = findLastJsonObjectSubstring(trimmed);\n if (!jsonText) {\n warnings.push({\n code: \"UNSUPPORTED_LOG4JS_PAYLOAD\",\n message: \"No embedded JSON object found in log4js line\",\n file: filePath,\n line: lineNumber,\n raw: trimmed.slice(0, 500),\n });\n continue;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(jsonText) as unknown;\n } catch {\n warnings.push({\n code: \"MALFORMED_JSON\",\n message: \"Malformed embedded JSON object in log4js line\",\n file: filePath,\n line: lineNumber,\n raw: jsonText.slice(0, 500),\n });\n continue;\n }\n\n if (!isRecord(parsed)) {\n warnings.push({\n code: \"UNSUPPORTED_LOG4JS_PAYLOAD\",\n message: \"Embedded JSON payload must be an object\",\n file: filePath,\n line: lineNumber,\n raw: jsonText.slice(0, 500),\n });\n continue;\n }\n\n records.push({\n raw: parsed,\n file: filePath,\n line: lineNumber,\n sourceType: \"log4js\",\n });\n }\n\n return { records, warnings };\n }\n\n async parseFile(filePath: string): Promise<ParseResult<RawLogRecord>> {\n let text: string;\n try {\n text = await readFile(filePath, \"utf-8\");\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`Failed to read log file: ${filePath} (${msg})`);\n }\n const lines = text.split(/\\r?\\n/);\n return this.parseLines(lines, filePath);\n }\n}\n\n","import type { LogEventMapping } from \"../types/log-config.js\";\n\nexport function wildcardMatch(pattern: string, value: string): boolean {\n if (pattern === value) return true;\n if (!pattern.includes(\"*\")) return false;\n\n const parts = pattern.split(\"*\");\n let idx = 0;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]!;\n if (part === \"\") continue;\n const found = value.indexOf(part, idx);\n if (found === -1) return false;\n if (i === 0 && !pattern.startsWith(\"*\") && found !== 0) return false;\n idx = found + part.length;\n }\n if (!pattern.endsWith(\"*\")) {\n const last = parts[parts.length - 1]!;\n if (last !== \"\" && !value.endsWith(last)) return false;\n if (last === \"\" && !value.endsWith(parts[parts.length - 2] ?? \"\")) return false;\n }\n return true;\n}\n\nexport function matchMapping(\n eventName: string,\n mappings?: Record<string, LogEventMapping>,\n): LogEventMapping | undefined {\n if (!mappings) return undefined;\n if (mappings[eventName]) return mappings[eventName];\n\n let bestKey: string | undefined;\n let bestScore = -1;\n\n for (const key of Object.keys(mappings)) {\n if (!key.includes(\"*\")) continue;\n if (!wildcardMatch(key, eventName)) continue;\n const score = key.replaceAll(\"*\", \"\").length;\n if (score > bestScore) {\n bestScore = score;\n bestKey = key;\n }\n }\n\n return bestKey ? mappings[bestKey] : undefined;\n}\n\n","import crypto from \"node:crypto\";\n\nimport type { RedactionRule } from \"../types/log-config.js\";\n\nexport const DEFAULT_REDACT_KEYS = [\n \"authorization\",\n \"cookie\",\n \"token\",\n \"apiKey\",\n \"password\",\n \"secret\",\n \"email\",\n] as const;\n\nexport interface RedactorOptions {\n rules?: RedactionRule[];\n}\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction toKey(s: string): string {\n return s.toLowerCase();\n}\n\nfunction stableHash(value: string): string {\n const h = crypto.createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n return h.slice(0, 8);\n}\n\ntype CompiledRule =\n | { key: string; strategy: \"full\" }\n | { key: string; strategy: \"prefix\"; keep: number }\n | { key: string; strategy: \"hash\" };\n\nfunction compileRules(rules?: RedactionRule[]): CompiledRule[] {\n const out = new Map<string, CompiledRule>();\n\n const set = (r: CompiledRule) => {\n const k = toKey(r.key);\n out.set(k, { ...r, key: k } as CompiledRule);\n };\n\n for (const k of DEFAULT_REDACT_KEYS) {\n set({ key: k, strategy: \"full\" });\n }\n\n for (const r of rules ?? []) {\n if (typeof r === \"string\") {\n set({ key: r, strategy: \"full\" });\n continue;\n }\n const key = r.key;\n if (r.strategy === \"full\") set({ key, strategy: \"full\" });\n if (r.strategy === \"hash\") set({ key, strategy: \"hash\" });\n if (r.strategy === \"prefix\") {\n set({ key, strategy: \"prefix\", keep: typeof r.keep === \"number\" ? r.keep : 8 });\n }\n }\n\n return [...out.values()];\n}\n\nexport class Redactor {\n readonly #rules: CompiledRule[];\n\n constructor(options?: RedactorOptions) {\n this.#rules = compileRules(options?.rules);\n }\n\n redactValue(key: string, value: unknown): unknown {\n const k = toKey(key);\n const rule = this.#rules.find((r) => r.key === k);\n if (!rule) {\n return this.#redactNested(value);\n }\n\n if (rule.strategy === \"full\") return \"[REDACTED]\";\n const asString =\n typeof value === \"string\"\n ? value\n : typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\"\n ? String(value)\n : undefined;\n\n if (rule.strategy === \"prefix\") {\n if (asString === undefined) return \"[REDACTED]\";\n const keep = Math.max(0, Math.floor(rule.keep));\n return asString.length <= keep ? `${asString}…` : `${asString.slice(0, keep)}…`;\n }\n\n if (rule.strategy === \"hash\") {\n if (asString === undefined) return \"[HASH:unknown]\";\n return `[HASH:${stableHash(asString)}]`;\n }\n\n return this.#redactNested(value);\n }\n\n redactRecord(record: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(record)) {\n out[k] = this.redactValue(k, v);\n }\n return out;\n }\n\n #redactNested(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((v) => this.#redactNested(v));\n }\n if (isRecord(value)) {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n out[k] = this.redactValue(k, v);\n }\n return out;\n }\n return value;\n }\n}\n\n","import { nanoid } from \"nanoid\";\n\nimport type { InspectEvent, InspectKind } from \"../types/inspect-event.js\";\nimport type { LogIngestConfig } from \"../types/log-config.js\";\nimport type { RawLogRecord } from \"./raw-record.js\";\nimport type { ParseResult, ParserWarning } from \"./warnings.js\";\nimport { matchMapping } from \"./mapping.js\";\n\nfunction isFiniteNumber(v: unknown): v is number {\n return typeof v === \"number\" && Number.isFinite(v);\n}\n\nfunction safeString(v: unknown): string | undefined {\n if (typeof v !== \"string\") return undefined;\n const t = v.trim();\n return t === \"\" ? undefined : t;\n}\n\nfunction parseTimestamp(v: unknown): number | undefined {\n if (isFiniteNumber(v)) return v;\n if (typeof v === \"string\") {\n const t = Date.parse(v);\n if (Number.isFinite(t)) return t;\n }\n return undefined;\n}\n\nfunction hasToken(hay: string, token: string): boolean {\n return hay.includes(token);\n}\n\nfunction inferKind(eventName: string): InspectKind {\n if (hasToken(eventName, \".llm.\")) return \"LLM\";\n if (hasToken(eventName, \".tool.\")) return \"TOOL\";\n if (hasToken(eventName, \".agent.\")) return \"AGENT\";\n if (hasToken(eventName, \".retriever.\")) return \"RETRIEVER\";\n if (hasToken(eventName, \".result.\")) return \"RESULT\";\n if (eventName.endsWith(\".error\") || eventName.endsWith(\".failed\") || eventName.includes(\".error\") || eventName.includes(\".failed\")) {\n return \"ERROR\";\n }\n return \"LOG\";\n}\n\nfunction deriveName(eventName: string, kind: InspectKind): string {\n const parts = eventName.split(\".\");\n const last = parts[parts.length - 1] ?? eventName;\n if (kind === \"LLM\") return `llm:${last}`;\n if (kind === \"TOOL\") return `tool:${last}`;\n if (kind === \"AGENT\") return `agent:${last}`;\n if (kind === \"RESULT\") return `result:${last}`;\n if (kind === \"RUN\") return `run:${last}`;\n if (kind === \"RETRIEVER\") return `retriever:${last}`;\n if (kind === \"ERROR\") return `error:${last}`;\n return eventName;\n}\n\nexport interface NormalizeOptions {\n config: LogIngestConfig;\n sourceFile?: string;\n}\n\nexport class EventNormalizer {\n readonly #config: LogIngestConfig;\n\n constructor(options: NormalizeOptions) {\n this.#config = options.config;\n }\n\n #normalizeInternal(\n record: RawLogRecord,\n ): { event?: InspectEvent; warning?: ParserWarning } {\n const raw = record.raw;\n const cfg = this.#config;\n\n // runId\n let runId: string | undefined;\n for (const k of cfg.runIdKeys) {\n const v = raw[k];\n const s = safeString(v);\n if (s) {\n runId = s;\n break;\n }\n }\n if (!runId) {\n return {\n warning: {\n code: \"MISSING_RUN_ID\",\n message: \"Missing run id (none of runIdKeys present)\",\n file: record.file,\n line: record.line,\n },\n };\n }\n\n // event name\n const eventName = safeString(raw[cfg.eventKey]);\n if (!eventName) {\n return {\n warning: {\n code: \"MISSING_EVENT\",\n message: `Missing event name (key: ${cfg.eventKey})`,\n file: record.file,\n line: record.line,\n },\n };\n }\n\n const mapping = matchMapping(eventName, cfg.mappings);\n\n // timestamp\n const tsKey = cfg.timestampKey ?? \"timestamp\";\n const tsRaw = raw[tsKey];\n const parsedTs = parseTimestamp(tsRaw);\n const timestamp = parsedTs ?? Date.now();\n const timestampMissing = parsedTs === undefined;\n\n // parentId\n const parentIdKey = cfg.parentIdKey;\n const parentId = parentIdKey ? safeString(raw[parentIdKey]) : undefined;\n\n // duration\n let durationMs: number | undefined;\n const durationKey = cfg.durationKey;\n if (durationKey) {\n const v = raw[durationKey];\n if (isFiniteNumber(v)) durationMs = v;\n } else if (isFiniteNumber((raw as any).durationMs)) {\n durationMs = (raw as any).durationMs as number;\n }\n\n // status\n let status: InspectEvent[\"status\"] | undefined;\n const statusKey = cfg.statusKey;\n const statusRaw = statusKey ? safeString(raw[statusKey]) : undefined;\n if (statusRaw === \"running\" || statusRaw === \"ok\" || statusRaw === \"error\") {\n status = statusRaw;\n } else if (mapping?.status) {\n status = mapping.status;\n } else if (mapping?.kind === \"ERROR\") {\n status = \"error\";\n } else if (eventName.includes(\".failed\") || eventName.includes(\".error\")) {\n status = \"error\";\n } else if (mapping?.startsRun || mapping?.startsStep) {\n status = \"running\";\n } else if (mapping?.endsRun || mapping?.endsStep) {\n status = \"ok\";\n }\n\n // kind\n const kind: InspectKind = mapping?.kind ?? inferKind(eventName);\n\n // name\n const name = mapping?.name ?? deriveName(eventName, kind);\n\n // confidence\n let confidence: InspectEvent[\"confidence\"] = \"correlated\";\n if (parentId || mapping?.startsRun) confidence = \"explicit\";\n if (timestampMissing) confidence = \"unknown\";\n\n // attributes: exclude used keys\n const omit = new Set<string>([\n ...cfg.runIdKeys,\n cfg.eventKey,\n tsKey,\n cfg.messageKey ?? \"message\",\n cfg.levelKey ?? \"level\",\n cfg.parentIdKey ?? \"\",\n cfg.durationKey ?? \"\",\n cfg.statusKey ?? \"\",\n \"durationMs\",\n ].filter((k) => k !== \"\"));\n\n const attributes: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(raw)) {\n if (omit.has(k)) continue;\n attributes[k] = v;\n }\n\n const event: InspectEvent = {\n eventId: nanoid(10),\n runId,\n ...(parentId ? { parentId } : {}),\n name,\n kind,\n timestamp,\n ...(status ? { status } : {}),\n ...(durationMs !== undefined ? { durationMs } : {}),\n ...(Object.keys(attributes).length > 0 ? { attributes } : {}),\n confidence,\n source: {\n type: record.sourceType,\n file: record.file,\n line: record.line,\n },\n };\n\n if (timestampMissing) {\n return {\n event,\n warning: {\n code: \"MISSING_TIMESTAMP\",\n message: `Missing or invalid timestamp (key: ${tsKey})`,\n file: record.file,\n line: record.line,\n raw: JSON.stringify(raw).slice(0, 500),\n },\n };\n }\n\n return { event };\n }\n\n normalize(record: RawLogRecord): InspectEvent | ParserWarning {\n const r = this.#normalizeInternal(record);\n return r.event ?? (r.warning as ParserWarning);\n }\n\n normalizeAll(records: RawLogRecord[]): ParseResult<InspectEvent> {\n const out: InspectEvent[] = [];\n const warnings: ParserWarning[] = [];\n for (const r of records) {\n const normalized = this.#normalizeInternal(r);\n if (normalized.event) out.push(normalized.event);\n if (normalized.warning) warnings.push(normalized.warning);\n }\n return { records: out, warnings };\n }\n}\n\n","import type { InspectEvent, InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport type { LogIngestConfig } from \"../types/log-config.js\";\n\nexport interface TreeBuilderOptions {\n config?: LogIngestConfig;\n}\n\nfunction inc<T extends string>(map: Record<T, number>, key: T): void {\n map[key] = (map[key] ?? 0) + 1;\n}\n\nfunction computeRunStatus(events: InspectEvent[]): InspectRunTree[\"status\"] {\n let hasRunning = false;\n for (const e of events) {\n if (e.status === \"error\") return \"error\";\n if (e.status === \"running\") hasRunning = true;\n }\n if (hasRunning) return \"running\";\n return \"ok\";\n}\n\nexport class TreeBuilder {\n constructor(options?: TreeBuilderOptions) {\n void options?.config;\n }\n\n build(events: InspectEvent[]): InspectRunTree[] {\n const byRun = new Map<string, InspectEvent[]>();\n for (const e of events) {\n if (!byRun.has(e.runId)) byRun.set(e.runId, []);\n byRun.get(e.runId)!.push(e);\n }\n\n const out: InspectRunTree[] = [];\n for (const [runId, runEvents] of byRun.entries()) {\n const sorted = [...runEvents].sort((a, b) => a.timestamp - b.timestamp);\n\n const nodes = new Map<string, InspectNode>();\n for (const e of sorted) {\n nodes.set(e.eventId, { event: e, children: [], depth: 0 });\n }\n\n const roots: InspectNode[] = [];\n for (const node of nodes.values()) {\n const parentId = node.event.parentId;\n if (parentId && nodes.has(parentId)) {\n nodes.get(parentId)!.children.push(node);\n } else {\n roots.push(node);\n }\n }\n\n const assignDepth = (n: InspectNode, depth: number) => {\n n.depth = depth;\n for (const c of n.children) assignDepth(c, depth + 1);\n };\n for (const r of roots) assignDepth(r, 0);\n\n // metadata\n const confidenceBreakdown = {\n explicit: 0,\n correlated: 0,\n heuristic: 0,\n unknown: 0,\n } as Record<InspectEvent[\"confidence\"], number>;\n const kinds = {} as Record<InspectEvent[\"kind\"], number>;\n for (const e of sorted) {\n inc(confidenceBreakdown, e.confidence);\n (kinds as any)[e.kind] = ((kinds as any)[e.kind] ?? 0) + 1;\n }\n\n const startedAt = sorted.length > 0 ? sorted[0]!.timestamp : undefined;\n const endedAt = sorted.length > 0 ? sorted[sorted.length - 1]!.timestamp : undefined;\n const status = computeRunStatus(sorted);\n const durationMs =\n startedAt !== undefined &&\n endedAt !== undefined &&\n Number.isFinite(startedAt) &&\n Number.isFinite(endedAt) &&\n endedAt >= startedAt &&\n status !== \"running\"\n ? endedAt - startedAt\n : undefined;\n\n const name = sorted.find((e) => e.kind === \"RUN\")?.name;\n\n out.push({\n runId,\n name,\n status,\n startedAt,\n endedAt: status === \"running\" ? undefined : endedAt,\n durationMs,\n children: roots,\n metadata: {\n totalEvents: sorted.length,\n confidenceBreakdown,\n kinds,\n },\n });\n }\n\n // newest first for stable display\n out.sort((a, b) => (b.startedAt ?? 0) - (a.startedAt ?? 0));\n return out;\n }\n}\n\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\n\nexport interface RenderTreeOptions {\n verbose?: boolean;\n showConfidence?: \"always\" | \"non-explicit\" | \"never\";\n showMetadata?: boolean;\n color?: boolean;\n maxAttributeLength?: number;\n summary?: boolean;\n}\n\nfunction truncate(v: string, max: number): string {\n if (v.length <= max) return v;\n return v.slice(0, Math.max(0, max - 1)) + \"…\";\n}\n\nfunction fmtAttrValue(value: unknown, maxLen: number): string | undefined {\n if (value === null || value === undefined) return undefined;\n if (typeof value === \"string\") return truncate(value, maxLen);\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return String(value);\n }\n if (typeof value === \"object\") {\n try {\n return truncate(JSON.stringify(value), maxLen);\n } catch {\n return \"[object]\";\n }\n }\n return String(value);\n}\n\nfunction compactAttrs(attrs: Record<string, unknown> | undefined, maxLen: number): string {\n if (!attrs) return \"\";\n const entries = Object.entries(attrs);\n if (entries.length === 0) return \"\";\n\n const picks = new Map<string, string>();\n const set = (k: string, v: unknown) => {\n const s = fmtAttrValue(v, maxLen);\n if (s !== undefined) picks.set(k, s);\n };\n\n // Prefer common keys in expected output\n set(\"job\", attrs.jobId ?? attrs.job ?? attrs.jobUuid);\n set(\"user\", attrs.userUuid ?? attrs.userId ?? attrs.user);\n set(\"trip\", attrs.tripUuid ?? attrs.tripId ?? attrs.trip);\n set(\"msgs\", attrs.messageCount ?? attrs.msgs);\n set(\"trips\", attrs.trips);\n set(\"model\", attrs.model);\n\n // tokens: input/output\n const tokens = attrs.tokens;\n if (tokens && typeof tokens === \"object\" && tokens !== null) {\n const input = (tokens as any).input;\n const output = (tokens as any).output;\n if (typeof input === \"number\" || typeof output === \"number\") {\n picks.set(\"tokens\", `${input ?? \"?\"}/${output ?? \"?\"}`);\n }\n }\n\n // Allow a few booleans/strings\n for (const k of [\"shouldNotify\", \"variant\"] as const) {\n if (k in attrs) set(k, (attrs as any)[k]);\n }\n\n const rendered = [...picks.entries()]\n .filter(([, v]) => v !== \"\")\n .map(([k, v]) => `${k}=${v}`);\n\n return rendered.length > 0 ? \" \" + rendered.join(\" \") : \"\";\n}\n\nfunction statusMark(node: InspectNode): string {\n if (node.event.status === \"error\") return \" ✖\";\n if (node.event.status === \"ok\") return \" ✔\";\n return \"\";\n}\n\nfunction fmtDuration(ms: number): string {\n if (!Number.isFinite(ms) || ms < 0) return \"\";\n if (ms < 1000) return `${Math.round(ms)}ms`;\n return `${(ms / 1000).toFixed(2)}s`;\n}\n\nfunction renderNodeLines(node: InspectNode, prefix: string, isLast: boolean, options: Required<RenderTreeOptions>): string[] {\n const branch = prefix + (isLast ? \"└─ \" : \"├─ \");\n const nextPrefix = prefix + (isLast ? \" \" : \"│ \");\n const attrs = compactAttrs(node.event.attributes, options.maxAttributeLength);\n const dur = node.event.durationMs !== undefined ? ` ${fmtDuration(node.event.durationMs)}` : \"\";\n const line = `${branch}${node.event.name}${attrs}${statusMark(node)}${dur}`;\n\n const lines = [line];\n\n const showConf =\n options.showConfidence === \"always\" ||\n (options.showConfidence === \"non-explicit\" && node.event.confidence !== \"explicit\");\n if (showConf) {\n lines.push(`${nextPrefix}confidence: ${node.event.confidence}`);\n }\n\n const children = node.children;\n for (let i = 0; i < children.length; i++) {\n lines.push(...renderNodeLines(children[i]!, nextPrefix, i === children.length - 1, options));\n }\n return lines;\n}\n\nexport function renderRunTree(tree: InspectRunTree, options?: RenderTreeOptions): string {\n const opts: Required<RenderTreeOptions> = {\n verbose: options?.verbose ?? false,\n showConfidence: options?.showConfidence ?? \"always\",\n showMetadata: options?.showMetadata ?? false,\n color: options?.color ?? false,\n maxAttributeLength: options?.maxAttributeLength ?? 40,\n summary: options?.summary ?? true,\n };\n\n const header = `Run ${tree.runId}`;\n const lines: string[] = [header];\n\n const children = tree.children;\n for (let i = 0; i < children.length; i++) {\n lines.push(...renderNodeLines(children[i]!, \"\", i === children.length - 1, opts));\n }\n\n if (opts.summary) {\n const cb = tree.metadata.confidenceBreakdown;\n const tools = tree.metadata.kinds.TOOL ?? 0;\n const llms = tree.metadata.kinds.LLM ?? 0;\n lines.push(\"\");\n lines.push(\"Summary:\");\n lines.push(` Events: ${tree.metadata.totalEvents}`);\n lines.push(` Tools: ${tools}`);\n lines.push(` LLMs: ${llms}`);\n lines.push(\n ` Confidence: ${cb.explicit} explicit, ${cb.correlated} correlated, ${cb.heuristic} heuristic, ${cb.unknown} unknown`,\n );\n lines.push(\"\");\n lines.push(\"Note:\");\n lines.push(\" Flat timeline by default. Nesting only with explicit parentId.\");\n }\n\n return lines.join(\"\\n\");\n}\n\nexport function renderRunTrees(trees: InspectRunTree[], options?: RenderTreeOptions): string {\n return trees.map((t) => renderRunTree(t, options)).join(\"\\n\\n\");\n}\n\n","import type { RawLogRecord } from \"./raw-record.js\";\nimport { JsonLogParser } from \"./json-parser.js\";\nimport { Log4jsParser } from \"./log4js-parser.js\";\nimport type { ParseResult, ParserWarning } from \"./warnings.js\";\n\nexport type LogSourceFormat = \"json\" | \"log4js\" | \"auto\";\n\nexport interface ParseLogLineOptions {\n format?: LogSourceFormat;\n file?: string;\n line?: number;\n}\n\nfunction shiftLineNumbers(\n res: ParseResult<RawLogRecord>,\n options: ParseLogLineOptions,\n): ParseResult<RawLogRecord> {\n const targetLine =\n typeof options.line === \"number\" && Number.isFinite(options.line) && options.line > 0\n ? Math.floor(options.line)\n : undefined;\n const file = typeof options.file === \"string\" && options.file.trim() !== \"\" ? options.file : undefined;\n\n if (targetLine === undefined && file === undefined) return res;\n\n const mapRecord = (x: RawLogRecord): RawLogRecord => ({\n ...x,\n ...(targetLine !== undefined ? { line: targetLine } : {}),\n ...(file !== undefined ? { file } : {}),\n });\n\n const mapWarning = (x: ParserWarning): ParserWarning => ({\n ...x,\n ...(targetLine !== undefined ? { line: targetLine } : {}),\n ...(file !== undefined ? { file } : {}),\n });\n\n return {\n records: res.records.map(mapRecord),\n warnings: res.warnings.map(mapWarning),\n };\n}\n\nfunction normalizeFormat(line: string, format: LogSourceFormat | undefined): LogSourceFormat {\n if (format && format !== \"auto\") return format;\n const trimmed = line.trim();\n if (trimmed.startsWith(\"{\")) return \"json\";\n return \"log4js\";\n}\n\nexport function parseLogLine(\n line: string,\n options: ParseLogLineOptions = {},\n): ParseResult<RawLogRecord> {\n const raw = typeof line === \"string\" ? line : \"\";\n const trimmed = raw.trim();\n if (trimmed === \"\") return { records: [], warnings: [] };\n\n const format = normalizeFormat(raw, options.format);\n const base =\n format === \"json\"\n ? new JsonLogParser().parseLines([raw], options.file)\n : new Log4jsParser().parseLines([raw], options.file);\n\n // JsonLogParser/Log4jsParser always number lines starting at 1; for streaming tail we\n // need to preserve the real stream/file line number when provided.\n return shiftLineNumbers(base, options);\n}\n\n","import type { InspectEvent, InspectRunTree } from \"../types/inspect-event.js\";\nimport type { LogIngestConfig } from \"../types/log-config.js\";\nimport { mergeLogIngestConfig } from \"./config.js\";\nimport type { LogSourceFormat } from \"./line-parser.js\";\nimport { parseLogLine } from \"./line-parser.js\";\nimport { EventNormalizer } from \"./normalizer.js\";\nimport { Redactor } from \"./redactor.js\";\nimport { TreeBuilder } from \"./tree-builder.js\";\nimport type { ParserWarning } from \"./warnings.js\";\n\nexport interface LiveLogUpdate {\n events: InspectEvent[];\n trees: InspectRunTree[];\n warnings: ParserWarning[];\n}\n\nexport interface LiveLogAccumulatorOptions {\n config: LogIngestConfig;\n format?: LogSourceFormat;\n file?: string;\n}\n\nexport class LiveLogAccumulator {\n readonly #config: LogIngestConfig;\n readonly #format: LogSourceFormat;\n readonly #file?: string;\n\n readonly #normalizer: EventNormalizer;\n readonly #redactor: Redactor;\n readonly #treeBuilder: TreeBuilder;\n\n #events: InspectEvent[] = [];\n #warnings: ParserWarning[] = [];\n #trees: InspectRunTree[] = [];\n\n constructor(options: LiveLogAccumulatorOptions) {\n // Ensure defaults are applied consistently.\n this.#config = mergeLogIngestConfig(options.config, {});\n this.#format = options.format ?? \"auto\";\n this.#file = options.file;\n\n this.#normalizer = new EventNormalizer({ config: this.#config });\n this.#redactor = new Redactor({ rules: this.#config.redact });\n this.#treeBuilder = new TreeBuilder({ config: this.#config });\n }\n\n pushLine(line: string, lineNumber?: number): LiveLogUpdate {\n try {\n const parsed = parseLogLine(line, {\n format: this.#format,\n file: this.#file,\n line: lineNumber,\n });\n\n const normalized = this.#normalizer.normalizeAll(parsed.records);\n\n // Redact attributes after normalization, before storing.\n const redactedEvents = normalized.records.map((e) => ({\n ...e,\n attributes: e.attributes ? this.#redactor.redactRecord(e.attributes) : undefined,\n }));\n\n this.#events = [...this.#events, ...redactedEvents];\n this.#warnings = [...this.#warnings, ...parsed.warnings, ...normalized.warnings];\n this.#trees = this.#treeBuilder.build(this.#events);\n\n return {\n events: this.#events,\n trees: this.#trees,\n warnings: this.#warnings,\n };\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n const warning: ParserWarning = {\n code: \"UNKNOWN\",\n message: `LiveLogAccumulator failed to process line (${msg})`,\n file: this.#file,\n line: lineNumber,\n raw: typeof line === \"string\" ? line.slice(0, 500) : undefined,\n };\n this.#warnings = [...this.#warnings, warning];\n return { events: this.#events, trees: this.#trees, warnings: this.#warnings };\n }\n }\n\n getEvents(): InspectEvent[] {\n return this.#events;\n }\n\n getTrees(): InspectRunTree[] {\n return this.#trees;\n }\n\n getWarnings(): ParserWarning[] {\n return this.#warnings;\n }\n\n reset(): void {\n this.#events = [];\n this.#trees = [];\n this.#warnings = [];\n }\n}\n\n","import { readFile } from \"node:fs/promises\";\n\nimport type { InspectEvent, InspectRunTree } from \"../types/inspect-event.js\";\nimport type { LogIngestConfig } from \"../types/log-config.js\";\nimport { loadLogIngestConfig, mergeLogIngestConfig } from \"./config.js\";\nimport { JsonLogParser } from \"./json-parser.js\";\nimport { Log4jsParser } from \"./log4js-parser.js\";\nimport type { RawLogRecord } from \"./raw-record.js\";\nimport { Redactor } from \"./redactor.js\";\nimport { EventNormalizer } from \"./normalizer.js\";\nimport { TreeBuilder } from \"./tree-builder.js\";\nimport type { ParserWarning } from \"./warnings.js\";\nexport type { LogSourceFormat, ParseLogLineOptions } from \"./line-parser.js\";\nexport { parseLogLine } from \"./line-parser.js\";\nexport type { LiveLogUpdate, LiveLogAccumulatorOptions } from \"./live-tree.js\";\nexport { LiveLogAccumulator } from \"./live-tree.js\";\n\nexport interface ParseLogsOptions {\n format?: \"json\" | \"log4js\" | \"auto\";\n config?: LogIngestConfig;\n configPath?: string;\n runIdKeys?: string[];\n eventKey?: string;\n timestampKey?: string;\n messageKey?: string;\n levelKey?: string;\n parentIdKey?: string;\n durationKey?: string;\n statusKey?: string;\n warnings?: \"none\" | \"summary\" | \"all\";\n}\n\nexport interface LogToTreeResult {\n events: InspectEvent[];\n trees: InspectRunTree[];\n warnings: ParserWarning[];\n}\n\nfunction firstNonEmptyLine(text: string): string | undefined {\n for (const line of text.split(/\\r?\\n/)) {\n const t = line.trim();\n if (t !== \"\") return t;\n }\n return undefined;\n}\n\nasync function detectFormat(\n filePath: string,\n): Promise<\"json\" | \"log4js\"> {\n const text = await readFile(filePath, \"utf-8\");\n const first = firstNonEmptyLine(text);\n if (!first) return \"log4js\";\n if (!first.startsWith(\"{\")) return \"log4js\";\n try {\n const parsed = JSON.parse(first) as unknown;\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) return \"json\";\n } catch {\n /* ignore */\n }\n return \"log4js\";\n}\n\nfunction applyOverrides(\n cfg: LogIngestConfig,\n options: ParseLogsOptions,\n): LogIngestConfig {\n const override: Partial<LogIngestConfig> = {};\n for (const k of [\n \"runIdKeys\",\n \"eventKey\",\n \"timestampKey\",\n \"messageKey\",\n \"levelKey\",\n \"parentIdKey\",\n \"durationKey\",\n \"statusKey\",\n ] as const) {\n const v = (options as any)[k];\n if (v !== undefined) (override as any)[k] = v;\n }\n return mergeLogIngestConfig(cfg, override);\n}\n\n/**\n * @experimental Compatibility-oriented API for parsing structured logs into normalized run trees.\n * Subject to refinement before a future stability declaration.\n */\nexport async function parseLogsToTrees(\n filePath: string,\n options: ParseLogsOptions = {},\n): Promise<LogToTreeResult> {\n const base =\n options.config ??\n (await loadLogIngestConfig(options.configPath));\n const config = applyOverrides(base, options);\n\n const format =\n options.format === \"auto\" || options.format === undefined\n ? await detectFormat(filePath)\n : options.format;\n\n let parsed: { records: RawLogRecord[]; warnings: ParserWarning[] };\n if (format === \"json\") {\n parsed = await new JsonLogParser().parseFile(filePath);\n } else {\n parsed = await new Log4jsParser().parseFile(filePath);\n }\n\n const normalizer = new EventNormalizer({ config });\n const normalized = normalizer.normalizeAll(parsed.records);\n\n // Redact attributes after normalization.\n const redactor = new Redactor({ rules: config.redact });\n const events: InspectEvent[] = normalized.records.map((e) => ({\n ...e,\n attributes: e.attributes ? redactor.redactRecord(e.attributes) : undefined,\n }));\n\n const trees = new TreeBuilder({ config }).build(events);\n\n return {\n events,\n trees,\n warnings: [...parsed.warnings, ...normalized.warnings],\n };\n}\n\n","/**\n * v0.2 shared duration utilities.\n *\n * `parseDuration` is used for filters such as \"since\" / \"older-than\".\n * `formatDuration` is used for compact display in CLI and summaries.\n */\n\nexport function parseDuration(duration: string): number {\n const raw = typeof duration === \"string\" ? duration.trim() : \"\";\n const match = raw.match(/^(\\d+)(ms|[smhd])$/);\n if (!match) {\n throw new Error(\n `Invalid duration format: ${duration}. Use a positive integer followed by ms, s, m, h, or d (e.g. 500ms, 30s, 5m, 2h, 7d).`,\n );\n }\n\n const amount = Number.parseInt(match[1], 10);\n const unit = match[2];\n\n if (!Number.isFinite(amount) || amount <= 0) {\n throw new Error(\n `Invalid duration amount: ${duration}. Amount must be a positive integer.`,\n );\n }\n\n switch (unit) {\n case \"ms\":\n return amount;\n case \"s\":\n return amount * 1000;\n case \"m\":\n return amount * 60 * 1000;\n case \"h\":\n return amount * 60 * 60 * 1000;\n case \"d\":\n return amount * 24 * 60 * 60 * 1000;\n default: {\n // Should be unreachable due to regex.\n throw new Error(`Unknown duration unit: ${unit}`);\n }\n }\n}\n\nexport function formatDuration(ms: number): string {\n if (!Number.isFinite(ms)) {\n return \"0ms\";\n }\n if (ms < 0) {\n throw new Error(`formatDuration: ms must be non-negative (got ${ms})`);\n }\n if (ms < 1000) {\n return `${Math.floor(ms)}ms`;\n }\n if (ms < 60_000) {\n return `${(ms / 1000).toFixed(2)}s`;\n }\n if (ms < 3_600_000) {\n return `${(ms / 60_000).toFixed(1)}m`;\n }\n return `${(ms / 3_600_000).toFixed(1)}h`;\n}\n\n","import { mkdir } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { nanoid } from \"nanoid\";\n\nimport type { ErrorInfo } from \"./types.js\";\nimport { formatDuration as formatDurationV2 } from \"./utils/duration.js\";\n\n/** Default folder under the user home for AgentInspect data. */\nexport const DEFAULT_TRACE_DIR_NAME = \".agent-inspect\";\n\n/** Subfolder where JSONL run traces are stored. */\nexport const RUNS_DIR_NAME = \"runs\";\n\n/** Writable trace root when the default home path cannot be used. */\nexport const FALLBACK_TRACE_DIR = path.join(\n os.tmpdir(),\n \"agent-inspect\",\n RUNS_DIR_NAME,\n);\n\n/** Maximum display length for run/step names before truncation. */\nexport const MAX_NAME_LENGTH = 100;\n\n/** Returns `run_` + a 10-character nanoid segment. */\nexport function createRunId(): string {\n return `run_${nanoid(10)}`;\n}\n\n/** Returns `step_` + a 10-character nanoid segment. */\nexport function createStepId(): string {\n return `step_${nanoid(10)}`;\n}\n\n/** Formats a duration for CLI display (v0.2 rules). */\nexport function formatDuration(ms: number): string {\n return formatDurationV2(ms);\n}\n\n/**\n * Formats a Unix timestamp (ms) as local `YYYY-MM-DD HH:mm:ss`.\n * Invalid values yield `\"Invalid date\"` (no throw).\n */\nexport function formatTimestamp(timestamp: number): string {\n if (!Number.isFinite(timestamp)) {\n return \"Invalid date\";\n }\n const d = new Date(timestamp);\n if (Number.isNaN(d.getTime())) {\n return \"Invalid date\";\n }\n const y = d.getFullYear();\n const mo = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n const h = String(d.getHours()).padStart(2, \"0\");\n const min = String(d.getMinutes()).padStart(2, \"0\");\n const s = String(d.getSeconds()).padStart(2, \"0\");\n return `${y}-${mo}-${day} ${h}:${min}:${s}`;\n}\n\n/**\n * Default directory for trace files: `~/DEFAULT_TRACE_DIR_NAME/RUNS_DIR_NAME`.\n * Falls back to {@link FALLBACK_TRACE_DIR} when home cannot be resolved.\n */\nexport function getDefaultTraceDir(): string {\n const envDir = process.env.AGENT_INSPECT_TRACE_DIR;\n if (typeof envDir === \"string\" && envDir.trim() !== \"\") {\n return envDir.trim();\n }\n try {\n const home = os.homedir();\n if (typeof home !== \"string\" || home.trim() === \"\") {\n return FALLBACK_TRACE_DIR;\n }\n return path.join(home, DEFAULT_TRACE_DIR_NAME, RUNS_DIR_NAME);\n } catch {\n return FALLBACK_TRACE_DIR;\n }\n}\n\n/**\n * Full path to the JSONL trace file for a run.\n * `runId` is passed through `path.basename` to avoid traversal; empty ids become `run_unknown`.\n */\nexport function getTraceFilePath(runId: string, traceDir?: string): string {\n const baseDir = traceDir ?? getDefaultTraceDir();\n let safeId =\n typeof runId === \"string\" && runId.trim() !== \"\" ? runId.trim() : \"run_unknown\";\n safeId = path.basename(safeId);\n if (safeId === \"\" || safeId === \".\" || safeId === \"..\") {\n safeId = \"run_unknown\";\n }\n return path.join(baseDir, `${safeId}.jsonl`);\n}\n\n/**\n * Ensures a trace directory exists (recursive). Tries {@link FALLBACK_TRACE_DIR} on failure.\n * Returns the directory path that callers should prefer: primary, fallback, or original if both mkdir attempts fail.\n * Emits concise `[AgentInspect]` warnings on failure; never throws.\n */\nexport async function ensureTraceDir(traceDir: string): Promise<string> {\n const primary = path.resolve(traceDir);\n try {\n await mkdir(primary, { recursive: true });\n return primary;\n } catch {\n warn(`Failed to create trace directory: ${primary}`);\n const fallback = path.resolve(FALLBACK_TRACE_DIR);\n try {\n await mkdir(fallback, { recursive: true });\n return fallback;\n } catch {\n warn(`Failed to create fallback trace directory: ${fallback}`);\n return primary;\n }\n }\n}\n\n/**\n * Normalizes any thrown/caught value into {@link ErrorInfo}.\n * Never throws (circular structures and non-JSON values fall back to a generic message).\n */\nexport function formatError(error: unknown): ErrorInfo {\n if (error instanceof Error) {\n const out: ErrorInfo = { message: error.message };\n if (typeof error.stack === \"string\" && error.stack.length > 0) {\n out.stack = error.stack;\n }\n return out;\n }\n if (typeof error === \"string\") {\n return { message: error };\n }\n if (error === null) {\n return { message: \"Unknown error: null\" };\n }\n if (error === undefined) {\n return { message: \"Unknown error: undefined\" };\n }\n if (\n typeof error === \"number\" ||\n typeof error === \"boolean\" ||\n typeof error === \"bigint\"\n ) {\n return { message: String(error) };\n }\n if (typeof error === \"object\") {\n try {\n return { message: JSON.stringify(error) };\n } catch {\n return { message: \"Unknown error\" };\n }\n }\n return { message: \"Unknown error\" };\n}\n\n/**\n * Truncates a display name to `maxLength`, appending `\"...\"` when shortened.\n * Empty or non-string input becomes `\"unnamed\"`.\n */\nexport function truncateName(name: string, maxLength = MAX_NAME_LENGTH): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed\";\n }\n const trimmed = name.trim();\n if (trimmed.length <= maxLength) {\n return trimmed;\n }\n const ellipsis = \"...\";\n const head = Math.max(0, maxLength - ellipsis.length);\n return `${trimmed.slice(0, head)}${ellipsis}`;\n}\n\n/**\n * Instrumentation-only warning to stderr. Not a general-purpose logger.\n * Optional `error` is summarized via {@link formatError} (message only).\n */\nexport function warn(message: string, error?: unknown): void {\n const base = `[AgentInspect] ${message}`;\n if (error === undefined) {\n console.warn(base);\n return;\n }\n console.warn(`${base}: ${formatError(error).message}`);\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport type { ExecutionContext } from \"./types.js\";\n\ntype RuntimeExecutionContext = ExecutionContext & {\n currentStepId?: string;\n currentDepth: number;\n};\n\nconst storage = new AsyncLocalStorage<RuntimeExecutionContext>();\n\nfunction toPublicContext(ctx: RuntimeExecutionContext): ExecutionContext {\n return {\n runId: ctx.runId,\n runName: ctx.runName,\n traceDir: ctx.traceDir,\n silent: ctx.silent,\n metadata: ctx.metadata,\n };\n}\n\nfunction invoke<T>(fn: () => T | Promise<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n try {\n Promise.resolve(fn()).then(resolve, reject);\n } catch (e) {\n reject(e);\n }\n });\n}\n\n/** Returns the active run context, without internal step fields. */\nexport function getCurrentContext(): ExecutionContext | undefined {\n try {\n const s = storage.getStore();\n if (!s) return undefined;\n return toPublicContext(s);\n } catch {\n return undefined;\n }\n}\n\n/** Active `runId` when inside `runWithContext`, else `undefined`. */\nexport function getCurrentRunId(): string | undefined {\n try {\n return storage.getStore()?.runId;\n } catch {\n return undefined;\n }\n}\n\n/** Active `runName` when inside `runWithContext`, else `undefined`. */\nexport function getCurrentRunName(): string | undefined {\n try {\n return storage.getStore()?.runName;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Active step id in this async scope (parent for nested `step()` calls).\n * `undefined` at run root or outside any run.\n */\nexport function getCurrentStepId(): string | undefined {\n try {\n return storage.getStore()?.currentStepId;\n } catch {\n return undefined;\n }\n}\n\n/** Alias of {@link getCurrentStepId} for readability in step instrumentation. */\nexport function getParentStepId(): string | undefined {\n return getCurrentStepId();\n}\n\n/**\n * Nesting depth: `0` at run root, increments by one per nested `runWithStepContext`.\n * Returns `0` outside any run.\n */\nexport function getCurrentDepth(): number {\n try {\n const d = storage.getStore()?.currentDepth;\n return typeof d === \"number\" && Number.isFinite(d) ? d : 0;\n } catch {\n return 0;\n }\n}\n\nexport function hasActiveContext(): boolean {\n try {\n return storage.getStore() !== undefined;\n } catch {\n return false;\n }\n}\n\nexport function getTraceDirFromContext(): string | undefined {\n try {\n return storage.getStore()?.traceDir;\n } catch {\n return undefined;\n }\n}\n\nexport function isSilentContext(): boolean {\n try {\n const s = storage.getStore();\n return s ? s.silent : false;\n } catch {\n return false;\n }\n}\n\n/**\n * Runs `fn` with a fresh AgentInspect run context (depth 0, no active step).\n * Propagates sync/async results and rejections; does not swallow user errors.\n */\nexport function runWithContext<T>(\n context: ExecutionContext,\n fn: () => Promise<T> | T,\n): Promise<T> {\n const runtime: RuntimeExecutionContext = {\n runId: context.runId,\n runName: context.runName,\n traceDir: context.traceDir,\n silent: context.silent,\n metadata: context.metadata,\n currentDepth: 0,\n };\n\n return new Promise((resolve, reject) => {\n storage.run(runtime, () => {\n try {\n Promise.resolve(fn()).then(resolve, reject);\n } catch (e) {\n reject(e);\n }\n });\n });\n}\n\n/**\n * Runs `fn` with `stepId` as the active step (incremented depth).\n * If no run is active, runs `fn` without altering async context.\n */\nexport function runWithStepContext<T>(\n stepId: string,\n fn: () => Promise<T> | T,\n): Promise<T> {\n let parent: RuntimeExecutionContext | undefined;\n try {\n parent = storage.getStore();\n } catch {\n parent = undefined;\n }\n\n if (!parent) {\n return invoke(fn);\n }\n\n const derived: RuntimeExecutionContext = {\n runId: parent.runId,\n runName: parent.runName,\n traceDir: parent.traceDir,\n silent: parent.silent,\n metadata: parent.metadata,\n currentStepId: stepId,\n currentDepth: parent.currentDepth + 1,\n };\n\n return new Promise((resolve, reject) => {\n storage.run(derived, () => {\n try {\n Promise.resolve(fn()).then(resolve, reject);\n } catch (e) {\n reject(e);\n }\n });\n });\n}\n","import { appendFile, readdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type { TraceEvent } from \"./types.js\";\nimport { isStepType } from \"./types.js\";\nimport {\n ensureTraceDir,\n FALLBACK_TRACE_DIR,\n getTraceFilePath,\n warn,\n} from \"./utils.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction finiteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction optionalErrorInfo(value: unknown): boolean {\n if (value === undefined) return true;\n if (!isRecord(value)) return false;\n if (typeof value.message !== \"string\") return false;\n if (\"stack\" in value && value.stack !== undefined) {\n if (typeof value.stack !== \"string\") return false;\n }\n return true;\n}\n\n/**\n * Strict MVP validation before writing JSONL. Rejects empty ids, non-finite times, and malformed payloads.\n */\nexport function validateEvent(event: unknown): event is TraceEvent {\n if (!isRecord(event)) return false;\n if (event.schemaVersion !== \"0.1\") return false;\n if (!finiteNumber(event.timestamp)) return false;\n if (typeof event.event !== \"string\") return false;\n\n switch (event.event) {\n case \"run_started\": {\n if (\n !nonEmptyString(event.runId) ||\n !nonEmptyString(event.name) ||\n !finiteNumber(event.startTime)\n ) {\n return false;\n }\n if (event.metadata !== undefined && !isRecord(event.metadata)) {\n return false;\n }\n return true;\n }\n case \"run_completed\": {\n return (\n nonEmptyString(event.runId) &&\n (event.status === \"success\" || event.status === \"error\") &&\n finiteNumber(event.endTime) &&\n finiteNumber(event.durationMs) &&\n optionalErrorInfo(event.error)\n );\n }\n case \"step_started\": {\n if (\n !nonEmptyString(event.runId) ||\n !nonEmptyString(event.stepId) ||\n !nonEmptyString(event.name) ||\n !isStepType(event.type) ||\n !finiteNumber(event.startTime)\n ) {\n return false;\n }\n if (event.parentId !== undefined && typeof event.parentId !== \"string\") {\n return false;\n }\n if (event.metadata !== undefined && !isRecord(event.metadata)) {\n return false;\n }\n return true;\n }\n case \"step_completed\": {\n return (\n nonEmptyString(event.runId) &&\n nonEmptyString(event.stepId) &&\n (event.status === \"success\" || event.status === \"error\") &&\n finiteNumber(event.endTime) &&\n finiteNumber(event.durationMs) &&\n optionalErrorInfo(event.error)\n );\n }\n default:\n return false;\n }\n}\n\n/** Serializes a trace line as compact JSON without a trailing newline. */\nexport function serializeEvent(event: TraceEvent): string {\n try {\n return JSON.stringify(event);\n } catch {\n return \"\";\n }\n}\n\n/**\n * Creates (or truncates) an empty JSONL file for a run. Uses {@link ensureTraceDir} then {@link getTraceFilePath}.\n * On failure, retries once under {@link FALLBACK_TRACE_DIR}.\n */\nexport async function initializeTraceFile(\n runId: string,\n traceDir: string,\n): Promise<string | undefined> {\n try {\n const usable = await ensureTraceDir(traceDir);\n const filePath = getTraceFilePath(runId, usable);\n await writeFile(filePath, \"\", \"utf-8\");\n return filePath;\n } catch (e) {\n warn(\"Failed to initialize trace file\", e);\n }\n\n try {\n const usable = await ensureTraceDir(FALLBACK_TRACE_DIR);\n const filePath = getTraceFilePath(runId, usable);\n await writeFile(filePath, \"\", \"utf-8\");\n return filePath;\n } catch (e) {\n warn(\"Failed to initialize trace file on fallback directory\", e);\n return undefined;\n }\n}\n\n/**\n * Appends one validated JSONL line for `event.runId`. Falls back to {@link FALLBACK_TRACE_DIR} on append failure.\n */\nexport async function writeTraceEvent(\n event: TraceEvent,\n traceDir: string,\n): Promise<void> {\n if (!validateEvent(event)) {\n warn(\"Skipped invalid trace event (validation failed)\");\n return;\n }\n\n const line = serializeEvent(event);\n if (line === \"\") {\n warn(\"Skipped trace event (serialization failed)\");\n return;\n }\n\n const payload = `${line}\\n`;\n\n const tryAppend = async (dir: string): Promise<boolean> => {\n try {\n const usable = await ensureTraceDir(dir);\n const filePath = getTraceFilePath(event.runId, usable);\n await appendFile(filePath, payload, \"utf-8\");\n return true;\n } catch {\n return false;\n }\n };\n\n if (await tryAppend(traceDir)) {\n return;\n }\n\n warn(`Failed to append trace event for run ${event.runId}`);\n\n if (await tryAppend(FALLBACK_TRACE_DIR)) {\n return;\n }\n\n warn(\"Failed to append trace event to fallback directory\");\n}\n\n/**\n * Reads raw JSONL file contents for a run, or `undefined` if missing or unreadable.\n */\nexport async function readTraceFile(\n runId: string,\n traceDir: string,\n): Promise<string | undefined> {\n try {\n const filePath = getTraceFilePath(runId, traceDir);\n return await readFile(filePath, \"utf-8\");\n } catch (e) {\n if (e && typeof e === \"object\" && \"code\" in e && e.code === \"ENOENT\") {\n return undefined;\n }\n warn(\"Unexpected error reading trace file\", e);\n return undefined;\n }\n}\n\n/** Parses JSONL into validated {@link TraceEvent} rows; invalid lines are skipped with a warning. */\nexport async function readTraceEvents(\n runId: string,\n traceDir: string,\n): Promise<TraceEvent[]> {\n const out: TraceEvent[] = [];\n try {\n const raw = await readTraceFile(runId, traceDir);\n if (raw === undefined) {\n return out;\n }\n const lines = raw.split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed === \"\") continue;\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed) as unknown;\n } catch {\n warn(\"Skipped invalid JSON line in trace file\");\n continue;\n }\n if (validateEvent(parsed)) {\n out.push(parsed);\n } else {\n warn(\"Skipped invalid trace event line in trace file\");\n }\n }\n } catch (e) {\n warn(\"Failed to read trace events\", e);\n }\n return out;\n}\n\n/**\n * Lists `.jsonl` file names in `traceDir`, newest by mtime first (name sort as tie-breaker).\n */\nexport async function listTraceFiles(traceDir: string): Promise<string[]> {\n try {\n const usable = path.resolve(traceDir);\n const names = await readdir(usable);\n const jsonl = names.filter((n) => n.endsWith(\".jsonl\"));\n const withStat = await Promise.all(\n jsonl.map(async (name) => {\n try {\n const st = await stat(path.join(usable, name));\n return { name, mtime: st.mtimeMs };\n } catch {\n return { name, mtime: 0 };\n }\n }),\n );\n withStat.sort((a, b) => {\n if (b.mtime !== a.mtime) return b.mtime - a.mtime;\n return a.name.localeCompare(b.name);\n });\n return withStat.map((x) => x.name);\n } catch {\n return [];\n }\n}\n\n/** Maps a `.jsonl` file name to its run id (basename only; no traversal). */\nexport function getRunIdFromTraceFileName(fileName: string): string | undefined {\n try {\n const base = path.basename(fileName);\n if (!base.endsWith(\".jsonl\")) return undefined;\n const id = base.slice(0, -\".jsonl\".length);\n return id === \"\" ? undefined : id;\n } catch {\n return undefined;\n }\n}\n","import type { Stats } from \"node:fs\";\nimport { readdir, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { getDefaultTraceDir } from \"./utils.js\";\n\nexport interface TraceDirectoryOptions {\n dir?: string;\n}\n\nexport function resolveTraceDir(options: TraceDirectoryOptions = {}): string {\n if (typeof options.dir === \"string\" && options.dir.trim() !== \"\") {\n return options.dir.trim();\n }\n const envDir = process.env.AGENT_INSPECT_TRACE_DIR;\n if (typeof envDir === \"string\" && envDir.trim() !== \"\") {\n return envDir.trim();\n }\n return getDefaultTraceDir();\n}\n\nexport class TraceDirectory {\n readonly #dir: string;\n\n constructor(options: TraceDirectoryOptions = {}) {\n this.#dir = resolveTraceDir(options);\n }\n\n getPath(filename?: string): string {\n return filename ? path.join(this.#dir, filename) : this.#dir;\n }\n\n async list(): Promise<string[]> {\n try {\n const files = await readdir(this.#dir);\n return files.filter((f) => f.endsWith(\".jsonl\"));\n } catch (e) {\n if (e && typeof e === \"object\" && \"code\" in e && e.code === \"ENOENT\") {\n return [];\n }\n throw e;\n }\n }\n\n async getFileStats(filename: string): Promise<Stats> {\n return await stat(this.getPath(filename));\n }\n}\n\n","import { stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type {\n RunCompletedEvent,\n RunStartedEvent,\n StepCompletedEvent,\n StepStartedEvent,\n TraceEvent,\n TraceMetadata,\n TraceMetadataStatus,\n RunSummary,\n StepType,\n StepStatus,\n} from \"./types.js\";\nimport { readFile } from \"node:fs/promises\";\nimport { isTraceEvent } from \"./types.js\";\n\nfunction isFiniteNumber(v: unknown): v is number {\n return typeof v === \"number\" && Number.isFinite(v);\n}\n\nfunction safeParseJson(line: string): unknown | undefined {\n try {\n return JSON.parse(line) as unknown;\n } catch {\n return undefined;\n }\n}\n\nexport async function extractMetadata(\n filePath: string,\n _quickScan?: boolean,\n): Promise<TraceMetadata> {\n const stats = await stat(filePath);\n\n let runIdFromFile = path.basename(filePath);\n if (runIdFromFile.endsWith(\".jsonl\")) {\n runIdFromFile = runIdFromFile.slice(0, -\".jsonl\".length);\n }\n\n const raw = await readFile(filePath, \"utf-8\");\n const lines = raw.split(/\\r?\\n/);\n\n let eventCount = 0;\n let runId: string | undefined;\n let name: string | undefined;\n let startedAt: number | undefined;\n let endedAt: number | undefined;\n let explicitDurationMs: number | undefined;\n\n let hasRunStarted = false;\n let hasRunCompleted = false;\n let runCompletedStatus: \"success\" | \"error\" | undefined;\n let anyStepError = false;\n let anyKnownEvent = false;\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed === \"\") continue;\n const parsed = safeParseJson(trimmed);\n if (!parsed) continue;\n if (!isTraceEvent(parsed)) continue;\n\n const e = parsed as TraceEvent;\n anyKnownEvent = true;\n eventCount += 1;\n\n if (runId === undefined && typeof (e as any).runId === \"string\") {\n runId = (e as any).runId as string;\n }\n\n if (e.event === \"run_started\") {\n hasRunStarted = true;\n const rs = e as RunStartedEvent;\n if (typeof rs.name === \"string\" && rs.name.trim() !== \"\") {\n name = rs.name;\n }\n if (isFiniteNumber(rs.startTime)) {\n startedAt = rs.startTime;\n } else if (isFiniteNumber(rs.timestamp)) {\n startedAt = rs.timestamp;\n }\n }\n\n if (e.event === \"run_completed\") {\n hasRunCompleted = true;\n const rc = e as RunCompletedEvent;\n runCompletedStatus = rc.status;\n if (isFiniteNumber(rc.endTime)) endedAt = rc.endTime;\n else if (isFiniteNumber(rc.timestamp)) endedAt = rc.timestamp;\n if (isFiniteNumber(rc.durationMs)) explicitDurationMs = rc.durationMs;\n }\n\n if (e.event === \"step_completed\") {\n const sc = e as StepCompletedEvent;\n if (sc.status === \"error\") {\n anyStepError = true;\n }\n }\n }\n\n const resolvedRunId = runId ?? runIdFromFile;\n\n let status: TraceMetadataStatus = \"unknown\";\n if (hasRunCompleted && (runCompletedStatus === \"success\" || runCompletedStatus === \"error\")) {\n status = runCompletedStatus;\n } else if (anyStepError) {\n // If run_completed is missing, but at least one step failed, treat as error.\n status = \"error\";\n } else if (hasRunStarted && !hasRunCompleted) {\n status = \"running\";\n } else if (anyKnownEvent) {\n status = \"unknown\";\n } else {\n status = \"unknown\";\n }\n\n const durationMs =\n explicitDurationMs ??\n (startedAt !== undefined &&\n endedAt !== undefined &&\n Number.isFinite(startedAt) &&\n Number.isFinite(endedAt) &&\n endedAt >= startedAt\n ? endedAt - startedAt\n : undefined);\n\n return {\n runId: resolvedRunId,\n name,\n status,\n startedAt,\n endedAt,\n durationMs,\n eventCount,\n filePath,\n fileSize: stats.size,\n createdAt: stats.birthtime,\n };\n}\n\ntype StepAgg = {\n type: StepType;\n name: string;\n status: StepStatus;\n durationMs?: number;\n parentId?: string;\n tokensInput?: number;\n tokensOutput?: number;\n};\n\nexport function buildRunSummary(events: TraceEvent[]): RunSummary {\n const started = events.find(\n (e): e is RunStartedEvent => e.event === \"run_started\",\n );\n const completed = events.filter(\n (e): e is RunCompletedEvent => e.event === \"run_completed\",\n );\n const lastCompleted = completed[completed.length - 1];\n\n const runId = started?.runId ?? events.find((e: any) => typeof e.runId === \"string\")?.runId ?? \"unknown-run\";\n\n const name =\n typeof started?.name === \"string\" && started.name.trim() !== \"\"\n ? started.name\n : undefined;\n\n const status: TraceMetadataStatus = lastCompleted\n ? lastCompleted.status\n : started\n ? \"running\"\n : \"unknown\";\n\n const durationMs =\n lastCompleted && isFiniteNumber(lastCompleted.durationMs)\n ? lastCompleted.durationMs\n : undefined;\n\n const startedAt =\n started && isFiniteNumber(started.startTime)\n ? started.startTime\n : undefined;\n\n const steps = new Map<string, StepAgg>();\n\n for (const e of events) {\n if (e.event === \"step_started\") {\n const s = e as StepStartedEvent;\n steps.set(s.stepId, {\n type: s.type,\n name: s.name,\n status: \"running\",\n parentId: s.parentId,\n tokensInput:\n typeof s.metadata?.tokens?.input === \"number\" ? s.metadata.tokens.input : undefined,\n tokensOutput:\n typeof s.metadata?.tokens?.output === \"number\" ? s.metadata.tokens.output : undefined,\n });\n }\n }\n\n for (const e of events) {\n if (e.event === \"step_completed\") {\n const c = e as StepCompletedEvent;\n const existing = steps.get(c.stepId);\n if (!existing) continue;\n existing.status = c.status;\n existing.durationMs = c.durationMs;\n }\n }\n\n let totalSteps = 0;\n let llmSteps = 0;\n let toolSteps = 0;\n let logicSteps = 0;\n let errorSteps = 0;\n let maxDepth = 0;\n let longestStep: RunSummary[\"longestStep\"] | undefined;\n\n let totalTokensInput = 0;\n let totalTokensOutput = 0;\n let hasAnyTokens = false;\n\n const depthCache = new Map<string, number>();\n const computeDepth = (stepId: string): number => {\n const cached = depthCache.get(stepId);\n if (cached !== undefined) return cached;\n const node = steps.get(stepId);\n if (!node) return 0;\n const parent = node.parentId;\n if (typeof parent !== \"string\" || parent.trim() === \"\" || !steps.has(parent)) {\n depthCache.set(stepId, 0);\n return 0;\n }\n // Depth is parent depth + 1. Cap at a sane limit to avoid cycles.\n const d = Math.min(1000, computeDepth(parent) + 1);\n depthCache.set(stepId, d);\n return d;\n };\n\n for (const [id, s] of steps.entries()) {\n totalSteps += 1;\n if (s.type === \"llm\") llmSteps += 1;\n else if (s.type === \"tool\") toolSteps += 1;\n else logicSteps += 1;\n\n if (s.status === \"error\") errorSteps += 1;\n const depth = computeDepth(id);\n if (depth > maxDepth) maxDepth = depth;\n\n if (typeof s.durationMs === \"number\" && Number.isFinite(s.durationMs)) {\n if (!longestStep || s.durationMs > longestStep.durationMs) {\n longestStep = { name: s.name, durationMs: s.durationMs, type: s.type };\n }\n }\n\n if (typeof s.tokensInput === \"number\" || typeof s.tokensOutput === \"number\") {\n hasAnyTokens = true;\n if (typeof s.tokensInput === \"number\") totalTokensInput += s.tokensInput;\n if (typeof s.tokensOutput === \"number\") totalTokensOutput += s.tokensOutput;\n }\n }\n\n const summary: RunSummary = {\n runId,\n name,\n status,\n durationMs,\n totalSteps,\n llmSteps,\n toolSteps,\n logicSteps,\n errorSteps,\n maxDepth,\n ...(longestStep ? { longestStep } : {}),\n ...(hasAnyTokens\n ? { totalTokens: { input: totalTokensInput, output: totalTokensOutput } }\n : {}),\n };\n\n // startedAt isn't in RunSummary spec, but keep deterministic results: ignore.\n void startedAt;\n return summary;\n}\n\n","import type { TraceMetadata, TraceMetadataStatus } from \"./types.js\";\nimport { parseDuration } from \"./utils/duration.js\";\n\nexport interface TraceFilterOptions {\n status?: TraceMetadataStatus;\n name?: string;\n since?: string;\n limit?: number;\n}\n\nfunction toLower(s: string | undefined): string {\n return typeof s === \"string\" ? s.toLowerCase() : \"\";\n}\n\nexport function filterTraces(\n traces: TraceMetadata[],\n options: TraceFilterOptions,\n): TraceMetadata[] {\n const input = [...traces];\n\n let out = input.filter((t) => {\n if (options.status && t.status !== options.status) return false;\n\n if (options.name) {\n const q = options.name.toLowerCase();\n const hay = `${toLower(t.name)} ${toLower(t.runId)}`;\n if (!hay.includes(q)) return false;\n }\n\n if (options.since) {\n const windowMs = parseDuration(options.since);\n const cutoff = Date.now() - windowMs;\n const started = typeof t.startedAt === \"number\" ? t.startedAt : undefined;\n const basis = started ?? t.createdAt.getTime();\n if (!Number.isFinite(basis) || basis < cutoff) return false;\n }\n\n return true;\n });\n\n out.sort((a, b) => {\n const aTime = (typeof a.startedAt === \"number\" ? a.startedAt : undefined) ?? a.createdAt.getTime();\n const bTime = (typeof b.startedAt === \"number\" ? b.startedAt : undefined) ?? b.createdAt.getTime();\n return bTime - aTime;\n });\n\n if (typeof options.limit === \"number\" && Number.isFinite(options.limit)) {\n const n = Math.max(0, Math.floor(options.limit));\n out = out.slice(0, n);\n }\n\n return out;\n}\n\n","import { createReadStream } from \"node:fs\";\nimport { createInterface } from \"node:readline\";\n\nimport { isTraceEvent } from \"./types.js\";\n\nconst KNOWN_EVENTS = new Set([\n \"run_started\",\n \"run_completed\",\n \"step_started\",\n \"step_completed\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction safeParse(line: string): unknown | undefined {\n try {\n return JSON.parse(line) as unknown;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Safety check for cleanup workflows: returns true only when the file appears to be an AgentInspect trace.\n * This should be conservative: false positives are more dangerous than false negatives.\n */\nexport async function isAgentInspectTrace(filePath: string): Promise<boolean> {\n try {\n const rl = createInterface({\n input: createReadStream(filePath, { encoding: \"utf8\" }),\n crlfDelay: Infinity,\n });\n\n let checked = 0;\n for await (const line of rl) {\n const trimmed = line.trim();\n if (trimmed === \"\") continue;\n const parsed = safeParse(trimmed);\n if (!parsed) continue;\n if (!isRecord(parsed)) continue;\n\n checked += 1;\n\n // Strong signal: a valid TraceEvent (schemaVersion 0.1 + known shape).\n if (isTraceEvent(parsed)) return true;\n\n // Secondary signal: recognizable event name + runId.\n const ev = parsed.event;\n const runId = parsed.runId;\n if (typeof ev === \"string\" && KNOWN_EVENTS.has(ev) && typeof runId === \"string\") {\n return true;\n }\n\n // If we found valid JSON objects but none look like AgentInspect, keep scanning a bit.\n if (checked >= 20) break;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n","import type {\n RunCompletedEvent,\n RunStartedEvent,\n StepCompletedEvent,\n StepStartedEvent,\n StepType,\n TraceEvent,\n} from \"../types.js\";\n\nimport type { RunComparable, StepComparable } from \"./types.js\";\n\ntype StepAcc = {\n id: string;\n parentId?: string;\n name: string;\n type: StepType;\n order: number;\n timestamp: number;\n metadata?: Record<string, unknown>;\n status?: \"success\" | \"error\";\n durationMs?: number;\n errorMsg?: string;\n};\n\nfunction extractOutputPreview(meta: Record<string, unknown> | undefined): unknown {\n if (meta === undefined) return undefined;\n if (\"outputPreview\" in meta) return meta.outputPreview;\n if (\"resultPreview\" in meta) return meta.resultPreview;\n return undefined;\n}\n\nfunction mapStepStatus(s: \"success\" | \"error\" | undefined): string {\n if (s === undefined) return \"running\";\n return s;\n}\n\n/**\n * Normalize v0.1 manual JSONL events into a comparable run tree.\n * Does not mutate input events.\n */\nexport function manualTraceEventsToComparableRun(events: TraceEvent[]): RunComparable {\n const started = events.find((e) => e.event === \"run_started\");\n if (!started || started.event !== \"run_started\") {\n throw new Error(\"Invalid trace: missing run_started\");\n }\n\n const rs = started as RunStartedEvent;\n const runId = rs.runId;\n\n const completedAll = events.filter((e) => e.event === \"run_completed\");\n const lastCompleted = completedAll[completedAll.length - 1] as RunCompletedEvent | undefined;\n\n let runStatus: string | undefined;\n if (lastCompleted === undefined) runStatus = \"running\";\n else runStatus = lastCompleted.status;\n\n const durationMs =\n lastCompleted !== undefined && Number.isFinite(lastCompleted.durationMs)\n ? lastCompleted.durationMs\n : undefined;\n\n const steps = new Map<string, StepAcc>();\n let order = 0;\n\n for (const e of events) {\n if (e.event !== \"step_started\") continue;\n const s = e as StepStartedEvent;\n const meta = s.metadata ? { ...(s.metadata as Record<string, unknown>) } : undefined;\n steps.set(s.stepId, {\n id: s.stepId,\n parentId: s.parentId,\n name: s.name,\n type: s.type,\n order: order++,\n timestamp: s.timestamp,\n metadata: meta,\n });\n }\n\n for (const e of events) {\n if (e.event !== \"step_completed\") continue;\n const acc = steps.get(e.stepId);\n if (!acc) continue;\n acc.status = e.status;\n acc.durationMs = e.durationMs;\n if (e.error?.message) acc.errorMsg = e.error.message;\n const extra = e as StepCompletedEvent & { metadata?: Record<string, unknown> };\n if (extra.metadata !== undefined && typeof extra.metadata === \"object\") {\n acc.metadata = { ...(acc.metadata ?? {}), ...extra.metadata };\n }\n }\n\n const nodes = new Map<string, StepComparable>();\n\n for (const acc of steps.values()) {\n let meta = acc.metadata ? { ...acc.metadata } : undefined;\n if (acc.parentId !== undefined && !steps.has(acc.parentId)) {\n meta = { ...(meta ?? {}), agent_inspect_diff_parent_missing: true };\n }\n\n const outputPreview = extractOutputPreview(meta);\n\n const sc: StepComparable = {\n id: acc.id,\n name: acc.name,\n type: acc.type,\n status: mapStepStatus(acc.status),\n durationMs: acc.durationMs,\n error: acc.errorMsg,\n metadata: meta && Object.keys(meta).length > 0 ? meta : undefined,\n outputPreview,\n children: [],\n };\n nodes.set(acc.id, sc);\n }\n\n const roots: StepComparable[] = [];\n const sortByOrder = (a: StepComparable, b: StepComparable) => {\n const oa = steps.get(a.id)?.order ?? 0;\n const ob = steps.get(b.id)?.order ?? 0;\n return oa - ob;\n };\n\n for (const acc of steps.values()) {\n const node = nodes.get(acc.id)!;\n if (acc.parentId !== undefined && nodes.has(acc.parentId)) {\n nodes.get(acc.parentId)!.children.push(node);\n } else {\n roots.push(node);\n }\n }\n\n roots.sort(sortByOrder);\n for (const n of nodes.values()) {\n n.children.sort(sortByOrder);\n }\n\n return {\n runId,\n name: rs.name,\n status: runStatus,\n durationMs,\n steps: roots,\n };\n}\n","import type { InspectKind, InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\n\nconst REDACT_SUBSTRINGS = [\n \"authorization\",\n \"cookie\",\n \"token\",\n \"apikey\",\n \"password\",\n \"secret\",\n \"email\",\n] as const;\n\nfunction shouldRedactKey(key: string): boolean {\n const k = key.toLowerCase();\n for (const s of REDACT_SUBSTRINGS) {\n if (k.includes(s)) return true;\n }\n return false;\n}\n\nexport function safeString(value: unknown, maxLength?: number): string {\n if (value === null || value === undefined) return \"\";\n let s: string;\n if (typeof value === \"string\") s = value;\n else if (typeof value === \"number\" || typeof value === \"boolean\") s = String(value);\n else s = stableJson(value, false);\n if (maxLength !== undefined && maxLength >= 0 && s.length > maxLength) {\n return `${s.slice(0, maxLength)}…`;\n }\n return s;\n}\n\n/** Escape markdown table pipes and normalize line breaks for safe inline text. */\nexport function escapeMarkdown(value: string): string {\n return value\n .replace(/\\|/g, \"\\\\|\")\n .replace(/\\r\\n/g, \"\\n\")\n .replace(/\\r/g, \"\\n\")\n .replace(/\\n/g, \" \");\n}\n\nexport function escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\n}\n\nfunction sortKeysDeep(input: unknown): unknown {\n if (input === null || typeof input !== \"object\") return input;\n if (Array.isArray(input)) return input.map(sortKeysDeep);\n const o = input as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const k of Object.keys(o).sort()) {\n out[k] = sortKeysDeep(o[k]);\n }\n return out;\n}\n\nexport function stableJson(value: unknown, pretty?: boolean): string {\n const sorted = sortKeysDeep(value);\n return pretty === true ? JSON.stringify(sorted, null, 2) : JSON.stringify(sorted);\n}\n\nexport function compactAttributes(\n attrs: Record<string, unknown> | undefined,\n options?: { maxLength?: number; redacted?: boolean },\n): Record<string, unknown> {\n if (attrs === undefined) return {};\n const maxLen = options?.maxLength ?? 500;\n const redacted = options?.redacted ?? true;\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(attrs).sort()) {\n if (redacted && shouldRedactKey(key)) {\n out[key] = \"[REDACTED]\";\n continue;\n }\n const v = attrs[key];\n out[key] = compactValue(v, maxLen, redacted);\n }\n return out;\n}\n\nfunction compactValue(value: unknown, maxLen: number, redacted: boolean): unknown {\n if (value === null || typeof value !== \"object\") {\n return typeof value === \"string\" ? safeString(value, maxLen) : value;\n }\n if (Array.isArray(value)) {\n const arr = value.slice(0, 20).map((x) => compactValue(x, maxLen, redacted));\n if (value.length > 20) arr.push(`…(+${value.length - 20} more)`);\n return arr;\n }\n const o = value as Record<string, unknown>;\n const inner: Record<string, unknown> = {};\n for (const k of Object.keys(o)) {\n if (redacted && shouldRedactKey(k)) inner[k] = \"[REDACTED]\";\n else inner[k] = compactValue(o[k], maxLen, redacted);\n }\n return inner;\n}\n\nexport function summarizeTree(tree: InspectRunTree): Record<string, unknown> {\n const flat = flattenTree(tree);\n const errorNodes = flat.filter((n) => n.event.status === \"error\").length;\n return {\n runId: tree.runId,\n name: tree.name,\n status: tree.status,\n startedAt: tree.startedAt,\n endedAt: tree.endedAt,\n durationMs: tree.durationMs,\n stepCount: flat.length,\n errorStepCount: errorNodes,\n totalEvents: tree.metadata.totalEvents,\n confidenceBreakdown: { ...tree.metadata.confidenceBreakdown },\n kinds: { ...tree.metadata.kinds },\n };\n}\n\n/** Depth-first pre-order flatten (matches typical tree display). */\nexport function flattenTree(tree: InspectRunTree): InspectNode[] {\n const out: InspectNode[] = [];\n function walk(nodes: InspectNode[]): void {\n for (const n of nodes) {\n out.push(n);\n if (n.children.length > 0) walk(n.children);\n }\n }\n walk(tree.children);\n return out;\n}\n\nexport function zeroKinds(): Record<InspectKind, number> {\n return {\n RUN: 0,\n AGENT: 0,\n LLM: 0,\n TOOL: 0,\n CHAIN: 0,\n RETRIEVER: 0,\n DECISION: 0,\n RESULT: 0,\n ERROR: 0,\n LOGIC: 0,\n LOG: 0,\n };\n}\n","import { stableJson } from \"../exporters/helpers.js\";\n\nimport type {\n DiffKind,\n DiffOptions,\n DiffPath,\n DiffPathSegment,\n RunComparable,\n RunDiffItem,\n RunDiffResult,\n RunDiffSummary,\n StepComparable,\n} from \"./types.js\";\n\nconst DEFAULT_THRESHOLD_MS = 0;\n\nfunction pathSeg(step: StepComparable, index: number): DiffPathSegment {\n return { index, name: step.name, stepId: step.id };\n}\n\nfunction buildPath(segments: DiffPathSegment[]): DiffPath {\n return { path: [...segments] };\n}\n\n/** Pair steps: match by id, then same index, then name+type. */\nexport function pairSteps(\n left: StepComparable[],\n right: StepComparable[],\n): Array<[StepComparable | undefined, StepComparable | undefined]> {\n const usedRight = new Set<string>();\n const pairs: Array<[StepComparable | undefined, StepComparable | undefined]> = [];\n\n for (let i = 0; i < left.length; i++) {\n const L = left[i]!;\n let R = right.find((r) => !usedRight.has(r.id) && r.id === L.id);\n if (R === undefined && i < right.length && !usedRight.has(right[i]!.id)) {\n const cand = right[i]!;\n if (cand.name === L.name && (cand.type ?? \"\") === (L.type ?? \"\")) {\n R = cand;\n }\n }\n if (R === undefined) {\n R = right.find(\n (r) =>\n !usedRight.has(r.id) &&\n r.name === L.name &&\n (r.type ?? \"\") === (L.type ?? \"\"),\n );\n }\n if (R !== undefined) {\n usedRight.add(R.id);\n pairs.push([L, R]);\n } else {\n pairs.push([L, undefined]);\n }\n }\n\n for (const R of right) {\n if (!usedRight.has(R.id)) {\n pairs.push([undefined, R]);\n }\n }\n\n return pairs;\n}\n\nfunction compareLeafSteps(\n L: StepComparable,\n R: StepComparable,\n segments: DiffPathSegment[],\n opts: Required<Pick<DiffOptions, \"ignoreDuration\" | \"durationThresholdMs\">>,\n out: RunDiffItem[],\n): void {\n const path = buildPath(segments);\n\n if (L.name !== R.name) {\n out.push({\n kind: \"structure\",\n severity: \"warning\",\n message: \"Step name differs\",\n path,\n left: L.name,\n right: R.name,\n });\n }\n\n if ((L.type ?? \"\") !== (R.type ?? \"\")) {\n out.push({\n kind: \"step-type\",\n severity: \"warning\",\n message: \"Step type differs\",\n path,\n left: L.type,\n right: R.type,\n });\n }\n\n if ((L.status ?? \"\") !== (R.status ?? \"\")) {\n out.push({\n kind: \"step-status\",\n severity: \"warning\",\n message: \"Step status differs\",\n path,\n left: L.status,\n right: R.status,\n });\n }\n\n const le = L.error ?? \"\";\n const re = R.error ?? \"\";\n if (le !== re) {\n out.push({\n kind: \"error\",\n severity: \"error\",\n message: \"Step error message differs\",\n path,\n left: le || undefined,\n right: re || undefined,\n });\n }\n\n if (!opts.ignoreDuration) {\n const ld = L.durationMs;\n const rd = R.durationMs;\n const th = opts.durationThresholdMs;\n let differs = false;\n if (ld === undefined && rd === undefined) differs = false;\n else if (ld === undefined || rd === undefined) differs = true;\n else differs = Math.abs(ld - rd) > th;\n if (differs) {\n out.push({\n kind: \"duration\",\n severity: \"info\",\n message: \"Step duration differs\",\n path,\n left: ld,\n right: rd,\n });\n }\n }\n\n const lm = stableJson(L.metadata ?? {});\n const rm = stableJson(R.metadata ?? {});\n if (lm !== rm) {\n out.push({\n kind: \"metadata\",\n severity: \"info\",\n message: \"Step metadata differs\",\n path,\n left: L.metadata,\n right: R.metadata,\n });\n }\n\n const lo = stableJson(L.outputPreview ?? null);\n const ro = stableJson(R.outputPreview ?? null);\n if (lo !== ro) {\n out.push({\n kind: \"output\",\n severity: \"info\",\n message: \"Output preview differs\",\n path,\n left: L.outputPreview,\n right: R.outputPreview,\n });\n }\n}\n\nfunction compareRecursive(\n L: StepComparable,\n R: StepComparable,\n segments: DiffPathSegment[],\n opts: Required<Pick<DiffOptions, \"ignoreDuration\" | \"durationThresholdMs\">>,\n out: RunDiffItem[],\n): void {\n compareLeafSteps(L, R, segments, opts, out);\n\n const pairs = pairSteps(L.children, R.children);\n let ci = 0;\n for (const [lch, rch] of pairs) {\n if (lch !== undefined && rch !== undefined) {\n compareRecursive(lch, rch, [...segments, pathSeg(lch, ci)], opts, out);\n } else if (lch !== undefined) {\n out.push({\n kind: \"step-removed\",\n severity: \"warning\",\n message: `Step only in left run: ${lch.name}`,\n path: buildPath([...segments, pathSeg(lch, ci)]),\n left: lch.id,\n right: undefined,\n });\n } else if (rch !== undefined) {\n out.push({\n kind: \"step-added\",\n severity: \"warning\",\n message: `Step only in right run: ${rch.name}`,\n path: buildPath([...segments, pathSeg(rch, ci)]),\n left: undefined,\n right: rch.id,\n });\n }\n ci += 1;\n }\n}\n\nfunction mergeDiffDefaults(options?: DiffOptions): Required<\n Pick<DiffOptions, \"ignoreDuration\" | \"durationThresholdMs\" | \"focus\" | \"check\">\n> {\n return {\n ignoreDuration: options?.ignoreDuration ?? false,\n durationThresholdMs:\n options?.durationThresholdMs !== undefined\n ? options.durationThresholdMs\n : DEFAULT_THRESHOLD_MS,\n focus: options?.focus ?? \"all\",\n check: options?.check ?? \"all\",\n };\n}\n\nfunction kindMatchesFilter(kind: DiffKind, merged: ReturnType<typeof mergeDiffDefaults>): boolean {\n const { focus, check } = merged;\n\n if (check !== \"all\") {\n if (check === \"structure\") {\n if (![\"step-added\", \"step-removed\", \"structure\", \"step-type\"].includes(kind)) return false;\n } else if (check === \"outputs\") {\n if (![\"metadata\", \"output\"].includes(kind)) return false;\n } else if (check === \"errors\") {\n if (![\"run-status\", \"step-status\", \"error\"].includes(kind)) return false;\n } else if (check === \"timing\") {\n if (kind !== \"duration\") return false;\n }\n }\n\n if (focus !== \"all\") {\n if (focus === \"errors\") {\n if (![\"run-status\", \"step-status\", \"error\"].includes(kind)) return false;\n } else if (focus === \"structure\") {\n if (![\"step-added\", \"step-removed\", \"structure\", \"step-type\"].includes(kind)) return false;\n } else if (focus === \"outputs\") {\n if (![\"metadata\", \"output\"].includes(kind)) return false;\n }\n }\n\n return true;\n}\n\nexport function diffRuns(\n left: RunComparable,\n right: RunComparable,\n options?: DiffOptions,\n): RunDiffResult {\n const merged = mergeDiffDefaults(options);\n const opts = {\n ignoreDuration: merged.ignoreDuration,\n durationThresholdMs: merged.durationThresholdMs,\n };\n\n const raw: RunDiffItem[] = [];\n\n if ((left.status ?? \"\") !== (right.status ?? \"\")) {\n raw.push({\n kind: \"run-status\",\n severity: \"warning\",\n message: \"Run completion status differs\",\n left: left.status,\n right: right.status,\n });\n }\n\n if (!merged.ignoreDuration) {\n const ld = left.durationMs;\n const rd = right.durationMs;\n const th = merged.durationThresholdMs;\n let differs = false;\n if (ld === undefined && rd === undefined) differs = false;\n else if (ld === undefined || rd === undefined) differs = true;\n else differs = Math.abs(ld - rd) > th;\n if (differs) {\n raw.push({\n kind: \"duration\",\n severity: \"info\",\n message: \"Run duration differs\",\n left: ld,\n right: rd,\n });\n }\n }\n\n const pairs = pairSteps(left.steps, right.steps);\n let idx = 0;\n for (const [ls, rs] of pairs) {\n if (ls !== undefined && rs !== undefined) {\n compareRecursive(ls, rs, [pathSeg(ls, idx)], opts, raw);\n idx += 1;\n } else if (ls !== undefined) {\n raw.push({\n kind: \"step-removed\",\n severity: \"warning\",\n message: `Step only in left run: ${ls.name}`,\n path: buildPath([pathSeg(ls, idx)]),\n left: ls.id,\n right: undefined,\n });\n idx += 1;\n } else if (rs !== undefined) {\n raw.push({\n kind: \"step-added\",\n severity: \"warning\",\n message: `Step only in right run: ${rs.name}`,\n path: buildPath([pathSeg(rs, idx)]),\n left: undefined,\n right: rs.id,\n });\n idx += 1;\n }\n }\n\n const differences = raw.filter((d) => kindMatchesFilter(d.kind, merged));\n\n let errors = 0;\n let warnings = 0;\n let info = 0;\n for (const d of differences) {\n if (d.severity === \"error\") errors += 1;\n else if (d.severity === \"warning\") warnings += 1;\n else info += 1;\n }\n\n const firstVisible = differences[0];\n const firstDivergence: RunDiffItem | undefined =\n firstVisible !== undefined\n ? {\n kind: \"first-divergence\",\n severity: firstVisible.severity,\n message: `First divergence: ${firstVisible.message}`,\n path: firstVisible.path,\n left: firstVisible.left,\n right: firstVisible.right,\n }\n : undefined;\n\n const summary: RunDiffSummary = {\n leftRunId: left.runId,\n rightRunId: right.runId,\n totalDifferences: differences.length,\n errors,\n warnings,\n info,\n firstDivergence,\n };\n\n return { summary, differences };\n}\n","import chalk from \"chalk\";\n\nimport type { RenderDiffOptions, RunDiffResult } from \"./types.js\";\n\nfunction formatPath(path?: import(\"./types.js\").DiffPath): string {\n if (path === undefined || path.path.length === 0) {\n return \"(run)\";\n }\n return path.path.map((s) => s.name).join(\" > \");\n}\n\nfunction formatValue(v: unknown, verbose: boolean): string {\n if (v === undefined) return \"(undefined)\";\n if (typeof v === \"string\") return v;\n if (typeof v === \"number\" || typeof v === \"boolean\") return String(v);\n const s = JSON.stringify(v);\n if (verbose || s.length <= 120) return s;\n return `${s.slice(0, 117)}...`;\n}\n\nexport function renderRunDiff(result: RunDiffResult, options?: RenderDiffOptions): string {\n const json = options?.json === true;\n const verbose = options?.verbose === true;\n const color = options?.color === true;\n\n if (json) {\n return JSON.stringify(result, null, 2);\n }\n\n const sev = (s: string, level: \"error\" | \"warning\" | \"info\"): string => {\n if (!color) return s;\n if (level === \"error\") return chalk.red(s);\n if (level === \"warning\") return chalk.yellow(s);\n return chalk.gray(s);\n };\n\n const lines: string[] = [];\n const { summary } = result;\n\n lines.push(\"Run diff\");\n lines.push(`Left: ${summary.leftRunId}`);\n lines.push(`Right: ${summary.rightRunId}`);\n lines.push(\"\");\n lines.push(\"Summary:\");\n lines.push(` Differences: ${summary.totalDifferences}`);\n lines.push(` Errors: ${summary.errors}`);\n lines.push(` Warnings: ${summary.warnings}`);\n lines.push(` Info: ${summary.info}`);\n lines.push(\"\");\n\n const fd = summary.firstDivergence;\n const firstKind = result.differences[0]?.kind;\n if (fd !== undefined) {\n lines.push(\"First divergence:\");\n const where = formatPath(fd.path);\n const displayKind = firstKind ?? fd.kind;\n lines.push(` ${displayKind} at ${where}`);\n if (fd.left !== undefined || fd.right !== undefined) {\n lines.push(` left: ${formatValue(fd.left, verbose)}`);\n lines.push(` right: ${formatValue(fd.right, verbose)}`);\n }\n lines.push(\"\");\n }\n\n lines.push(\"Differences:\");\n if (result.differences.length === 0) {\n lines.push(\" (none)\");\n return lines.join(\"\\n\");\n }\n\n const showSides = (kind: string): boolean =>\n verbose ||\n [\n \"run-status\",\n \"step-status\",\n \"error\",\n \"duration\",\n \"step-type\",\n \"structure\",\n \"step-added\",\n \"step-removed\",\n ].includes(kind);\n\n for (const d of result.differences) {\n const tag = sev(`[${d.severity}]`, d.severity);\n const pathStr = d.path !== undefined ? ` ${formatPath(d.path)}` : \"\";\n lines.push(` ${tag} ${d.kind}${pathStr}`);\n lines.push(` ${d.message}`);\n if (d.left !== undefined || d.right !== undefined) {\n if (showSides(d.kind)) {\n lines.push(` left: ${formatValue(d.left, verbose)}`);\n lines.push(` right: ${formatValue(d.right, verbose)}`);\n }\n }\n }\n\n return lines.join(\"\\n\");\n}\n","import type { TraceEvent } from \"../types.js\";\n\nimport { manualTraceEventsToComparableRun } from \"./comparable.js\";\nimport { diffRuns } from \"./engine.js\";\nimport type { DiffOptions, RunDiffResult } from \"./types.js\";\n\nexport type {\n DiffSeverity,\n DiffKind,\n DiffPathSegment,\n DiffPath,\n RunDiffItem,\n StepComparable,\n RunComparable,\n RunDiffSummary,\n RunDiffResult,\n DiffOptions,\n RenderDiffOptions,\n} from \"./types.js\";\n\nexport { manualTraceEventsToComparableRun } from \"./comparable.js\";\nexport { diffRuns } from \"./engine.js\";\nexport { renderRunDiff } from \"./renderer.js\";\n\n/**\n * @experimental Compare two v0.1 manual traces as normalized trees (read-only).\n * Subject to refinement before a future stability declaration.\n */\nexport function diffTraceEvents(\n leftEvents: TraceEvent[],\n rightEvents: TraceEvent[],\n options?: DiffOptions,\n): RunDiffResult {\n const left = manualTraceEventsToComparableRun(leftEvents);\n const right = manualTraceEventsToComparableRun(rightEvents);\n return diffRuns(left, right, options);\n}\n","import chalk from \"chalk\";\n\nimport { isSilentContext } from \"./context.js\";\nimport type { ErrorInfo, RunStatus, StepStatus } from \"./types.js\";\nimport { formatDuration, truncateName } from \"./utils.js\";\n\n/** Two spaces per nesting level in terminal output. */\nexport const TERMINAL_INDENT = \" \";\n\n/** Max display length for names in terminal output. */\nexport const MAX_TERMINAL_NAME_LENGTH = 80;\n\n/** Max nesting depth used for indentation (prevents huge indents). */\nexport const MAX_TERMINAL_DEPTH = 10;\n\nfunction normalizeDepth(depth: number): number {\n if (!Number.isFinite(depth) || depth < 0) {\n return 0;\n }\n return Math.min(Math.floor(depth), MAX_TERMINAL_DEPTH);\n}\n\nfunction safePrint(line = \"\"): void {\n try {\n console.log(line);\n } catch {\n /* never break callers */\n }\n}\n\n/** Indentation string for a nesting depth (capped, never negative). */\nexport function getIndent(depth: number): string {\n return TERMINAL_INDENT.repeat(normalizeDepth(depth));\n}\n\n/** Truncates a display name for terminal use; invalid input becomes `\"unnamed\"`. */\nexport function formatTerminalName(name: string): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed\";\n }\n return truncateName(name, MAX_TERMINAL_NAME_LENGTH);\n}\n\nfunction getStatusIcon(status: StepStatus | RunStatus): string {\n if (status === \"success\") return chalk.green(\"✔\");\n if (status === \"error\") return chalk.red(\"✖\");\n return chalk.yellow(\"⏳\");\n}\n\n/** Renders a single step line (colored); does not consult silent mode. */\nexport function renderStepLine(\n name: string,\n durationMs: number | undefined,\n status: StepStatus,\n depth?: number,\n): string {\n try {\n const nm = formatTerminalName(name);\n const ind = getIndent(depth ?? 0);\n if (status === \"running\" && durationMs === undefined) {\n return `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n }\n const hasDur =\n durationMs !== undefined && Number.isFinite(durationMs as number);\n const dur = hasDur ? formatDuration(durationMs as number) : undefined;\n if (status === \"running\") {\n return dur !== undefined\n ? `${ind}${chalk.yellow(\"⏳\")} ${nm} (${dur})`\n : `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n }\n if (!hasDur || dur === undefined) {\n return `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n }\n if (status === \"success\") {\n return `${ind}${getStatusIcon(\"success\")} ${nm} (${dur})`;\n }\n return `${ind}${getStatusIcon(\"error\")} ${nm} (${dur})`;\n } catch {\n return \"\";\n }\n}\n\n/** Renders an error summary line (no stack in MVP). */\nexport function renderErrorLine(error: ErrorInfo, depth?: number): string {\n try {\n const msg =\n typeof error.message === \"string\" ? error.message : \"\";\n const ind = getIndent((depth ?? 0) + 1);\n return `${ind}Error: ${msg}`;\n } catch {\n return \"\";\n }\n}\n\n/** Plain-text run summary lines (no chalk) for stable testing and CLI reuse. */\nexport function renderRunSummary(\n durationMs: number,\n status: RunStatus,\n traceFilePath?: string,\n): string[] {\n try {\n const dur = Number.isFinite(durationMs)\n ? formatDuration(durationMs)\n : formatDuration(0);\n const head =\n status === \"error\" ? `Failed in ${dur}` : `Completed in ${dur}`;\n const lines = [head];\n if (traceFilePath !== undefined && traceFilePath.trim() !== \"\") {\n lines.push(`Trace: ${traceFilePath}`);\n }\n return lines;\n } catch {\n return [];\n }\n}\n\n/** Prints run header with icon and dim run id. */\nexport function printRunStart(runId: string, name: string): void {\n if (isSilentContext()) return;\n try {\n safePrint(\"\");\n const header = `${chalk.cyan.bold(\"🔍 AgentInspect:\")} ${formatTerminalName(name)} ${chalk.dim(`(${runId})`)}`;\n safePrint(header);\n } catch {\n /* noop */\n }\n}\n\n/** Prints a running step line. */\nexport function printStepStart(name: string, depth = 0): void {\n if (isSilentContext()) return;\n try {\n safePrint(renderStepLine(name, undefined, \"running\", depth));\n } catch {\n /* noop */\n }\n}\n\n/** Prints a completed step line with duration and status icon. */\nexport function printStepComplete(\n name: string,\n durationMs: number,\n status: StepStatus,\n depth = 0,\n): void {\n if (isSilentContext()) return;\n try {\n safePrint(renderStepLine(name, durationMs, status, depth));\n } catch {\n /* noop */\n }\n}\n\n/** Prints a structured error line (message only, no stack). */\nexport function printError(error: ErrorInfo, depth = 0): void {\n if (isSilentContext()) return;\n try {\n safePrint(renderErrorLine(error, depth));\n } catch {\n /* noop */\n }\n}\n\n/** Prints run completion summary and optional trace path. */\nexport function printRunComplete(\n _name: string,\n _runId: string,\n durationMs: number,\n status: RunStatus,\n traceFilePath?: string,\n): void {\n if (isSilentContext()) return;\n try {\n const lines = renderRunSummary(durationMs, status, traceFilePath);\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n if (i === 0) {\n const color =\n status === \"error\"\n ? chalk.red\n : status === \"running\"\n ? chalk.yellow\n : chalk.green;\n safePrint(color(line));\n } else {\n safePrint(chalk.dim(line));\n }\n }\n } catch {\n /* noop */\n }\n}\n\n/** Prints which step failed. */\nexport function printFailedAt(stepName: string): void {\n if (isSilentContext()) return;\n try {\n safePrint(`Failed at: ${formatTerminalName(stepName)}`);\n } catch {\n /* noop */\n }\n}\n","import { runWithContext } from \"./context.js\";\nimport type { ExecutionContext, InspectRunOptions, TraceEvent } from \"./types.js\";\nimport { initializeTraceFile, writeTraceEvent } from \"./storage.js\";\nimport { printRunComplete, printRunStart } from \"./terminal.js\";\nimport { resolveTraceDir } from \"./trace-directory.js\";\nimport {\n createRunId,\n formatError,\n getTraceFilePath,\n truncateName,\n warn,\n} from \"./utils.js\";\n\nfunction normalizeRunName(name: unknown): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed-run\";\n }\n return truncateName(name.trim(), 100);\n}\n\nasync function safeInstrumentation(\n label: string,\n op: () => void | Promise<void>,\n): Promise<void> {\n try {\n await Promise.resolve(op());\n } catch (e) {\n warn(`inspectRun: ${label}`, e);\n }\n}\n\n/**\n * Stable v1.0 API for local manual run tracing.\n *\n * Runs `fn` inside an AgentInspect trace: JSONL `run_started` / `run_completed`, optional terminal output,\n * and {@link ExecutionContext} for nested APIs. Instrumentation failures are swallowed; user errors are re-thrown.\n */\nexport async function inspectRun<T>(\n name: string,\n fn: () => Promise<T> | T,\n options?: InspectRunOptions,\n): Promise<T> {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"inspectRun requires `fn` to be a function\");\n }\n\n const runName = normalizeRunName(name);\n const runId = createRunId();\n const traceDir = resolveTraceDir({ dir: options?.traceDir });\n\n const context: ExecutionContext = {\n runId,\n runName,\n traceDir,\n silent: options?.silent ?? false,\n metadata: options?.metadata,\n };\n\n return runWithContext(context, async () => {\n const startTime = Date.now();\n let traceFilePath: string | undefined;\n\n await safeInstrumentation(\"initializeTraceFile\", async () => {\n traceFilePath = await initializeTraceFile(runId, traceDir);\n });\n\n await safeInstrumentation(\"writeTraceEvent(run_started)\", async () => {\n const started: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"run_started\",\n timestamp: startTime,\n runId,\n name: runName,\n startTime,\n ...(options?.metadata !== undefined\n ? { metadata: options.metadata }\n : {}),\n };\n await writeTraceEvent(started, traceDir);\n });\n\n await safeInstrumentation(\"printRunStart\", () => {\n printRunStart(runId, runName);\n });\n\n let result: T;\n try {\n result = await Promise.resolve(fn());\n } catch (userError) {\n const endTime = Date.now();\n const durationMs = endTime - startTime;\n const formatted = formatError(userError);\n const printPath = traceFilePath ?? getTraceFilePath(runId, traceDir);\n\n await safeInstrumentation(\"writeTraceEvent(run_completed error)\", async () => {\n const completed: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"run_completed\",\n timestamp: endTime,\n runId,\n status: \"error\",\n endTime,\n durationMs,\n error: formatted,\n };\n await writeTraceEvent(completed, traceDir);\n });\n\n await safeInstrumentation(\"printRunComplete(error)\", () => {\n printRunComplete(runName, runId, durationMs, \"error\", printPath);\n });\n\n throw userError;\n }\n\n const endTime = Date.now();\n const durationMs = endTime - startTime;\n const printPath = traceFilePath ?? getTraceFilePath(runId, traceDir);\n\n await safeInstrumentation(\"writeTraceEvent(run_completed success)\", async () => {\n const completed: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"run_completed\",\n timestamp: endTime,\n runId,\n status: \"success\",\n endTime,\n durationMs,\n };\n await writeTraceEvent(completed, traceDir);\n });\n\n await safeInstrumentation(\"printRunComplete(success)\", () => {\n printRunComplete(runName, runId, durationMs, \"success\", printPath);\n });\n\n return result;\n });\n}\n","import { getCurrentContext, getCurrentDepth, getParentStepId, runWithStepContext } from \"./context.js\";\nimport type { StepOptions, StepType, TraceEvent } from \"./types.js\";\nimport { writeTraceEvent } from \"./storage.js\";\nimport { printFailedAt, printError, printStepComplete, printStepStart } from \"./terminal.js\";\nimport { createStepId, formatError, truncateName, warn } from \"./utils.js\";\n\nfunction normalizeStepName(name: unknown): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed-step\";\n }\n return truncateName(name.trim(), 100);\n}\n\nasync function safeInstrumentation(\n label: string,\n op: () => void | Promise<void>,\n): Promise<void> {\n try {\n await Promise.resolve(op());\n } catch (e) {\n warn(`step: ${label}`, e);\n }\n}\n\nasync function stepImpl<T>(\n name: string,\n fn: () => Promise<T> | T,\n options?: StepOptions,\n): Promise<T> {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"step requires `fn` to be a function\");\n }\n\n const stepName = normalizeStepName(name);\n const context = getCurrentContext();\n\n if (!context) {\n warn(\"step() called outside inspectRun(); executing without instrumentation\");\n return Promise.resolve(fn());\n }\n\n const stepId = createStepId();\n const renderDepth = getCurrentDepth();\n const parentId = getParentStepId();\n const stepType: StepType = options?.type ?? \"logic\";\n const metadata = options?.metadata;\n const startTime = Date.now();\n\n await safeInstrumentation(\"writeTraceEvent(step_started)\", async () => {\n const started: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"step_started\",\n timestamp: startTime,\n runId: context.runId,\n stepId,\n ...(typeof parentId === \"string\" && parentId.trim() !== \"\"\n ? { parentId }\n : {}),\n name: stepName,\n type: stepType,\n startTime,\n ...(metadata !== undefined ? { metadata } : {}),\n };\n await writeTraceEvent(started, context.traceDir);\n });\n\n await safeInstrumentation(\"printStepStart\", () => {\n printStepStart(stepName, renderDepth);\n });\n\n let result: T;\n try {\n result = await runWithStepContext(stepId, async () => {\n return await Promise.resolve(fn());\n });\n } catch (userError) {\n const endTime = Date.now();\n const durationMs = endTime - startTime;\n const formatted = formatError(userError);\n\n await safeInstrumentation(\"writeTraceEvent(step_completed error)\", async () => {\n const completed: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"step_completed\",\n timestamp: endTime,\n runId: context.runId,\n stepId,\n status: \"error\",\n endTime,\n durationMs,\n error: formatted,\n };\n await writeTraceEvent(completed, context.traceDir);\n });\n\n await safeInstrumentation(\"printStepComplete(error)\", () => {\n printStepComplete(stepName, durationMs, \"error\", renderDepth);\n });\n await safeInstrumentation(\"printError\", () => {\n printError(formatted, renderDepth);\n });\n await safeInstrumentation(\"printFailedAt\", () => {\n printFailedAt(stepName);\n });\n\n throw userError;\n }\n\n const endTime = Date.now();\n const durationMs = endTime - startTime;\n\n await safeInstrumentation(\"writeTraceEvent(step_completed success)\", async () => {\n const completed: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"step_completed\",\n timestamp: endTime,\n runId: context.runId,\n stepId,\n status: \"success\",\n endTime,\n durationMs,\n };\n await writeTraceEvent(completed, context.traceDir);\n });\n\n await safeInstrumentation(\"printStepComplete(success)\", () => {\n printStepComplete(stepName, durationMs, \"success\", renderDepth);\n });\n\n return result;\n}\n\n/**\n * Stable v1.0 API for instrumenting a named step inside an AgentInspect run.\n *\n * Callable step tracer plus {@link step.llm} and {@link step.tool} shortcuts.\n */\nexport type StepFunction = {\n <T>(name: string, fn: () => Promise<T> | T, options?: StepOptions): Promise<T>;\n llm: <T>(model: string, fn: () => Promise<T> | T) => Promise<T>;\n tool: <T>(toolName: string, fn: () => Promise<T> | T) => Promise<T>;\n};\n\nasync function stepLlm<T>(model: string, fn: () => Promise<T> | T): Promise<T> {\n const modelName =\n typeof model === \"string\" && model.trim() !== \"\"\n ? model.trim()\n : \"unknown-model\";\n return stepImpl<T>(`llm:${modelName}`, fn, {\n type: \"llm\",\n metadata: { model: modelName },\n });\n}\n\nasync function stepTool<T>(\n toolName: string,\n fn: () => Promise<T> | T,\n): Promise<T> {\n const normalized =\n typeof toolName === \"string\" && toolName.trim() !== \"\"\n ? toolName.trim()\n : \"unknown-tool\";\n return stepImpl<T>(`tool:${normalized}`, fn, {\n type: \"tool\",\n metadata: { toolName: normalized },\n });\n}\n\n/**\n * Traces a named unit of work inside `inspectRun` (`step_started` / `step_completed`, optional terminal).\n * Outside a run, executes `fn` with a warn only. Preserves return values and rethrows user errors unchanged.\n *\n * - `step.llm(model, fn)` — `type: \"llm\"`, `metadata.model` (no SDK calls or token counting).\n * - `step.tool(toolName, fn)` — `type: \"tool\"`, `metadata.toolName` (no framework interception).\n */\nexport const step = Object.assign(stepImpl, {\n llm: stepLlm,\n tool: stepTool,\n}) as StepFunction;\n","import { inspectRun } from \"./inspect-run.js\";\nimport type { ObserveOptions } from \"./types.js\";\nimport { truncateName, warn } from \"./utils.js\";\n\nconst INSTRUMENTABLE_METHODS = [\"run\", \"execute\", \"invoke\"] as const;\n\nfunction isInstrumentableProp(\n prop: string | symbol,\n): prop is (typeof INSTRUMENTABLE_METHODS)[number] {\n if (typeof prop !== \"string\") return false;\n return (INSTRUMENTABLE_METHODS as readonly string[]).includes(prop);\n}\n\nfunction getAgentLabel(target: object): string {\n try {\n const ctor = Reflect.get(target, \"constructor\") as { name?: string } | undefined;\n const name = ctor?.name;\n if (typeof name === \"string\" && name.trim() !== \"\" && name !== \"Object\") {\n return name.trim();\n }\n } catch {\n /* ignore */\n }\n return \"Agent\";\n}\n\nfunction buildRunName(target: object, methodKey: string): string {\n const label = getAgentLabel(target);\n return truncateName(`${label}.${methodKey}`, 100);\n}\n\n/**\n * Stable v1.0 API for observing agent-like objects locally.\n *\n * Returns a Proxy that traces top-level `run`, `execute`, and `invoke` via {@link inspectRun}.\n * Other properties pass through; function members are bound to the real target so class private fields work.\n * Invalid agents are returned unchanged (with a warn); this function never throws.\n */\nexport function observe<T>(agent: T, options?: ObserveOptions): T {\n if (agent === null || agent === undefined) {\n warn(\"observe() requires an object\");\n return agent;\n }\n const agentType = typeof agent;\n if (agentType !== \"object\" && agentType !== \"function\") {\n warn(\"observe() requires an object\");\n return agent;\n }\n\n const target = agent as object;\n\n const handlers: ProxyHandler<object> = {\n get(proxyTarget, prop, receiver) {\n try {\n const value = Reflect.get(proxyTarget, prop, receiver);\n\n if (isInstrumentableProp(prop)) {\n if (typeof value !== \"function\") {\n return value;\n }\n const methodKey = prop;\n return function observedWrapper(...args: unknown[]) {\n let runName: string;\n try {\n runName = buildRunName(proxyTarget, methodKey);\n } catch (e) {\n warn(\"observe() method wrapping failed\", e);\n return value.apply(proxyTarget, args);\n }\n return inspectRun(runName, () => value.apply(proxyTarget, args), options);\n };\n }\n\n if (typeof value === \"function\" && prop !== \"constructor\") {\n return value.bind(proxyTarget);\n }\n return value;\n } catch (e) {\n warn(\"observe() method wrapping failed\", e);\n try {\n return Reflect.get(proxyTarget, prop, receiver);\n } catch {\n return undefined;\n }\n }\n },\n };\n\n try {\n return new Proxy(target, handlers) as T;\n } catch (e) {\n warn(\"observe() failed\", e);\n return agent;\n }\n}\n","/**\n * v0.7 local export formats. No sinks — string output only.\n */\n\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\n\nexport type ExportFormat = \"markdown\" | \"html\" | \"openinference\" | \"otlp-json\";\n\nexport interface ExportOptions {\n format: ExportFormat;\n includeMetadata?: boolean;\n includeAttributes?: boolean;\n includeErrors?: boolean;\n pretty?: boolean;\n redacted?: boolean;\n maxAttributeLength?: number;\n}\n\nexport interface ExportResult {\n format: ExportFormat;\n content: string;\n contentType: string;\n fileExtension: string;\n warnings: string[];\n}\n\nexport interface ExportValidationResult {\n ok: boolean;\n format: ExportFormat;\n errors: string[];\n warnings: string[];\n}\n\nexport interface TraceExporter {\n name: string;\n format: ExportFormat;\n export(tree: InspectRunTree, options?: Partial<ExportOptions>): ExportResult;\n validate?(content: string): ExportValidationResult;\n}\n\n/** Library version string embedded in JSON exports (human-readable, not semver guarantee for formats). */\nexport const EXPORT_PAYLOAD_VERSION = \"0.1.2\";\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult } from \"./types.js\";\nimport {\n compactAttributes,\n escapeHtml,\n flattenTree,\n safeString,\n stableJson,\n} from \"./helpers.js\";\n\nfunction renderTreeHtml(nodes: InspectNode[], ulClass = \"tree\"): string {\n if (nodes.length === 0) return \"\";\n const parts: string[] = [`<ul class=\"${ulClass}\">`];\n for (const n of nodes) {\n const ev = n.event;\n const status = ev.status ?? \"?\";\n const dur =\n ev.durationMs !== undefined && Number.isFinite(ev.durationMs)\n ? `${ev.durationMs}ms`\n : \"-\";\n parts.push(\"<li>\");\n parts.push(\n `<span class=\"nm\">${escapeHtml(ev.name)}</span> <span class=\"meta\">[${escapeHtml(ev.kind)}] ${escapeHtml(status)} (${escapeHtml(dur)})</span>`,\n );\n if (n.children.length > 0) {\n parts.push(renderTreeHtml(n.children, \"tree nested\"));\n }\n parts.push(\"</li>\");\n }\n parts.push(\"</ul>\");\n return parts.join(\"\");\n}\n\nexport function exportHtml(tree: InspectRunTree, options?: Partial<ExportOptions>): ExportResult {\n const warnings: string[] = [];\n const includeMetadata = options?.includeMetadata ?? true;\n const includeAttributes = options?.includeAttributes ?? false;\n const includeErrors = options?.includeErrors ?? true;\n const maxLen = options?.maxAttributeLength ?? 500;\n const redacted = options?.redacted ?? true;\n\n const titleName = escapeHtml(tree.name ?? tree.runId);\n\n const summaryRows: string[] = [];\n summaryRows.push(\n `<tr><th scope=\"row\">runId</th><td><code>${escapeHtml(tree.runId)}</code></td></tr>`,\n );\n if (tree.name !== undefined) {\n summaryRows.push(`<tr><th scope=\"row\">name</th><td>${escapeHtml(tree.name)}</td></tr>`);\n }\n summaryRows.push(\n `<tr><th scope=\"row\">status</th><td>${escapeHtml(String(tree.status ?? \"unknown\"))}</td></tr>`,\n );\n summaryRows.push(\n `<tr><th scope=\"row\">durationMs</th><td>${tree.durationMs !== undefined ? escapeHtml(String(tree.durationMs)) : \"—\"}</td></tr>`,\n );\n summaryRows.push(\n `<tr><th scope=\"row\">startedAt</th><td>${tree.startedAt !== undefined ? escapeHtml(String(tree.startedAt)) : \"—\"}</td></tr>`,\n );\n summaryRows.push(\n `<tr><th scope=\"row\">endedAt</th><td>${tree.endedAt !== undefined ? escapeHtml(String(tree.endedAt)) : \"—\"}</td></tr>`,\n );\n summaryRows.push(\n `<tr><th scope=\"row\">totalEvents</th><td>${escapeHtml(String(tree.metadata.totalEvents))}</td></tr>`,\n );\n\n let confidenceHtml = \"\";\n if (includeMetadata) {\n const cb = tree.metadata.confidenceBreakdown;\n confidenceHtml += \"<h3>Confidence breakdown</h3><table><thead><tr><th>bucket</th><th>count</th></tr></thead><tbody>\";\n for (const k of Object.keys(cb).sort()) {\n const key = k as keyof typeof cb;\n confidenceHtml += `<tr><td>${escapeHtml(key)}</td><td>${cb[key]}</td></tr>`;\n }\n confidenceHtml += \"</tbody></table>\";\n\n confidenceHtml += \"<h3>Kind breakdown</h3><table><thead><tr><th>kind</th><th>count</th></tr></thead><tbody>\";\n for (const k of Object.keys(tree.metadata.kinds).sort()) {\n const key = k as keyof typeof tree.metadata.kinds;\n const c = tree.metadata.kinds[key];\n if (c > 0) confidenceHtml += `<tr><td>${escapeHtml(key)}</td><td>${c}</td></tr>`;\n }\n confidenceHtml += \"</tbody></table>\";\n }\n\n const flat = flattenTree(tree);\n const errors = flat.filter((n) => n.event.status === \"error\");\n let errorsHtml = \"\";\n if (includeErrors && errors.length > 0) {\n errorsHtml += \"<h2>Errors</h2><ul>\";\n for (const n of errors) {\n const msg =\n n.event.attributes && typeof n.event.attributes.error === \"object\"\n ? safeString(\n (n.event.attributes.error as { message?: string }).message,\n maxLen,\n )\n : \"\";\n errorsHtml += `<li><strong>${escapeHtml(n.event.name)}</strong> (${escapeHtml(n.event.eventId)}): ${escapeHtml(msg || \"error\")}</li>`;\n }\n errorsHtml += \"</ul>\";\n }\n\n let attrsHtml = \"\";\n if (includeAttributes) {\n attrsHtml += \"<h2>Attributes (bounded)</h2>\";\n for (const n of flat) {\n if (!n.event.attributes || Object.keys(n.event.attributes).length === 0) continue;\n const compact = compactAttributes(n.event.attributes, {\n maxLength: maxLen,\n redacted,\n });\n attrsHtml += `<h3>${escapeHtml(n.event.name)}</h3><pre class=\"json\">${escapeHtml(stableJson(compact, true))}</pre>`;\n }\n warnings.push(\n \"Attributes may still contain sensitive data; review exports before sharing.\",\n );\n }\n\n const css = `\nbody{font-family:system-ui,sans-serif;line-height:1.5;margin:1.5rem;max-width:960px;color:#111}\nh1{font-size:1.35rem}\nh2{font-size:1.1rem;margin-top:1.5rem}\ntable{border-collapse:collapse;margin:0.75rem 0}\nth,td{border:1px solid #ccc;padding:0.35rem 0.6rem;text-align:left}\nth{background:#f5f5f5}\npre.json{background:#f8f8f8;padding:0.75rem;overflow:auto;font-size:0.85rem}\nul.tree{list-style:none;padding-left:1rem}\nul.tree.nested{padding-left:1.25rem;border-left:1px solid #ddd;margin:0.25rem 0}\n.nm{font-weight:600}\n.meta{color:#555;font-size:0.9rem}\nfooter{margin-top:2rem;font-size:0.85rem;color:#555}\n`.trim();\n\n const html = `<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>${titleName}</title>\n<style>${css}</style>\n</head>\n<body>\n<header><h1>AgentInspect Run: ${titleName}</h1></header>\n<p class=\"note\">Generated locally by AgentInspect.</p>\n${includeMetadata ? `<section class=\"summary\"><h2>Summary</h2><table>${summaryRows.join(\"\")}</table>${confidenceHtml}</section>` : \"\"}\n<section class=\"tree\"><h2>Execution tree</h2>${tree.children.length > 0 ? renderTreeHtml(tree.children) : \"<p>No steps recorded.</p>\"}</section>\n${errorsHtml}\n${attrsHtml}\n<footer>Generated locally by AgentInspect. Review for sensitive data before sharing.</footer>\n</body>\n</html>`;\n\n return {\n format: \"html\",\n content: html,\n contentType: \"text/html\",\n fileExtension: \".html\",\n warnings,\n };\n}\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult } from \"./types.js\";\nimport {\n compactAttributes,\n escapeMarkdown,\n flattenTree,\n safeString,\n stableJson,\n} from \"./helpers.js\";\n\nfunction renderTreeAscii(nodes: InspectNode[], indent = \"\"): string {\n const lines: string[] = [];\n for (let i = 0; i < nodes.length; i++) {\n const n = nodes[i]!;\n const last = i === nodes.length - 1;\n const branch = last ? \"└─ \" : \"├─ \";\n const ev = n.event;\n const status = ev.status ?? \"?\";\n const dur =\n ev.durationMs !== undefined && Number.isFinite(ev.durationMs)\n ? `${ev.durationMs}ms`\n : \"-\";\n lines.push(`${indent}${branch}${escapeMarkdown(ev.name)} [${ev.kind}] ${status} (${dur})`);\n const nextIndent = indent + (last ? \" \" : \"│ \");\n if (n.children.length > 0) {\n const childStr = renderTreeAscii(n.children, nextIndent);\n if (childStr.length > 0) lines.push(childStr);\n }\n }\n return lines.join(\"\\n\");\n}\n\nexport function exportMarkdown(\n tree: InspectRunTree,\n options?: Partial<ExportOptions>,\n): ExportResult {\n const warnings: string[] = [];\n const includeMetadata = options?.includeMetadata ?? true;\n const includeAttributes = options?.includeAttributes ?? false;\n const includeErrors = options?.includeErrors ?? true;\n const maxLen = options?.maxAttributeLength ?? 500;\n const redacted = options?.redacted ?? true;\n\n const titleName = tree.name ?? tree.runId;\n const lines: string[] = [];\n lines.push(`# AgentInspect Run: ${escapeMarkdown(titleName)}`);\n lines.push(\"\");\n lines.push(\"Generated locally by AgentInspect. Review for sensitive data before sharing.\");\n lines.push(\"\");\n\n if (includeMetadata) {\n lines.push(\"## Summary\");\n lines.push(\"\");\n lines.push(`- **runId**: ${escapeMarkdown(tree.runId)}`);\n if (tree.name !== undefined) lines.push(`- **name**: ${escapeMarkdown(tree.name)}`);\n lines.push(`- **status**: ${escapeMarkdown(String(tree.status ?? \"unknown\"))}`);\n lines.push(\n `- **durationMs**: ${tree.durationMs !== undefined ? escapeMarkdown(String(tree.durationMs)) : \"-\"}`,\n );\n lines.push(\n `- **startedAt**: ${tree.startedAt !== undefined ? escapeMarkdown(String(tree.startedAt)) : \"-\"}`,\n );\n lines.push(\n `- **endedAt**: ${tree.endedAt !== undefined ? escapeMarkdown(String(tree.endedAt)) : \"-\"}`,\n );\n lines.push(`- **totalEvents**: ${tree.metadata.totalEvents}`);\n lines.push(\"\");\n lines.push(\"### Confidence breakdown\");\n lines.push(\"\");\n lines.push(\"| bucket | count |\");\n lines.push(\"| --- | --- |\");\n for (const k of Object.keys(tree.metadata.confidenceBreakdown).sort()) {\n const key = k as keyof typeof tree.metadata.confidenceBreakdown;\n lines.push(\n `| ${escapeMarkdown(key)} | ${tree.metadata.confidenceBreakdown[key]} |`,\n );\n }\n lines.push(\"\");\n lines.push(\"### Kind breakdown\");\n lines.push(\"\");\n lines.push(\"| kind | count |\");\n lines.push(\"| --- | --- |\");\n for (const k of Object.keys(tree.metadata.kinds).sort()) {\n const key = k as keyof typeof tree.metadata.kinds;\n const c = tree.metadata.kinds[key];\n if (c > 0) lines.push(`| ${escapeMarkdown(key)} | ${c} |`);\n }\n lines.push(\"\");\n }\n\n lines.push(\"## Execution tree\");\n lines.push(\"\");\n lines.push(\"```text\");\n lines.push(\n tree.children.length > 0 ? renderTreeAscii(tree.children) : \"(no steps)\",\n );\n lines.push(\"```\");\n lines.push(\"\");\n\n const flat = flattenTree(tree);\n const errors = flat.filter((n) => n.event.status === \"error\");\n if (includeErrors && errors.length > 0) {\n lines.push(\"## Errors\");\n lines.push(\"\");\n for (const n of errors) {\n const msg =\n n.event.attributes && typeof n.event.attributes.error === \"object\"\n ? safeString(\n (n.event.attributes.error as { message?: string }).message,\n maxLen,\n )\n : \"\";\n lines.push(\n `- **${escapeMarkdown(n.event.name)}** (${escapeMarkdown(n.event.eventId)}): ${escapeMarkdown(msg || \"error\")}`,\n );\n }\n lines.push(\"\");\n }\n\n if (includeAttributes) {\n lines.push(\"## Attributes (bounded)\");\n lines.push(\"\");\n for (const n of flat) {\n if (!n.event.attributes || Object.keys(n.event.attributes).length === 0) continue;\n const compact = compactAttributes(n.event.attributes, {\n maxLength: maxLen,\n redacted,\n });\n lines.push(`### ${escapeMarkdown(n.event.name)}`);\n lines.push(\"\");\n lines.push(\"```json\");\n lines.push(stableJson(compact, true));\n lines.push(\"```\");\n lines.push(\"\");\n }\n warnings.push(\n \"Attributes may still contain sensitive data; review exports before sharing.\",\n );\n }\n\n return {\n format: \"markdown\",\n content: lines.join(\"\\n\"),\n contentType: \"text/markdown\",\n fileExtension: \".md\",\n warnings,\n };\n}\n","import crypto from \"node:crypto\";\n\nimport type { InspectKind, InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult } from \"./types.js\";\nimport { EXPORT_PAYLOAD_VERSION } from \"./types.js\";\nimport { flattenTree } from \"./helpers.js\";\n\nexport interface OpenInferenceSpan {\n trace_id: string;\n span_id: string;\n parent_span_id?: string;\n name: string;\n start_time_unix_nano: number;\n end_time_unix_nano?: number;\n attributes: Record<string, unknown>;\n status?: {\n code: \"OK\" | \"ERROR\" | \"UNSET\";\n message?: string;\n };\n}\n\nexport interface OpenInferenceExport {\n exporter: \"agent-inspect\";\n format: \"openinference\";\n compatibility: \"openinference-compatible\";\n version: string;\n trace_id: string;\n spans: OpenInferenceSpan[];\n warnings: string[];\n}\n\nfunction hexFrom(seed: string, byteLen: number): string {\n return crypto.createHash(\"sha256\").update(seed, \"utf8\").digest(\"hex\").slice(0, byteLen * 2);\n}\n\nfunction mapInspectKindToOI(\n kind: InspectKind,\n warnings: string[],\n): { openInferenceKind: string; ambiguousNote?: string } {\n switch (kind) {\n case \"LLM\":\n return { openInferenceKind: \"LLM\" };\n case \"TOOL\":\n return { openInferenceKind: \"TOOL\" };\n case \"CHAIN\":\n return { openInferenceKind: \"CHAIN\" };\n case \"RETRIEVER\":\n return { openInferenceKind: \"RETRIEVER\" };\n case \"AGENT\":\n return { openInferenceKind: \"AGENT\" };\n case \"DECISION\":\n warnings.push(\n `Ambiguous kind DECISION mapped to CHAIN for span compatibility (${EXPORT_PAYLOAD_VERSION}).`,\n );\n return { openInferenceKind: \"CHAIN\" };\n case \"RESULT\":\n warnings.push(\n `Ambiguous kind RESULT mapped to UNKNOWN for span compatibility (${EXPORT_PAYLOAD_VERSION}).`,\n );\n return { openInferenceKind: \"UNKNOWN\" };\n case \"ERROR\":\n warnings.push(`ERROR kind mapped to CHAIN for span compatibility.`);\n return { openInferenceKind: \"CHAIN\" };\n case \"LOG\":\n case \"LOGIC\":\n case \"RUN\":\n warnings.push(`${kind} mapped to CHAIN for span compatibility.`);\n return { openInferenceKind: \"CHAIN\" };\n default:\n warnings.push(`Unhandled InspectKind ${kind} mapped to UNKNOWN.`);\n return { openInferenceKind: \"UNKNOWN\" };\n }\n}\n\nexport function exportOpenInference(\n tree: InspectRunTree,\n options?: Partial<ExportOptions>,\n): ExportResult {\n const warnings: string[] = [\n \"OpenInference-compatible JSON export is experimental until verified against specific backends.\",\n \"This file was generated locally and not sent anywhere.\",\n ];\n\n const traceId = hexFrom(`trace:${tree.runId}`, 16);\n const includeAttributes = options?.includeAttributes ?? false;\n const maxLen = options?.maxAttributeLength ?? 500;\n const pretty = options?.pretty ?? true;\n\n const spans: OpenInferenceSpan[] = [];\n\n for (const n of flattenTree(tree)) {\n const ev = n.event;\n const spanId = hexFrom(`${tree.runId}:${ev.eventId}`, 8);\n const parentSpanHex = ev.parentId\n ? hexFrom(`${tree.runId}:${ev.parentId}`, 8)\n : undefined;\n const startNs = Math.round(ev.timestamp * 1e6);\n let endNs: number | undefined;\n if (ev.durationMs !== undefined && Number.isFinite(ev.durationMs)) {\n endNs = startNs + Math.round(ev.durationMs * 1e6);\n }\n\n const { openInferenceKind } = mapInspectKindToOI(ev.kind, warnings);\n\n const attrs: Record<string, unknown> = {\n \"openinference.span.kind\": openInferenceKind,\n \"agent_inspect.kind\": ev.kind,\n \"agent_inspect.confidence\": ev.confidence,\n \"agent_inspect.source.type\": ev.source.type,\n \"agent_inspect.run_id\": tree.runId,\n \"agent_inspect.event_id\": ev.eventId,\n \"agent_inspect.status\": ev.status ?? \"unset\",\n };\n if (ev.durationMs !== undefined) {\n attrs[\"agent_inspect.duration_ms\"] = ev.durationMs;\n }\n\n const meta = ev.attributes;\n if (meta?.model !== undefined && typeof meta.model === \"string\") {\n attrs[\"llm.model_name\"] = meta.model;\n }\n const tokens = meta?.tokens;\n if (tokens && typeof tokens === \"object\" && tokens !== null) {\n const inp = (tokens as { input?: number }).input;\n const outp = (tokens as { output?: number }).output;\n if (typeof inp === \"number\") attrs[\"llm.token_count.prompt\"] = inp;\n if (typeof outp === \"number\") attrs[\"llm.token_count.completion\"] = outp;\n }\n\n if (includeAttributes && meta && typeof meta === \"object\") {\n for (const [k, v] of Object.entries(meta)) {\n if (k === \"tokens\" || k === \"model\") continue;\n if (v !== undefined && v !== null && typeof v !== \"object\") {\n attrs[`agent_inspect.preview.${k}`] =\n typeof v === \"string\" ? v.slice(0, maxLen) : v;\n }\n }\n }\n\n let status: OpenInferenceSpan[\"status\"];\n if (ev.status === \"error\") {\n const msg =\n meta && typeof meta.error === \"object\" && meta.error !== null\n ? String((meta.error as { message?: string }).message ?? \"error\")\n : \"error\";\n status = { code: \"ERROR\", message: msg.slice(0, maxLen) };\n } else if (ev.status === \"ok\") {\n status = { code: \"OK\" };\n } else {\n status = { code: \"UNSET\" };\n }\n\n spans.push({\n trace_id: traceId,\n span_id: spanId,\n parent_span_id: parentSpanHex,\n name: ev.name,\n start_time_unix_nano: startNs,\n end_time_unix_nano: endNs,\n attributes: attrs,\n status,\n });\n }\n\n const payload: OpenInferenceExport = {\n exporter: \"agent-inspect\",\n format: \"openinference\",\n compatibility: \"openinference-compatible\",\n version: EXPORT_PAYLOAD_VERSION,\n trace_id: traceId,\n spans,\n warnings,\n };\n\n return {\n format: \"openinference\",\n content: JSON.stringify(payload, null, pretty ? 2 : undefined),\n contentType: \"application/json\",\n fileExtension: \".openinference.json\",\n warnings,\n };\n}\n","import crypto from \"node:crypto\";\n\nimport type { InspectKind } from \"../types/inspect-event.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult } from \"./types.js\";\nimport { flattenTree } from \"./helpers.js\";\n\nfunction hexFrom(seed: string, byteLen: number): string {\n return crypto.createHash(\"sha256\").update(seed, \"utf8\").digest(\"hex\").slice(0, byteLen * 2);\n}\n\nfunction stringAttr(key: string, value: string): { key: string; value: { stringValue: string } } {\n return { key, value: { stringValue: value } };\n}\n\nfunction intAttr(key: string, value: number): { key: string; value: { intValue: string } } {\n return { key, value: { intValue: String(value) } };\n}\n\ntype OtlpAttr =\n | ReturnType<typeof stringAttr>\n | ReturnType<typeof intAttr>;\n\nfunction genAiOperationName(kind: InspectKind): string | undefined {\n switch (kind) {\n case \"LLM\":\n return \"generate_content\";\n case \"TOOL\":\n return \"execute_tool\";\n case \"AGENT\":\n return \"invoke_agent\";\n default:\n return undefined;\n }\n}\n\nexport function exportOtlpJson(\n tree: InspectRunTree,\n options?: Partial<ExportOptions>,\n): ExportResult {\n const warnings: string[] = [\n \"OTLP JSON export uses OTel GenAI-aligned attributes where applicable; experimental until verified against specific collectors.\",\n \"Not OTLP gRPC/protobuf — JSON mapping only. Generated locally; no network upload.\",\n ];\n\n const traceId = hexFrom(`trace:${tree.runId}`, 16);\n const includeAttributes = options?.includeAttributes ?? false;\n const maxLen = options?.maxAttributeLength ?? 500;\n const pretty = options?.pretty ?? true;\n\n const flat = flattenTree(tree);\n const spans: Record<string, unknown>[] = [];\n\n for (const n of flat) {\n const ev = n.event;\n const spanId = hexFrom(`${tree.runId}:${ev.eventId}`, 8);\n const parentSpanId = ev.parentId\n ? hexFrom(`${tree.runId}:${ev.parentId}`, 8)\n : undefined;\n\n const startNs = String(Math.round(ev.timestamp * 1e6));\n let endNs: string | undefined;\n if (ev.durationMs !== undefined && Number.isFinite(ev.durationMs)) {\n endNs = String(Math.round(ev.timestamp * 1e6 + ev.durationMs * 1e6));\n }\n\n const attrs: OtlpAttr[] = [\n stringAttr(\"agent_inspect.kind\", ev.kind),\n stringAttr(\"agent_inspect.confidence\", ev.confidence),\n stringAttr(\"agent_inspect.source.type\", ev.source.type),\n stringAttr(\"agent_inspect.run_id\", tree.runId),\n stringAttr(\"agent_inspect.event_id\", ev.eventId),\n stringAttr(\"agent_inspect.status\", ev.status ?? \"unset\"),\n ];\n\n if (ev.durationMs !== undefined) {\n attrs.push(intAttr(\"agent_inspect.duration_ms\", ev.durationMs));\n }\n\n const op = genAiOperationName(ev.kind);\n if (op !== undefined) {\n attrs.push(stringAttr(\"gen_ai.operation.name\", op));\n }\n\n const meta = ev.attributes;\n if (meta?.model !== undefined && typeof meta.model === \"string\") {\n attrs.push(stringAttr(\"gen_ai.request.model\", meta.model.slice(0, maxLen)));\n }\n\n const tokens = meta?.tokens;\n if (tokens && typeof tokens === \"object\" && tokens !== null) {\n const inp = (tokens as { input?: number }).input;\n const outp = (tokens as { output?: number }).output;\n if (typeof inp === \"number\") attrs.push(intAttr(\"gen_ai.usage.input_tokens\", inp));\n if (typeof outp === \"number\") attrs.push(intAttr(\"gen_ai.usage.output_tokens\", outp));\n }\n\n if (includeAttributes && meta && typeof meta === \"object\") {\n for (const [k, v] of Object.entries(meta)) {\n if (k === \"tokens\" || k === \"model\") continue;\n if (typeof v === \"string\" || typeof v === \"number\" || typeof v === \"boolean\") {\n attrs.push(\n stringAttr(\n `agent_inspect.preview.${k}`,\n typeof v === \"string\" ? v.slice(0, maxLen) : String(v),\n ),\n );\n }\n }\n }\n\n let statusCode = \"STATUS_CODE_UNSET\";\n let statusMessage: string | undefined;\n if (ev.status === \"error\") {\n statusCode = \"STATUS_CODE_ERROR\";\n statusMessage =\n meta && typeof meta.error === \"object\" && meta.error !== null\n ? String((meta.error as { message?: string }).message ?? \"error\").slice(0, maxLen)\n : \"error\";\n } else if (ev.status === \"ok\") {\n statusCode = \"STATUS_CODE_OK\";\n }\n\n const spanJson: Record<string, unknown> = {\n traceId,\n spanId,\n name: ev.name,\n kind: \"SPAN_KIND_INTERNAL\",\n startTimeUnixNano: startNs,\n attributes: attrs,\n status: {\n code: statusCode,\n ...(statusMessage !== undefined ? { message: statusMessage } : {}),\n },\n };\n\n if (parentSpanId !== undefined) {\n spanJson.parentSpanId = parentSpanId;\n }\n if (endNs !== undefined) {\n spanJson.endTimeUnixNano = endNs;\n }\n\n spans.push(spanJson);\n }\n\n const payload = {\n resourceSpans: [\n {\n resource: {\n attributes: [stringAttr(\"service.name\", \"agent-inspect\")],\n },\n scopeSpans: [\n {\n scope: { name: \"agent-inspect\" },\n spans,\n },\n ],\n },\n ],\n };\n\n return {\n format: \"otlp-json\",\n content: JSON.stringify(payload, null, pretty ? 2 : undefined),\n contentType: \"application/json\",\n fileExtension: \".otlp.json\",\n warnings,\n };\n}\n","import type { ExportFormat, ExportValidationResult } from \"./types.js\";\n\nconst EXPERIMENTAL =\n \"Experimental compatibility export — verify against your target tooling before relying on it.\";\n\nexport function validateExportContent(\n format: ExportFormat,\n content: string,\n): ExportValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [EXPERIMENTAL];\n\n if (format === \"markdown\") {\n if (!content.startsWith(\"# AgentInspect Run\")) {\n errors.push('Markdown export must start with \"# AgentInspect Run\"');\n }\n return { ok: errors.length === 0, format, errors, warnings };\n }\n\n if (format === \"html\") {\n const lower = content.toLowerCase();\n if (!lower.includes(\"<!doctype html\")) {\n errors.push(\"HTML export must include <!doctype html>\");\n }\n if (/<\\s*script\\b/i.test(content)) {\n errors.push(\"HTML export must not contain script tags\");\n }\n if (/<\\s*link\\b[^>]*href\\s*=/i.test(content)) {\n warnings.push(\"HTML export contains link tags — ensure no external stylesheets.\");\n }\n return { ok: errors.length === 0, format, errors, warnings };\n }\n\n if (format === \"openinference\") {\n let parsed: unknown;\n try {\n parsed = JSON.parse(content) as unknown;\n } catch {\n errors.push(\"OpenInference export is not valid JSON\");\n return { ok: false, format, errors, warnings };\n }\n if (!parsed || typeof parsed !== \"object\") {\n errors.push(\"OpenInference export JSON must be an object\");\n return { ok: false, format, errors, warnings };\n }\n const o = parsed as Record<string, unknown>;\n if (o.format !== \"openinference\") {\n errors.push('OpenInference export must include format: \"openinference\"');\n }\n if (!Array.isArray(o.spans)) {\n errors.push(\"OpenInference export must include a spans array\");\n }\n warnings.push(\"OpenInference-compatible JSON is not guaranteed for every backend.\");\n return { ok: errors.length === 0, format, errors, warnings };\n }\n\n if (format === \"otlp-json\") {\n let parsed: unknown;\n try {\n parsed = JSON.parse(content) as unknown;\n } catch {\n errors.push(\"OTLP JSON export is not valid JSON\");\n return { ok: false, format, errors, warnings };\n }\n if (!parsed || typeof parsed !== \"object\") {\n errors.push(\"OTLP JSON export must be an object\");\n return { ok: false, format, errors, warnings };\n }\n const o = parsed as Record<string, unknown>;\n if (!Array.isArray(o.resourceSpans)) {\n errors.push(\"OTLP JSON export must include resourceSpans array\");\n }\n warnings.push(\n \"OTLP JSON mapping uses OTel GenAI-aligned attributes where applicable; collectors may require transformation.\",\n );\n return { ok: errors.length === 0, format, errors, warnings };\n }\n\n errors.push(`Unsupported export format`);\n return { ok: false, format, errors, warnings };\n}\n","import type { InspectEvent, InspectKind, InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport type {\n StepStartedEvent,\n StepType,\n TraceEvent,\n} from \"../types.js\";\n\nimport { zeroKinds } from \"./helpers.js\";\n\nfunction stepTypeToInspectKind(t: StepType): InspectKind {\n switch (t) {\n case \"llm\":\n return \"LLM\";\n case \"tool\":\n return \"TOOL\";\n case \"decision\":\n return \"DECISION\";\n case \"run\":\n return \"CHAIN\";\n default:\n return \"LOGIC\";\n }\n}\n\nfunction mapStepStatus(\n s: \"success\" | \"error\" | undefined,\n): InspectEvent[\"status\"] | undefined {\n if (s === undefined) return \"running\";\n if (s === \"success\") return \"ok\";\n return \"error\";\n}\n\ntype StepAcc = {\n id: string;\n parentId?: string;\n name: string;\n type: StepType;\n startTime: number;\n timestamp: number;\n metadata?: Record<string, unknown>;\n status?: \"success\" | \"error\";\n endTime?: number;\n durationMs?: number;\n error?: { message: string; stack?: string };\n};\n\n/**\n * Build an {@link InspectRunTree} from v0.1 JSONL {@link TraceEvent} rows (manual tracing).\n * Does not mutate the input array or event objects.\n */\nexport function manualTraceEventsToRunTree(events: TraceEvent[]): InspectRunTree {\n const started = events.find((e) => e.event === \"run_started\");\n if (!started || started.event !== \"run_started\") {\n throw new Error(\"Invalid trace: missing run_started\");\n }\n\n const runId = started.runId;\n const runName = started.name;\n\n const completedAll = events.filter((e) => e.event === \"run_completed\");\n const lastCompleted = completedAll[completedAll.length - 1];\n\n let runStatus: InspectRunTree[\"status\"];\n if (lastCompleted === undefined) {\n runStatus = \"running\";\n } else if (lastCompleted.status === \"success\") {\n runStatus = \"ok\";\n } else {\n runStatus = \"error\";\n }\n\n const startedAt = started.startTime;\n const endedAt =\n lastCompleted !== undefined && runStatus !== \"running\" ? lastCompleted.endTime : undefined;\n const durationMs =\n lastCompleted !== undefined && Number.isFinite(lastCompleted.durationMs)\n ? lastCompleted.durationMs\n : undefined;\n\n const steps = new Map<string, StepAcc>();\n\n for (const e of events) {\n if (e.event !== \"step_started\") continue;\n const s = e as StepStartedEvent;\n steps.set(s.stepId, {\n id: s.stepId,\n parentId: s.parentId,\n name: s.name,\n type: s.type,\n startTime: s.startTime,\n timestamp: s.timestamp,\n metadata: s.metadata as Record<string, unknown> | undefined,\n });\n }\n\n for (const e of events) {\n if (e.event !== \"step_completed\") continue;\n const acc = steps.get(e.stepId);\n if (!acc) continue;\n acc.status = e.status;\n acc.endTime = e.endTime;\n acc.durationMs = e.durationMs;\n if (e.error?.message) {\n acc.error = e.error;\n }\n }\n\n const inspectNodes = new Map<string, InspectNode>();\n\n for (const acc of steps.values()) {\n const kind = stepTypeToInspectKind(acc.type);\n const status = mapStepStatus(acc.status);\n const attrs: Record<string, unknown> = { ...(acc.metadata ?? {}) };\n if (acc.error?.message) {\n attrs.error = acc.error;\n }\n\n const evt: InspectEvent = {\n eventId: acc.id,\n runId,\n parentId: acc.parentId,\n name: acc.name,\n kind,\n timestamp: acc.timestamp,\n status,\n durationMs: acc.durationMs,\n attributes: Object.keys(attrs).length > 0 ? attrs : undefined,\n confidence: \"explicit\",\n source: { type: \"manual\" },\n };\n\n inspectNodes.set(acc.id, { event: evt, children: [], depth: 0 });\n }\n\n const roots: InspectNode[] = [];\n const sortByStart = (a: InspectNode, b: InspectNode) =>\n a.event.timestamp - b.event.timestamp;\n\n for (const node of inspectNodes.values()) {\n const pid = node.event.parentId;\n if (pid !== undefined && inspectNodes.has(pid)) {\n inspectNodes.get(pid)!.children.push(node);\n } else {\n roots.push(node);\n }\n }\n\n roots.sort(sortByStart);\n for (const n of inspectNodes.values()) {\n n.children.sort(sortByStart);\n }\n\n const assignDepth = (n: InspectNode, depth: number) => {\n n.depth = depth;\n for (const c of n.children) assignDepth(c, depth + 1);\n };\n for (const r of roots) assignDepth(r, 0);\n\n const confidenceBreakdown = {\n explicit: 0,\n correlated: 0,\n heuristic: 0,\n unknown: 0,\n } as InspectRunTree[\"metadata\"][\"confidenceBreakdown\"];\n\n const kinds = zeroKinds();\n\n function countWalk(nodes: InspectNode[]): void {\n for (const n of nodes) {\n confidenceBreakdown[n.event.confidence] += 1;\n kinds[n.event.kind] += 1;\n if (n.children.length > 0) countWalk(n.children);\n }\n }\n countWalk(roots);\n\n return {\n runId,\n name: runName,\n status: runStatus,\n startedAt,\n endedAt,\n durationMs,\n children: roots,\n metadata: {\n totalEvents: inspectNodes.size,\n confidenceBreakdown,\n kinds,\n },\n };\n}\n","import type { InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult, ExportValidationResult } from \"./types.js\";\nimport { exportHtml } from \"./html-exporter.js\";\nimport { exportMarkdown } from \"./markdown-exporter.js\";\nimport { exportOpenInference } from \"./openinference-exporter.js\";\nimport { exportOtlpJson } from \"./otlp-json-exporter.js\";\nimport { validateExportContent } from \"./validation.js\";\n\nexport function mergeExportDefaults(options: ExportOptions): ExportOptions {\n return {\n format: options.format,\n includeMetadata: options.includeMetadata ?? true,\n includeAttributes: options.includeAttributes ?? false,\n includeErrors: options.includeErrors ?? true,\n pretty: options.pretty ?? true,\n redacted: options.redacted ?? true,\n maxAttributeLength: options.maxAttributeLength ?? 500,\n };\n}\n\n/**\n * @experimental Compatibility-oriented export API. Exports are local-only and do not upload anywhere.\n * Subject to refinement before a future stability declaration.\n */\nexport function exportRunTree(tree: InspectRunTree, options: ExportOptions): ExportResult {\n const opts = mergeExportDefaults(options);\n switch (opts.format) {\n case \"markdown\":\n return exportMarkdown(tree, opts);\n case \"html\":\n return exportHtml(tree, opts);\n case \"openinference\":\n return exportOpenInference(tree, opts);\n case \"otlp-json\":\n return exportOtlpJson(tree, opts);\n default: {\n const _x: never = opts.format;\n throw new Error(`Unsupported export format: ${String(_x)}`);\n }\n }\n}\n\nexport function validateExport(result: ExportResult): ExportValidationResult {\n const base = validateExportContent(result.format, result.content);\n return {\n ok: base.ok,\n format: base.format,\n errors: base.errors,\n warnings: [...result.warnings, ...base.warnings],\n };\n}\n\nexport type {\n ExportFormat,\n ExportOptions,\n ExportResult,\n ExportValidationResult,\n TraceExporter,\n} from \"./types.js\";\nexport { EXPORT_PAYLOAD_VERSION } from \"./types.js\";\nexport * from \"./helpers.js\";\nexport { manualTraceEventsToRunTree } from \"./manual-trace-adapter.js\";\nexport { exportMarkdown } from \"./markdown-exporter.js\";\nexport { exportHtml } from \"./html-exporter.js\";\nexport type { OpenInferenceExport, OpenInferenceSpan } from \"./openinference-exporter.js\";\nexport { exportOpenInference } from \"./openinference-exporter.js\";\nexport { exportOtlpJson } from \"./otlp-json-exporter.js\";\nexport { validateExportContent } from \"./validation.js\";\n"]}