@harness-kernel/core 0.2.1 → 0.3.0

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.
Files changed (53) hide show
  1. package/dist/agent/context.d.ts +2 -3
  2. package/dist/agent/context.js +1 -1
  3. package/dist/agent/event.d.ts +3 -2
  4. package/dist/agent/event.js +6 -2
  5. package/dist/agent/hook.d.ts +3 -4
  6. package/dist/agent/hook.js +1 -1
  7. package/dist/agent/mode.d.ts +2 -3
  8. package/dist/agent/mode.js +1 -1
  9. package/dist/agent/role.js +1 -1
  10. package/dist/agent/session.d.ts +3 -4
  11. package/dist/agent/session.js +8 -2
  12. package/dist/agent/tool.d.ts +39 -3
  13. package/dist/agent/tool.js +8 -2
  14. package/dist/agent.d.ts +6 -6
  15. package/dist/{approval-D_G2w-fW.d.ts → approval-Ch0LwJFM.d.ts} +18 -13
  16. package/dist/chunk-2NQ3JL7K.js +502 -0
  17. package/dist/chunk-2NQ3JL7K.js.map +1 -0
  18. package/dist/{chunk-JIJHGB6H.js → chunk-3QOAFCCZ.js} +24 -2
  19. package/dist/chunk-3QOAFCCZ.js.map +1 -0
  20. package/dist/chunk-NCSQEUQC.js +37 -0
  21. package/dist/chunk-NCSQEUQC.js.map +1 -0
  22. package/dist/{chunk-B4Q6CPYO.js → chunk-TCHZYK5Y.js} +3 -1
  23. package/dist/{chunk-B4Q6CPYO.js.map → chunk-TCHZYK5Y.js.map} +1 -1
  24. package/dist/{chunk-QEVKKJ7N.js → chunk-UKXJIKED.js} +354 -132
  25. package/dist/chunk-UKXJIKED.js.map +1 -0
  26. package/dist/{context-BfpLqV11.d.ts → context-Bz9C_rL9.d.ts} +88 -3
  27. package/dist/errors-DHHy8V3O.d.ts +6 -0
  28. package/dist/errors-hpkW3tfR.d.ts +112 -0
  29. package/dist/{event-CKV4EeZ3.d.ts → event-DMBY-R6h.d.ts} +33 -4
  30. package/dist/{hook-CfBbhUQf.d.ts → hook-DD7uuzE3.d.ts} +2 -2
  31. package/dist/index.d.ts +21 -15
  32. package/dist/index.js +19 -6
  33. package/dist/metrics-DMN8bfY6.d.ts +23 -0
  34. package/dist/{model-provider-Ch7tzk1x.d.ts → model-provider-DGkLQJWP.d.ts} +6 -4
  35. package/dist/runner/approval.d.ts +7 -7
  36. package/dist/runner/event.d.ts +3 -2
  37. package/dist/runner/event.js +6 -2
  38. package/dist/runner/logging.d.ts +7 -3
  39. package/dist/runner/logging.js +11 -1
  40. package/dist/runner/model-provider.d.ts +6 -6
  41. package/dist/runner/storage.d.ts +181 -4
  42. package/dist/{runner-B41JEovO.d.ts → runner-CZHeMHKV.d.ts} +7 -5
  43. package/dist/runner.d.ts +9 -8
  44. package/dist/runner.js +11 -5
  45. package/package.json +2 -2
  46. package/dist/chunk-JIJHGB6H.js.map +0 -1
  47. package/dist/chunk-Q44U2CMM.js +0 -239
  48. package/dist/chunk-Q44U2CMM.js.map +0 -1
  49. package/dist/chunk-QEVKKJ7N.js.map +0 -1
  50. package/dist/events-D4xcDi53.d.ts +0 -69
  51. package/dist/storage-DCZE_hES.d.ts +0 -200
  52. package/dist/tool-errors-CygY1Nba.d.ts +0 -27
  53. package/dist/types-BPmsw-mF.d.ts +0 -80
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/logging/runtime-logs.ts","../src/runtime/constructs.ts","../src/runtime/context-registry.ts","../src/runtime/sandbox-manager.ts","../src/runtime/storage-coordinator.ts","../src/runtime/event-recorder.ts","../src/runtime/transcript-manager.ts","../src/runtime/role-resolver.ts","../src/runtime/tool-executor.ts","../src/runtime/snapshot-manager.ts","../src/runtime/model-pipeline.ts","../src/runtime/runner.ts","../src/session/types.ts","../src/session/approvals.ts","../src/session/approval-controller.ts","../src/session/engine.ts","../src/session/event-hub.ts","../src/logging/logger.ts","../src/session/queue.ts","../src/session/stream.ts","../src/session/status.ts","../src/session/session.ts","../src/session/store.ts"],"sourcesContent":["import { HarnessLog } from \"./types.js\";\nimport type { SchemaIssue } from \"../schema/index.js\";\nimport type { HarnessErrorShape, RunMetrics } from \"../runtime/types.js\";\n\nexport class SessionCreatedLog extends HarnessLog<{ sessionId?: string }> {\n level = \"info\" as const;\n category = \"session\" as const;\n message(): string {\n return \"session.created\";\n }\n}\n\nexport class RunStartedLog extends HarnessLog<{ modeId: string; model: string }> {\n level = \"info\" as const;\n category = \"run\" as const;\n message(fields: { modeId: string; model: string }): string {\n return `run.started mode=${fields.modeId} model=${fields.model}`;\n }\n}\n\nexport class RunCompletedLog extends HarnessLog<{\n durationMs: number;\n messageCount: number;\n eventCount: number;\n metrics: RunMetrics;\n}> {\n level = \"info\" as const;\n category = \"run\" as const;\n message(fields: { durationMs: number; messageCount: number; eventCount: number; metrics: RunMetrics }): string {\n return `run.completed durationMs=${fields.durationMs} messages=${fields.messageCount} events=${fields.eventCount}`;\n }\n}\n\nexport class RunFailedLog extends HarnessLog<{ error: HarnessErrorShape; internalError?: unknown }> {\n level = \"error\" as const;\n category = \"run\" as const;\n levelFor(fields: { error: HarnessErrorShape; internalError?: unknown }): \"warn\" | \"error\" {\n return fields.error.severity === \"warn\" ? \"warn\" : \"error\";\n }\n message(fields: { error: HarnessErrorShape; internalError?: unknown }): string {\n return `run.failed code=${fields.error.code}`;\n }\n}\n\nexport class TurnStartedLog extends HarnessLog<{ turnId: string }> {\n level = \"info\" as const;\n category = \"turn\" as const;\n message(fields: { turnId: string }): string {\n return `turn.started ${fields.turnId}`;\n }\n}\n\nexport class TurnCompletedLog extends HarnessLog<{ turnId?: string; durationMs?: number }> {\n level = \"info\" as const;\n category = \"turn\" as const;\n message(): string {\n return \"turn.completed\";\n }\n}\n\nexport class ContextBuildStartedLog extends HarnessLog<{ providerCount: number }> {\n level = \"debug\" as const;\n category = \"context\" as const;\n message(fields: { providerCount: number }): string {\n return `context.started providers=${fields.providerCount}`;\n }\n}\n\nexport class ContextBuildCompletedLog extends HarnessLog<{ providerCount: number; contributionCount: number; durationMs: number }> {\n level = \"info\" as const;\n category = \"context\" as const;\n message(fields: { providerCount: number; contributionCount: number; durationMs: number }): string {\n return `context.ready providers=${fields.providerCount} contributions=${fields.contributionCount} durationMs=${fields.durationMs}`;\n }\n}\n\nexport class ContextProviderFailedLog extends HarnessLog<{ providerType: string; error: HarnessErrorShape; internalError?: unknown }> {\n level = \"error\" as const;\n category = \"context\" as const;\n levelFor(fields: { providerType: string; error: HarnessErrorShape; internalError?: unknown }): \"warn\" | \"error\" {\n return fields.error.severity === \"warn\" ? \"warn\" : \"error\";\n }\n message(fields: { providerType: string; error: HarnessErrorShape; internalError?: unknown }): string {\n return `context.provider.failed ${fields.providerType} code=${fields.error.code}`;\n }\n}\n\nexport class ModelCallStartedLog extends HarnessLog<{ model: string; messageCount: number }> {\n level = \"info\" as const;\n category = \"model\" as const;\n message(fields: { model: string; messageCount: number }): string {\n return `model.started model=${fields.model} messages=${fields.messageCount}`;\n }\n}\n\nexport class ModelCallCompletedLog extends HarnessLog<{ model: string; durationMs: number; finishReason?: string }> {\n level = \"info\" as const;\n category = \"model\" as const;\n message(fields: { model: string; durationMs: number; finishReason?: string }): string {\n return `model.completed model=${fields.model} durationMs=${fields.durationMs}${fields.finishReason ? ` finish=${fields.finishReason}` : \"\"}`;\n }\n}\n\nexport class ModelCallFailedLog extends HarnessLog<{ model: string; error: HarnessErrorShape; internalError?: unknown; attempt?: number }> {\n level = \"error\" as const;\n category = \"model\" as const;\n levelFor(fields: { model: string; error: HarnessErrorShape; internalError?: unknown; attempt?: number }): \"warn\" | \"error\" {\n return fields.error.severity === \"warn\" ? \"warn\" : \"error\";\n }\n message(fields: { model: string; error: HarnessErrorShape; internalError?: unknown; attempt?: number }): string {\n return `model.failed model=${fields.model} code=${fields.error.code}`;\n }\n}\n\nexport class ModelDeltaLog extends HarnessLog<{ length: number; text?: string }> {\n level = \"info\" as const;\n category = \"model\" as const;\n message(fields: { length: number; text?: string }): string {\n return `model.delta length=${fields.length}`;\n }\n}\n\nexport class ToolStartedLog extends HarnessLog<{ toolName: string; args: unknown; risk?: string }> {\n level = \"info\" as const;\n category = \"tool\" as const;\n message(fields: { toolName: string; args: unknown; risk?: string }): string {\n return `tool.started ${fields.toolName}`;\n }\n}\n\nexport class ToolArgsEmptyLog extends HarnessLog<{ toolName: string }> {\n level = \"warn\" as const;\n category = \"tool\" as const;\n message(fields: { toolName: string }): string {\n return `tool.args.empty ${fields.toolName}`;\n }\n}\n\nexport class ToolInvalidSchemaLog extends HarnessLog<{ toolName: string; issues: SchemaIssue[] }> {\n level = \"error\" as const;\n category = \"tool\" as const;\n message(fields: { toolName: string; issues: SchemaIssue[] }): string {\n return `tool.args.invalid_schema ${fields.toolName}`;\n }\n}\n\nexport class ToolCompletedLog extends HarnessLog<{ toolName: string; durationMs: number; isError: boolean; result: unknown }> {\n level = \"info\" as const;\n category = \"tool\" as const;\n message(fields: { toolName: string; durationMs: number; isError: boolean; result: unknown }): string {\n return `tool.completed ${fields.toolName} durationMs=${fields.durationMs} isError=${fields.isError}`;\n }\n}\n\nexport class ToolFailedLog extends HarnessLog<{ toolName: string; durationMs?: number; error?: HarnessErrorShape; internalError?: unknown; result?: unknown }> {\n level = \"error\" as const;\n category = \"tool\" as const;\n levelFor(fields: { toolName: string; durationMs?: number; error?: HarnessErrorShape; internalError?: unknown; result?: unknown }): \"warn\" | \"error\" {\n return fields.error?.severity === \"warn\" ? \"warn\" : \"error\";\n }\n message(fields: { toolName: string; durationMs?: number; error?: HarnessErrorShape; internalError?: unknown; result?: unknown }): string {\n return `tool.failed ${fields.toolName}${fields.error ? ` code=${fields.error.code}` : \"\"}`;\n }\n}\n\nexport class ToolApprovalRequestedLog extends HarnessLog<{ toolName: string; risk?: string; permissions?: unknown }> {\n level = \"warn\" as const;\n category = \"approval\" as const;\n message(fields: { toolName: string; risk?: string; permissions?: unknown }): string {\n return `tool.approval.requested ${fields.toolName}`;\n }\n}\n\nexport class ToolApprovalResolvedLog extends HarnessLog<{ toolName: string; approved: boolean }> {\n level = \"info\" as const;\n category = \"approval\" as const;\n levelFor(fields: { toolName: string; approved: boolean }): \"info\" | \"warn\" {\n return fields.approved ? \"info\" : \"warn\";\n }\n message(fields: { toolName: string; approved: boolean }): string {\n return fields.approved ? `tool.approval.approved ${fields.toolName}` : `tool.approval.denied ${fields.toolName}`;\n }\n}\n\nexport class ToolApprovalDeniedLog extends HarnessLog<{ toolName: string }> {\n level = \"warn\" as const;\n category = \"approval\" as const;\n message(fields: { toolName: string }): string {\n return `tool.approval.denied ${fields.toolName}`;\n }\n}\n\nexport class SandboxOpenedLog extends HarnessLog<{ sandboxId: string; workDir: string }> {\n level = \"info\" as const;\n category = \"tool\" as const;\n message(fields: { sandboxId: string; workDir: string }): string {\n return `sandbox.opened ${fields.sandboxId}`;\n }\n}\n\nexport class SandboxExecStartedLog extends HarnessLog<{ sandboxId: string; command: unknown; cwd?: string; timeoutMs?: number }> {\n level = \"debug\" as const;\n category = \"tool\" as const;\n message(fields: { sandboxId: string; command: unknown; cwd?: string; timeoutMs?: number }): string {\n return `sandbox.exec.started ${fields.sandboxId}`;\n }\n}\n\nexport class SandboxExecCompletedLog extends HarnessLog<{\n sandboxId: string;\n exitCode: number | null;\n signal?: string;\n timedOut?: boolean;\n durationMs: number;\n}> {\n level = \"debug\" as const;\n category = \"tool\" as const;\n message(fields: { sandboxId: string; exitCode: number | null; signal?: string; timedOut?: boolean; durationMs: number }): string {\n return `sandbox.exec.completed ${fields.sandboxId} exitCode=${fields.exitCode ?? \"null\"} durationMs=${fields.durationMs}`;\n }\n}\n\nexport class SandboxExecFailedLog extends HarnessLog<{ sandboxId: string; error?: HarnessErrorShape; internalError?: unknown; durationMs?: number }> {\n level = \"error\" as const;\n category = \"tool\" as const;\n message(fields: { sandboxId: string; error?: HarnessErrorShape; internalError?: unknown; durationMs?: number }): string {\n return `sandbox.exec.failed ${fields.sandboxId}${fields.error ? ` code=${fields.error.code}` : \"\"}`;\n }\n}\n\nexport class SandboxClosedLog extends HarnessLog<{ sandboxId: string }> {\n level = \"info\" as const;\n category = \"tool\" as const;\n message(fields: { sandboxId: string }): string {\n return `sandbox.closed ${fields.sandboxId}`;\n }\n}\n\nexport class RunStorageOpenedLog extends HarnessLog<{ storageId: string; runId: string; runDir?: string }> {\n level = \"debug\" as const;\n category = \"storage\" as const;\n message(fields: { storageId: string; runId: string; runDir?: string }): string {\n return `storage.opened ${fields.storageId} run=${fields.runId}`;\n }\n}\n\nexport class SnapshotCreatedLog extends HarnessLog<{ snapshotId?: string; label?: string }> {\n level = \"info\" as const;\n category = \"snapshot\" as const;\n message(): string {\n return \"snapshot.created\";\n }\n}\n\nexport class SnapshotRestoredLog extends HarnessLog<{ snapshotId?: string; label?: string }> {\n level = \"info\" as const;\n category = \"snapshot\" as const;\n message(): string {\n return \"snapshot.restored\";\n }\n}\n\nexport class SnapshotRestoreRejectedLog extends HarnessLog<{ snapshotId?: string; reason: string }> {\n level = \"warn\" as const;\n category = \"snapshot\" as const;\n message(): string {\n return \"snapshot.restore_rejected\";\n }\n}\n\nexport class SnapshotDeletedLog extends HarnessLog<{ snapshotId?: string; label?: string }> {\n level = \"info\" as const;\n category = \"snapshot\" as const;\n message(): string {\n return \"snapshot.deleted\";\n }\n}\n\nexport class TranscriptCursorChangedLog extends HarnessLog<{ cursorId: string }> {\n level = \"debug\" as const;\n category = \"transcript\" as const;\n message(): string {\n return \"transcript.cursor_changed\";\n }\n}\n\nexport class StorageWriteFailedLog extends HarnessLog<{ operation: string; error: HarnessErrorShape; internalError?: unknown }> {\n level = \"error\" as const;\n category = \"storage\" as const;\n message(fields: { operation: string; error: HarnessErrorShape; internalError?: unknown }): string {\n return `storage.write_failed ${fields.operation} code=${fields.error.code}`;\n }\n}\n","import type {\n ContextProviderBinding,\n ContextProviderReference,\n ContextProviderSummary,\n HarnessContextProvider,\n HarnessContextProviderClass,\n HarnessContextProviderSelector,\n HarnessEvent,\n HarnessEventClass,\n HarnessHook,\n HarnessMode,\n HarnessModeClass,\n HarnessModeSelector,\n HarnessModeSummary,\n HarnessRoleDefinition,\n HarnessRoleClass,\n HarnessRoleSelector,\n HarnessTool,\n HarnessToolClass,\n HarnessToolSelector,\n JsonObject,\n} from \"./types.js\";\nimport {\n HarnessContextProvider as HarnessContextProviderBase,\n HarnessHook as HarnessHookBase,\n HarnessMode as HarnessModeBase,\n HarnessRole as HarnessRoleBase,\n HarnessTool as HarnessToolBase,\n} from \"./types.js\";\n\ntype ConstructClass = {\n readonly type?: string;\n readonly label?: string;\n readonly name?: string;\n};\n\nfunction constructClass(value: object | Function): ConstructClass {\n return (typeof value === \"function\" ? value : value.constructor) as ConstructClass;\n}\n\nfunction stripConstructSuffix(name: string): string {\n return name.replace(/(ContextProvider|Provider|Tool|Mode|Hook|Role|Event)$/u, \"\");\n}\n\nfunction wordsFromName(name: string): string[] {\n const spaced = name\n .replace(/[_:-]+/gu, \" \")\n .replace(/([a-z0-9])([A-Z])/gu, \"$1 $2\")\n .replace(/([A-Z]+)([A-Z][a-z])/gu, \"$1 $2\")\n .trim();\n return spaced ? spaced.split(/\\s+/u) : [name];\n}\n\nfunction snakeFromType(type: string): string {\n return wordsFromName(stripConstructSuffix(type))\n .map((word) => word.toLowerCase())\n .join(\"_\");\n}\n\nfunction labelFromType(type: string): string {\n return wordsFromName(stripConstructSuffix(type))\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n\nexport function getConstructType(constructOrClass: object | Function): string {\n const cls = constructClass(constructOrClass);\n return cls.type ?? cls.name ?? \"AnonymousConstruct\";\n}\n\nexport function getConstructLabel(constructOrClass: object | Function): string {\n const instanceLabel = typeof constructOrClass === \"object\"\n && \"label\" in constructOrClass\n && typeof (constructOrClass as { label?: unknown }).label === \"string\"\n ? (constructOrClass as { label: string }).label\n : undefined;\n if (instanceLabel) return instanceLabel;\n const cls = constructClass(constructOrClass);\n return cls.label ?? labelFromType(getConstructType(constructOrClass));\n}\n\nexport function getToolName(toolOrClass: HarnessTool | HarnessToolClass): string {\n if (typeof toolOrClass === \"object\" && typeof toolOrClass.name === \"string\") return toolOrClass.name;\n const cls = constructClass(toolOrClass) as ConstructClass & { readonly name?: string };\n return cls.name ?? snakeFromType(getConstructType(toolOrClass));\n}\n\nexport function getRoleName(role: HarnessRoleDefinition): string {\n return role.name ?? role.nativeRole ?? snakeFromType(getConstructType(role));\n}\n\nexport function modeSummary(mode: HarnessMode): HarnessModeSummary {\n return {\n type: getConstructType(mode),\n label: getConstructLabel(mode),\n };\n}\n\nexport function contextProviderSummary(\n provider: HarnessContextProvider,\n options?: JsonObject,\n): ContextProviderSummary {\n return {\n type: getConstructType(provider),\n label: getConstructLabel(provider),\n options,\n };\n}\n\nexport function isConstructInstance<TBase extends abstract new (...args: any[]) => unknown>(\n value: unknown,\n BaseClass: TBase,\n): value is InstanceType<TBase> {\n return value instanceof BaseClass;\n}\n\nexport function isModeInstance(value: unknown): value is HarnessMode {\n return isConstructInstance(value, HarnessModeBase);\n}\n\nexport function isToolInstance(value: unknown): value is HarnessTool {\n return isConstructInstance(value, HarnessToolBase);\n}\n\nexport function isContextProviderInstance(value: unknown): value is HarnessContextProvider {\n return isConstructInstance(value, HarnessContextProviderBase);\n}\n\nexport function isRoleInstance(value: unknown): value is HarnessRoleDefinition {\n return isConstructInstance(value, HarnessRoleBase);\n}\n\nexport function isHookInstance(value: unknown): value is HarnessHook {\n return isConstructInstance(value, HarnessHookBase);\n}\n\nfunction isClassLike(value: unknown): value is Function {\n return typeof value === \"function\" && typeof value.prototype === \"object\";\n}\n\nexport function isModeClass(value: unknown): value is HarnessModeClass {\n return isClassLike(value) && HarnessModeBase.prototype.isPrototypeOf(value.prototype);\n}\n\nexport function isToolClass(value: unknown): value is HarnessToolClass {\n return isClassLike(value) && HarnessToolBase.prototype.isPrototypeOf(value.prototype);\n}\n\nexport function isRoleClass(value: unknown): value is HarnessRoleClass {\n return isClassLike(value) && HarnessRoleBase.prototype.isPrototypeOf(value.prototype);\n}\n\nexport function isContextProviderClass(value: unknown): value is HarnessContextProviderClass {\n return isClassLike(value) && HarnessContextProviderBase.prototype.isPrototypeOf(value.prototype);\n}\n\nexport function modeMatchesSelector(mode: HarnessMode, selector: HarnessModeSelector | string): boolean {\n if (typeof selector === \"string\") return getConstructType(mode) === selector;\n if (isModeClass(selector)) return mode instanceof selector || getConstructType(mode) === getConstructType(selector);\n return mode === selector || mode.constructor === selector.constructor || getConstructType(mode) === getConstructType(selector);\n}\n\nexport function toolMatchesSelector(tool: HarnessTool, selector: HarnessToolSelector | string): boolean {\n if (typeof selector === \"string\") return getToolName(tool) === selector || getConstructType(tool) === selector;\n if (isToolClass(selector)) return tool instanceof selector || getConstructType(tool) === getConstructType(selector);\n return tool === selector || tool.constructor === selector.constructor || getConstructType(tool) === getConstructType(selector);\n}\n\nexport function roleMatchesSelector(role: HarnessRoleDefinition, selector: HarnessRoleSelector | string): boolean {\n if (typeof selector === \"string\") {\n return getRoleName(role) === selector || getConstructType(role) === selector || role.nativeRole === selector;\n }\n if (isRoleClass(selector)) return role instanceof selector || getConstructType(role) === getConstructType(selector);\n return role === selector || role.constructor === selector.constructor || getConstructType(role) === getConstructType(selector);\n}\n\nexport function contextProviderMatchesSelector(\n provider: HarnessContextProvider,\n selector: HarnessContextProviderSelector | string,\n): boolean {\n if (typeof selector === \"string\") return getConstructType(provider) === selector;\n if (isContextProviderClass(selector)) {\n return provider instanceof selector || getConstructType(provider) === getConstructType(selector);\n }\n return provider === selector\n || provider.constructor === selector.constructor\n || getConstructType(provider) === getConstructType(selector);\n}\n\nexport function hookEventClass(hook: HarnessHook): HarnessEventClass | undefined {\n const eventClass = hook.eventClass;\n if (eventClass) return eventClass;\n const legacyEvents = (hook as { events?: unknown }).events;\n if (legacyEvents !== undefined) {\n throw new Error(\n `Hook '${getConstructType(hook)}' uses the old events array. Extend HarnessHook.for(EventClass) instead.`,\n );\n }\n return undefined;\n}\n\nexport function eventType(eventClass: HarnessEventClass | (abstract new (...args: any[]) => HarnessEvent)): string {\n return getConstructType(eventClass);\n}\n\nexport function isContextProviderBinding(value: unknown): value is ContextProviderBinding {\n return typeof value === \"object\"\n && value !== null\n && \"provider\" in value\n && (isContextProviderInstance((value as { provider?: unknown }).provider)\n || isContextProviderClass((value as { provider?: unknown }).provider));\n}\n\nexport function isContextProviderReference(value: unknown): value is ContextProviderReference {\n return isContextProviderInstance(value) || isContextProviderClass(value) || isContextProviderBinding(value);\n}\n\nexport function assertNoAuthorId(construct: object, kind: string): void {\n if (Object.prototype.hasOwnProperty.call(construct, \"id\")) {\n throw new Error(`${kind} '${getConstructType(construct)}' declares an author id. Use the class type instead.`);\n }\n}\n","import { randomId } from \"./id.js\";\nimport { eventType } from \"./constructs.js\";\nimport { ModelBeforeEvent } from \"./events.js\";\nimport {\n ContextConsume,\n ContextScopes,\n type ContextContribution,\n type ContextContributionInput,\n type ContextEntry,\n type ContextEntryFilter,\n type ContextProviderSummary,\n type ContextRegistrationOptions,\n type ContextSnapshot,\n type HarnessEventClass,\n type HarnessEventRecord,\n} from \"./types.js\";\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction cloneJSON<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nexport class ContextRegistry {\n private snapshots: ContextSnapshot[] = [];\n private currentSnapshot: ContextSnapshot | undefined;\n private entries: ContextEntry[] = [];\n\n get current(): ContextSnapshot | undefined {\n return this.currentSnapshot;\n }\n\n get allEntries(): ContextEntry[] {\n return this.entries;\n }\n\n restore(input: { entries: ContextEntry[]; snapshot?: ContextSnapshot }): void {\n this.entries = cloneJSON(input.entries);\n this.currentSnapshot = input.snapshot ? cloneJSON(input.snapshot) : undefined;\n }\n\n recordSnapshot(snapshot: ContextSnapshot): void {\n this.currentSnapshot = snapshot;\n this.snapshots.push(snapshot);\n }\n\n loadSnapshots(snapshots: ContextSnapshot[]): void {\n this.snapshots = cloneJSON(snapshots);\n this.currentSnapshot = this.snapshots.at(-1);\n }\n\n filter(filter?: ContextEntryFilter): ContextEntry[] {\n let entries = [...this.entries];\n if (filter?.id) entries = entries.filter((entry) => entry.id === filter.id);\n if (filter?.scope) entries = entries.filter((entry) => entry.scope === filter.scope);\n if (filter?.consume) entries = entries.filter((entry) => entry.consume === filter.consume);\n if (filter?.providerId) entries = entries.filter((entry) => entry.contribution.providerId === filter.providerId);\n if (filter?.role) entries = entries.filter((entry) => entry.contribution.authorRole === filter.role || entry.contribution.role === filter.role);\n if (filter?.on) {\n const on = eventType(filter.on);\n entries = entries.filter((entry) => entry.on === on);\n }\n return entries;\n }\n\n entriesFor(eventClass: HarnessEventClass, runId: string, turnId?: string): ContextEntry[] {\n const on = eventType(eventClass);\n return this.entries.filter((entry) =>\n this.isActive(entry, runId, turnId) && (entry.on === on || entry.activatedAt !== undefined)\n );\n }\n\n activateFor(eventClass: HarnessEventClass, record: HarnessEventRecord, runId: string, turnId?: string): void {\n const on = eventType(eventClass);\n this.entries = this.entries.map((entry) => {\n if (entry.on !== on || entry.activatedAt !== undefined || !this.isActive(entry, runId, turnId)) return entry;\n return {\n ...entry,\n activatedAt: record.at,\n activatedByEventId: record.id,\n activatedByEventType: record.type,\n };\n });\n }\n\n consume(entries: ContextEntry[]): void {\n const consumed = new Set(entries.filter((entry) => entry.consume === ContextConsume.Once).map((entry) => entry.id));\n if (!consumed.size) return;\n this.entries = this.entries.filter((entry) => !consumed.has(entry.id));\n }\n\n expireScope(scope: ContextScopes, turnId?: string): void {\n this.entries = this.entries.filter((entry) => {\n if (entry.scope !== scope) return true;\n if (scope === ContextScopes.Turn && turnId) return entry.turnId !== turnId;\n return false;\n });\n }\n\n addContribution(input: {\n contribution: ContextContribution;\n options?: ContextRegistrationOptions;\n runId: string;\n turnId?: string;\n modeId: string;\n }): ContextEntry {\n const options = input.options ?? {};\n const entry: ContextEntry = {\n id: options.id ?? randomId(),\n scope: options.scope ?? ContextScopes.Run,\n on: eventType(options.on ?? ModelBeforeEvent),\n consume: options.consume ?? ContextConsume.Once,\n createdAt: nowIso(),\n runId: input.runId,\n turnId: input.turnId,\n modeId: input.modeId,\n contribution: input.contribution,\n metadata: options.metadata,\n };\n\n if (options.replace) {\n this.entries = this.entries.filter((candidate) => candidate.id !== entry.id);\n } else if (this.entries.some((candidate) => candidate.id === entry.id)) {\n throw new Error(`Context entry '${entry.id}' already exists. Use replace: true to overwrite it.`);\n }\n\n this.entries.push(entry);\n return cloneJSON(entry);\n }\n\n remove(id: string): boolean {\n const before = this.entries.length;\n this.entries = this.entries.filter((entry) => entry.id !== id);\n return this.entries.length !== before;\n }\n\n clear(filter?: ContextEntryFilter): number {\n const targets = new Set(this.filter(filter).map((entry) => entry.id));\n this.entries = this.entries.filter((entry) => !targets.has(entry.id));\n return targets.size;\n }\n\n normalizeProviderInput(\n input: ContextContributionInput,\n options: ContextRegistrationOptions | undefined,\n provider: ContextProviderSummary | undefined,\n normalize: (\n input: ContextContributionInput,\n context: { providerId?: string; providerLabel?: string },\n ) => ContextContribution,\n runId: string,\n turnId: string | undefined,\n modeId: string,\n ): ContextEntry {\n return this.addContribution({\n contribution: normalize(input, {\n providerId: provider?.type,\n providerLabel: provider?.label,\n }),\n options,\n runId,\n turnId,\n modeId,\n });\n }\n\n private isActive(entry: ContextEntry, runId: string, turnId?: string): boolean {\n if (entry.scope === ContextScopes.Session) return true;\n if (entry.scope === ContextScopes.Run) return entry.runId === runId;\n if (entry.scope === ContextScopes.Turn) return entry.turnId === turnId;\n return false;\n }\n}\n","import { summarizeValue } from \"../logging/index.js\";\nimport type { HarnessSandbox, SandboxExecInput, SandboxExecResult } from \"./sandbox.js\";\nimport { HarnessSandboxSession } from \"./sandbox.js\";\n\nexport class SandboxManager {\n private session: HarnessSandboxSession | undefined;\n\n constructor(\n private readonly input: {\n sandbox: HarnessSandbox;\n sessionId: string;\n agentKey: string;\n workDir: string;\n resources: Record<string, unknown>;\n getRunId(): string;\n getOutputDir(): string | undefined;\n logOpened(fields: { sandboxId: string; workDir: string }): void;\n logClosed(fields: { sandboxId: string }): void;\n logExecStarted(fields: {\n sandboxId: string;\n command: unknown;\n cwd?: string;\n timeoutMs?: number;\n }): void;\n logExecCompleted(fields: {\n sandboxId: string;\n exitCode: number | null;\n signal?: string;\n timedOut?: boolean;\n durationMs: number;\n }): void;\n logExecFailed(fields: { sandboxId: string; error: unknown; durationMs: number }): void;\n },\n ) {}\n\n get current(): HarnessSandboxSession | undefined {\n return this.session;\n }\n\n async ensureOpen(): Promise<HarnessSandboxSession> {\n if (this.session) return this.session;\n const opened = await this.input.sandbox.open({\n sessionId: this.input.sessionId,\n runId: this.input.getRunId(),\n agentKey: this.input.agentKey,\n workDir: this.input.workDir,\n outputDir: this.input.getOutputDir(),\n resources: this.input.resources,\n });\n this.session = this.wrap(opened);\n this.input.logOpened({ sandboxId: opened.id, workDir: opened.workDir });\n return this.session;\n }\n\n async close(): Promise<void> {\n const sandbox = this.session;\n this.session = undefined;\n if (!sandbox) return;\n await sandbox.close?.();\n this.input.logClosed({ sandboxId: sandbox.id });\n }\n\n private wrap(base: HarnessSandboxSession): HarnessSandboxSession {\n const input = this.input;\n return new class LoggedHarnessSandboxSession extends HarnessSandboxSession {\n readonly id = base.id;\n readonly workDir = base.workDir;\n\n async exec(commandInput: SandboxExecInput): Promise<SandboxExecResult> {\n const started = performance.now();\n input.logExecStarted({\n sandboxId: base.id,\n command: summarizeValue(commandInput.command),\n cwd: commandInput.cwd,\n timeoutMs: commandInput.timeoutMs,\n });\n try {\n const result = await base.exec(commandInput);\n input.logExecCompleted({\n sandboxId: base.id,\n exitCode: result.exitCode,\n signal: result.signal,\n timedOut: result.timedOut,\n durationMs: result.durationMs,\n });\n return result;\n } catch (error) {\n input.logExecFailed({\n sandboxId: base.id,\n error,\n durationMs: Math.round(performance.now() - started),\n });\n throw error;\n }\n }\n\n async close(): Promise<void> {\n await base.close?.();\n }\n }();\n }\n}\n","import type {\n AgentMessage,\n ContextSnapshot,\n EventCursor,\n HarnessEventRecord,\n HarnessSnapshot,\n RunMetrics,\n TranscriptBranch,\n TranscriptCursor,\n} from \"./types.js\";\nimport { HarnessSessionStorage } from \"./storage.js\";\nimport type { HarnessRunStore, HarnessRunStorage, RunCursorState } from \"./storage.js\";\n\nexport interface StoredRuntimeState {\n snapshots: HarnessSnapshot[];\n contextSnapshots: ContextSnapshot[];\n transcript: AgentMessage[];\n events: HarnessEventRecord[];\n cursors?: RunCursorState;\n}\n\nexport class RunStorageCoordinator {\n private runIdValue: string;\n private store: HarnessRunStore | undefined;\n private storePromise: Promise<HarnessRunStore> | undefined;\n private initialized = false;\n private runtimeLoaded = false;\n private createRunOnOpen: boolean;\n\n constructor(\n private readonly input: {\n storage: HarnessRunStorage | HarnessSessionStorage;\n runId: string;\n sessionId: string;\n agentKey: string;\n outputDir?: string;\n mode(): string;\n openExistingRun?: boolean;\n logOpened(fields: { storageId: string; runId: string; runDir?: string }): void;\n logFailed(fields: { operation: string; error: unknown }): void;\n },\n ) {\n this.runIdValue = input.runId;\n this.createRunOnOpen = !input.openExistingRun;\n }\n\n get runDir(): string | undefined {\n return this.store?.runDir;\n }\n\n async ensureInitialized(): Promise<void> {\n if (this.initialized) return;\n await this.write(\"init\", (store) => store.init());\n this.initialized = true;\n }\n\n async loadRuntimeState(): Promise<StoredRuntimeState | undefined> {\n if (this.runtimeLoaded) return undefined;\n this.runtimeLoaded = true;\n\n return {\n snapshots: await this.write(\"load_snapshots\", (store) => store.loadSnapshots()),\n contextSnapshots: await this.write(\"load_context_snapshots\", (store) => store.loadContextSnapshots()),\n transcript: await this.write(\"load_transcript\", (store) => store.loadTranscript()),\n events: await this.write(\"load_events\", (store) => store.loadEvents()),\n cursors: await this.write(\"load_cursors\", (store) => store.loadCursors()),\n };\n }\n\n async saveTranscript(messages: AgentMessage[]): Promise<void> {\n await this.write(\"save_transcript\", (store) => store.saveTranscript(messages));\n }\n\n async saveMetrics(metrics: RunMetrics): Promise<void> {\n await this.write(\"save_metrics\", (store) => store.saveMetrics(metrics));\n }\n\n async saveSnapshot(snapshot: HarnessSnapshot): Promise<void> {\n await this.write(\"save_snapshot\", (store) => store.saveSnapshot(snapshot));\n }\n\n async deleteSnapshot(id: string): Promise<void> {\n await this.write(\"delete_snapshot\", (store) => store.deleteSnapshot(id));\n }\n\n async saveContextSnapshot(snapshot: ContextSnapshot): Promise<void> {\n await this.write(\"save_context_snapshot\", (store) => store.saveContextSnapshot(snapshot));\n }\n\n async recordEvent(event: HarnessEventRecord): Promise<void> {\n await this.write(\"record_event\", (store) => store.recordEvent(event));\n }\n\n async saveCursors(cursors: {\n transcriptCursor: TranscriptCursor;\n eventCursor: EventCursor;\n branches: TranscriptBranch[];\n }): Promise<void> {\n await this.write(\"save_cursors\", (store) => store.saveCursors(cursors));\n }\n\n async beginRun(runId: string): Promise<void> {\n await this.close();\n this.runIdValue = runId;\n this.store = undefined;\n this.storePromise = undefined;\n this.initialized = false;\n this.runtimeLoaded = false;\n this.createRunOnOpen = true;\n }\n\n async close(): Promise<void> {\n const store = this.store ?? (this.storePromise ? await this.storePromise : undefined);\n await store?.close?.();\n }\n\n private async createStore(runId: string): Promise<HarnessRunStore> {\n try {\n if (this.input.storage instanceof HarnessSessionStorage && this.createRunOnOpen) {\n await this.input.storage.createRun({\n runId,\n sessionId: this.input.sessionId,\n agentKey: this.input.agentKey,\n outputDir: this.input.outputDir,\n mode: this.input.mode(),\n });\n }\n this.createRunOnOpen = false;\n const store = await this.input.storage.openRun({\n runId,\n sessionId: this.input.sessionId,\n agentKey: this.input.agentKey,\n outputDir: this.input.outputDir,\n });\n this.input.logOpened({ storageId: this.input.storage.id, runId, runDir: store.runDir });\n return store;\n } catch (error) {\n this.input.logFailed({ operation: \"open_run\", error });\n throw error;\n }\n }\n\n private async getStore(): Promise<HarnessRunStore> {\n if (this.store) return this.store;\n this.storePromise ??= this.createStore(this.runIdValue);\n this.store = await this.storePromise;\n return this.store;\n }\n\n private async write<T>(\n operation: string,\n write: (store: HarnessRunStore) => T | Promise<T>,\n ): Promise<T> {\n try {\n return await write(await this.getStore());\n } catch (error) {\n this.input.logFailed({ operation, error });\n throw error;\n }\n }\n}\n","import { randomId } from \"./id.js\";\nimport { eventType } from \"./constructs.js\";\nimport { HarnessEvent, type HarnessEventClass, type HarnessEventQuery, type HarnessEventRecord, type HarnessEventSource, type RunnerEventListener } from \"./types.js\";\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nclass RehydratedHarnessEvent<TPayload = unknown> extends HarnessEvent<TPayload> {}\n\nexport class EventRecorder {\n private events: HarnessEvent[] = [];\n private eventSeq = 0;\n private readonly listeners = new Set<RunnerEventListener>();\n\n get count(): number {\n return this.events.length;\n }\n\n subscribe(listener: RunnerEventListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n load(records: HarnessEventRecord[]): void {\n if (records.length === 0) return;\n this.events = records.map((record) => new RehydratedHarnessEvent(record));\n this.eventSeq = Math.max(0, ...records.map((event) => event.seq));\n }\n\n has(id: string): boolean {\n return this.events.some((event) => event.id === id);\n }\n\n latestForBranch(branchId: string): HarnessEvent | undefined {\n let latest: HarnessEvent | undefined;\n for (const event of this.events) {\n if (event.record.branchId !== branchId) continue;\n if (!latest || event.record.seq > latest.record.seq) latest = event;\n }\n return latest;\n }\n\n record(input: {\n eventClass: HarnessEventClass;\n type: string;\n payload: unknown;\n branchId: string;\n source: HarnessEventSource;\n runId: string;\n turnId?: string;\n modeId: string;\n correlationId?: string;\n causationId?: string;\n metadata?: Record<string, unknown>;\n }): HarnessEvent {\n const record: HarnessEventRecord = {\n id: randomId(),\n seq: ++this.eventSeq,\n branchId: input.branchId,\n type: input.type,\n eventClassId: input.type,\n at: nowIso(),\n source: input.source,\n payload: input.payload,\n runId: input.runId,\n turnId: input.turnId,\n modeId: input.modeId,\n correlationId: input.correlationId,\n causationId: input.causationId,\n hidden: true,\n metadata: input.metadata,\n };\n\n const event = new input.eventClass(record);\n this.events.push(event);\n return event;\n }\n\n query<TPayload = unknown>(\n filter: HarnessEventQuery<TPayload> | undefined,\n activeSegments: Map<string, number>,\n ): HarnessEvent<TPayload>[] {\n let events = this.events as HarnessEvent<TPayload>[];\n if (!filter?.includeInactive) {\n events = events.filter((event) => {\n const maxSeq = activeSegments.get(event.record.branchId);\n return maxSeq !== undefined && event.record.seq <= maxSeq;\n });\n }\n if (filter?.event) events = events.filter((event) => event.type === eventType(filter.event!));\n if (filter?.type) events = events.filter((event) => event.type === filter.type);\n if (filter?.sourceKind) events = events.filter((event) => event.record.source.kind === filter.sourceKind);\n if (filter?.since) events = events.filter((event) => event.at >= filter.since!);\n if (filter?.until) events = events.filter((event) => event.at <= filter.until!);\n if (typeof filter?.limit === \"number\" && filter.limit > 0) events = events.slice(-filter.limit);\n return events;\n }\n\n async notify(record: HarnessEventRecord): Promise<void> {\n for (const listener of this.listeners) await listener(record);\n }\n}\n","import { randomId } from \"./id.js\";\nimport type {\n AgentMessage,\n AgentMessageRole,\n EventCursor,\n HarnessEvent,\n HarnessEventRecord,\n TranscriptBranch,\n TranscriptCursor,\n TranscriptQuery,\n TranscriptSeekTarget,\n} from \"./types.js\";\n\nconst rootBranchId = \"main\";\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction cloneJSON<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction createTranscriptCursor(input?: {\n branchId?: string;\n headMessageId?: string;\n seq?: number;\n}): TranscriptCursor {\n return {\n id: randomId(),\n branchId: input?.branchId ?? rootBranchId,\n headMessageId: input?.headMessageId,\n seq: input?.seq ?? 0,\n updatedAt: nowIso(),\n };\n}\n\nfunction createEventCursor(input?: {\n branchId?: string;\n headEventId?: string;\n seq?: number;\n}): EventCursor {\n return {\n id: randomId(),\n branchId: input?.branchId ?? rootBranchId,\n headEventId: input?.headEventId,\n seq: input?.seq ?? 0,\n updatedAt: nowIso(),\n };\n}\n\nexport interface TranscriptRoleInfo {\n authorRole?: string;\n roleType?: string;\n}\n\nexport class TranscriptManager {\n private messages: AgentMessage[] = [];\n private messageSeq = 0;\n private transcriptCursor: TranscriptCursor = createTranscriptCursor();\n private eventCursor: EventCursor = createEventCursor();\n private readonly branches = new Map<string, TranscriptBranch>([\n [rootBranchId, { id: rootBranchId, createdAt: nowIso() }],\n ]);\n\n get count(): number {\n return this.messages.length;\n }\n\n get activeTranscriptCursor(): TranscriptCursor {\n return this.transcriptCursor;\n }\n\n get activeEventCursor(): EventCursor {\n return this.eventCursor;\n }\n\n get allMessages(): AgentMessage[] {\n return this.messages;\n }\n\n get allBranches(): TranscriptBranch[] {\n return [...this.branches.values()];\n }\n\n addBranches(branches: TranscriptBranch[]): void {\n for (const branch of branches) {\n if (!this.branches.has(branch.id)) this.branches.set(branch.id, cloneJSON(branch));\n }\n }\n\n loadTranscript(messages: AgentMessage[]): void {\n if (messages.length === 0) return;\n this.messages = cloneJSON(messages);\n this.messageSeq = Math.max(0, ...messages.map((message) => message.seq));\n }\n\n loadCursors(input: {\n transcriptCursor: TranscriptCursor;\n eventCursor: EventCursor;\n branches?: TranscriptBranch[];\n eventExists(headEventId: string): boolean;\n }): void {\n this.addBranches(input.branches ?? []);\n const transcriptHead = input.transcriptCursor.headMessageId;\n const eventHead = input.eventCursor.headEventId;\n if (!transcriptHead || this.messages.some((message) => message.id === transcriptHead)) {\n this.transcriptCursor = cloneJSON(input.transcriptCursor);\n }\n if (!eventHead || input.eventExists(eventHead)) {\n this.eventCursor = cloneJSON(input.eventCursor);\n }\n }\n\n restoreCursors(input: {\n transcriptCursor: TranscriptCursor;\n eventCursor: EventCursor;\n branches?: TranscriptBranch[];\n }): void {\n this.addBranches(input.branches ?? []);\n this.transcriptCursor = cloneJSON(input.transcriptCursor);\n this.eventCursor = cloneJSON(input.eventCursor);\n }\n\n appendMessage(input: {\n role: AgentMessageRole;\n content: unknown;\n modeId?: string;\n turnId?: string;\n metadata?: Record<string, unknown>;\n roleInfo?: TranscriptRoleInfo;\n id?: string;\n branchId?: string;\n createdAt?: string;\n hidden?: boolean;\n }): AgentMessage {\n const branchId = input.branchId ?? this.transcriptCursor.branchId;\n const message: AgentMessage = {\n id: input.id ?? randomId(),\n seq: ++this.messageSeq,\n branchId,\n parentMessageId: this.transcriptCursor.headMessageId,\n role: input.role,\n authorRole: input.roleInfo?.authorRole,\n roleType: input.roleInfo?.roleType,\n content: input.content,\n createdAt: input.createdAt ?? nowIso(),\n modeId: input.modeId,\n turnId: input.turnId,\n hidden: input.hidden,\n eventCursor: cloneJSON(this.eventCursor),\n metadata: input.metadata,\n };\n this.messages.push(message);\n this.transcriptCursor = createTranscriptCursor({\n branchId,\n headMessageId: message.id,\n seq: message.seq,\n });\n return message;\n }\n\n markMessageEventCursor(messageId: string): boolean {\n const message = this.messages.find((candidate) => candidate.id === messageId);\n if (!message) return false;\n message.eventCursor = cloneJSON(this.eventCursor);\n return true;\n }\n\n ensureBranchForAppend(): void {\n const cursor = this.transcriptCursor;\n const latest = this.branchLatestMessage(cursor.branchId);\n if (!latest || latest.id === cursor.headMessageId) return;\n\n const branchId = randomId();\n const branch: TranscriptBranch = {\n id: branchId,\n createdAt: nowIso(),\n parentBranchId: cursor.branchId,\n parentMessageId: cursor.headMessageId,\n parentMessageSeq: cursor.seq,\n parentEventSeq: this.eventCursor.seq,\n };\n this.branches.set(branchId, branch);\n this.transcriptCursor = createTranscriptCursor({\n branchId,\n headMessageId: cursor.headMessageId,\n seq: cursor.seq,\n });\n this.eventCursor = createEventCursor({\n branchId,\n headEventId: this.eventCursor.headEventId,\n seq: this.eventCursor.seq,\n });\n }\n\n ensureBranchForEventAppend(latestEvent: HarnessEvent | undefined): void {\n if (!latestEvent || latestEvent.record.seq <= this.eventCursor.seq) return;\n\n const branchId = randomId();\n const branch: TranscriptBranch = {\n id: branchId,\n createdAt: nowIso(),\n parentBranchId: this.eventCursor.branchId,\n parentMessageId: this.transcriptCursor.headMessageId,\n parentMessageSeq: this.transcriptCursor.seq,\n parentEventSeq: this.eventCursor.seq,\n };\n this.branches.set(branchId, branch);\n this.transcriptCursor = createTranscriptCursor({\n branchId,\n headMessageId: this.transcriptCursor.headMessageId,\n seq: this.transcriptCursor.seq,\n });\n this.eventCursor = createEventCursor({\n branchId,\n headEventId: this.eventCursor.headEventId,\n seq: this.eventCursor.seq,\n });\n }\n\n advanceEventCursor(record: HarnessEventRecord): void {\n this.eventCursor = createEventCursor({\n branchId: record.branchId,\n headEventId: record.id,\n seq: record.seq,\n });\n }\n\n filter(options?: TranscriptQuery, currentTurnId?: string): AgentMessage[] {\n const activeIds = options?.includeInactive ? undefined : this.activeMessageIds();\n let messages = activeIds\n ? this.messages.filter((message) => activeIds.has(message.id))\n : [...this.messages];\n if (!options?.includeHidden) messages = messages.filter((message) => !message.hidden);\n if (options?.beforeCurrentTurn && currentTurnId) {\n messages = messages.filter((message) => message.turnId !== currentTurnId);\n }\n if (options?.roles?.length) {\n const allowed = new Set(options.roles);\n messages = messages.filter((message) => allowed.has(message.role));\n }\n messages.sort((a, b) => a.seq - b.seq);\n if (typeof options?.limit === \"number\" && options.limit > 0) messages = messages.slice(-options.limit);\n return messages;\n }\n\n resolveSeekTarget(target: TranscriptSeekTarget): {\n transcriptCursor: TranscriptCursor;\n eventCursor: EventCursor;\n } {\n if (target === \"start\") {\n return {\n transcriptCursor: createTranscriptCursor({ branchId: rootBranchId, seq: 0 }),\n eventCursor: createEventCursor({ branchId: rootBranchId, seq: 0 }),\n };\n }\n\n if (target === \"latest\") {\n const transcriptCursor = this.latestCursorForBranch(this.transcriptCursor.branchId);\n const head = transcriptCursor.headMessageId\n ? this.messages.find((message) => message.id === transcriptCursor.headMessageId)\n : undefined;\n return {\n transcriptCursor,\n eventCursor: head ? this.eventCursorForMessage(head) : this.eventCursor,\n };\n }\n\n if (\"messageId\" in target) {\n const message = this.messages.find((candidate) => candidate.id === target.messageId);\n if (!message) throw new Error(`Transcript message '${target.messageId}' was not found.`);\n return {\n transcriptCursor: createTranscriptCursor({\n branchId: message.branchId,\n headMessageId: message.id,\n seq: message.seq,\n }),\n eventCursor: this.eventCursorForMessage(message),\n };\n }\n\n const head = target.cursor.headMessageId\n ? this.messages.find((message) => message.id === target.cursor.headMessageId)\n : undefined;\n return {\n transcriptCursor: cloneJSON(target.cursor),\n eventCursor: head ? this.eventCursorForMessage(head) : createEventCursor({\n branchId: target.cursor.branchId,\n seq: 0,\n }),\n };\n }\n\n applyResolvedSeek(resolved: { transcriptCursor: TranscriptCursor; eventCursor: EventCursor }): void {\n this.transcriptCursor = resolved.transcriptCursor;\n this.eventCursor = resolved.eventCursor;\n }\n\n activeEventSegments(cursor: EventCursor = this.eventCursor): Map<string, number> {\n const segments = new Map<string, number>();\n let branchId: string | undefined = cursor.branchId;\n let maxSeq = cursor.seq;\n\n while (branchId) {\n const existing = segments.get(branchId);\n segments.set(branchId, existing === undefined ? maxSeq : Math.max(existing, maxSeq));\n const branch = this.branches.get(branchId);\n if (!branch?.parentBranchId) break;\n branchId = branch.parentBranchId;\n maxSeq = branch.parentEventSeq ?? 0;\n }\n\n return segments;\n }\n\n private activeMessageIds(cursor: TranscriptCursor = this.transcriptCursor): Set<string> {\n const byId = new Map(this.messages.map((message) => [message.id, message]));\n const active = new Set<string>();\n let current = cursor.headMessageId ? byId.get(cursor.headMessageId) : undefined;\n while (current) {\n if (current.seq > cursor.seq) break;\n active.add(current.id);\n current = current.parentMessageId ? byId.get(current.parentMessageId) : undefined;\n }\n return active;\n }\n\n private branchLatestMessage(branchId: string): AgentMessage | undefined {\n let latest: AgentMessage | undefined;\n for (const message of this.messages) {\n if (message.branchId !== branchId) continue;\n if (!latest || message.seq > latest.seq) latest = message;\n }\n return latest;\n }\n\n private eventCursorForMessage(message: AgentMessage): EventCursor {\n return message.eventCursor\n ? cloneJSON(message.eventCursor)\n : createEventCursor({\n branchId: message.branchId,\n seq: this.eventCursor.seq,\n headEventId: this.eventCursor.headEventId,\n });\n }\n\n private latestCursorForBranch(branchId: string): TranscriptCursor {\n const latest = this.branchLatestMessage(branchId);\n const branch = this.branches.get(branchId);\n return createTranscriptCursor({\n branchId,\n headMessageId: latest?.id ?? branch?.parentMessageId,\n seq: latest?.seq ?? branch?.parentMessageSeq ?? 0,\n });\n }\n}\n","import {\n getConstructLabel,\n getConstructType,\n getRoleName,\n isRoleClass,\n isRoleInstance,\n roleMatchesSelector,\n} from \"./constructs.js\";\nimport {\n NativeRoles,\n RoleTargets,\n type AgentMessage,\n type AgentMessageRole,\n type HarnessRoleDefinition,\n type HarnessRoleSelector,\n type HarnessRoleSummary,\n} from \"./types.js\";\n\nexport interface ResolvedRole {\n role: AgentMessageRole;\n authorRole: string;\n roleType: string;\n target: HarnessRoleDefinition[\"target\"];\n definition?: HarnessRoleDefinition;\n}\n\nexport class RoleResolver {\n constructor(\n private readonly roles: HarnessRoleDefinition[],\n private readonly input: {\n modelProviderId: string;\n supportsRole?: (roleId: string) => boolean;\n },\n ) {}\n\n resolve(selector: HarnessRoleSelector | string): ResolvedRole {\n const definition = this.definitionFromSelector(selector);\n if (!definition) {\n if (typeof selector !== \"string\") throw new Error(`Unknown role '${getConstructType(selector)}'.`);\n return {\n role: selector as AgentMessageRole,\n authorRole: selector,\n roleType: selector,\n target: selector === NativeRoles.System ? RoleTargets.System : RoleTargets.Messages,\n };\n }\n\n return {\n role: (definition.nativeRole ?? getRoleName(definition)) as AgentMessageRole,\n authorRole: getRoleName(definition),\n roleType: getConstructType(definition),\n target: definition.target,\n definition,\n };\n }\n\n assertModelProviderSupportsMessages(messages: AgentMessage[]): void {\n for (const message of messages) {\n if (message.hidden || message.role === \"event\") continue;\n this.assertModelProviderSupportsRole(message.role);\n }\n }\n\n summary(role: HarnessRoleDefinition): HarnessRoleSummary {\n return {\n type: getConstructType(role),\n name: getRoleName(role),\n label: getConstructLabel(role),\n target: role.target,\n nativeRole: role.nativeRole,\n default: role.default,\n description: role.description,\n };\n }\n\n private definitionFromSelector(selector: HarnessRoleSelector | string): HarnessRoleDefinition | undefined {\n const registered = this.roles.find((role) => roleMatchesSelector(role, selector));\n if (registered) return registered;\n if (typeof selector === \"string\") return undefined;\n if (isRoleInstance(selector)) return selector;\n if (isRoleClass(selector)) {\n try {\n return new (selector as new () => HarnessRoleDefinition)();\n } catch {\n throw new Error(`Role '${getConstructType(selector)}' must be registered as an instance or have a zero-argument constructor.`);\n }\n }\n return undefined;\n }\n\n private assertModelProviderSupportsRole(role: AgentMessageRole): void {\n const supportsRole = this.input.supportsRole;\n if (supportsRole && !supportsRole(role)) {\n throw new Error(`Model provider '${this.input.modelProviderId}' does not support native role '${role}'.`);\n }\n }\n}\n","import { summarizeValue, type HarnessLogClass, type HarnessLogContext } from \"../logging/index.js\";\nimport { createToolErrorPayload, createToolErrorResult, type ToolInvalidField } from \"../logging/tool-errors.js\";\nimport { normalizeSchema, type SchemaIssue } from \"../schema/index.js\";\nimport {\n ErrorEvent,\n ToolApprovalRequestedEvent,\n ToolApprovalResolvedEvent,\n ToolEndEvent,\n ToolStartEvent,\n} from \"./events.js\";\nimport {\n ToolApprovalRequestedLog,\n ToolApprovalResolvedLog,\n ToolArgsEmptyLog,\n ToolCompletedLog,\n ToolFailedLog,\n ToolInvalidSchemaLog,\n ToolStartedLog,\n} from \"../logging/runtime-logs.js\";\nimport type {\n AgentActionSession,\n AgentToolDefinition,\n AgentToolResult,\n HarnessErrorCode,\n HarnessErrorPolicy,\n HarnessErrorShape,\n HarnessEvent,\n HarnessEventClass,\n HarnessEventEmitOptions,\n HarnessEventSource,\n RunMetrics,\n ToolApprovalDecision,\n ToolApprovalMode,\n ToolApprovalRequest,\n ToolCallMetric,\n} from \"./types.js\";\nimport { randomId } from \"./id.js\";\nimport { annotateHarnessError, normalizeHarnessError, sanitizeHarnessError } from \"./errors.js\";\n\ntype SchemaParseResult =\n | { ok: true; data: unknown }\n | { ok: false; error: unknown; issues: SchemaIssue[]; invalidFields: ToolInvalidField[] };\n\nfunction invalidFieldsFromIssues(issues: SchemaIssue[]): ToolInvalidField[] {\n return issues.map((entry) => ({\n path: entry.path,\n message: entry.message,\n code: entry.code,\n expected: entry.expected,\n received: entry.received,\n }));\n}\n\nfunction safeParseWithSchema(schema: unknown, payload: unknown): SchemaParseResult {\n const normalized = normalizeSchema(schema);\n const result = normalized.safeParse(payload);\n if (result.success) return { ok: true, data: result.data };\n const issues = normalized.issuesFromError(result.error);\n return { ok: false, error: result.error, issues, invalidFields: invalidFieldsFromIssues(issues) };\n}\n\nfunction isEmptyToolArgs(args: unknown): boolean {\n return args == null\n || (typeof args === \"object\" && !Array.isArray(args) && Object.keys(args as Record<string, unknown>).length === 0);\n}\n\nfunction ensureToolMetric(metrics: RunMetrics, name: string): ToolCallMetric {\n const existing = metrics.tools[name];\n if (existing) return existing;\n const metric = { name, count: 0, errorCount: 0, totalDurationMs: 0 };\n metrics.tools[name] = metric;\n return metric;\n}\n\nfunction toolResultErrorCode(value: unknown): HarnessErrorCode {\n return value === \"tool.args.invalid_schema\"\n || value === \"tool.approval.denied\"\n || value === \"sandbox.exec.failed\"\n || value === \"tool.failed\"\n ? value\n : \"tool.failed\";\n}\n\nexport class ToolExecutor {\n private depth = 0;\n\n constructor(\n private readonly input: {\n getMetrics(): RunMetrics;\n getCurrentMode(): string;\n getToolApprovalMode(): ToolApprovalMode | undefined;\n approveTool?(request: ToolApprovalRequest): boolean | ToolApprovalDecision | Promise<boolean | ToolApprovalDecision>;\n errorPolicy?: HarnessErrorPolicy;\n ensureSandboxOpen(): Promise<void>;\n buildActionSession(\n tool: { id?: string; name: string },\n source: HarnessEventSource,\n correlationId?: string,\n causationId?: string,\n ): AgentActionSession;\n addToolCallMessage(\n tool: AgentToolDefinition,\n args: unknown,\n toolCallId: string,\n source: HarnessEventSource,\n ): Promise<unknown>;\n addToolResultMessage(tool: AgentToolDefinition, result: AgentToolResult, toolCallId: string): Promise<void>;\n emitInternal(eventClass: HarnessEventClass, payload: unknown, options?: HarnessEventEmitOptions): Promise<HarnessEvent>;\n log<TFields>(\n logClass: HarnessLogClass<TFields>,\n fields: TFields,\n source?: HarnessEventSource,\n correlationId?: string,\n causationId?: string,\n overrides?: Partial<HarnessLogContext>,\n ): void;\n throwIfTurnHandoffRequested(): void;\n },\n ) {}\n\n async execute(input: {\n tool: AgentToolDefinition;\n args: unknown;\n callId?: string;\n source?: HarnessEventSource;\n parentCorrelationId?: string;\n parentCausationId?: string;\n }): Promise<AgentToolResult> {\n if (this.depth > 8) throw new Error(\"Tool invocation depth exceeded.\");\n\n const source = input.source ?? { kind: \"runtime\" };\n const id = input.callId ?? randomId();\n const toolSource: HarnessEventSource = { kind: \"tool\", id, name: input.tool.name };\n const start = performance.now();\n const metrics = this.input.getMetrics();\n const metric = ensureToolMetric(metrics, input.tool.name);\n metric.count++;\n metrics.toolCallCount++;\n await this.input.addToolCallMessage(input.tool, input.args, id, source);\n this.input.log(\n ToolStartedLog,\n { toolName: input.tool.name, args: summarizeValue(input.args), risk: input.tool.risk },\n toolSource,\n id,\n input.parentCausationId ?? input.parentCorrelationId,\n );\n if (isEmptyToolArgs(input.args)) {\n this.input.log(ToolArgsEmptyLog, { toolName: input.tool.name }, toolSource, id, input.parentCausationId ?? input.parentCorrelationId);\n }\n const startEvent = await this.input.emitInternal(ToolStartEvent, { id, name: input.tool.name, args: input.args }, {\n source,\n correlationId: id,\n causationId: input.parentCausationId ?? input.parentCorrelationId,\n });\n const toolEventOptions: HarnessEventEmitOptions = {\n source: toolSource,\n correlationId: id,\n causationId: startEvent.id,\n };\n const callerEventOptions: HarnessEventEmitOptions = {\n source,\n correlationId: id,\n causationId: startEvent.id,\n };\n\n const parsedArgs = safeParseWithSchema(input.tool.inputSchema, input.args);\n if (!parsedArgs.ok) {\n const error = this.toolError({\n error: parsedArgs.error,\n code: \"tool.args.invalid_schema\",\n message: \"Tool arguments did not match schema.\",\n source: toolSource,\n details: { invalidFields: parsedArgs.invalidFields },\n });\n const result = this.structuredToolError({\n toolName: input.tool.name,\n code: \"tool.args.invalid_schema\",\n message: \"Tool arguments did not match schema.\",\n invalidFields: parsedArgs.invalidFields,\n });\n const durationMs = Math.round(performance.now() - start);\n metric.errorCount++;\n metric.totalDurationMs += durationMs;\n metrics.errors.push(sanitizeHarnessError(error, this.input.errorPolicy));\n this.input.log(\n ToolInvalidSchemaLog,\n { toolName: input.tool.name, issues: parsedArgs.issues },\n toolSource,\n id,\n startEvent.id,\n { durationMs },\n );\n await this.input.addToolResultMessage(input.tool, result, id);\n await this.emitToolError(error, toolEventOptions);\n await this.input.emitInternal(ToolEndEvent, { id, name: input.tool.name, durationMs, result }, callerEventOptions);\n this.input.throwIfTurnHandoffRequested();\n return result;\n }\n\n const approved = await this.approveTool(\n {\n id,\n name: input.tool.name,\n args: parsedArgs.data,\n modeId: this.input.getCurrentMode(),\n risk: input.tool.risk,\n permissions: input.tool.permissions,\n approvalTimeoutMs: input.tool.approvalTimeoutMs,\n },\n input.tool,\n parsedArgs.data,\n callerEventOptions,\n );\n if (!approved) {\n const error = this.toolError({\n error: new Error(`Tool '${input.tool.name}' was denied by runner policy.`),\n code: \"tool.approval.denied\",\n message: `Tool '${input.tool.name}' was denied by runner policy.`,\n source: toolSource,\n severity: \"warn\",\n });\n const denied = this.structuredToolError({\n toolName: input.tool.name,\n code: \"tool.approval.denied\",\n message: `Tool '${input.tool.name}' was denied by runner policy.`,\n metadata: { denied: true },\n });\n metric.errorCount++;\n const durationMs = Math.round(performance.now() - start);\n metric.totalDurationMs += durationMs;\n metrics.errors.push(sanitizeHarnessError(error, this.input.errorPolicy));\n this.input.log(ToolFailedLog, {\n toolName: input.tool.name,\n durationMs,\n error,\n result: summarizeValue(denied),\n }, toolSource, id, startEvent.id, { durationMs });\n await this.input.addToolResultMessage(input.tool, denied, id);\n await this.emitToolError(error, toolEventOptions);\n await this.input.emitInternal(ToolEndEvent, { id, name: input.tool.name, durationMs, result: denied }, callerEventOptions);\n this.input.throwIfTurnHandoffRequested();\n return denied;\n }\n\n this.depth++;\n try {\n await this.input.ensureSandboxOpen();\n const executed = await input.tool.execute(parsedArgs.data, this.input.buildActionSession({ id, name: input.tool.name }, toolSource, id, startEvent.id));\n const result = this.ensureStructuredToolErrorResult(input.tool, executed);\n const durationMs = Math.round(performance.now() - start);\n metric.totalDurationMs += durationMs;\n if (result.isError) metric.errorCount++;\n if (result.isError) {\n const errorCode = toolResultErrorCode(result.metadata?.errorCode);\n const error = this.toolError({\n error: new Error(result.content || \"Tool execution failed.\"),\n code: errorCode,\n message: result.content || \"Tool execution failed.\",\n source: toolSource,\n details: result.data,\n });\n metrics.errors.push(sanitizeHarnessError(error, this.input.errorPolicy));\n this.input.log(ToolFailedLog, {\n toolName: input.tool.name,\n durationMs,\n error,\n result: summarizeValue(result),\n }, toolSource, id, startEvent.id, { durationMs });\n } else {\n this.input.log(ToolCompletedLog, {\n toolName: input.tool.name,\n durationMs,\n isError: false,\n result: summarizeValue(result),\n }, toolSource, id, startEvent.id, { durationMs });\n }\n await this.input.addToolResultMessage(input.tool, result, id);\n await this.input.emitInternal(ToolEndEvent, { id, name: input.tool.name, durationMs, result }, callerEventOptions);\n this.input.throwIfTurnHandoffRequested();\n return result;\n } catch (error) {\n const normalized = this.toolError({\n error,\n code: \"tool.failed\",\n message: \"Tool execution failed.\",\n source: toolSource,\n details: { toolName: input.tool.name },\n });\n const result = this.structuredToolError({\n toolName: input.tool.name,\n code: \"tool.failed\",\n message: \"Tool execution failed.\",\n metadata: { error: true },\n });\n const durationMs = Math.round(performance.now() - start);\n metric.errorCount++;\n metric.totalDurationMs += durationMs;\n metrics.errors.push(sanitizeHarnessError(normalized, this.input.errorPolicy));\n this.input.log(ToolFailedLog, {\n toolName: input.tool.name,\n durationMs,\n error: normalized,\n internalError: error,\n }, toolSource, id, startEvent.id, { durationMs });\n await this.input.addToolResultMessage(input.tool, result, id);\n await this.emitToolError(normalized, toolEventOptions);\n await this.input.emitInternal(ToolEndEvent, { id, name: input.tool.name, durationMs, result }, callerEventOptions);\n this.input.throwIfTurnHandoffRequested();\n return result;\n } finally {\n this.depth--;\n }\n }\n\n private structuredToolError(input: {\n toolName: string;\n code: \"tool.args.invalid_schema\" | \"tool.approval.denied\" | \"sandbox.exec.failed\" | \"tool.failed\";\n message: string;\n invalidFields?: ToolInvalidField[];\n metadata?: Record<string, unknown>;\n }): AgentToolResult {\n return createToolErrorResult(input);\n }\n\n private ensureStructuredToolErrorResult(tool: AgentToolDefinition, result: AgentToolResult): AgentToolResult {\n if (!result.isError || result.data !== undefined) return result;\n return {\n ...result,\n data: createToolErrorPayload({\n code: \"tool.failed\",\n message: result.content || \"Tool execution failed.\",\n toolName: tool.name,\n }),\n metadata: {\n ...result.metadata,\n errorCode: result.metadata?.errorCode ?? \"tool.failed\",\n },\n };\n }\n\n private toolError(input: {\n error: unknown;\n code: HarnessErrorCode;\n message: string;\n source: HarnessEventSource;\n severity?: HarnessErrorShape[\"severity\"];\n details?: unknown;\n }): HarnessErrorShape {\n const normalized = normalizeHarnessError(input.error, {\n code: input.code,\n category: input.code === \"tool.approval.denied\" ? \"approval\" : input.code === \"sandbox.exec.failed\" ? \"sandbox\" : \"tool\",\n severity: input.severity ?? (input.code === \"tool.approval.denied\" ? \"warn\" : \"error\"),\n recoverable: true,\n source: input.source,\n message: input.message,\n details: input.details,\n }, this.input.errorPolicy);\n annotateHarnessError(input.error, normalized);\n return normalized;\n }\n\n private async emitToolError(error: HarnessErrorShape, options: HarnessEventEmitOptions): Promise<void> {\n const sanitized = sanitizeHarnessError(error, this.input.errorPolicy);\n await this.input.emitInternal(ErrorEvent, {\n error: sanitized,\n message: sanitized.message,\n code: sanitized.code,\n recoverable: sanitized.recoverable,\n details: sanitized.details,\n }, options);\n }\n\n private async approveTool(\n request: ToolApprovalRequest,\n tool: AgentToolDefinition,\n args: unknown,\n eventOptions: HarnessEventEmitOptions,\n ): Promise<boolean> {\n const policy = this.input.getToolApprovalMode() ?? \"tool-default\";\n if (policy === \"auto\") return this.recordApprovalResolution(request, \"approved\", eventOptions);\n if (policy === \"deny\") return this.recordApprovalResolution(request, \"denied\", eventOptions);\n\n const requiresApproval = await this.toolRequiresApproval(tool, args, request.id, eventOptions.causationId);\n if (policy === \"tool-default\" && !requiresApproval) return true;\n\n await this.input.emitInternal(\n ToolApprovalRequestedEvent,\n {\n id: request.id,\n name: request.name,\n args: request.args,\n modeId: request.modeId,\n risk: request.risk,\n permissions: request.permissions,\n },\n eventOptions,\n );\n this.input.log(\n ToolApprovalRequestedLog,\n { toolName: request.name, risk: request.risk, permissions: request.permissions },\n eventOptions.source,\n eventOptions.correlationId,\n eventOptions.causationId,\n );\n\n if (!this.input.approveTool) return this.recordApprovalResolution(request, \"denied\", eventOptions);\n const decision = await this.input.approveTool(request);\n return this.recordApprovalResolution(request, decision === true || decision === \"approved\" ? \"approved\" : \"denied\", eventOptions);\n }\n\n private async toolRequiresApproval(\n tool: AgentToolDefinition,\n args: unknown,\n toolCallId: string,\n causationId?: string,\n ): Promise<boolean> {\n if (typeof tool.requiresApproval === \"function\") {\n await this.input.ensureSandboxOpen();\n return tool.requiresApproval(\n args,\n this.input.buildActionSession(\n { id: toolCallId, name: tool.name },\n { kind: \"tool\", id: toolCallId, name: tool.name },\n toolCallId,\n causationId,\n ),\n );\n }\n return tool.requiresApproval === true;\n }\n\n private async recordApprovalResolution(\n request: ToolApprovalRequest,\n decision: ToolApprovalDecision,\n eventOptions: HarnessEventEmitOptions,\n ): Promise<boolean> {\n await this.input.emitInternal(\n ToolApprovalResolvedEvent,\n { id: request.id, name: request.name, args: request.args, decision, modeId: request.modeId },\n eventOptions,\n );\n this.input.log(\n ToolApprovalResolvedLog,\n { toolName: request.name, approved: decision === \"approved\" },\n eventOptions.source,\n eventOptions.correlationId,\n eventOptions.causationId,\n );\n return decision === \"approved\";\n }\n}\n","import { randomId } from \"./id.js\";\nimport type { HarnessEventEmitOptions, HarnessSnapshot, HarnessSnapshotInput, HarnessSnapshotSummary } from \"./types.js\";\n\nfunction cloneJSON<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nexport type SnapshotRuntimeState = Omit<HarnessSnapshot, \"id\" | \"label\" | \"createdAt\" | \"metadata\">;\n\nexport interface SnapshotManagerInput {\n now(): string;\n ensureStoreInitialized(): Promise<void>;\n readState(): SnapshotRuntimeState;\n restoreState(snapshot: HarnessSnapshot): void;\n persistCursors(): Promise<void>;\n saveSnapshot(snapshot: HarnessSnapshot): Promise<void>;\n deleteSnapshot(id: string): Promise<void>;\n emitCreated(summary: HarnessSnapshotSummary, options?: HarnessEventEmitOptions): Promise<void>;\n emitRestored(summary: HarnessSnapshotSummary, options?: HarnessEventEmitOptions): Promise<void>;\n emitDeleted(summary: HarnessSnapshotSummary, options?: HarnessEventEmitOptions): Promise<void>;\n logCreated(summary: HarnessSnapshotSummary, options?: HarnessEventEmitOptions): void;\n logRestored(summary: HarnessSnapshotSummary, options?: HarnessEventEmitOptions): void;\n logDeleted(summary: HarnessSnapshotSummary, options?: HarnessEventEmitOptions): void;\n logRestoreRejected(snapshotId: string, reason: string, options?: HarnessEventEmitOptions): void;\n}\n\nexport class SnapshotManager {\n private snapshots: HarnessSnapshot[] = [];\n\n constructor(private readonly input?: SnapshotManagerInput) {}\n\n load(snapshot: HarnessSnapshot): void {\n if (!this.snapshots.some((candidate) => candidate.id === snapshot.id)) {\n this.snapshots.push(cloneJSON(snapshot));\n }\n }\n\n add(snapshot: HarnessSnapshot): void {\n this.snapshots.push(snapshot);\n }\n\n get(id: string): HarnessSnapshot | undefined {\n const snapshot = this.snapshots.find((candidate) => candidate.id === id);\n return snapshot ? cloneJSON(snapshot) : undefined;\n }\n\n getRaw(id: string): HarnessSnapshot | undefined {\n return this.snapshots.find((candidate) => candidate.id === id);\n }\n\n async create(\n input: HarnessSnapshotInput = {},\n eventOptions?: HarnessEventEmitOptions,\n ): Promise<HarnessSnapshot> {\n const manager = this.requireInput();\n await manager.ensureStoreInitialized();\n const snapshot: HarnessSnapshot = {\n id: randomId(),\n label: input.label,\n createdAt: manager.now(),\n ...cloneJSON(manager.readState()),\n metadata: input.metadata,\n };\n\n this.add(snapshot);\n await manager.saveSnapshot(snapshot);\n const summary = this.summary(snapshot);\n await manager.emitCreated(summary, eventOptions);\n manager.logCreated(summary, eventOptions);\n return cloneJSON(snapshot);\n }\n\n async restore(id: string, eventOptions?: HarnessEventEmitOptions): Promise<HarnessSnapshot> {\n const manager = this.requireInput();\n await manager.ensureStoreInitialized();\n const snapshot = this.getRaw(id);\n if (!snapshot) {\n manager.logRestoreRejected(id, \"not_found\", eventOptions);\n throw new Error(`Snapshot '${id}' was not found.`);\n }\n\n manager.restoreState(snapshot);\n const summary = this.summary(snapshot);\n await manager.emitRestored(summary, eventOptions);\n manager.logRestored(summary, eventOptions);\n await manager.persistCursors();\n return cloneJSON(snapshot);\n }\n\n list(): HarnessSnapshotSummary[] {\n return cloneJSON(this.snapshots.map((snapshot) => this.summary(snapshot)));\n }\n\n delete(id: string): HarnessSnapshot | undefined {\n const snapshot = this.snapshots.find((candidate) => candidate.id === id);\n if (!snapshot) return undefined;\n this.snapshots = this.snapshots.filter((candidate) => candidate.id !== id);\n return snapshot;\n }\n\n async deletePersisted(id: string, eventOptions?: HarnessEventEmitOptions): Promise<boolean> {\n const manager = this.requireInput();\n await manager.ensureStoreInitialized();\n const snapshot = this.delete(id);\n if (!snapshot) return false;\n await manager.deleteSnapshot(id);\n const summary = this.summary(snapshot);\n await manager.emitDeleted(summary, eventOptions);\n manager.logDeleted(summary, eventOptions);\n return true;\n }\n\n summary(snapshot: HarnessSnapshot): HarnessSnapshotSummary {\n return {\n id: snapshot.id,\n label: snapshot.label,\n createdAt: snapshot.createdAt,\n agentKey: snapshot.agentKey,\n runId: snapshot.runId,\n turnId: snapshot.turnId,\n modeId: snapshot.modeId,\n model: snapshot.model,\n transcriptCursor: cloneJSON(snapshot.transcriptCursor),\n eventCursor: cloneJSON(snapshot.eventCursor),\n metadata: snapshot.metadata,\n };\n }\n\n private requireInput(): SnapshotManagerInput {\n if (!this.input) throw new Error(\"SnapshotManager operation requires runtime dependencies.\");\n return this.input;\n }\n}\n","import type { HarnessLogClass, HarnessLogContext } from \"../logging/index.js\";\nimport {\n ModelCallCompletedLog,\n ModelCallFailedLog,\n ModelCallStartedLog,\n} from \"../logging/runtime-logs.js\";\nimport { getConstructLabel, getConstructType } from \"./constructs.js\";\nimport { ContextReadyEvent, MessageEndEvent, ModelAfterEvent, ModelBeforeEvent } from \"./events.js\";\nimport type {\n AgentMessage,\n AgentReadSession,\n AgentRunnerRunOptions,\n AgentToolResult,\n AgentToolDefinition,\n HarnessErrorPolicy,\n HarnessEvent,\n HarnessEventClass,\n HarnessEventEmitOptions,\n HarnessEventSource,\n HarnessMode,\n ContextSnapshot,\n RunMetrics,\n} from \"./types.js\";\nimport { modelProviderId, type ModelProviderRunResult, type ResolvedModelProvider } from \"../engine/types.js\";\nimport { annotateHarnessError, normalizeHarnessError } from \"./errors.js\";\n\nfunction retryDelayMs(attempt: number, backoffMs: number, maxBackoffMs: number): number {\n return Math.min(maxBackoffMs, backoffMs * 2 ** Math.max(0, attempt - 1));\n}\n\nfunction delay(ms: number, signal?: AbortSignal): Promise<void> {\n if (ms <= 0) return Promise.resolve();\n if (signal?.aborted) return Promise.reject(new Error(\"Run aborted.\"));\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(resolve, ms);\n signal?.addEventListener(\"abort\", () => {\n clearTimeout(timeout);\n reject(new Error(\"Run aborted.\"));\n }, { once: true });\n });\n}\n\nexport class ModelPipeline {\n constructor(\n private readonly input: {\n resolveModelProvider(model: string): ResolvedModelProvider;\n roles: import(\"./types.js\").HarnessRoleDefinition[];\n getRunId(): string;\n getTurnId(): string | undefined;\n getModeId(): string;\n getModel(): string;\n getMetrics(): RunMetrics;\n setFinalAnswer(answer: string): void;\n buildReadSession(source: HarnessEventSource): AgentReadSession;\n buildContextSnapshot(trigger?: HarnessEventClass): Promise<ContextSnapshot>;\n assertModelProviderSupportsMessages(messages: AgentMessage[]): void;\n addAssistantMessage(content: string, metadata?: Record<string, unknown>): Promise<AgentMessage>;\n markMessageEventCursor(messageId: string): Promise<void>;\n executeTool(\n tool: AgentToolDefinition,\n args: unknown,\n callId: string | undefined,\n source: HarnessEventSource,\n ): Promise<AgentToolResult>;\n emitInternal(eventClass: HarnessEventClass, payload: unknown, options?: HarnessEventEmitOptions): Promise<HarnessEvent>;\n emit(eventClass: HarnessEventClass, payload: unknown, options?: HarnessEventEmitOptions): Promise<HarnessEvent>;\n withEmitDefaults(\n source: HarnessEventSource,\n correlationId?: string,\n causationId?: string,\n options?: HarnessEventEmitOptions,\n ): HarnessEventEmitOptions;\n log<TFields>(\n logClass: HarnessLogClass<TFields>,\n fields: TFields,\n source?: HarnessEventSource,\n correlationId?: string,\n causationId?: string,\n overrides?: Partial<HarnessLogContext>,\n ): void;\n throwIfTurnHandoffRequested(): void;\n isTurnHandoffSignal(error: unknown): boolean;\n errorPolicy?: HarnessErrorPolicy;\n },\n ) {}\n\n async run(input: {\n mode: HarnessMode;\n userMessage: AgentMessage;\n tools: AgentToolDefinition[];\n options: AgentRunnerRunOptions;\n }): Promise<void> {\n const prepared = await this.prepareContext(input.mode, input.userMessage);\n const systemPrompt = prepared.systemPrompt;\n const messages = prepared.messages;\n const model = this.input.getModel();\n const resolved = this.input.resolveModelProvider(model);\n const source = this.modelProviderSource(resolved);\n\n const modelStart = performance.now();\n const retry = this.input.errorPolicy?.retry?.model;\n const maxAttempts = Math.max(1, retry?.attempts ?? 1);\n const backoffMs = Math.max(0, retry?.backoffMs ?? 250);\n const maxBackoffMs = Math.max(backoffMs, retry?.maxBackoffMs ?? 5_000);\n let result: ModelProviderRunResult | undefined;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n let toolExecuted = false;\n let providerEventEmitted = false;\n this.input.log(ModelCallStartedLog, { model, messageCount: messages.length }, source);\n try {\n result = await resolved.provider.run({\n runId: this.input.getRunId(),\n turnId: this.input.getTurnId(),\n modeId: this.input.getModeId(),\n modelRef: resolved.modelRef,\n provider: resolved.namespace,\n model: resolved.modelId,\n systemPrompt,\n messages,\n roles: this.input.roles,\n tools: input.tools,\n maxTurns: input.mode.maxTurns ?? 20,\n signal: input.options.signal,\n prepareContext: () => this.prepareContext(input.mode, input.userMessage),\n emit: async (eventClass, payload, options) => {\n providerEventEmitted = true;\n const event = await this.input.emit(\n eventClass as HarnessEventClass,\n payload,\n this.input.withEmitDefaults(source, undefined, undefined, options),\n ) as any;\n this.input.throwIfTurnHandoffRequested();\n return event;\n },\n executeTool: async (tool, args, callId) => {\n toolExecuted = true;\n return this.input.executeTool(tool, args, callId, source);\n },\n });\n break;\n } catch (error) {\n if (this.input.isTurnHandoffSignal(error)) return;\n const normalized = normalizeHarnessError(error, {\n category: \"model\",\n severity: \"error\",\n recoverable: false,\n source,\n }, this.input.errorPolicy);\n annotateHarnessError(error, normalized);\n this.input.log(ModelCallFailedLog, { model, error: normalized, internalError: error, attempt }, source);\n\n const canRetry = attempt < maxAttempts\n && normalized.category === \"model\"\n && !toolExecuted\n && !providerEventEmitted\n && input.options.signal?.aborted !== true;\n if (!canRetry) throw error;\n await delay(retryDelayMs(attempt, backoffMs, maxBackoffMs), input.options.signal);\n }\n }\n\n if (!result) throw new Error(\"Model provider did not return a result.\");\n\n const assistantMessage = await this.input.addAssistantMessage(result.content, {\n usage: result.usage,\n finishReason: result.finishReason,\n });\n this.input.setFinalAnswer(result.content);\n this.input.getMetrics().usage = result.usage;\n await this.input.emitInternal(MessageEndEvent, { message: assistantMessage });\n await this.input.markMessageEventCursor(assistantMessage.id);\n this.input.log(ModelCallCompletedLog, {\n model,\n durationMs: Math.round(performance.now() - modelStart),\n finishReason: result.finishReason,\n }, source);\n await this.input.emitInternal(ModelAfterEvent, {\n model,\n content: result.content,\n usage: result.usage,\n finishReason: result.finishReason,\n });\n this.input.throwIfTurnHandoffRequested();\n }\n\n private modelProviderSource(resolved: ResolvedModelProvider): HarnessEventSource {\n const id = modelProviderId(resolved.provider);\n return { kind: \"model_provider\", id, name: id };\n }\n\n private async resolveModePrompt(mode: HarnessMode): Promise<string> {\n const source: HarnessEventSource = { kind: \"mode\", id: getConstructType(mode), name: getConstructLabel(mode) };\n if (typeof mode.getPrompt === \"function\") return mode.getPrompt(this.input.buildReadSession(source));\n if (typeof mode.prompt === \"function\") return mode.prompt(this.input.buildReadSession(source));\n return mode.prompt ?? \"\";\n }\n\n private async prepareContext(mode: HarnessMode, userMessage: AgentMessage): Promise<{\n systemPrompt: string;\n messages: AgentMessage[];\n snapshot: ContextSnapshot;\n }> {\n const contextSnapshot = await this.input.buildContextSnapshot(ModelBeforeEvent);\n const prompt = await this.resolveModePrompt(mode);\n const systemPrompt = [contextSnapshot.systemPrompt, prompt].filter(Boolean).join(\"\\n\\n---\\n\\n\");\n const messages = [...contextSnapshot.messages, userMessage];\n this.input.assertModelProviderSupportsMessages(messages);\n\n await this.input.emitInternal(ContextReadyEvent, {\n snapshotId: contextSnapshot.id,\n providerCount: contextSnapshot.providers.length,\n contributionCount: contextSnapshot.contributions.length,\n });\n await this.input.emitInternal(ModelBeforeEvent, { model: this.input.getModel(), messageCount: messages.length });\n this.input.throwIfTurnHandoffRequested();\n\n return {\n systemPrompt,\n messages,\n snapshot: contextSnapshot,\n };\n }\n}\n","import type { HarnessLogClass, HarnessLogContext, HarnessLogSource } from \"../logging/index.js\";\nimport {\n HarnessModelProviderRegistry,\n modelProviderId,\n type ResolvedModelProvider,\n} from \"../engine/types.js\";\nimport {\n ContextBuildCompletedLog,\n ContextBuildStartedLog,\n ContextProviderFailedLog,\n ModelDeltaLog,\n RunCompletedLog,\n RunFailedLog,\n RunStartedLog,\n RunStorageOpenedLog,\n SandboxClosedLog,\n SandboxExecCompletedLog,\n SandboxExecFailedLog,\n SandboxExecStartedLog,\n SandboxOpenedLog,\n SnapshotCreatedLog,\n SnapshotDeletedLog,\n SnapshotRestoreRejectedLog,\n SnapshotRestoredLog,\n StorageWriteFailedLog,\n TranscriptCursorChangedLog,\n TurnCompletedLog,\n TurnStartedLog,\n} from \"../logging/runtime-logs.js\";\nimport {\n ErrorEvent,\n MessageDeltaEvent,\n MessageEndEvent,\n MessageStartEvent,\n ModeChangedEvent,\n ModelBeforeEvent,\n RunAbortedEvent,\n RunEndEvent,\n RunFailedEvent,\n RunStartEvent,\n SnapshotCreatedEvent,\n SnapshotDeletedEvent,\n SnapshotRestoredEvent,\n TranscriptCursorChangedEvent,\n TurnEndEvent,\n TurnStartEvent,\n runtimeEventClasses,\n} from \"./events.js\";\nimport {\n assertNoAuthorId,\n contextProviderMatchesSelector,\n contextProviderSummary,\n eventType,\n getConstructLabel,\n getConstructType,\n hookEventClass,\n isContextProviderBinding,\n isContextProviderClass,\n isContextProviderInstance,\n isContextProviderReference,\n isHookInstance,\n isModeInstance,\n isRoleInstance,\n isToolInstance,\n modeMatchesSelector,\n modeSummary,\n toolMatchesSelector,\n} from \"./constructs.js\";\nimport { ContextRegistry } from \"./context-registry.js\";\nimport { NoopSandbox } from \"./sandbox.js\";\nimport { SandboxManager } from \"./sandbox-manager.js\";\nimport { MemorySessionStorage } from \"./storage.js\";\nimport { RunStorageCoordinator, type StoredRuntimeState } from \"./storage-coordinator.js\";\nimport { EventRecorder } from \"./event-recorder.js\";\nimport { TranscriptManager } from \"./transcript-manager.js\";\nimport { RoleResolver, type ResolvedRole } from \"./role-resolver.js\";\nimport { ToolExecutor } from \"./tool-executor.js\";\nimport { SnapshotManager } from \"./snapshot-manager.js\";\nimport { ModelPipeline } from \"./model-pipeline.js\";\nimport { randomId } from \"./id.js\";\nimport { normalizeSchema } from \"../schema/index.js\";\nimport type {\n AgentActionSession,\n AgentContextProvider,\n AgentMessageInput,\n AgentDefinition,\n AgentMessage,\n AgentMessageRole,\n AgentReadSession,\n AgentRunResult,\n AgentLogSession,\n AgentRunnerRunOptions,\n AgentSessionRunnerOptions,\n AgentSharedState,\n AgentToolDefinition,\n AgentToolResult,\n ContextContribution,\n ContextContributionInput,\n ContextEntry,\n ContextEntryFilter,\n ContextProviderOutput,\n ContextProviderReference,\n ContextProviderRenderResult,\n ContextProviderSummary,\n ContextRegistrationOptions,\n ContextSnapshot,\n HarnessErrorContext,\n HarnessErrorShape,\n HarnessEventClass,\n HarnessEventEmitOptions,\n HarnessEventQuery,\n HarnessEventRecord,\n HarnessEventSummary,\n HarnessEventSource,\n HarnessAgentManifest,\n HarnessMode,\n HarnessModeSelector,\n HarnessSnapshot,\n HarnessSnapshotInput,\n HarnessSnapshotSummary,\n HarnessHookSummary,\n HarnessRoleDefinition,\n HarnessRoleSelector,\n HarnessToolSelector,\n JsonObject,\n NormalizedAgentDefinition,\n RunMetrics,\n RunnerEventListener,\n ToolCatalogEntry,\n TranscriptCursor,\n TranscriptQuery,\n TranscriptSeekTarget,\n} from \"./types.js\";\nimport {\n ContextScopes,\n HarnessEvent,\n RoleTargets,\n assistantRole,\n systemRole,\n toolRole,\n userRole,\n} from \"./types.js\";\nimport { annotateHarnessError, normalizeHarnessError, sanitizeHarnessError } from \"./errors.js\";\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction cloneJSON<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\ninterface RunnerInput {\n id?: string;\n content: string;\n metadata?: JsonObject;\n role?: HarnessRoleSelector;\n external?: boolean;\n}\n\nclass TurnHandoffSignal extends Error {\n constructor() {\n super(\"Turn handoff requested.\");\n this.name = \"TurnHandoffSignal\";\n }\n}\n\nfunction defaultRoles(): HarnessRoleDefinition[] {\n return [systemRole, userRole, assistantRole, toolRole];\n}\n\nfunction emptyMetrics(): RunMetrics {\n return {\n startedAt: nowIso(),\n durationMs: 0,\n turnCount: 0,\n messageCount: 0,\n eventCount: 0,\n toolCallCount: 0,\n tools: {},\n errors: [],\n };\n}\n\nfunction stringifyContent(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (content == null) return \"\";\n return JSON.stringify(content, null, 2);\n}\n\nfunction normalizeAgentMessageInput(input: string | AgentMessageInput): AgentMessageInput {\n return typeof input === \"string\" ? { content: input } : input;\n}\n\nconst noopAgentLogSession: AgentLogSession = {\n debug: () => undefined,\n info: () => undefined,\n warn: () => undefined,\n error: () => undefined,\n emit: () => undefined,\n};\n\nfunction keyFromLabel(label: string): string {\n const key = label\n .trim()\n .replace(/([a-z0-9])([A-Z])/gu, \"$1-$2\")\n .replace(/[^a-zA-Z0-9]+/gu, \"-\")\n .replace(/^-|-$/gu, \"\")\n .toLowerCase();\n return key || \"agent\";\n}\n\nfunction ensureNoLegacyAgentShape(agent: AgentDefinition): void {\n const candidate = agent as {\n id?: unknown;\n events?: unknown;\n contextProviders?: unknown;\n modes?: unknown;\n initialMode?: unknown;\n };\n if (\"id\" in candidate) throw new Error(\"Agent definitions no longer declare id. Use optional key for packaging metadata.\");\n if (\"events\" in candidate) throw new Error(\"Agent definitions no longer declare events. Emit and query event classes directly.\");\n if (\"contextProviders\" in candidate) {\n throw new Error(\"Agent definitions no longer declare contextProviders. Attach providers to modes directly.\");\n }\n if (!Array.isArray(candidate.modes)) {\n throw new Error(\"Agent modes must be an array of HarnessMode instances. Object-literal mode maps are not supported.\");\n }\n if (typeof candidate.initialMode === \"string\") {\n throw new Error(\"Agent initialMode must be a HarnessMode class or instance, not a string id.\");\n }\n}\n\nfunction validateMode(mode: unknown): asserts mode is HarnessMode {\n if (!isModeInstance(mode)) throw new Error(\"Agent modes must extend HarnessMode.\");\n assertNoAuthorId(mode, \"Mode\");\n if (\"context\" in mode) {\n throw new Error(`Mode '${getConstructType(mode)}' uses context. Declare providers directly on the mode class.`);\n }\n if (\"lifecycle\" in mode) {\n throw new Error(`Mode '${getConstructType(mode)}' uses lifecycle. Put onEnter/onExit methods directly on the class.`);\n }\n if (mode.prompt === undefined && typeof mode.getPrompt !== \"function\") {\n throw new Error(`Mode '${getConstructType(mode)}' must define prompt or getPrompt(ctx).`);\n }\n}\n\nfunction validateRoles(roles: HarnessRoleDefinition[] | undefined): HarnessRoleDefinition[] | undefined {\n if (!roles) return undefined;\n for (const role of roles) {\n if (!isRoleInstance(role)) throw new Error(\"Agent roles must extend HarnessRole.\");\n assertNoAuthorId(role, \"Role\");\n }\n return roles;\n}\n\nfunction validateHooks(hooks: AgentDefinition[\"hooks\"]): AgentDefinition[\"hooks\"] {\n if (!hooks) return undefined;\n for (const hook of hooks) {\n if (!isHookInstance(hook)) throw new Error(\"Agent hooks must extend HarnessHook.\");\n assertNoAuthorId(hook, \"Hook\");\n if (!hookEventClass(hook)) {\n throw new Error(`Hook '${getConstructType(hook)}' must extend HarnessHook.for(EventClass).`);\n }\n }\n return hooks;\n}\n\nfunction validateDeclaredEvents(events: AgentDefinition[\"declaredEvents\"]): AgentDefinition[\"declaredEvents\"] {\n if (!events) return undefined;\n for (const eventClass of events) eventType(eventClass);\n return events;\n}\n\nfunction resolveInitialModeType(\n selector: HarnessModeSelector,\n modes: Record<string, HarnessMode>,\n): string {\n for (const mode of Object.values(modes)) {\n if (modeMatchesSelector(mode, selector)) return getConstructType(mode);\n }\n throw new Error(`Unknown initial mode '${getConstructType(selector)}'.`);\n}\n\nfunction normalizeAgent(definition: AgentDefinition): NormalizedAgentDefinition {\n ensureNoLegacyAgentShape(definition);\n const modes: Record<string, HarnessMode> = {};\n for (const mode of definition.modes) {\n validateMode(mode);\n const type = getConstructType(mode);\n if (modes[type]) throw new Error(`Duplicate mode type '${type}'.`);\n modes[type] = mode;\n }\n const initialMode = resolveInitialModeType(definition.initialMode, modes);\n const key = definition.key ?? keyFromLabel(definition.label);\n return {\n key,\n label: definition.label,\n initialMode,\n modes,\n sharedState: definition.sharedState,\n roles: validateRoles(definition.roles),\n hooks: validateHooks(definition.hooks),\n declaredEvents: validateDeclaredEvents(definition.declaredEvents),\n };\n}\n\nexport class AgentSessionRunner {\n readonly agent: NormalizedAgentDefinition;\n readonly workDir: string;\n readonly outputDir: string;\n\n private readonly sessionIdValue: string;\n private readonly storageCoordinator: RunStorageCoordinator;\n private readonly sandboxManager: SandboxManager;\n private runIdValue = randomId();\n private readonly transcriptManager = new TranscriptManager();\n private readonly eventRecorder = new EventRecorder();\n private readonly contextRegistry = new ContextRegistry();\n private readonly snapshotManager: SnapshotManager;\n private readonly toolExecutor: ToolExecutor;\n private readonly modelPipeline: ModelPipeline;\n private readonly resources: Record<string, unknown>;\n private readonly roles: HarnessRoleDefinition[];\n private readonly roleResolver: RoleResolver;\n private readonly providerRegistry: HarnessModelProviderRegistry;\n private readonly defaultModel: string;\n private modelOverride: string | undefined;\n private runModelOverride: string | undefined;\n private currentMode: string;\n private state: AgentSharedState;\n private metrics = emptyMetrics();\n private startedAtPerf = 0;\n private started = false;\n private pendingInputs: RunnerInput[] = [];\n private finalAnswer = \"\";\n private currentTurnId: string | undefined;\n private providerStack: string[] = [];\n private hookDepth = 0;\n private turnHandoffRequested = false;\n private restoredFromRun = false;\n\n constructor(private readonly options: AgentSessionRunnerOptions) {\n this.agent = normalizeAgent(options.agent);\n this.sessionIdValue = options.sessionId ?? randomId();\n this.runIdValue = options.initialRunId ?? randomId();\n this.restoredFromRun = Boolean(options.initialRunId);\n this.workDir = options.workDir ?? \".\";\n this.outputDir = options.outputDir ?? \".harness-kernel/runs\";\n const storage = options.storage ?? new MemorySessionStorage();\n const sandbox = options.sandbox ?? new NoopSandbox();\n this.providerRegistry = new HarnessModelProviderRegistry(options.providers);\n this.currentMode = this.agent.initialMode;\n this.resources = options.resources ?? {};\n this.roles = validateRoles(options.roles) ?? this.agent.roles ?? defaultRoles();\n const initialProvider = this.resolveModelProvider(options.defaultModel).provider;\n this.roleResolver = new RoleResolver(this.roles, {\n modelProviderId: modelProviderId(initialProvider),\n supportsRole: (roleId) => this.resolveModelProvider(this.getActiveModel()).provider.supportsRole?.(roleId) ?? true,\n });\n this.defaultModel = options.defaultModel;\n this.storageCoordinator = new RunStorageCoordinator({\n storage,\n runId: this.runIdValue,\n sessionId: this.sessionIdValue,\n agentKey: this.agent.key,\n outputDir: this.outputDir,\n mode: () => this.currentMode,\n openExistingRun: Boolean(options.initialRunId),\n logOpened: (fields) => this.log(RunStorageOpenedLog, fields),\n logFailed: (fields) => {\n const error = this.normalizeError(fields.error, {\n code: \"storage.write_failed\",\n category: \"storage\",\n severity: \"error\",\n recoverable: true,\n details: { operation: fields.operation },\n });\n this.log(StorageWriteFailedLog, { operation: fields.operation, error, internalError: fields.error });\n },\n });\n this.snapshotManager = new SnapshotManager({\n now: () => nowIso(),\n ensureStoreInitialized: () => this.ensureStoreInitialized(),\n readState: () => ({\n agentKey: this.agent.key,\n runId: this.started ? this.runId : undefined,\n turnId: this.currentTurnId,\n modeId: this.currentMode,\n model: this.getActiveModel(),\n transcriptCursor: cloneJSON(this.transcriptManager.activeTranscriptCursor),\n eventCursor: cloneJSON(this.transcriptManager.activeEventCursor),\n state: cloneJSON(this.state),\n contextEntries: cloneJSON(this.contextRegistry.allEntries),\n contextSnapshot: this.contextRegistry.current ? cloneJSON(this.contextRegistry.current) : undefined,\n branches: cloneJSON(this.transcriptManager.allBranches),\n }),\n restoreState: (snapshot) => {\n this.currentMode = snapshot.modeId;\n this.modelOverride = snapshot.model;\n this.state = cloneJSON(snapshot.state);\n this.contextRegistry.restore({\n entries: snapshot.contextEntries,\n snapshot: snapshot.contextSnapshot,\n });\n this.transcriptManager.restoreCursors({\n transcriptCursor: snapshot.transcriptCursor,\n eventCursor: snapshot.eventCursor,\n branches: snapshot.branches,\n });\n },\n persistCursors: () => this.persistCursors(),\n saveSnapshot: (snapshot) => this.storageCoordinator.saveSnapshot(snapshot),\n deleteSnapshot: (id) => this.storageCoordinator.deleteSnapshot(id),\n emitCreated: async (summary, eventOptions) => {\n await this.emitInternal(SnapshotCreatedEvent, { snapshot: summary }, {\n ...eventOptions,\n hiddenTranscript: false,\n });\n },\n emitRestored: async (summary, eventOptions) => {\n await this.emitInternal(SnapshotRestoredEvent, { snapshot: summary }, {\n ...eventOptions,\n hiddenTranscript: false,\n });\n },\n emitDeleted: async (summary, eventOptions) => {\n await this.emitInternal(SnapshotDeletedEvent, { snapshot: summary }, {\n ...eventOptions,\n hiddenTranscript: false,\n });\n },\n logCreated: (summary, eventOptions) => this.log(\n SnapshotCreatedLog,\n { snapshotId: summary.id, label: summary.label },\n eventOptions?.source,\n eventOptions?.correlationId,\n eventOptions?.causationId,\n ),\n logRestored: (summary, eventOptions) => this.log(\n SnapshotRestoredLog,\n { snapshotId: summary.id, label: summary.label },\n eventOptions?.source,\n eventOptions?.correlationId,\n eventOptions?.causationId,\n ),\n logDeleted: (summary, eventOptions) => this.log(\n SnapshotDeletedLog,\n { snapshotId: summary.id, label: summary.label },\n eventOptions?.source,\n eventOptions?.correlationId,\n eventOptions?.causationId,\n ),\n logRestoreRejected: (snapshotId, reason, eventOptions) => this.log(\n SnapshotRestoreRejectedLog,\n { snapshotId, reason },\n eventOptions?.source,\n eventOptions?.correlationId,\n eventOptions?.causationId,\n ),\n });\n this.sandboxManager = new SandboxManager({\n sandbox,\n sessionId: this.sessionIdValue,\n agentKey: this.agent.key,\n workDir: this.workDir,\n resources: this.resources,\n getRunId: () => this.runId,\n getOutputDir: () => this.storeRunDir(),\n logOpened: (fields) => this.log(SandboxOpenedLog, fields),\n logClosed: (fields) => this.log(SandboxClosedLog, fields),\n logExecStarted: (fields) => this.log(SandboxExecStartedLog, fields),\n logExecCompleted: (fields) => this.log(SandboxExecCompletedLog, fields),\n logExecFailed: (fields) => {\n const error = this.normalizeError(fields.error, {\n code: \"sandbox.exec.failed\",\n category: \"sandbox\",\n severity: \"error\",\n recoverable: true,\n details: { sandboxId: fields.sandboxId, durationMs: fields.durationMs },\n });\n this.log(SandboxExecFailedLog, {\n sandboxId: fields.sandboxId,\n durationMs: fields.durationMs,\n error,\n internalError: fields.error,\n });\n },\n });\n this.toolExecutor = new ToolExecutor({\n getMetrics: () => this.metrics,\n getCurrentMode: () => this.currentMode,\n getToolApprovalMode: () => this.getModeDefinition(this.currentMode).toolApproval,\n approveTool: this.options.approveTool,\n errorPolicy: this.options.errorPolicy,\n ensureSandboxOpen: () => this.ensureSandboxOpen(),\n buildActionSession: (tool, source, correlationId, causationId) =>\n this.buildActionSession(tool, source, correlationId, causationId),\n addToolCallMessage: (tool, args, toolCallId, source) =>\n this.addToolCallMessage(tool, args, toolCallId, source),\n addToolResultMessage: (tool, result, toolCallId) =>\n this.addToolResultMessage(tool, result, toolCallId),\n emitInternal: (eventClass, payload, options) => this.emitInternal(eventClass, payload, options),\n log: (logClass, fields, source, correlationId, causationId, overrides) =>\n this.log(logClass, fields, source, correlationId, causationId, overrides),\n throwIfTurnHandoffRequested: () => this.throwIfTurnHandoffRequested(),\n });\n this.modelPipeline = new ModelPipeline({\n resolveModelProvider: (model) => this.resolveModelProvider(model),\n roles: this.roles,\n getRunId: () => this.runId,\n getTurnId: () => this.currentTurnId,\n getModeId: () => this.currentMode,\n getModel: () => this.getActiveModel(),\n getMetrics: () => this.metrics,\n setFinalAnswer: (answer) => {\n this.finalAnswer = answer;\n },\n buildReadSession: (source) => this.buildReadSession(source),\n buildContextSnapshot: (trigger) => this.buildContextSnapshot(trigger),\n assertModelProviderSupportsMessages: (messages) => this.assertModelProviderSupportsMessages(messages),\n addAssistantMessage: (content, metadata) => this.addMessage(\"assistant\", content, metadata),\n markMessageEventCursor: (messageId) => this.markMessageEventCursor(messageId),\n executeTool: (tool, args, callId, source) => this.executeTool(tool, args, callId, source),\n emitInternal: (eventClass, payload, eventOptions) => this.emitInternal(eventClass, payload, eventOptions),\n emit: (eventClass, payload, eventOptions) => this.emit(eventClass, payload, eventOptions),\n withEmitDefaults: (source, correlationId, causationId, eventOptions) =>\n this.withEmitDefaults(source, correlationId, causationId, eventOptions),\n log: (logClass, fields, source, correlationId, causationId, overrides) =>\n this.log(logClass, fields, source, correlationId, causationId, overrides),\n throwIfTurnHandoffRequested: () => this.throwIfTurnHandoffRequested(),\n isTurnHandoffSignal: (error) => error instanceof TurnHandoffSignal,\n errorPolicy: this.options.errorPolicy,\n });\n this.state = this.createInitialState(this.agent);\n for (const eventClass of runtimeEventClasses) eventType(eventClass);\n }\n\n private normalizeError(error: unknown, context: HarnessErrorContext = {}): HarnessErrorShape {\n const normalized = normalizeHarnessError(error, context, this.options.errorPolicy);\n annotateHarnessError(error, normalized);\n return normalized;\n }\n\n private publicError(error: HarnessErrorShape): HarnessErrorShape {\n return sanitizeHarnessError(error, this.options.errorPolicy);\n }\n\n private logSource(source?: HarnessEventSource): HarnessLogSource {\n if (!source) return { kind: \"runtime\" };\n return {\n kind: source.kind,\n type: source.id,\n name: source.name,\n label: source.name,\n };\n }\n\n private logContext(\n source?: HarnessEventSource,\n correlationId?: string,\n causationId?: string,\n overrides: Partial<HarnessLogContext> = {},\n ): HarnessLogContext {\n return {\n sessionId: this.sessionIdValue,\n runId: this.runId,\n turnId: this.currentTurnId,\n modeId: this.currentMode,\n branchId: this.transcriptManager.activeTranscriptCursor.branchId,\n source: this.logSource(source),\n correlationId,\n causationId,\n ...overrides,\n };\n }\n\n private log<TFields>(\n logClass: HarnessLogClass<TFields>,\n fields: TFields,\n source?: HarnessEventSource,\n correlationId?: string,\n causationId?: string,\n overrides?: Partial<HarnessLogContext>,\n ): void {\n this.options.logger?.emit(logClass, fields, this.logContext(source, correlationId, causationId, overrides));\n }\n\n private logModelDelta(payload: unknown, options?: HarnessEventEmitOptions): void {\n const policy = this.options.logger?.modelDeltas ?? \"none\";\n if (policy === \"none\") return;\n const text = payload && typeof payload === \"object\" && \"text\" in payload\n ? String((payload as { text?: unknown }).text ?? \"\")\n : \"\";\n this.log(\n ModelDeltaLog,\n {\n length: text.length,\n ...(policy === \"full\" ? { text } : {}),\n },\n options?.source ?? this.modelProviderSource(),\n options?.correlationId,\n options?.causationId,\n );\n }\n\n get mode(): string {\n return this.currentMode;\n }\n\n get runId(): string {\n return this.runIdValue;\n }\n\n subscribe(listener: RunnerEventListener): () => void {\n return this.eventRecorder.subscribe(listener);\n }\n\n requestTurnHandoff(): void {\n this.turnHandoffRequested = true;\n }\n\n private storeRunDir(): string | undefined {\n return this.storageCoordinator.runDir;\n }\n\n private async ensureStoreInitialized(): Promise<void> {\n await this.storageCoordinator.ensureInitialized();\n const stored = await this.storageCoordinator.loadRuntimeState();\n if (stored) this.applyStoredRuntimeState(stored);\n }\n\n private async ensureSandboxOpen(): Promise<void> {\n await this.sandboxManager.ensureOpen();\n }\n\n private async closeSandbox(): Promise<void> {\n await this.sandboxManager.close();\n }\n\n private async closeStore(): Promise<void> {\n await this.storageCoordinator.close();\n }\n\n private applyStoredRuntimeState(stored: StoredRuntimeState): void {\n this.contextRegistry.loadSnapshots(stored.contextSnapshots);\n\n for (const snapshot of stored.snapshots) {\n this.snapshotManager.load(snapshot);\n this.transcriptManager.addBranches(snapshot.branches);\n }\n\n this.transcriptManager.loadTranscript(stored.transcript);\n this.metrics.messageCount = this.transcriptManager.count;\n\n this.eventRecorder.load(stored.events);\n this.metrics.eventCount = this.eventRecorder.count;\n\n if (stored.cursors) {\n this.transcriptManager.loadCursors({\n ...stored.cursors,\n eventExists: (eventId) => this.eventRecorder.has(eventId),\n });\n }\n }\n\n private async persistCursors(): Promise<void> {\n await this.ensureStoreInitialized();\n await this.storageCoordinator.saveCursors({\n transcriptCursor: cloneJSON(this.transcriptManager.activeTranscriptCursor),\n eventCursor: cloneJSON(this.transcriptManager.activeEventCursor),\n branches: cloneJSON(this.transcriptManager.allBranches),\n });\n }\n\n private async beginNewRun(): Promise<void> {\n if (this.started || this.restoredFromRun) {\n await this.closeSandbox();\n this.runIdValue = randomId();\n await this.storageCoordinator.beginRun(this.runIdValue);\n this.started = false;\n this.restoredFromRun = false;\n }\n this.startedAtPerf = 0;\n this.metrics = emptyMetrics();\n this.finalAnswer = \"\";\n this.turnHandoffRequested = false;\n }\n\n async run(message: string, options: AgentRunnerRunOptions = {}): Promise<AgentRunResult> {\n await this.beginNewRun();\n this.runModelOverride = undefined;\n this.runModelOverride = this.normalizeModelOverride(options.model);\n let runStarted = false;\n try {\n if (options.signal?.aborted) throw new Error(\"Run aborted.\");\n await this.start();\n runStarted = true;\n this.pendingInputs.push({\n id: options.userInputId,\n content: message,\n metadata: options.userMetadata,\n role: options.userRole,\n external: true,\n });\n\n const maxRunnerTurns = this.getModeDefinition(this.currentMode).maxTurns ?? 5;\n while (this.pendingInputs.length > 0 && this.metrics.turnCount < maxRunnerTurns) {\n if (options.signal?.aborted) throw new Error(\"Run aborted.\");\n const input = this.pendingInputs.shift()!;\n await this.runTurn(input, options);\n }\n\n const completedAt = nowIso();\n this.metrics.completedAt = completedAt;\n this.metrics.durationMs = Math.round(performance.now() - this.startedAtPerf);\n this.metrics.finalMode = this.currentMode;\n await this.storageCoordinator.saveTranscript(this.transcriptManager.allMessages);\n await this.emitInternal(RunEndEvent, {\n metrics: cloneJSON({ ...this.metrics, eventCount: this.eventRecorder.count + 1 }),\n finalAnswer: this.finalAnswer,\n });\n this.contextRegistry.expireScope(ContextScopes.Run);\n this.metrics.durationMs = Math.round(performance.now() - this.startedAtPerf);\n await this.storageCoordinator.saveMetrics(this.metrics);\n this.log(RunCompletedLog, {\n durationMs: this.metrics.durationMs,\n messageCount: this.metrics.messageCount,\n eventCount: this.metrics.eventCount,\n metrics: cloneJSON(this.metrics),\n });\n\n return {\n runId: this.runId,\n agentKey: this.agent.key,\n finalAnswer: this.finalAnswer,\n transcript: cloneJSON(this.filterTranscript()),\n events: this.queryEvents().map((event) => cloneJSON(event.record)),\n metrics: cloneJSON(this.metrics),\n outputDir: this.storeRunDir(),\n };\n } catch (error) {\n const normalized = this.normalizeError(error, {\n code: \"run.failed\",\n category: \"run\",\n severity: \"fatal\",\n recoverable: false,\n source: { kind: \"runtime\" },\n });\n const publicError = this.publicError(normalized);\n this.finalizeMetrics();\n this.metrics.errors.push(publicError);\n\n await this.tryFailureWrite(() => this.storageCoordinator.saveTranscript(this.transcriptManager.allMessages));\n await this.tryFailureWrite(() => this.emitInternal(ErrorEvent, {\n error: publicError,\n message: publicError.message,\n code: publicError.code,\n recoverable: publicError.recoverable,\n details: publicError.details,\n }, { skipHooks: true }));\n\n const terminalEvent = publicError.code === \"run.aborted\" ? RunAbortedEvent : RunFailedEvent;\n await this.tryFailureWrite(() => this.emitInternal(terminalEvent, {\n error: publicError,\n metrics: cloneJSON({ ...this.metrics, eventCount: this.eventRecorder.count + 1 }),\n finalAnswer: this.finalAnswer || undefined,\n }, { skipHooks: true }));\n\n this.contextRegistry.expireScope(ContextScopes.Run);\n this.finalizeMetrics();\n await this.tryFailureWrite(() => this.storageCoordinator.saveMetrics(this.metrics));\n this.log(RunFailedLog, { error: normalized, internalError: error });\n throw error;\n } finally {\n if (runStarted) await this.closeSandbox();\n this.runModelOverride = undefined;\n }\n }\n\n async prompt(message: string, options: AgentRunnerRunOptions = {}): Promise<AgentRunResult> {\n return this.run(message, options);\n }\n\n private finalizeMetrics(): void {\n this.metrics.completedAt = this.metrics.completedAt ?? nowIso();\n this.metrics.durationMs = this.startedAtPerf > 0 ? Math.round(performance.now() - this.startedAtPerf) : 0;\n this.metrics.finalMode = this.currentMode;\n this.metrics.eventCount = this.eventRecorder.count;\n }\n\n private async tryFailureWrite(write: () => Promise<unknown>): Promise<void> {\n try {\n await write();\n } catch {\n // Storage and terminal-event write failures are already logged by their layer.\n }\n }\n\n async hydrate(): Promise<void> {\n if (!this.restoredFromRun) return;\n await this.ensureStoreInitialized();\n }\n\n async close(): Promise<void> {\n await this.closeSandbox();\n await this.closeStore();\n }\n\n getTranscript(options?: TranscriptQuery): AgentMessage[] {\n return cloneJSON(this.filterTranscript(options));\n }\n\n getMetrics(): RunMetrics {\n return cloneJSON({\n ...this.metrics,\n durationMs: this.startedAtPerf > 0 ? Math.round(performance.now() - this.startedAtPerf) : 0,\n finalMode: this.currentMode,\n });\n }\n\n getRunInfo() {\n return {\n runId: this.runId,\n agentKey: this.agent.key,\n workDir: this.workDir,\n outputDir: this.storeRunDir(),\n started: this.started,\n startedAt: this.metrics.startedAt,\n };\n }\n\n getModel(): string {\n return this.getActiveModel();\n }\n\n setModel(model: string): void {\n this.modelOverride = this.normalizeModelOverride(model);\n }\n\n clearModelOverride(): void {\n this.modelOverride = undefined;\n }\n\n getModelProviderInfo() {\n const resolved = this.resolveModelProvider(this.getActiveModel());\n return resolved.provider.getInfo?.() ?? {\n id: modelProviderId(resolved.provider),\n provider: resolved.namespace,\n };\n }\n\n getAvailableModels() {\n return this.providerRegistry.list().flatMap((provider) => {\n const models = provider.getModels?.() ?? [];\n return models.map((model) => ({\n ...model,\n id: model.id.includes(\"/\") ? model.id : `${provider.namespace}/${model.id}`,\n provider: model.provider ?? provider.namespace,\n }));\n });\n }\n\n getAgentManifest(): HarnessAgentManifest {\n return {\n key: this.agent.key,\n label: this.agent.label,\n initialMode: this.agent.initialMode,\n currentMode: this.currentMode,\n modes: Object.values(this.agent.modes).map((mode) => modeSummary(mode)),\n roles: this.roles.map((role) => this.roleResolver.summary(role)),\n hooks: (this.agent.hooks ?? []).map((hook) => this.hookSummary(hook)),\n contextProviders: this.getContextProviders().map((provider) => contextProviderSummary(provider)),\n tools: this.getAllTools().map((tool) => this.toToolCatalogEntry(tool)),\n events: this.eventSummaries(),\n };\n }\n\n getEvents(filter?: HarnessEventQuery): HarnessEventRecord[] {\n return this.queryEvents(filter).map((event) => cloneJSON(event.record));\n }\n\n getTranscriptCursor(): TranscriptCursor {\n return cloneJSON(this.transcriptManager.activeTranscriptCursor);\n }\n\n async seekTranscript(target: TranscriptSeekTarget): Promise<TranscriptCursor> {\n return this.applyTranscriptSeek(target);\n }\n\n async latestTranscript(): Promise<TranscriptCursor> {\n return this.applyTranscriptSeek(\"latest\");\n }\n\n getState(): AgentSharedState {\n return cloneJSON(this.state);\n }\n\n updateState(patch: unknown): void {\n if (patch && typeof patch === \"object\" && !Array.isArray(patch)) {\n Object.assign(this.state, patch);\n } else {\n this.state.value = patch;\n }\n }\n\n replaceState(next: AgentSharedState): void {\n this.state = cloneJSON(next);\n }\n\n async createSnapshot(\n input?: HarnessSnapshotInput,\n eventOptions?: HarnessEventEmitOptions,\n ): Promise<HarnessSnapshot> {\n return this.snapshotManager.create(input, eventOptions);\n }\n\n listSnapshots(): HarnessSnapshotSummary[] {\n return this.snapshotManager.list();\n }\n\n getSnapshot(id: string): HarnessSnapshot | undefined {\n return this.snapshotManager.get(id);\n }\n\n async restoreSnapshot(id: string, eventOptions?: HarnessEventEmitOptions): Promise<HarnessSnapshot> {\n return this.snapshotManager.restore(id, eventOptions);\n }\n\n async deleteSnapshot(id: string, eventOptions?: HarnessEventEmitOptions): Promise<boolean> {\n return this.snapshotManager.deletePersisted(id, eventOptions);\n }\n\n getContextSnapshot(): ContextSnapshot | undefined {\n return this.contextRegistry.current ? cloneJSON(this.contextRegistry.current) : undefined;\n }\n\n getContextEntries(filter?: ContextEntryFilter): ContextEntry[] {\n return cloneJSON(this.contextRegistry.filter(filter));\n }\n\n async switchMode(mode: HarnessModeSelector, input?: unknown): Promise<void> {\n const modeId = this.resolveModeType(mode);\n const previousModeId = this.currentMode;\n const previous = this.getModeDefinition(previousModeId);\n if (previousModeId !== modeId) {\n await this.ensureSandboxOpen();\n await previous.onExit?.(\n this.buildActionSession(\n undefined,\n { kind: \"mode\", id: previousModeId, name: getConstructLabel(previous) },\n ),\n modeSummary(this.getModeDefinition(modeId)),\n );\n this.currentMode = modeId;\n const next = this.getModeDefinition(modeId);\n await next.onEnter?.(\n this.buildActionSession(\n undefined,\n { kind: \"mode\", id: modeId, name: getConstructLabel(next) },\n ),\n input,\n );\n await this.emitInternal(ModeChangedEvent, {\n previousMode: previousModeId,\n mode: modeId,\n input,\n });\n }\n if (input !== undefined) {\n this.pendingInputs.push({\n content: typeof input === \"string\" ? input : JSON.stringify(input, null, 2),\n external: false,\n });\n }\n }\n\n private async start(): Promise<void> {\n if (this.started) return;\n await this.ensureStoreInitialized();\n await this.ensureSandboxOpen();\n this.started = true;\n this.startedAtPerf = performance.now();\n this.log(RunStartedLog, { modeId: this.currentMode, model: this.getActiveModel() });\n await this.emitInternal(RunStartEvent, {\n agentKey: this.agent.key,\n modeId: this.currentMode,\n workDir: this.workDir,\n outputDir: this.storeRunDir(),\n });\n }\n\n private async runTurn(input: RunnerInput, options: AgentRunnerRunOptions): Promise<void> {\n if (input.external !== false) {\n await this.createSnapshot({\n label: \"Before user message\",\n metadata: {\n kind: \"before_user_message\",\n automatic: true,\n userInputId: input.id,\n },\n }, { hiddenTranscript: false });\n this.transcriptManager.ensureBranchForAppend();\n }\n this.metrics.turnCount++;\n this.currentTurnId = randomId();\n const turnStart = performance.now();\n this.log(TurnStartedLog, { turnId: this.currentTurnId });\n await this.emitInternal(TurnStartEvent, { turnId: this.currentTurnId, input: input.content });\n\n const inputRole = this.resolveRole(input.role ?? userRole);\n await this.emitInternal(MessageStartEvent, { role: inputRole.role });\n const userMessage = await this.addMessage(inputRole.role, input.content, input.metadata, inputRole, input.id);\n await this.emitInternal(MessageEndEvent, { message: userMessage });\n await this.markMessageEventCursor(userMessage.id);\n\n const mode = this.getModeDefinition(this.currentMode);\n const tools = await this.resolveTools();\n await this.emitInternal(MessageStartEvent, { role: \"assistant\" });\n\n try {\n await this.modelPipeline.run({\n mode,\n userMessage,\n tools,\n options,\n });\n } catch (error) {\n if (error instanceof TurnHandoffSignal) return;\n throw error;\n } finally {\n this.log(TurnCompletedLog, {\n turnId: this.currentTurnId,\n durationMs: Math.round(performance.now() - turnStart),\n });\n await this.emitInternal(TurnEndEvent, { turnId: this.currentTurnId, finalAnswer: this.finalAnswer });\n this.contextRegistry.expireScope(ContextScopes.Turn, this.currentTurnId);\n this.currentTurnId = undefined;\n }\n }\n\n private async addMessage(\n role: AgentMessageRole,\n content: unknown,\n metadata?: Record<string, unknown>,\n roleInfo?: ResolvedRole,\n id?: string,\n ): Promise<AgentMessage> {\n const message = this.transcriptManager.appendMessage({\n id,\n role,\n content,\n modeId: this.currentMode,\n turnId: this.currentTurnId,\n metadata,\n roleInfo,\n });\n this.metrics.messageCount = this.transcriptManager.count;\n await this.storageCoordinator.saveTranscript(this.transcriptManager.allMessages);\n await this.persistCursors();\n return message;\n }\n\n private async addHiddenEventMessage(record: HarnessEventRecord): Promise<void> {\n this.transcriptManager.appendMessage({\n branchId: record.branchId,\n role: \"event\",\n content: record,\n createdAt: record.at,\n modeId: record.modeId,\n turnId: record.turnId,\n hidden: true,\n metadata: { eventId: record.id, eventType: record.type },\n });\n this.metrics.messageCount = this.transcriptManager.count;\n await this.storageCoordinator.saveTranscript(this.transcriptManager.allMessages);\n await this.persistCursors();\n }\n\n private async addToolCallMessage(tool: AgentToolDefinition, args: unknown, toolCallId: string, source: HarnessEventSource): Promise<AgentMessage> {\n return this.addMessage(\"assistant\", [{\n type: \"tool-call\",\n toolCallId,\n toolName: tool.name,\n input: args,\n }], {\n toolCallId,\n toolName: tool.name,\n source,\n });\n }\n\n private async addToolResultMessage(tool: AgentToolDefinition, result: AgentToolResult, toolCallId: string): Promise<void> {\n await this.addMessage(\"tool\", [{\n type: \"tool-result\",\n toolCallId,\n toolName: tool.name,\n output: result.data ?? result.content,\n }], {\n toolCallId,\n toolName: tool.name,\n isError: result.isError,\n ...result.metadata,\n });\n }\n\n private async markMessageEventCursor(messageId: string): Promise<void> {\n if (!this.transcriptManager.markMessageEventCursor(messageId)) return;\n await this.storageCoordinator.saveTranscript(this.transcriptManager.allMessages);\n }\n\n private createInitialState(agent: NormalizedAgentDefinition): AgentSharedState {\n const initial = agent.sharedState?.initial;\n if (typeof initial === \"function\") return cloneJSON(initial());\n if (initial && typeof initial === \"object\") return cloneJSON(initial);\n return {};\n }\n\n private getModeDefinition(modeId: string) {\n const mode = this.agent.modes[modeId];\n if (!mode) throw new Error(`Unknown mode '${modeId}' for agent '${this.agent.key}'.`);\n return mode;\n }\n\n private resolveModeType(selector: HarnessModeSelector): string {\n for (const mode of Object.values(this.agent.modes)) {\n if (modeMatchesSelector(mode, selector)) return getConstructType(mode);\n }\n throw new Error(`Unknown mode '${getConstructType(selector)}' for agent '${this.agent.key}'.`);\n }\n\n private buildReadSession(\n source: HarnessEventSource = { kind: \"runtime\" },\n correlationId?: string,\n causationId?: string,\n ): AgentReadSession {\n const log = this.options.logger?.agent(this.logContext(source, correlationId, causationId)) ?? noopAgentLogSession;\n return {\n runId: this.runId,\n turnId: this.currentTurnId,\n agentKey: this.agent.key,\n workDir: this.workDir,\n outputDir: this.storeRunDir(),\n resources: this.resources,\n state: {\n get: () => cloneJSON(this.state),\n },\n history: {\n get: (options?: TranscriptQuery) => this.getTranscript({ includeHidden: false, ...options }),\n },\n events: {\n query: <TPayload = unknown>(filter?: HarnessEventQuery<TPayload>) =>\n this.queryEvents(filter).map((event) => cloneJSON(event.record)),\n },\n mode: {\n current: () => modeSummary(this.getModeDefinition(this.currentMode)),\n },\n context: {\n get: (filter?: ContextEntryFilter) => this.getContextEntries(filter),\n snapshot: () => this.getContextSnapshot(),\n },\n log,\n };\n }\n\n private buildActionSession(\n tool?: { id?: string; name: string },\n source: HarnessEventSource = tool ? { kind: \"tool\", id: tool.id, name: tool.name } : { kind: \"runtime\" },\n correlationId?: string,\n causationId?: string,\n ): AgentActionSession {\n const readSession = this.buildReadSession(source, correlationId, causationId);\n const sandbox = this.sandboxManager.current;\n if (!sandbox) throw new Error(\"Sandbox session has not been opened.\");\n const applyEmitDefaults = (options?: HarnessEventEmitOptions) =>\n this.withEmitDefaults(source, correlationId, causationId, options);\n return {\n ...readSession,\n sandbox,\n state: {\n get: () => cloneJSON(this.state),\n update: (patch) => this.updateState(patch),\n set: (next) => this.replaceState(next),\n },\n events: {\n ...readSession.events,\n emit: (eventClass, payload, options) =>\n this.emit(eventClass as HarnessEventClass, payload, applyEmitDefaults(options)) as Promise<any>,\n },\n mode: {\n ...readSession.mode,\n switch: async (mode: HarnessModeSelector, input?: unknown) => this.switchMode(mode, input),\n },\n tools: {\n invoke: (tool: HarnessToolSelector, args: unknown) =>\n this.invokeTool(tool, args, source, correlationId, causationId),\n },\n context: {\n ...readSession.context,\n add: (input: ContextContributionInput, options?: ContextRegistrationOptions) =>\n Promise.resolve(this.addDynamicContext(input, options)),\n render: (binding: ContextProviderReference, options?: ContextRegistrationOptions) =>\n this.renderDynamicContext(binding, options),\n remove: (id: string) => Promise.resolve(this.removeDynamicContext(id)),\n clear: (filter?: ContextEntryFilter) => Promise.resolve(this.clearDynamicContext(filter)),\n },\n messages: {\n enqueue: async (input, options) => {\n const message = normalizeAgentMessageInput(input);\n this.pendingInputs.push({\n id: message.id,\n content: message.content,\n metadata: { ...message.metadata, ...options?.metadata },\n role: message.role,\n external: false,\n });\n },\n },\n snapshots: {\n create: (input?: HarnessSnapshotInput) => this.createSnapshot(input, applyEmitDefaults({ hiddenTranscript: false })),\n },\n toolCall: tool,\n };\n }\n\n private withEmitDefaults(\n source: HarnessEventSource,\n correlationId: string | undefined,\n causationId: string | undefined,\n options?: HarnessEventEmitOptions,\n ): HarnessEventEmitOptions {\n return {\n ...options,\n source: options?.source ?? source,\n correlationId: options?.correlationId ?? correlationId,\n causationId: options?.causationId ?? causationId,\n };\n }\n\n private throwIfTurnHandoffRequested(): void {\n if (!this.turnHandoffRequested) return;\n this.turnHandoffRequested = false;\n throw new TurnHandoffSignal();\n }\n\n private normalizeModelOverride(model: string | undefined): string | undefined {\n if (model === undefined) return undefined;\n const next = model.trim();\n if (!next) throw new Error(\"Model must not be empty.\");\n this.resolveModelProvider(next);\n return next;\n }\n\n private getActiveModel(): string {\n return this.runModelOverride ?? this.modelOverride ?? this.getModeDefinition(this.currentMode).model ?? this.defaultModel;\n }\n\n private resolveModelProvider(model: string): ResolvedModelProvider {\n return this.providerRegistry.resolve(model);\n }\n\n private modelProviderSource(): HarnessEventSource {\n const resolved = this.resolveModelProvider(this.getActiveModel());\n const id = modelProviderId(resolved.provider);\n return { kind: \"model_provider\", id, name: id };\n }\n\n private filterTranscript(options?: TranscriptQuery): AgentMessage[] {\n return this.transcriptManager.filter(options, this.currentTurnId);\n }\n\n private getActiveContextProviderBindings(): ContextProviderReference[] {\n const mode = this.getModeDefinition(this.currentMode);\n if (!mode.providers) return [];\n if (mode.providers === \"all\") {\n return this.getContextProviders()\n .filter((provider) => !mode.excludeProviders?.includes(getConstructType(provider)))\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n }\n return mode.providers\n .filter((binding) => !mode.excludeProviders?.includes(this.bindingToSummary(binding).type));\n }\n\n private getContextProviders(): AgentContextProvider[] {\n const providers = new Map<string, AgentContextProvider>();\n for (const mode of Object.values(this.agent.modes)) {\n if (!mode.providers || mode.providers === \"all\") continue;\n for (const binding of mode.providers) {\n const provider = this.providerFromReference(binding, false).provider;\n providers.set(getConstructType(provider), provider);\n }\n }\n return [...providers.values()];\n }\n\n private providerFromReference(\n reference: ContextProviderReference,\n allowClassSelector: boolean,\n ): { provider: AgentContextProvider; options?: JsonObject } {\n if (!isContextProviderReference(reference)) {\n throw new Error(\"Invalid context provider reference. Use a provider instance or provider.with(options).\");\n }\n\n const selector = isContextProviderBinding(reference) ? reference.provider : reference;\n const options = isContextProviderBinding(reference) ? reference.options : undefined;\n\n if (isContextProviderInstance(selector)) {\n assertNoAuthorId(selector, \"Context provider\");\n return { provider: selector, options };\n }\n\n if (isContextProviderClass(selector)) {\n if (!allowClassSelector) {\n throw new Error(\n `Context provider '${getConstructType(selector)}' is a class selector. Register an instance in mode.providers.`,\n );\n }\n const provider = this.getContextProviders().find((candidate) => contextProviderMatchesSelector(candidate, selector));\n if (!provider) throw new Error(`Unknown context provider '${getConstructType(selector)}'.`);\n return { provider, options };\n }\n\n throw new Error(\"Invalid context provider reference. Provider ids and strings are not supported.\");\n }\n\n private bindingToSummary(binding: ContextProviderReference): ContextProviderSummary {\n const { provider, options } = this.providerFromReference(binding, true);\n return contextProviderSummary(provider, options);\n }\n\n private dynamicContextEntriesFor(eventClass: HarnessEventClass): ContextEntry[] {\n return this.contextRegistry.entriesFor(eventClass, this.runId, this.currentTurnId);\n }\n\n private activateDynamicContextFor(eventClass: HarnessEventClass, record: HarnessEventRecord): void {\n this.contextRegistry.activateFor(eventClass, record, this.runId, this.currentTurnId);\n }\n\n private consumeDynamicContext(entries: ContextEntry[]): void {\n this.contextRegistry.consume(entries);\n }\n\n private addDynamicContext(\n input: ContextContributionInput,\n options: ContextRegistrationOptions = {},\n provider?: ContextProviderSummary,\n ): ContextEntry {\n const contribution = this.normalizeContextContribution(\n input,\n {\n providerId: provider?.type,\n providerLabel: provider?.label,\n },\n );\n return this.addDynamicContextContribution(contribution, options);\n }\n\n private addDynamicContextContribution(\n contribution: ContextContribution,\n options: ContextRegistrationOptions = {},\n ): ContextEntry {\n return this.contextRegistry.addContribution({\n contribution,\n options,\n runId: this.runId,\n turnId: this.currentTurnId,\n modeId: this.currentMode,\n });\n }\n\n private async renderDynamicContext(\n binding: ContextProviderReference,\n options?: ContextRegistrationOptions,\n ): Promise<ContextEntry[]> {\n const rendered = await this.loadContextProvider(binding);\n return rendered.contributions.map((contribution, index) =>\n this.addDynamicContextContribution(\n contribution,\n {\n ...options,\n id: options?.id && rendered.contributions.length === 1 ? options.id : options?.id ? `${options.id}:${index}` : undefined,\n },\n ));\n }\n\n private removeDynamicContext(id: string): boolean {\n return this.contextRegistry.remove(id);\n }\n\n private clearDynamicContext(filter?: ContextEntryFilter): number {\n return this.contextRegistry.clear(filter);\n }\n\n private async buildContextSnapshot(trigger: HarnessEventClass = ModelBeforeEvent): Promise<ContextSnapshot> {\n const started = performance.now();\n const activeBindings = this.getActiveContextProviderBindings();\n this.log(ContextBuildStartedLog, { providerCount: activeBindings.length }, { kind: \"runtime\" });\n const providers: ContextProviderRenderResult[] = [];\n for (const binding of activeBindings) {\n try {\n providers.push(await this.loadContextProvider(binding));\n } catch (error) {\n if (!this.handleContextProviderFailure(binding, error)) throw error;\n }\n }\n\n const dynamicEntries = this.dynamicContextEntriesFor(trigger);\n const contributions = [\n ...providers.flatMap((provider) => provider.contributions),\n ...dynamicEntries.map((entry) => entry.contribution),\n ];\n const systemContributions = contributions.filter((contribution) => this.resolveRole(contribution.role).target === RoleTargets.System);\n const messageContributions = contributions.filter((contribution) => this.resolveRole(contribution.role).target === RoleTargets.Messages);\n const systemPrompt = this.renderSystemContributions(systemContributions);\n const messages = messageContributions.map((contribution) => this.contributionToMessage(contribution));\n\n const snapshot: ContextSnapshot = {\n id: randomId(),\n turnId: this.currentTurnId,\n modeId: this.currentMode,\n createdAt: nowIso(),\n providers,\n contributions,\n systemPrompt,\n messages,\n };\n this.contextRegistry.recordSnapshot(snapshot);\n await this.storageCoordinator.saveContextSnapshot(snapshot);\n this.consumeDynamicContext(dynamicEntries);\n this.log(ContextBuildCompletedLog, {\n providerCount: providers.length,\n contributionCount: contributions.length,\n durationMs: Math.round(performance.now() - started),\n }, { kind: \"runtime\" });\n return snapshot;\n }\n\n private async loadContextProvider(binding: ContextProviderReference): Promise<ContextProviderRenderResult> {\n const { provider, options } = this.providerFromReference(binding, true);\n const summary = contextProviderSummary(provider, options);\n if (this.providerStack.includes(summary.type)) {\n throw new Error(`Context provider cycle detected: ${[...this.providerStack, summary.type].join(\" -> \")}`);\n }\n\n this.providerStack.push(summary.type);\n try {\n const output = await provider.render(\n this.buildReadSession(\n { kind: \"context_provider\", id: summary.type, name: summary.label },\n this.currentTurnId,\n ),\n options,\n );\n return {\n providerId: summary.type,\n providerLabel: summary.label,\n binding: summary,\n contributions: this.normalizeContextOutput(provider, output),\n };\n } finally {\n this.providerStack.pop();\n }\n }\n\n private handleContextProviderFailure(binding: ContextProviderReference, error: unknown): boolean {\n let summary: ContextProviderSummary = { type: \"unknown\" };\n let required = true;\n try {\n const { provider, options } = this.providerFromReference(binding, true);\n summary = contextProviderSummary(provider, options);\n required = isContextProviderBinding(binding) && typeof binding.required === \"boolean\"\n ? binding.required\n : provider.required ?? true;\n } catch {\n // If binding resolution itself failed, keep the original error as the cause.\n }\n\n const modeFailure = this.getModeDefinition(this.currentMode).contextFailure;\n const policyAllowsSkip = this.options.errorPolicy?.contextFailure === \"warn-and-skip\";\n const skip = policyAllowsSkip && (required === false || modeFailure === \"warn-and-skip\");\n const source: HarnessEventSource = { kind: \"context_provider\", id: summary.type, name: summary.label };\n const normalized = this.normalizeError(error, {\n code: \"context.provider.failed\",\n category: \"context\",\n severity: skip ? \"warn\" : \"error\",\n recoverable: skip,\n source,\n details: { providerType: summary.type },\n });\n this.log(\n ContextProviderFailedLog,\n { providerType: summary.type, error: normalized, internalError: error },\n source,\n this.currentTurnId,\n );\n if (skip) this.metrics.errors.push(this.publicError(normalized));\n return skip;\n }\n\n private normalizeContextContribution(\n input: string | ContextContributionInput,\n context: {\n providerId?: string;\n providerLabel?: string;\n defaultRole?: HarnessRoleSelector;\n } = {},\n ): ContextContribution {\n if (typeof input === \"string\") {\n const role = this.resolveRole(context.defaultRole ?? systemRole);\n return {\n providerId: context.providerId,\n providerLabel: context.providerLabel,\n role: role.authorRole,\n authorRole: role.authorRole,\n roleType: role.roleType,\n content: input,\n };\n }\n\n const role = this.resolveRole(input.role ?? context.defaultRole ?? systemRole);\n return {\n providerId: context.providerId,\n providerLabel: context.providerLabel,\n role: role.authorRole,\n authorRole: role.authorRole,\n roleType: role.roleType,\n content: input.content,\n metadata: input.metadata,\n };\n }\n\n private normalizeContextOutput(provider: AgentContextProvider, output: ContextProviderOutput): ContextContribution[] {\n const summary = contextProviderSummary(provider);\n if (output == null) return [];\n const entries = Array.isArray(output) ? output : [output];\n return entries\n .map((entry): ContextContribution | undefined => {\n if (typeof entry === \"string\" && !entry.trim()) return undefined;\n if (\n typeof entry !== \"string\"\n && (entry.content == null || (typeof entry.content === \"string\" && !entry.content.trim()))\n ) {\n return undefined;\n }\n return this.normalizeContextContribution(entry, {\n providerId: summary.type,\n providerLabel: summary.label,\n defaultRole: provider.role,\n });\n })\n .filter(Boolean) as ContextContribution[];\n }\n\n private resolveRole(selector: HarnessRoleSelector | string): ResolvedRole {\n return this.roleResolver.resolve(selector);\n }\n\n private assertModelProviderSupportsMessages(messages: AgentMessage[]): void {\n this.roleResolver.assertModelProviderSupportsMessages(messages);\n }\n\n private renderSystemContributions(contributions: ContextContribution[]): string {\n if (!contributions.length) return \"\";\n const rendered = contributions.map((contribution) => {\n const label = contribution.providerLabel ?? contribution.providerId ?? contribution.role;\n return `## ${label}\\n\\n${stringifyContent(contribution.content)}`;\n });\n return `# Runtime Context\\n\\n${rendered.join(\"\\n\\n\")}`;\n }\n\n private contributionToMessage(contribution: ContextContribution): AgentMessage {\n const role = this.resolveRole(contribution.role);\n return {\n id: randomId(),\n seq: 0,\n branchId: this.transcriptManager.activeTranscriptCursor.branchId,\n role: role.role,\n authorRole: contribution.authorRole ?? role.authorRole,\n roleType: contribution.roleType ?? role.roleType,\n content: contribution.content,\n createdAt: nowIso(),\n modeId: this.currentMode,\n turnId: this.currentTurnId,\n eventCursor: cloneJSON(this.transcriptManager.activeEventCursor),\n metadata: {\n contextProviderId: contribution.providerId,\n contextRole: contribution.authorRole ?? contribution.role,\n contextRoleType: contribution.roleType,\n ...contribution.metadata,\n },\n };\n }\n\n private async resolveTools(): Promise<AgentToolDefinition[]> {\n const mode = this.getModeDefinition(this.currentMode);\n const tools: AgentToolDefinition[] = [];\n for (const source of mode.tools ?? []) {\n if (!isToolInstance(source)) throw new Error(\"Mode tools must extend HarnessTool. Tool factories and object literals are not supported.\");\n assertNoAuthorId(source, \"Tool\");\n tools.push(source);\n }\n const names = new Set<string>();\n for (const tool of tools) {\n if (names.has(tool.name)) throw new Error(`Duplicate toolName '${tool.name}' in mode '${this.currentMode}'.`);\n names.add(tool.name);\n }\n return tools;\n }\n\n private getAllTools(): AgentToolDefinition[] {\n const tools = new Map<string, AgentToolDefinition>();\n for (const mode of Object.values(this.agent.modes)) {\n for (const source of mode.tools ?? []) {\n if (!isToolInstance(source)) continue;\n tools.set(source.name, source);\n }\n }\n return [...tools.values()];\n }\n\n private toToolCatalogEntry(tool: AgentToolDefinition): ToolCatalogEntry {\n return {\n name: tool.name,\n description: tool.description,\n risk: tool.risk,\n permissions: tool.permissions,\n requiresApproval: typeof tool.requiresApproval === \"boolean\" ? tool.requiresApproval : undefined,\n };\n }\n\n private hookSummary(hook: NonNullable<NormalizedAgentDefinition[\"hooks\"]>[number]): HarnessHookSummary {\n const eventClass = hookEventClass(hook)!;\n const type = eventType(eventClass);\n return {\n type: getConstructType(hook),\n label: getConstructLabel(hook),\n eventType: type,\n eventClassId: type,\n };\n }\n\n private eventSummaries(): HarnessEventSummary[] {\n const summaries = new Map<string, HarnessEventSummary>();\n const add = (eventClass: HarnessEventClass, builtIn = false) => {\n const type = eventType(eventClass);\n summaries.set(type, {\n type,\n label: getConstructLabel(eventClass),\n className: getConstructType(eventClass),\n builtIn,\n });\n };\n\n for (const eventClass of runtimeEventClasses) add(eventClass, true);\n for (const hook of this.agent.hooks ?? []) add(hookEventClass(hook)!);\n for (const eventClass of this.agent.declaredEvents ?? []) add(eventClass);\n return [...summaries.values()];\n }\n\n private async invokeTool(\n selector: HarnessToolSelector,\n args: unknown,\n source: HarnessEventSource = { kind: \"runtime\" },\n parentCorrelationId?: string,\n parentCausationId?: string,\n ): Promise<AgentToolResult> {\n const tool = (await this.resolveTools()).find((candidate) => toolMatchesSelector(candidate, selector));\n if (!tool) {\n const label = getConstructType(selector);\n throw new Error(`Unknown tool '${label}' in mode '${this.currentMode}'.`);\n }\n return this.executeTool(tool, args, undefined, source, parentCorrelationId, parentCausationId);\n }\n\n private async executeTool(\n tool: AgentToolDefinition,\n args: unknown,\n callId?: string,\n source: HarnessEventSource = { kind: \"runtime\" },\n parentCorrelationId?: string,\n parentCausationId?: string,\n ): Promise<AgentToolResult> {\n return this.toolExecutor.execute({\n tool,\n args,\n callId,\n source,\n parentCorrelationId,\n parentCausationId,\n });\n }\n\n private async applyTranscriptSeek(target: TranscriptSeekTarget): Promise<TranscriptCursor> {\n const previousCursor = cloneJSON(this.transcriptManager.activeTranscriptCursor);\n const resolved = this.transcriptManager.resolveSeekTarget(target);\n this.transcriptManager.applyResolvedSeek(resolved);\n await this.emitInternal(TranscriptCursorChangedEvent, {\n previousCursor,\n cursor: this.transcriptManager.activeTranscriptCursor,\n }, { hiddenTranscript: false });\n this.log(TranscriptCursorChangedLog, { cursorId: this.transcriptManager.activeTranscriptCursor.id });\n this.transcriptManager.applyResolvedSeek(resolved);\n await this.persistCursors();\n return cloneJSON(this.transcriptManager.activeTranscriptCursor);\n }\n\n private async emitInternal(\n eventClass: HarnessEventClass,\n payload: unknown,\n options?: HarnessEventEmitOptions,\n ): Promise<HarnessEvent> {\n return this.recordHarnessEvent(eventClass, payload, {\n source: { kind: \"runtime\" },\n ...options,\n });\n }\n\n private async emit(\n eventClass: HarnessEventClass,\n payload: unknown,\n options?: HarnessEventEmitOptions,\n ): Promise<HarnessEvent> {\n return this.recordHarnessEvent(eventClass, payload, options);\n }\n\n private async recordHarnessEvent(\n eventClass: HarnessEventClass,\n payload: unknown,\n options?: HarnessEventEmitOptions,\n ): Promise<HarnessEvent> {\n const type = eventType(eventClass);\n const parsedPayload = normalizeSchema(eventClass.schema).parse(payload);\n if (type === MessageDeltaEvent.type) this.logModelDelta(parsedPayload, options);\n this.transcriptManager.ensureBranchForEventAppend(\n this.eventRecorder.latestForBranch(this.transcriptManager.activeEventCursor.branchId),\n );\n const branchId = this.transcriptManager.activeTranscriptCursor.branchId;\n const event = this.eventRecorder.record({\n eventClass,\n branchId,\n type,\n source: options?.source ?? { kind: \"custom\" },\n payload: parsedPayload,\n runId: this.runId,\n turnId: this.currentTurnId,\n modeId: this.currentMode,\n correlationId: options?.correlationId,\n causationId: options?.causationId,\n metadata: options?.metadata,\n });\n const record = event.record;\n this.transcriptManager.advanceEventCursor(record);\n this.metrics.eventCount = this.eventRecorder.count;\n await this.ensureStoreInitialized();\n await this.storageCoordinator.recordEvent(record);\n await this.persistCursors();\n this.activateDynamicContextFor(eventClass, record);\n if (options?.hiddenTranscript !== false) await this.addHiddenEventMessage(record);\n await this.eventRecorder.notify(record);\n if (!options?.skipHooks) await this.dispatchHooks(event);\n return event;\n }\n\n private queryEvents<TPayload = unknown>(filter?: HarnessEventQuery<TPayload>): HarnessEvent<TPayload>[] {\n return this.eventRecorder.query(filter, this.transcriptManager.activeEventSegments());\n }\n\n private async dispatchHooks(event: HarnessEvent): Promise<void> {\n if (this.hookDepth > 25) throw new Error(\"Hook dispatch depth exceeded.\");\n const hooks = (this.agent.hooks ?? []).filter((hook) => {\n const eventClass = hookEventClass(hook);\n return eventClass ? eventType(eventClass) === event.type : false;\n });\n if (!hooks.length) return;\n\n await this.ensureSandboxOpen();\n this.hookDepth++;\n try {\n for (const hook of hooks) {\n await hook.onActive(\n this.buildActionSession(\n undefined,\n { kind: \"hook\", id: getConstructType(hook), name: getConstructLabel(hook) },\n event.record.correlationId,\n event.id,\n ),\n event,\n );\n }\n } finally {\n this.hookDepth--;\n }\n }\n}\n","import type { HarnessModelProvider } from \"../engine/types.js\";\nimport type { HarnessLoggingConfig } from \"../logging/index.js\";\nimport type {\n AgentDefinition,\n AgentMessage,\n AgentSharedState,\n AgentToolResult,\n ContextSnapshot,\n ModelProviderInfo,\n HarnessAgentManifest,\n HarnessEvent,\n HarnessEventClass,\n HarnessEventQuery,\n HarnessEventRecord,\n HarnessErrorPolicy,\n HarnessErrorShape,\n HarnessSnapshotSession,\n HarnessTranscriptSession,\n HarnessModeSelector,\n HarnessRoleSelector,\n RunMetrics,\n ToolPermission,\n ToolRisk,\n} from \"../runtime/types.js\";\nimport type { HarnessSandbox } from \"../runtime/sandbox.js\";\nimport type { HarnessSessionStorage, HarnessSessionSummary, SessionListQuery, SessionListResult } from \"../runtime/storage.js\";\n\nexport type HarnessAgentInput = { definition: AgentDefinition };\n\nexport type HarnessStorageConfig = HarnessSessionStorage;\n\nexport interface HarnessAppConfig {\n agent: HarnessAgentInput;\n providers: HarnessModelProvider[];\n defaultModel: string;\n storage?: HarnessStorageConfig;\n sandbox?: HarnessSandbox;\n resources?: Record<string, unknown>;\n logging?: HarnessLoggingConfig;\n errorPolicy?: HarnessErrorPolicy;\n}\n\nexport interface HarnessUserInput {\n id?: string;\n content: string;\n metadata?: Record<string, unknown>;\n role?: HarnessRoleSelector;\n}\n\nexport interface SendOptions {\n signal?: AbortSignal;\n model?: string;\n after?: HarnessEventClass;\n}\n\nexport interface StreamOptions extends SendOptions {}\n\nexport interface WaitForEventOptions {\n signal?: AbortSignal;\n timeoutMs?: number;\n}\n\nexport interface SendResult {\n sessionId: string;\n runId: string;\n answer: string;\n agentKey: string;\n mode: string;\n outputDir?: string;\n metrics: RunMetrics;\n transcript: AgentMessage[];\n events: HarnessEventRecord[];\n}\n\nexport interface ToolApprovalHandle {\n id: string;\n sessionId: string;\n runId: string;\n toolCallId: string;\n name: string;\n args: unknown;\n modeId: string;\n risk?: ToolRisk;\n permissions?: ToolPermission[];\n createdAt: string;\n expiresAt?: string;\n approve(): Promise<void>;\n deny(reason?: string): Promise<void>;\n}\n\nexport type HarnessStreamEvent =\n | { type: \"run.started\"; sessionId: string; runId: string; mode: string }\n | { type: \"session.status\"; status: HarnessSessionStatus }\n | { type: \"user.message\"; message: AgentMessage }\n | { type: \"assistant.delta\"; text: string; event: HarnessEventRecord }\n | { type: \"assistant.message\"; message: AgentMessage }\n | { type: \"tool.started\"; toolCallId: string; name: string; args: unknown }\n | { type: \"tool.approval.requested\"; approval: ToolApprovalHandle }\n | { type: \"tool.approval.resolved\"; approvalId: string; approved: boolean }\n | { type: \"tool.ended\"; toolCallId: string; name: string; result: AgentToolResult }\n | { type: \"mode.changed\"; previousMode: string; mode: string }\n | { type: \"event\"; event: HarnessEventRecord }\n | { type: \"run.completed\"; result: SendResult }\n | { type: \"run.failed\"; runId: string; error: HarnessErrorShape; metrics: RunMetrics }\n | { type: \"run.aborted\"; runId: string; error: HarnessErrorShape; metrics: RunMetrics }\n | { type: \"error\"; error: HarnessErrorShape };\n\nexport interface HarnessRunStream extends AsyncIterable<HarnessStreamEvent> {\n readonly id: string;\n readonly result: Promise<SendResult>;\n cancel(reason?: string): Promise<void>;\n}\n\nexport type HarnessSessionListener = (event: HarnessStreamEvent) => void | Promise<void>;\nexport type HarnessSessionEventListener<TEvent extends HarnessEvent = HarnessEvent> = (event: TEvent) => void | Promise<void>;\n\nexport enum HarnessSessionPhase {\n Idle = \"idle\",\n Queued = \"queued\",\n Starting = \"starting\",\n BuildingContext = \"building_context\",\n WaitingModel = \"waiting_model\",\n RunningTool = \"running_tool\",\n WaitingApproval = \"waiting_approval\",\n ClosingTurn = \"closing_turn\",\n Completed = \"completed\",\n Error = \"error\",\n Closed = \"closed\",\n}\n\nexport interface HarnessSessionStatus {\n sessionId: string;\n agentKey: string;\n mode: string;\n model: string;\n provider: ModelProviderInfo | undefined;\n createdAt: string;\n lastActiveAt: string;\n running: boolean;\n phase: HarnessSessionPhase;\n queuedInputCount: number;\n currentTurnId?: string;\n activeTool?: { id: string; name: string };\n lastEventAt?: string;\n lastError?: HarnessErrorShape;\n pendingApprovalCount: number;\n runId?: string;\n outputDir?: string;\n metrics?: RunMetrics;\n}\n\nexport interface HarnessSession {\n readonly id: string;\n\n send(input: string | HarnessUserInput, options?: SendOptions): Promise<SendResult>;\n stream(input: string | HarnessUserInput, options?: StreamOptions): HarnessRunStream;\n\n getStatus(): HarnessSessionStatus;\n getModel(): string;\n setModel(model: string): void;\n clearModelOverride(): void;\n getMode(): string;\n switchMode(mode: HarnessModeSelector | string, input?: unknown): Promise<void>;\n\n getState(): AgentSharedState;\n updateState(patch: unknown): void;\n replaceState(next: AgentSharedState): void;\n\n transcript: HarnessTranscriptSession;\n snapshots: HarnessSnapshotSession;\n getEvents(filter?: HarnessEventQuery): HarnessEventRecord[];\n getContextSnapshot(): ContextSnapshot | undefined;\n getAgentManifest(): HarnessAgentManifest;\n\n getPendingApprovals(): ToolApprovalHandle[];\n approveTool(approvalId: string): Promise<void>;\n denyTool(approvalId: string, reason?: string): Promise<void>;\n\n on(listener: HarnessSessionListener): () => void;\n onEvent<TPayload, TEvent extends HarnessEvent<TPayload>>(\n eventClass: HarnessEventClass<TPayload, TEvent>,\n listener: HarnessSessionEventListener<TEvent>,\n ): () => void;\n waitForEvent<TPayload, TEvent extends HarnessEvent<TPayload>>(\n eventClass: HarnessEventClass<TPayload, TEvent>,\n options?: WaitForEventOptions,\n ): Promise<TEvent>;\n close(): Promise<void>;\n}\n\nexport type HarnessSessionStoreEvent =\n | { type: \"session.created\"; sessionId: string; status: HarnessSessionStatus }\n | { type: \"session.deleted\"; sessionId: string }\n | { type: \"session.cleared\" }\n | { type: \"session.event\"; sessionId: string; event: HarnessStreamEvent };\n\nexport type HarnessSessionStoreListener = (event: HarnessSessionStoreEvent) => void | Promise<void>;\n\nexport interface HarnessSessionStore {\n getOrCreate(sessionId?: string, overrides?: Partial<HarnessAppConfig>): Promise<HarnessSession>;\n get(sessionId: string): HarnessSession | undefined;\n list(query?: SessionListQuery): Promise<SessionListResult>;\n close(sessionId: string): Promise<boolean>;\n delete(sessionId: string): Promise<boolean>;\n clearActive(): Promise<void>;\n closeAll(): Promise<void>;\n\n send(sessionId: string | undefined, input: string | HarnessUserInput, options?: SendOptions): Promise<SendResult>;\n stream(sessionId: string | undefined, input: string | HarnessUserInput, options?: StreamOptions): Promise<HarnessRunStream>;\n\n getPendingApprovals(sessionId?: string): ToolApprovalHandle[];\n approveTool(sessionId: string, approvalId: string): Promise<void>;\n denyTool(sessionId: string, approvalId: string, reason?: string): Promise<void>;\n getAgentManifest(sessionId: string): HarnessAgentManifest | undefined;\n\n on(listener: HarnessSessionStoreListener): () => void;\n close(): Promise<void>;\n}\n\nexport type {\n HarnessErrorPolicy,\n HarnessErrorShape,\n HarnessSessionSummary,\n SessionListQuery,\n SessionListResult,\n};\n","import { randomId } from \"../runtime/id.js\";\nimport type { ToolApprovalRequest } from \"../runtime/types.js\";\nimport type { ToolApprovalHandle } from \"./types.js\";\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nexport interface PendingToolApproval {\n handle: ToolApprovalHandle;\n resolve(approved: boolean): void;\n timeout?: NodeJS.Timeout;\n}\n\nexport function createToolApprovalHandle(input: {\n sessionId: string;\n runId: string;\n request: ToolApprovalRequest;\n timeoutMs: number;\n approve(id: string): Promise<void>;\n deny(id: string, reason?: string): Promise<void>;\n}): ToolApprovalHandle {\n const createdAt = nowIso();\n const expiresAt = input.timeoutMs > 0 ? new Date(Date.now() + input.timeoutMs).toISOString() : undefined;\n const id = randomId();\n return {\n id,\n sessionId: input.sessionId,\n runId: input.runId,\n toolCallId: input.request.id,\n name: input.request.name,\n args: input.request.args,\n modeId: input.request.modeId,\n risk: input.request.risk,\n permissions: input.request.permissions,\n createdAt,\n expiresAt,\n approve: () => input.approve(id),\n deny: (reason?: string) => input.deny(id, reason),\n };\n}\n","import type { ToolApprovalDecision, ToolApprovalRequest } from \"../runtime/types.js\";\nimport { createToolApprovalHandle, type PendingToolApproval } from \"./approvals.js\";\nimport type { ToolApprovalHandle } from \"./types.js\";\n\nexport class ApprovalController {\n private readonly pendingApprovals = new Map<string, PendingToolApproval>();\n private readonly approvalIdsByToolCallId = new Map<string, string>();\n\n constructor(\n private readonly input: {\n sessionId: string;\n getRunId(): string;\n defaultTimeoutMs: number;\n notifyRequested(handle: ToolApprovalHandle): void;\n },\n ) {}\n\n get count(): number {\n return this.pendingApprovals.size;\n }\n\n getPending(): ToolApprovalHandle[] {\n return [...this.pendingApprovals.values()].map((approval) => approval.handle);\n }\n\n hydrateApprovalId(toolCallId: string): string {\n const approvalId = this.approvalIdsByToolCallId.get(toolCallId) ?? toolCallId;\n this.approvalIdsByToolCallId.delete(toolCallId);\n return approvalId;\n }\n\n request(request: ToolApprovalRequest): Promise<ToolApprovalDecision> {\n return new Promise((resolve) => {\n const timeoutMs = request.approvalTimeoutMs ?? this.input.defaultTimeoutMs;\n const handle = createToolApprovalHandle({\n sessionId: this.input.sessionId,\n runId: this.input.getRunId(),\n request,\n timeoutMs,\n approve: async (id) => this.resolve(id, true),\n deny: async (id, reason) => this.resolve(id, false, reason),\n });\n const timeout = timeoutMs > 0\n ? setTimeout(() => {\n this.resolve(handle.id, false);\n }, timeoutMs)\n : undefined;\n\n this.pendingApprovals.set(handle.id, {\n handle,\n timeout,\n resolve: (approved) => resolve(approved ? \"approved\" : \"denied\"),\n });\n this.approvalIdsByToolCallId.set(handle.toolCallId, handle.id);\n this.input.notifyRequested(handle);\n });\n }\n\n resolve(approvalId: string, approved: boolean, _reason?: string): void {\n const pending = this.pendingApprovals.get(approvalId);\n if (!pending) throw new Error(`Tool approval '${approvalId}' was not found.`);\n if (pending.timeout) clearTimeout(pending.timeout);\n this.pendingApprovals.delete(approvalId);\n pending.resolve(approved);\n }\n\n denyAll(): void {\n for (const approval of [...this.pendingApprovals.values()]) {\n this.resolve(approval.handle.id, false);\n }\n }\n}\n","import type { AgentDefinition } from \"../runtime/types.js\";\nimport { MemorySessionStorage, type HarnessSessionStorage } from \"../runtime/storage.js\";\nimport type { HarnessAgentInput, HarnessStorageConfig } from \"./types.js\";\n\nexport async function resolveAgent(input: HarnessAgentInput): Promise<AgentDefinition> {\n return input.definition;\n}\n\nexport function resolveStorage(storage: HarnessStorageConfig | undefined): HarnessSessionStorage {\n return storage ?? new MemorySessionStorage();\n}\n","import { eventType } from \"../runtime/constructs.js\";\nimport {\n MessageDeltaEvent,\n MessageEndEvent,\n ModeChangedEvent,\n RunAbortedEvent,\n RunFailedEvent,\n RunStartEvent,\n ToolApprovalResolvedEvent,\n ToolEndEvent,\n ToolStartEvent,\n} from \"../runtime/events.js\";\nimport type {\n AgentMessage,\n AgentToolResult,\n HarnessEvent,\n HarnessEventClass,\n HarnessEventRecord,\n} from \"../runtime/types.js\";\nimport type { HarnessErrorShape, RunMetrics } from \"../runtime/types.js\";\nimport type {\n HarnessSessionEventListener,\n HarnessSessionListener,\n HarnessStreamEvent,\n WaitForEventOptions,\n} from \"./types.js\";\n\nfunction payloadObject(record: HarnessEventRecord): Record<string, unknown> {\n return record.payload && typeof record.payload === \"object\" ? record.payload as Record<string, unknown> : {};\n}\n\nexport interface SessionEventHubOptions {\n sessionId: string;\n hydrateApprovalId?(toolCallId: string): string;\n}\n\nexport class SessionEventHub {\n private readonly listeners = new Set<HarnessSessionListener>();\n\n constructor(private readonly options: SessionEventHubOptions) {}\n\n on(listener: HarnessSessionListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n onEvent<TPayload, TEvent extends HarnessEvent<TPayload>>(\n eventClass: HarnessEventClass<TPayload, TEvent>,\n listener: HarnessSessionEventListener<TEvent>,\n ): () => void {\n const targetType = eventType(eventClass);\n return this.on((event) => {\n if (event.type !== \"event\" || event.event.type !== targetType) return;\n void listener(new eventClass(event.event) as TEvent);\n });\n }\n\n waitForEvent<TPayload, TEvent extends HarnessEvent<TPayload>>(\n eventClass: HarnessEventClass<TPayload, TEvent>,\n options: WaitForEventOptions = {},\n ): Promise<TEvent> {\n return new Promise((resolve, reject) => {\n let timeout: NodeJS.Timeout | undefined;\n const cleanup = this.onEvent(eventClass, (event) => {\n if (timeout) clearTimeout(timeout);\n cleanup();\n resolve(event);\n });\n\n if (options.signal) {\n if (options.signal.aborted) {\n cleanup();\n reject(options.signal.reason ?? new Error(\"waitForEvent aborted.\"));\n return;\n }\n options.signal.addEventListener(\"abort\", () => {\n if (timeout) clearTimeout(timeout);\n cleanup();\n reject(options.signal?.reason ?? new Error(\"waitForEvent aborted.\"));\n }, { once: true });\n }\n\n if (options.timeoutMs !== undefined) {\n timeout = setTimeout(() => {\n cleanup();\n reject(new Error(`Timed out waiting for event '${eventType(eventClass)}'.`));\n }, options.timeoutMs);\n }\n });\n }\n\n notify(event: HarnessStreamEvent): void {\n for (const listener of this.listeners) void listener(event);\n }\n\n notifyRunnerRecord(record: HarnessEventRecord): void {\n for (const event of this.hydrateRuntimeRecord(record)) this.notify(event);\n }\n\n hydrateRuntimeRecord(record: HarnessEventRecord): HarnessStreamEvent[] {\n const events: HarnessStreamEvent[] = [];\n const payload = payloadObject(record);\n\n if (record.type === RunStartEvent.type) {\n events.push({\n type: \"run.started\",\n sessionId: this.options.sessionId,\n runId: record.runId,\n mode: String(payload.modeId ?? record.modeId ?? \"\"),\n });\n } else if (record.type === RunFailedEvent.type) {\n events.push({\n type: \"run.failed\",\n runId: record.runId,\n error: payload.error as HarnessErrorShape,\n metrics: payload.metrics as RunMetrics,\n });\n } else if (record.type === RunAbortedEvent.type) {\n events.push({\n type: \"run.aborted\",\n runId: record.runId,\n error: payload.error as HarnessErrorShape,\n metrics: payload.metrics as RunMetrics,\n });\n } else if (record.type === MessageDeltaEvent.type) {\n events.push({\n type: \"assistant.delta\",\n text: String(payload.text ?? \"\"),\n event: record,\n });\n } else if (record.type === MessageEndEvent.type) {\n const message = payload.message as AgentMessage | undefined;\n if (message?.role === \"user\") events.push({ type: \"user.message\", message });\n if (message?.role === \"assistant\") events.push({ type: \"assistant.message\", message });\n } else if (record.type === ToolStartEvent.type) {\n events.push({\n type: \"tool.started\",\n toolCallId: String(payload.id ?? \"\"),\n name: String(payload.name ?? \"\"),\n args: payload.args,\n });\n } else if (record.type === ToolApprovalResolvedEvent.type) {\n const approvalId = String(payload.id ?? \"\");\n events.push({\n type: \"tool.approval.resolved\",\n approvalId: this.options.hydrateApprovalId?.(approvalId) ?? approvalId,\n approved: payload.decision === \"approved\",\n });\n } else if (record.type === ToolEndEvent.type) {\n events.push({\n type: \"tool.ended\",\n toolCallId: String(payload.id ?? \"\"),\n name: String(payload.name ?? \"\"),\n result: payload.result as AgentToolResult,\n });\n } else if (record.type === ModeChangedEvent.type) {\n events.push({\n type: \"mode.changed\",\n previousMode: String(payload.previousMode ?? \"\"),\n mode: String(payload.mode ?? \"\"),\n });\n }\n\n events.push({ type: \"event\", event: record });\n return events;\n }\n\n clear(): void {\n this.listeners.clear();\n }\n}\n","import {\n AgentDebugLog,\n AgentErrorLog,\n AgentInfoLog,\n AgentWarnLog,\n} from \"./index.js\";\nimport { ConsoleLogSink, normalizeHarnessLog, shouldWriteLog } from \"./index.js\";\nimport type {\n HarnessLogClass,\n HarnessLogContext,\n HarnessLoggingConfig,\n HarnessLogSink,\n} from \"./index.js\";\nimport type { AgentLogSession } from \"../runtime/types.js\";\n\nexport interface HarnessLogger {\n readonly modelDeltas: \"none\" | \"summary\" | \"full\";\n emit<TFields>(logClass: HarnessLogClass<TFields>, fields: TFields, context?: HarnessLogContext): void;\n debug(message: string, fields?: Record<string, unknown>, context?: HarnessLogContext): void;\n info(message: string, fields?: Record<string, unknown>, context?: HarnessLogContext): void;\n warn(message: string, fields?: Record<string, unknown>, context?: HarnessLogContext): void;\n error(errorOrMessage: unknown, fields?: Record<string, unknown>, context?: HarnessLogContext): void;\n agent(context: HarnessLogContext): AgentLogSession;\n flush(): Promise<void>;\n close(): Promise<void>;\n}\n\nfunction normalizeModelDeltas(value: HarnessLoggingConfig[\"modelDeltas\"]): \"none\" | \"summary\" | \"full\" {\n if (value === true) return \"full\";\n if (value === false || value === undefined) return \"none\";\n return value;\n}\n\nfunction configuredSinks(config: HarnessLoggingConfig): HarnessLogSink[] {\n if (config.sinks?.length) return config.sinks;\n if (config.level && config.level !== \"silent\") {\n return [new ConsoleLogSink({ format: config.format ?? \"pretty\" })];\n }\n return [];\n}\n\nfunction messageFromUnknown(errorOrMessage: unknown): string {\n if (errorOrMessage instanceof Error) return errorOrMessage.message;\n return String(errorOrMessage);\n}\n\nfunction payload(message: string, fields?: Record<string, unknown>, error?: unknown): Record<string, unknown> {\n return {\n ...(fields ?? {}),\n message,\n ...(error === undefined ? {} : { error }),\n };\n}\n\nexport function createHarnessLogger(config: HarnessLoggingConfig = {}): HarnessLogger {\n const level = config.level ?? \"silent\";\n const sinks = configuredSinks(config);\n const modelDeltas = normalizeModelDeltas(config.modelDeltas);\n\n const emit = <TFields>(logClass: HarnessLogClass<TFields>, fields: TFields, context: HarnessLogContext = {}) => {\n const record = normalizeHarnessLog(logClass, fields, context, config.redact);\n if (!shouldWriteLog(record.level, level)) return;\n for (const sink of sinks) {\n try {\n void Promise.resolve(sink.write(record)).catch(() => undefined);\n } catch {\n // Logging must not affect agent execution.\n }\n }\n };\n\n const logger: HarnessLogger = {\n modelDeltas,\n emit,\n debug(message, fields, context) {\n emit(AgentDebugLog, payload(message, fields) as { message: string }, context);\n },\n info(message, fields, context) {\n emit(AgentInfoLog, payload(message, fields) as { message: string }, context);\n },\n warn(message, fields, context) {\n emit(AgentWarnLog, payload(message, fields) as { message: string }, context);\n },\n error(errorOrMessage, fields, context) {\n emit(AgentErrorLog, payload(messageFromUnknown(errorOrMessage), fields, errorOrMessage), context);\n },\n agent(context) {\n return {\n debug: (message, fields) => logger.debug(message, fields, context),\n info: (message, fields) => logger.info(message, fields, context),\n warn: (message, fields) => logger.warn(message, fields, context),\n error: (errorOrMessage, fields) => logger.error(errorOrMessage, fields, context),\n emit: (logClass, fields) => logger.emit(logClass, fields, context),\n };\n },\n async flush() {\n await Promise.all(sinks.map(async (sink) => {\n try {\n await sink.flush?.();\n } catch {\n // Ignore sink failures.\n }\n }));\n },\n async close() {\n await Promise.all(sinks.map(async (sink) => {\n try {\n await sink.close?.();\n } catch {\n // Ignore sink failures.\n }\n }));\n },\n };\n\n return logger;\n}\n","import { eventType } from \"../runtime/constructs.js\";\nimport { RunAbortedEvent, RunEndEvent, RunFailedEvent, ToolEndEvent } from \"../runtime/events.js\";\nimport type { HarnessEventClass, HarnessEventRecord } from \"../runtime/types.js\";\n\nexport type PendingSendTriggerResult = \"none\" | \"handoff\" | \"cleared\";\n\nexport class SessionQueue {\n private queue: Promise<unknown> = Promise.resolve();\n private readonly pendingSendTriggers: string[] = [];\n\n enqueue<T>(execute: () => Promise<T>): Promise<T> {\n const previous = this.queue;\n const next = previous.then(execute, execute);\n this.queue = next.catch(() => undefined);\n return next;\n }\n\n addPendingSendTrigger(after?: HarnessEventClass): void {\n this.pendingSendTriggers.push(eventType(after ?? ToolEndEvent));\n }\n\n applyPendingSendTrigger(record: HarnessEventRecord): PendingSendTriggerResult {\n const targetType = this.pendingSendTriggers[0];\n if (!targetType) return \"none\";\n\n if (record.type === targetType) {\n this.pendingSendTriggers.shift();\n return this.isTerminalRunEvent(record.type) ? \"cleared\" : \"handoff\";\n }\n\n if (this.isTerminalRunEvent(record.type)) {\n this.pendingSendTriggers.shift();\n return \"cleared\";\n }\n\n return \"none\";\n }\n\n private isTerminalRunEvent(type: string): boolean {\n return type === RunEndEvent.type || type === RunFailedEvent.type || type === RunAbortedEvent.type;\n }\n}\n","import { randomId } from \"../runtime/id.js\";\nimport type { HarnessRunStream, HarnessStreamEvent, SendResult } from \"./types.js\";\n\nclass AsyncEventQueue<T> implements AsyncIterable<T> {\n private values: T[] = [];\n private waiters: Array<(result: IteratorResult<T>) => void> = [];\n private closed = false;\n\n push(value: T): void {\n if (this.closed) return;\n const waiter = this.waiters.shift();\n if (waiter) waiter({ value, done: false });\n else this.values.push(value);\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n for (const waiter of this.waiters.splice(0)) waiter({ value: undefined as T, done: true });\n }\n\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return {\n next: () => {\n const value = this.values.shift();\n if (value) return Promise.resolve({ value, done: false });\n if (this.closed) return Promise.resolve({ value: undefined as T, done: true });\n return new Promise<IteratorResult<T>>((resolve) => this.waiters.push(resolve));\n },\n };\n }\n}\n\nexport interface HarnessRunStreamController {\n push(event: HarnessStreamEvent): void;\n close(): void;\n}\n\nexport function createHarnessRunStream(\n start: (controller: HarnessRunStreamController) => Promise<SendResult>,\n cancel: (reason?: string) => Promise<void>,\n): HarnessRunStream {\n const queue = new AsyncEventQueue<HarnessStreamEvent>();\n const controller: HarnessRunStreamController = {\n push: (event) => queue.push(event),\n close: () => queue.close(),\n };\n const result = start(controller).finally(() => queue.close());\n\n return {\n id: randomId(),\n result,\n cancel,\n [Symbol.asyncIterator]: () => queue[Symbol.asyncIterator](),\n };\n}\n","import {\n ContextReadyEvent,\n ErrorEvent,\n ModelBeforeEvent,\n RunAbortedEvent,\n RunEndEvent,\n RunFailedEvent,\n RunStartEvent,\n ToolApprovalRequestedEvent,\n ToolApprovalResolvedEvent,\n ToolEndEvent,\n ToolStartEvent,\n TurnEndEvent,\n} from \"../runtime/events.js\";\nimport type { HarnessEventRecord } from \"../runtime/types.js\";\nimport { HarnessSessionPhase, type HarnessErrorShape } from \"./types.js\";\n\nfunction payloadObject(record: HarnessEventRecord): Record<string, unknown> {\n return record.payload && typeof record.payload === \"object\" ? record.payload as Record<string, unknown> : {};\n}\n\nexport interface SessionStatusSnapshot {\n running: boolean;\n phase: HarnessSessionPhase;\n queuedInputCount: number;\n currentTurnId?: string;\n activeTool?: { id: string; name: string };\n lastEventAt?: string;\n lastError?: HarnessErrorShape;\n}\n\nexport class SessionStatusTracker {\n private runningValue = false;\n private closedValue = false;\n private phaseValue = HarnessSessionPhase.Idle;\n private queuedInputCountValue = 0;\n private currentTurnIdValue: string | undefined;\n private activeToolValue: { id: string; name: string } | undefined;\n private lastEventAtValue: string | undefined;\n private lastErrorValue: HarnessErrorShape | undefined;\n\n get running(): boolean {\n return this.runningValue;\n }\n\n get queuedInputCount(): number {\n return this.queuedInputCountValue;\n }\n\n get activeTool(): { id: string; name: string } | undefined {\n return this.activeToolValue;\n }\n\n get phase(): HarnessSessionPhase {\n return this.closedValue ? HarnessSessionPhase.Closed : this.phaseValue;\n }\n\n enqueueSend(): void {\n this.queuedInputCountValue++;\n if (this.runningValue) this.phaseValue = HarnessSessionPhase.Queued;\n }\n\n beginRun(): void {\n this.runningValue = true;\n this.queuedInputCountValue = Math.max(0, this.queuedInputCountValue - 1);\n this.phaseValue = HarnessSessionPhase.Starting;\n }\n\n completeRun(): void {\n this.phaseValue = HarnessSessionPhase.Completed;\n }\n\n failRun(error: HarnessErrorShape): void {\n this.lastErrorValue = error;\n this.phaseValue = HarnessSessionPhase.Error;\n }\n\n finishRun(): void {\n this.runningValue = false;\n if (!this.closedValue && this.phaseValue !== HarnessSessionPhase.Error) {\n this.phaseValue = this.queuedInputCountValue > 0 ? HarnessSessionPhase.Queued : HarnessSessionPhase.Idle;\n }\n }\n\n close(): void {\n this.closedValue = true;\n this.phaseValue = HarnessSessionPhase.Closed;\n }\n\n markClosingTurn(): void {\n this.phaseValue = HarnessSessionPhase.ClosingTurn;\n }\n\n applyRunnerRecord(record: HarnessEventRecord): void {\n this.lastEventAtValue = record.at;\n const payload = payloadObject(record);\n\n if (record.type === RunStartEvent.type) {\n this.phaseValue = HarnessSessionPhase.Starting;\n this.currentTurnIdValue = undefined;\n this.activeToolValue = undefined;\n this.lastErrorValue = undefined;\n } else if (record.type === ContextReadyEvent.type) {\n this.phaseValue = HarnessSessionPhase.BuildingContext;\n } else if (record.type === ModelBeforeEvent.type) {\n this.phaseValue = HarnessSessionPhase.WaitingModel;\n } else if (record.type === ToolStartEvent.type) {\n this.phaseValue = HarnessSessionPhase.RunningTool;\n this.activeToolValue = {\n id: String(payload.id ?? \"\"),\n name: String(payload.name ?? \"\"),\n };\n } else if (record.type === ToolApprovalRequestedEvent.type) {\n this.phaseValue = HarnessSessionPhase.WaitingApproval;\n } else if (record.type === ToolEndEvent.type || record.type === ToolApprovalResolvedEvent.type) {\n this.activeToolValue = undefined;\n this.phaseValue = HarnessSessionPhase.WaitingModel;\n } else if (record.type === TurnEndEvent.type) {\n this.phaseValue = HarnessSessionPhase.ClosingTurn;\n this.currentTurnIdValue = undefined;\n } else if (record.type === RunEndEvent.type) {\n this.phaseValue = HarnessSessionPhase.Completed;\n } else if (record.type === RunFailedEvent.type || record.type === RunAbortedEvent.type) {\n this.phaseValue = HarnessSessionPhase.Error;\n this.lastErrorValue = payload.error as HarnessErrorShape | undefined;\n } else if (record.type === ErrorEvent.type) {\n const error = payload.error as HarnessErrorShape | undefined;\n this.lastErrorValue = error ?? {\n code: \"runtime.failed\",\n category: \"runtime\",\n severity: \"fatal\",\n recoverable: false,\n message: String(payload.message ?? \"Unknown error\"),\n };\n if (!this.lastErrorValue.recoverable) this.phaseValue = HarnessSessionPhase.Error;\n }\n\n if (record.turnId) this.currentTurnIdValue = record.turnId;\n }\n\n snapshot(): SessionStatusSnapshot {\n return {\n running: this.runningValue,\n phase: this.phase,\n queuedInputCount: this.queuedInputCountValue,\n currentTurnId: this.currentTurnIdValue,\n activeTool: this.activeToolValue,\n lastEventAt: this.lastEventAtValue,\n lastError: this.lastErrorValue,\n };\n }\n}\n","import { getConstructType } from \"../runtime/constructs.js\";\nimport { AgentSessionRunner } from \"../runtime/runner.js\";\nimport { randomId } from \"../runtime/id.js\";\nimport type {\n AgentDefinition,\n AgentSharedState,\n HarnessSnapshotInput,\n HarnessSnapshotSession,\n HarnessTranscriptSession,\n HarnessEvent,\n HarnessEventClass,\n HarnessEventQuery,\n HarnessEventRecord,\n HarnessModeSelector,\n ToolApprovalDecision,\n ToolApprovalRequest,\n} from \"../runtime/types.js\";\nimport { ApprovalController } from \"./approval-controller.js\";\nimport { resolveAgent, resolveStorage } from \"./engine.js\";\nimport { SessionEventHub } from \"./event-hub.js\";\nimport { createHarnessLogger, type HarnessLogger } from \"./logging.js\";\nimport { SessionQueue } from \"./queue.js\";\nimport { SessionCreatedLog, SnapshotRestoreRejectedLog } from \"../logging/runtime-logs.js\";\nimport { createHarnessRunStream, type HarnessRunStreamController } from \"./stream.js\";\nimport { HarnessSessionPhase } from \"./types.js\";\nimport { SessionStatusTracker } from \"./status.js\";\nimport { normalizeHarnessError, sanitizeHarnessError } from \"../runtime/errors.js\";\nimport type {\n HarnessAppConfig,\n HarnessSessionEventListener,\n HarnessRunStream,\n HarnessSession,\n HarnessSessionListener,\n HarnessSessionStatus,\n HarnessStreamEvent,\n HarnessUserInput,\n SendOptions,\n SendResult,\n StreamOptions,\n WaitForEventOptions,\n ToolApprovalHandle,\n} from \"./types.js\";\nimport type { HarnessSessionSummary } from \"../runtime/storage.js\";\n\nconst defaultApprovalTimeoutMs = 5 * 60 * 1000;\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction normalizeInput(input: string | HarnessUserInput): HarnessUserInput {\n return typeof input === \"string\" ? { content: input } : input;\n}\n\nexport interface CreateHarnessSessionInternalOptions {\n sessionId?: string;\n restoredSession?: HarnessSessionSummary;\n}\n\nexport class HarnessSessionImpl implements HarnessSession {\n readonly id: string;\n readonly transcript: HarnessTranscriptSession;\n readonly snapshots: HarnessSnapshotSession;\n\n private readonly runner: AgentSessionRunner;\n private readonly events: SessionEventHub;\n private readonly approvals: ApprovalController;\n private readonly queue = new SessionQueue();\n private readonly status = new SessionStatusTracker();\n private createdAt = nowIso();\n private readonly logger: HarnessLogger;\n private lastActiveAt = this.createdAt;\n private closed = false;\n private activeAbort?: AbortController;\n private lastResult?: SendResult;\n private unsubscribeRunner: () => void;\n\n constructor(\n private readonly config: HarnessAppConfig,\n input: {\n sessionId?: string;\n agent: AgentDefinition;\n restoredSession?: HarnessSessionSummary;\n },\n ) {\n this.id = input.sessionId ?? randomId();\n this.createdAt = input.restoredSession?.createdAt ?? this.createdAt;\n this.lastActiveAt = input.restoredSession?.lastActiveAt ?? this.createdAt;\n this.events = new SessionEventHub({\n sessionId: this.id,\n hydrateApprovalId: (toolCallId) => this.approvals.hydrateApprovalId(toolCallId),\n });\n this.logger = createHarnessLogger(config.logging);\n this.approvals = new ApprovalController({\n sessionId: this.id,\n getRunId: () => this.runner.runId,\n defaultTimeoutMs: defaultApprovalTimeoutMs,\n notifyRequested: (approval) => this.notify({ type: \"tool.approval.requested\", approval }),\n });\n const storage = resolveStorage(config.storage);\n this.runner = new AgentSessionRunner({\n sessionId: this.id,\n agent: input.agent,\n providers: config.providers,\n defaultModel: config.defaultModel,\n sandbox: config.sandbox,\n storage,\n initialRunId: input.restoredSession?.latestRunId,\n resources: config.resources,\n approveTool: (request) => this.requestToolApproval(request),\n logger: this.logger,\n errorPolicy: config.errorPolicy,\n });\n this.logger.emit(SessionCreatedLog, { sessionId: this.id }, { sessionId: this.id, source: { kind: \"runtime\" } });\n this.unsubscribeRunner = this.runner.subscribe((record) => {\n this.status.applyRunnerRecord(record);\n this.applyPendingSendTrigger(record);\n this.events.notifyRunnerRecord(record);\n this.notifyStatus();\n });\n this.transcript = {\n get: (options) => this.runner.getTranscript(options),\n getCursor: () => this.runner.getTranscriptCursor(),\n seek: (target) => this.runner.seekTranscript(target),\n latest: () => this.runner.latestTranscript(),\n };\n this.snapshots = {\n create: (input?: HarnessSnapshotInput) => this.runner.createSnapshot(input, { hiddenTranscript: false }),\n list: () => this.runner.listSnapshots(),\n get: (id: string) => this.runner.getSnapshot(id),\n restore: (id: string) => {\n this.assertSnapshotRestoreAllowed();\n return this.runner.restoreSnapshot(id, { hiddenTranscript: false });\n },\n delete: (id: string) => this.runner.deleteSnapshot(id, { hiddenTranscript: false }),\n };\n }\n\n async send(input: string | HarnessUserInput, options?: SendOptions): Promise<SendResult> {\n const stream = this.stream(input, options);\n for await (const _event of stream) {\n // Draining the stream preserves the same event path used by streaming callers.\n }\n return stream.result;\n }\n\n stream(input: string | HarnessUserInput, options: StreamOptions = {}): HarnessRunStream {\n const userInput = normalizeInput(input);\n const externalSignal = options.signal;\n const controller = new AbortController();\n\n if (externalSignal) {\n if (externalSignal.aborted) controller.abort(externalSignal.reason);\n else externalSignal.addEventListener(\"abort\", () => controller.abort(externalSignal.reason), { once: true });\n }\n\n this.status.enqueueSend();\n if (this.status.running) this.queue.addPendingSendTrigger(options.after);\n this.notifyStatus();\n\n const run = async (streamController: HarnessRunStreamController): Promise<SendResult> => {\n const execute = async (): Promise<SendResult> => {\n if (this.closed) throw new Error(`Harness session '${this.id}' is closed.`);\n const unsubscribe = this.on((event) => streamController.push(event));\n this.status.beginRun();\n this.activeAbort = controller;\n this.lastActiveAt = nowIso();\n this.notifyStatus();\n try {\n const result = await this.runner.run(userInput.content, {\n signal: controller.signal,\n model: options.model,\n userInputId: userInput.id,\n userMetadata: userInput.metadata,\n userRole: userInput.role,\n });\n const sendResult: SendResult = {\n sessionId: this.id,\n runId: result.runId,\n agentKey: result.agentKey,\n answer: result.finalAnswer,\n mode: this.runner.mode,\n outputDir: result.outputDir,\n metrics: result.metrics,\n transcript: result.transcript,\n events: result.events,\n };\n this.lastResult = sendResult;\n this.status.completeRun();\n this.notify({ type: \"run.completed\", result: sendResult });\n this.notifyStatus();\n await this.logger.flush();\n return sendResult;\n } catch (error) {\n const shaped = sanitizeHarnessError(normalizeHarnessError(error, {\n code: \"run.failed\",\n category: \"run\",\n severity: \"fatal\",\n recoverable: false,\n source: { kind: \"runtime\" },\n }, this.config.errorPolicy), this.config.errorPolicy);\n this.status.failRun(shaped);\n this.notify({ type: \"error\", error: shaped });\n this.notifyStatus();\n await this.logger.flush();\n if (this.config.errorPolicy?.closeSessionOnFatal) await this.closeAfterFatal();\n throw error;\n } finally {\n unsubscribe();\n this.status.finishRun();\n if (this.activeAbort === controller) this.activeAbort = undefined;\n this.lastActiveAt = nowIso();\n this.notifyStatus();\n }\n };\n\n return this.queue.enqueue(execute);\n };\n\n return createHarnessRunStream(run, async (reason?: string) => {\n controller.abort(reason);\n await this.cancelActiveRun(reason);\n });\n }\n\n getStatus(): HarnessSessionStatus {\n const runInfo = this.runner.getRunInfo();\n const status = this.status.snapshot();\n return {\n sessionId: this.id,\n agentKey: this.runner.agent.key,\n mode: this.runner.mode,\n model: this.runner.getModel(),\n provider: this.runner.getModelProviderInfo(),\n createdAt: this.createdAt,\n lastActiveAt: this.lastActiveAt,\n running: status.running,\n phase: status.phase,\n queuedInputCount: status.queuedInputCount,\n currentTurnId: status.currentTurnId,\n activeTool: status.activeTool,\n lastEventAt: status.lastEventAt,\n lastError: status.lastError,\n pendingApprovalCount: this.approvals.count,\n runId: runInfo.runId,\n outputDir: this.lastResult?.outputDir ?? runInfo.outputDir,\n metrics: this.lastResult?.metrics ?? this.runner.getMetrics(),\n };\n }\n\n getMode(): string {\n return this.runner.mode;\n }\n\n getModel(): string {\n return this.runner.getModel();\n }\n\n setModel(model: string): void {\n this.runner.setModel(model);\n this.lastActiveAt = nowIso();\n this.notifyStatus();\n }\n\n clearModelOverride(): void {\n this.runner.clearModelOverride();\n this.lastActiveAt = nowIso();\n this.notifyStatus();\n }\n\n async switchMode(mode: HarnessModeSelector | string, input?: unknown): Promise<void> {\n await this.runner.switchMode(this.resolveModeSelector(mode), input);\n this.lastActiveAt = nowIso();\n }\n\n getState(): AgentSharedState {\n return this.runner.getState();\n }\n\n updateState(patch: unknown): void {\n this.runner.updateState(patch);\n this.lastActiveAt = nowIso();\n }\n\n replaceState(next: AgentSharedState): void {\n this.runner.replaceState(next);\n this.lastActiveAt = nowIso();\n }\n\n getEvents(filter?: HarnessEventQuery): HarnessEventRecord[] {\n return this.runner.getEvents(filter);\n }\n\n getContextSnapshot() {\n return this.runner.getContextSnapshot();\n }\n\n getAgentManifest() {\n return this.runner.getAgentManifest();\n }\n\n getPendingApprovals(): ToolApprovalHandle[] {\n return this.approvals.getPending();\n }\n\n async approveTool(approvalId: string): Promise<void> {\n this.approvals.resolve(approvalId, true);\n }\n\n async denyTool(approvalId: string, _reason?: string): Promise<void> {\n this.approvals.resolve(approvalId, false);\n }\n\n on(listener: HarnessSessionListener): () => void {\n return this.events.on(listener);\n }\n\n onEvent<TPayload, TEvent extends HarnessEvent<TPayload>>(\n eventClass: HarnessEventClass<TPayload, TEvent>,\n listener: HarnessSessionEventListener<TEvent>,\n ): () => void {\n return this.events.onEvent(eventClass, listener);\n }\n\n waitForEvent<TPayload, TEvent extends HarnessEvent<TPayload>>(\n eventClass: HarnessEventClass<TPayload, TEvent>,\n options: WaitForEventOptions = {},\n ): Promise<TEvent> {\n return this.events.waitForEvent(eventClass, options);\n }\n\n async close(): Promise<void> {\n if (this.closed) return;\n this.closed = true;\n this.status.close();\n await this.cancelActiveRun(\"Session closed.\");\n this.unsubscribeRunner();\n await this.runner.close();\n this.notifyStatus();\n this.events.clear();\n await this.logger.close();\n }\n\n async hydrate(): Promise<void> {\n await this.runner.hydrate();\n }\n\n private notify(event: HarnessStreamEvent): void {\n this.events.notify(event);\n }\n\n private notifyStatus(): void {\n this.notify({ type: \"session.status\", status: this.getStatus() });\n }\n\n private assertSnapshotRestoreAllowed(): void {\n const reject = (reason: string): never => {\n this.logger.emit(\n SnapshotRestoreRejectedLog,\n { reason },\n { sessionId: this.id, runId: this.runner.runId, source: { kind: \"runtime\" } },\n );\n throw new Error(reason);\n };\n\n if (this.closed) reject(`Harness session '${this.id}' is closed.`);\n if (this.status.running || this.status.queuedInputCount > 0 || this.approvals.count > 0 || this.status.activeTool) {\n reject(\"Snapshots can only be restored while the session is idle and has no pending approvals.\");\n }\n if (this.status.phase !== HarnessSessionPhase.Idle) {\n reject(\"Snapshots can only be restored while the session is idle and has no pending approvals.\");\n }\n }\n\n private applyPendingSendTrigger(record: HarnessEventRecord): void {\n if (this.queue.applyPendingSendTrigger(record) === \"handoff\") {\n this.status.markClosingTurn();\n this.runner.requestTurnHandoff();\n }\n }\n\n private resolveModeSelector(mode: HarnessModeSelector | string): HarnessModeSelector {\n if (typeof mode !== \"string\") return mode;\n const resolved = Object.values(this.runner.agent.modes).find((candidate) => getConstructType(candidate) === mode);\n if (!resolved) throw new Error(`Unknown mode '${mode}'.`);\n return resolved;\n }\n\n private requestToolApproval(request: ToolApprovalRequest): Promise<ToolApprovalDecision> {\n return this.approvals.request(request);\n }\n\n private async cancelActiveRun(reason?: string): Promise<void> {\n this.activeAbort?.abort(reason);\n this.approvals.denyAll();\n }\n\n private async closeAfterFatal(): Promise<void> {\n if (this.closed) return;\n this.closed = true;\n this.status.close();\n this.approvals.denyAll();\n this.unsubscribeRunner();\n await this.runner.close();\n this.notifyStatus();\n this.events.clear();\n await this.logger.close();\n }\n}\n\nexport async function createHarnessSession(\n config: HarnessAppConfig,\n options: CreateHarnessSessionInternalOptions = {},\n): Promise<HarnessSession> {\n const agent = await resolveAgent(config.agent);\n const storage = resolveStorage(config.storage);\n const sessionConfig = { ...config, storage };\n const session = new HarnessSessionImpl(sessionConfig, {\n sessionId: options.sessionId,\n agent,\n restoredSession: options.restoredSession,\n });\n if (!options.restoredSession) {\n const status = session.getStatus();\n await storage.createSession({\n sessionId: status.sessionId,\n agentKey: status.agentKey,\n createdAt: status.createdAt,\n lastActiveAt: status.lastActiveAt,\n mode: status.mode,\n });\n }\n await session.hydrate();\n return session;\n}\n","import { randomId } from \"../runtime/id.js\";\nimport { MemorySessionStorage } from \"../runtime/storage.js\";\nimport { createHarnessSession } from \"./session.js\";\nimport type {\n HarnessAppConfig,\n HarnessRunStream,\n HarnessSession,\n HarnessSessionStatus,\n HarnessSessionStore,\n HarnessSessionStoreEvent,\n HarnessSessionStoreListener,\n HarnessUserInput,\n SendOptions,\n SendResult,\n StreamOptions,\n ToolApprovalHandle,\n} from \"./types.js\";\nimport type { HarnessSessionSummary, SessionListQuery, SessionListResult } from \"../runtime/storage.js\";\n\nfunction mergeConfig(base: HarnessAppConfig, overrides?: Partial<HarnessAppConfig>): HarnessAppConfig {\n return {\n ...base,\n ...overrides,\n agent: overrides?.agent ?? base.agent,\n providers: overrides?.providers ?? base.providers,\n resources: overrides?.resources ?? base.resources,\n logging: overrides?.logging ?? base.logging,\n errorPolicy: overrides?.errorPolicy ?? base.errorPolicy,\n storage: overrides?.storage ?? base.storage,\n };\n}\n\nfunction statusToSummary(status: HarnessSessionStatus, latestRunId?: string): HarnessSessionSummary {\n return {\n sessionId: status.sessionId,\n agentKey: status.agentKey,\n createdAt: status.createdAt,\n lastActiveAt: status.lastActiveAt,\n mode: status.mode,\n latestRunId,\n };\n}\n\nfunction sortSummaries(items: HarnessSessionSummary[]): HarnessSessionSummary[] {\n return [...items].sort((a, b) => {\n const byLastActive = b.lastActiveAt.localeCompare(a.lastActiveAt);\n return byLastActive || a.sessionId.localeCompare(b.sessionId);\n });\n}\n\nfunction encodeCursor(summary: HarnessSessionSummary): string {\n return Buffer.from(JSON.stringify([summary.lastActiveAt, summary.sessionId]), \"utf8\").toString(\"base64url\");\n}\n\nfunction decodeCursor(cursor: string | undefined): [string, string] | undefined {\n if (!cursor) return undefined;\n try {\n const parsed = JSON.parse(Buffer.from(cursor, \"base64url\").toString(\"utf8\")) as unknown;\n if (!Array.isArray(parsed) || typeof parsed[0] !== \"string\" || typeof parsed[1] !== \"string\") return undefined;\n return [parsed[0], parsed[1]];\n } catch {\n return undefined;\n }\n}\n\nfunction paginateActive(items: HarnessSessionSummary[], query?: SessionListQuery): SessionListResult {\n const limit = Math.max(1, Math.min(query?.limit ?? 50, 100));\n const cursor = decodeCursor(query?.cursor);\n const filtered = sortSummaries(items)\n .filter((summary) => !query?.agentKey || summary.agentKey === query.agentKey)\n .filter((summary) => {\n if (!cursor) return true;\n const [lastActiveAt, sessionId] = cursor;\n return summary.lastActiveAt < lastActiveAt\n || (summary.lastActiveAt === lastActiveAt && summary.sessionId > sessionId);\n });\n const page = filtered.slice(0, limit);\n return {\n items: page,\n nextCursor: filtered.length > limit && page.length > 0 ? encodeCursor(page[page.length - 1]!) : undefined,\n };\n}\n\nexport class HarnessSessionStoreImpl implements HarnessSessionStore {\n private readonly sessions = new Map<string, HarnessSession>();\n private readonly unsubscriptions = new Map<string, () => void>();\n private readonly latestRunIds = new Map<string, string>();\n private readonly listeners = new Set<HarnessSessionStoreListener>();\n private readonly storage;\n private closed = false;\n\n constructor(private readonly config: HarnessAppConfig) {\n this.storage = config.storage ?? new MemorySessionStorage();\n }\n\n async init(): Promise<void> {\n await this.storage.init?.();\n }\n\n async getOrCreate(sessionId?: string, overrides?: Partial<HarnessAppConfig>): Promise<HarnessSession> {\n if (this.closed) throw new Error(\"Harness session store is closed.\");\n const id = sessionId?.trim() || randomId();\n const existing = this.sessions.get(id);\n if (existing) return existing;\n\n const config = mergeConfig({ ...this.config, storage: this.storage }, overrides);\n const stored = await this.storage.getSession(id);\n const session = await createHarnessSession(config, { sessionId: id, restoredSession: stored });\n const status = session.getStatus();\n if (stored?.latestRunId) this.latestRunIds.set(id, stored.latestRunId);\n else this.latestRunIds.delete(id);\n\n if (!stored) {\n await this.storage.createSession({\n sessionId: id,\n agentKey: status.agentKey,\n createdAt: status.createdAt,\n lastActiveAt: status.lastActiveAt,\n mode: status.mode,\n });\n }\n\n this.sessions.set(id, session);\n this.unsubscriptions.set(id, session.on((event) => {\n if (event.type === \"run.started\") this.latestRunIds.set(id, event.runId);\n if (event.type === \"run.completed\") this.latestRunIds.set(id, event.result.runId);\n if (event.type === \"run.failed\" || event.type === \"run.aborted\") this.latestRunIds.set(id, event.runId);\n if (event.type === \"session.status\") {\n void this.storage.touchSession({\n sessionId: id,\n lastActiveAt: event.status.lastActiveAt,\n mode: event.status.mode,\n });\n }\n this.notify({ type: \"session.event\", sessionId: id, event });\n }));\n this.notify({ type: \"session.created\", sessionId: id, status });\n return session;\n }\n\n get(sessionId: string): HarnessSession | undefined {\n return this.sessions.get(sessionId);\n }\n\n async list(query?: SessionListQuery): Promise<SessionListResult> {\n if (query?.active) {\n return paginateActive([...this.sessions.values()].map((session) => statusToSummary(session.getStatus(), this.latestRunIds.get(session.id))), query);\n }\n\n const result = await this.storage.listSessions(query);\n const active = new Map([...this.sessions.values()].map((session) => [session.id, statusToSummary(session.getStatus(), this.latestRunIds.get(session.id))]));\n return {\n items: result.items.map((item) => active.get(item.sessionId) ?? item),\n nextCursor: result.nextCursor,\n };\n }\n\n close(sessionId: string): Promise<boolean>;\n close(): Promise<void>;\n async close(sessionId?: string): Promise<boolean | void> {\n if (sessionId === undefined) {\n if (this.closed) return;\n this.closed = true;\n await this.closeAll();\n this.listeners.clear();\n return;\n }\n\n const session = this.sessions.get(sessionId);\n if (!session) return false;\n this.sessions.delete(sessionId);\n this.latestRunIds.delete(sessionId);\n this.unsubscriptions.get(sessionId)?.();\n this.unsubscriptions.delete(sessionId);\n await session.close();\n return true;\n }\n\n async delete(sessionId: string): Promise<boolean> {\n await this.close(sessionId);\n this.latestRunIds.delete(sessionId);\n const deleted = await this.storage.deleteSession(sessionId);\n if (deleted) this.notify({ type: \"session.deleted\", sessionId });\n return deleted;\n }\n\n async clearActive(): Promise<void> {\n await this.closeAll();\n this.notify({ type: \"session.cleared\" });\n }\n\n async closeAll(): Promise<void> {\n for (const sessionId of [...this.sessions.keys()]) await this.close(sessionId);\n }\n\n async send(sessionId: string | undefined, input: string | HarnessUserInput, options?: SendOptions): Promise<SendResult> {\n const session = await this.getOrCreate(sessionId);\n return session.send(input, options);\n }\n\n async stream(sessionId: string | undefined, input: string | HarnessUserInput, options?: StreamOptions): Promise<HarnessRunStream> {\n const session = await this.getOrCreate(sessionId);\n return session.stream(input, options);\n }\n\n getPendingApprovals(sessionId?: string): ToolApprovalHandle[] {\n if (sessionId) return this.sessions.get(sessionId)?.getPendingApprovals() ?? [];\n return [...this.sessions.values()].flatMap((session) => session.getPendingApprovals());\n }\n\n async approveTool(sessionId: string, approvalId: string): Promise<void> {\n const session = this.sessions.get(sessionId);\n if (!session) throw new Error(`Harness session '${sessionId}' was not found.`);\n await session.approveTool(approvalId);\n }\n\n async denyTool(sessionId: string, approvalId: string, reason?: string): Promise<void> {\n const session = this.sessions.get(sessionId);\n if (!session) throw new Error(`Harness session '${sessionId}' was not found.`);\n await session.denyTool(approvalId, reason);\n }\n\n getAgentManifest(sessionId: string) {\n return this.sessions.get(sessionId)?.getAgentManifest();\n }\n\n on(listener: HarnessSessionStoreListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private notify(event: HarnessSessionStoreEvent): void {\n for (const listener of this.listeners) void listener(event);\n }\n}\n\nexport async function createHarnessSessionStore(config: HarnessAppConfig): Promise<HarnessSessionStore> {\n const store = new HarnessSessionStoreImpl(config);\n await store.init();\n return store;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,IAAM,oBAAN,cAAgC,WAAmC;AAAA,EACxE,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAkB;AAChB,WAAO;AAAA,EACT;AACF;AAEO,IAAM,gBAAN,cAA4B,WAA8C;AAAA,EAC/E,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAAmD;AACzD,WAAO,oBAAoB,OAAO,MAAM,UAAU,OAAO,KAAK;AAAA,EAChE;AACF;AAEO,IAAM,kBAAN,cAA8B,WAKlC;AAAA,EACD,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAAuG;AAC7G,WAAO,4BAA4B,OAAO,UAAU,aAAa,OAAO,YAAY,WAAW,OAAO,UAAU;AAAA,EAClH;AACF;AAEO,IAAM,eAAN,cAA2B,WAAkE;AAAA,EAClG,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,SAAS,QAAiF;AACxF,WAAO,OAAO,MAAM,aAAa,SAAS,SAAS;AAAA,EACrD;AAAA,EACA,QAAQ,QAAuE;AAC7E,WAAO,mBAAmB,OAAO,MAAM,IAAI;AAAA,EAC7C;AACF;AAEO,IAAM,iBAAN,cAA6B,WAA+B;AAAA,EACjE,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAAoC;AAC1C,WAAO,gBAAgB,OAAO,MAAM;AAAA,EACtC;AACF;AAEO,IAAM,mBAAN,cAA+B,WAAqD;AAAA,EACzF,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAkB;AAChB,WAAO;AAAA,EACT;AACF;AAEO,IAAM,yBAAN,cAAqC,WAAsC;AAAA,EAChF,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAA2C;AACjD,WAAO,6BAA6B,OAAO,aAAa;AAAA,EAC1D;AACF;AAEO,IAAM,2BAAN,cAAuC,WAAqF;AAAA,EACjI,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAA0F;AAChG,WAAO,2BAA2B,OAAO,aAAa,kBAAkB,OAAO,iBAAiB,eAAe,OAAO,UAAU;AAAA,EAClI;AACF;AAEO,IAAM,2BAAN,cAAuC,WAAwF;AAAA,EACpI,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,SAAS,QAAuG;AAC9G,WAAO,OAAO,MAAM,aAAa,SAAS,SAAS;AAAA,EACrD;AAAA,EACA,QAAQ,QAA6F;AACnG,WAAO,2BAA2B,OAAO,YAAY,SAAS,OAAO,MAAM,IAAI;AAAA,EACjF;AACF;AAEO,IAAM,sBAAN,cAAkC,WAAoD;AAAA,EAC3F,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAAyD;AAC/D,WAAO,uBAAuB,OAAO,KAAK,aAAa,OAAO,YAAY;AAAA,EAC5E;AACF;AAEO,IAAM,wBAAN,cAAoC,WAAyE;AAAA,EAClH,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAA8E;AACpF,WAAO,yBAAyB,OAAO,KAAK,eAAe,OAAO,UAAU,GAAG,OAAO,eAAe,WAAW,OAAO,YAAY,KAAK,EAAE;AAAA,EAC5I;AACF;AAEO,IAAM,qBAAN,cAAiC,WAAmG;AAAA,EACzI,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,SAAS,QAAkH;AACzH,WAAO,OAAO,MAAM,aAAa,SAAS,SAAS;AAAA,EACrD;AAAA,EACA,QAAQ,QAAwG;AAC9G,WAAO,sBAAsB,OAAO,KAAK,SAAS,OAAO,MAAM,IAAI;AAAA,EACrE;AACF;AAEO,IAAM,gBAAN,cAA4B,WAA8C;AAAA,EAC/E,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAAmD;AACzD,WAAO,sBAAsB,OAAO,MAAM;AAAA,EAC5C;AACF;AAEO,IAAM,iBAAN,cAA6B,WAA+D;AAAA,EACjG,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAAoE;AAC1E,WAAO,gBAAgB,OAAO,QAAQ;AAAA,EACxC;AACF;AAEO,IAAM,mBAAN,cAA+B,WAAiC;AAAA,EACrE,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAAsC;AAC5C,WAAO,mBAAmB,OAAO,QAAQ;AAAA,EAC3C;AACF;AAEO,IAAM,uBAAN,cAAmC,WAAwD;AAAA,EAChG,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAA6D;AACnE,WAAO,4BAA4B,OAAO,QAAQ;AAAA,EACpD;AACF;AAEO,IAAM,mBAAN,cAA+B,WAAwF;AAAA,EAC5H,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAA6F;AACnG,WAAO,kBAAkB,OAAO,QAAQ,eAAe,OAAO,UAAU,YAAY,OAAO,OAAO;AAAA,EACpG;AACF;AAEO,IAAM,gBAAN,cAA4B,WAA4H;AAAA,EAC7J,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,SAAS,QAA2I;AAClJ,WAAO,OAAO,OAAO,aAAa,SAAS,SAAS;AAAA,EACtD;AAAA,EACA,QAAQ,QAAiI;AACvI,WAAO,eAAe,OAAO,QAAQ,GAAG,OAAO,QAAQ,SAAS,OAAO,MAAM,IAAI,KAAK,EAAE;AAAA,EAC1F;AACF;AAEO,IAAM,2BAAN,cAAuC,WAAuE;AAAA,EACnH,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAA4E;AAClF,WAAO,2BAA2B,OAAO,QAAQ;AAAA,EACnD;AACF;AAEO,IAAM,0BAAN,cAAsC,WAAoD;AAAA,EAC/F,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,SAAS,QAAkE;AACzE,WAAO,OAAO,WAAW,SAAS;AAAA,EACpC;AAAA,EACA,QAAQ,QAAyD;AAC/D,WAAO,OAAO,WAAW,0BAA0B,OAAO,QAAQ,KAAK,wBAAwB,OAAO,QAAQ;AAAA,EAChH;AACF;AAUO,IAAM,mBAAN,cAA+B,WAAmD;AAAA,EACvF,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAAwD;AAC9D,WAAO,kBAAkB,OAAO,SAAS;AAAA,EAC3C;AACF;AAEO,IAAM,wBAAN,cAAoC,WAAsF;AAAA,EAC/H,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAA2F;AACjG,WAAO,wBAAwB,OAAO,SAAS;AAAA,EACjD;AACF;AAEO,IAAM,0BAAN,cAAsC,WAM1C;AAAA,EACD,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAAyH;AAC/H,WAAO,0BAA0B,OAAO,SAAS,aAAa,OAAO,YAAY,MAAM,eAAe,OAAO,UAAU;AAAA,EACzH;AACF;AAEO,IAAM,uBAAN,cAAmC,WAA2G;AAAA,EACnJ,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAAgH;AACtH,WAAO,uBAAuB,OAAO,SAAS,GAAG,OAAO,QAAQ,SAAS,OAAO,MAAM,IAAI,KAAK,EAAE;AAAA,EACnG;AACF;AAEO,IAAM,mBAAN,cAA+B,WAAkC;AAAA,EACtE,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAAuC;AAC7C,WAAO,kBAAkB,OAAO,SAAS;AAAA,EAC3C;AACF;AAEO,IAAM,sBAAN,cAAkC,WAAkE;AAAA,EACzG,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAAuE;AAC7E,WAAO,kBAAkB,OAAO,SAAS,QAAQ,OAAO,KAAK;AAAA,EAC/D;AACF;AAEO,IAAM,qBAAN,cAAiC,WAAoD;AAAA,EAC1F,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAkB;AAChB,WAAO;AAAA,EACT;AACF;AAEO,IAAM,sBAAN,cAAkC,WAAoD;AAAA,EAC3F,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAkB;AAChB,WAAO;AAAA,EACT;AACF;AAEO,IAAM,6BAAN,cAAyC,WAAoD;AAAA,EAClG,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAkB;AAChB,WAAO;AAAA,EACT;AACF;AAEO,IAAM,qBAAN,cAAiC,WAAoD;AAAA,EAC1F,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAkB;AAChB,WAAO;AAAA,EACT;AACF;AAEO,IAAM,6BAAN,cAAyC,WAAiC;AAAA,EAC/E,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAkB;AAChB,WAAO;AAAA,EACT;AACF;AAEO,IAAM,wBAAN,cAAoC,WAAqF;AAAA,EAC9H,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,QAA0F;AAChG,WAAO,wBAAwB,OAAO,SAAS,SAAS,OAAO,MAAM,IAAI;AAAA,EAC3E;AACF;;;AChQA,SAAS,eAAe,OAA0C;AAChE,SAAQ,OAAO,UAAU,aAAa,QAAQ,MAAM;AACtD;AAEA,SAAS,qBAAqB,MAAsB;AAClD,SAAO,KAAK,QAAQ,0DAA0D,EAAE;AAClF;AAEA,SAAS,cAAc,MAAwB;AAC7C,QAAM,SAAS,KACZ,QAAQ,YAAY,GAAG,EACvB,QAAQ,uBAAuB,OAAO,EACtC,QAAQ,0BAA0B,OAAO,EACzC,KAAK;AACR,SAAO,SAAS,OAAO,MAAM,MAAM,IAAI,CAAC,IAAI;AAC9C;AAEA,SAAS,cAAc,MAAsB;AAC3C,SAAO,cAAc,qBAAqB,IAAI,CAAC,EAC5C,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC,EAChC,KAAK,GAAG;AACb;AAEA,SAAS,cAAc,MAAsB;AAC3C,SAAO,cAAc,qBAAqB,IAAI,CAAC,EAC5C,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,GAAG;AACb;AAEO,SAAS,iBAAiB,kBAA6C;AAC5E,QAAM,MAAM,eAAe,gBAAgB;AAC3C,SAAO,IAAI,QAAQ,IAAI,QAAQ;AACjC;AAEO,SAAS,kBAAkB,kBAA6C;AAC7E,QAAM,gBAAgB,OAAO,qBAAqB,YAC7C,WAAW,oBACX,OAAQ,iBAAyC,UAAU,WAC3D,iBAAuC,QACxC;AACJ,MAAI,cAAe,QAAO;AAC1B,QAAM,MAAM,eAAe,gBAAgB;AAC3C,SAAO,IAAI,SAAS,cAAc,iBAAiB,gBAAgB,CAAC;AACtE;AAEO,SAAS,YAAY,aAAqD;AAC/E,MAAI,OAAO,gBAAgB,YAAY,OAAO,YAAY,SAAS,SAAU,QAAO,YAAY;AAChG,QAAM,MAAM,eAAe,WAAW;AACtC,SAAO,IAAI,QAAQ,cAAc,iBAAiB,WAAW,CAAC;AAChE;AAEO,SAAS,YAAY,MAAqC;AAC/D,SAAO,KAAK,QAAQ,KAAK,cAAc,cAAc,iBAAiB,IAAI,CAAC;AAC7E;AAEO,SAAS,YAAY,MAAuC;AACjE,SAAO;AAAA,IACL,MAAM,iBAAiB,IAAI;AAAA,IAC3B,OAAO,kBAAkB,IAAI;AAAA,EAC/B;AACF;AAEO,SAAS,uBACd,UACA,SACwB;AACxB,SAAO;AAAA,IACL,MAAM,iBAAiB,QAAQ;AAAA,IAC/B,OAAO,kBAAkB,QAAQ;AAAA,IACjC;AAAA,EACF;AACF;AAEO,SAAS,oBACd,OACA,WAC8B;AAC9B,SAAO,iBAAiB;AAC1B;AAEO,SAAS,eAAe,OAAsC;AACnE,SAAO,oBAAoB,OAAO,WAAe;AACnD;AAEO,SAAS,eAAe,OAAsC;AACnE,SAAO,oBAAoB,OAAO,WAAe;AACnD;AAEO,SAAS,0BAA0B,OAAiD;AACzF,SAAO,oBAAoB,OAAO,sBAA0B;AAC9D;AAEO,SAAS,eAAe,OAAgD;AAC7E,SAAO,oBAAoB,OAAO,WAAe;AACnD;AAEO,SAAS,eAAe,OAAsC;AACnE,SAAO,oBAAoB,OAAO,WAAe;AACnD;AAEA,SAAS,YAAY,OAAmC;AACtD,SAAO,OAAO,UAAU,cAAc,OAAO,MAAM,cAAc;AACnE;AAEO,SAAS,YAAY,OAA2C;AACrE,SAAO,YAAY,KAAK,KAAK,YAAgB,UAAU,cAAc,MAAM,SAAS;AACtF;AAEO,SAAS,YAAY,OAA2C;AACrE,SAAO,YAAY,KAAK,KAAK,YAAgB,UAAU,cAAc,MAAM,SAAS;AACtF;AAEO,SAAS,YAAY,OAA2C;AACrE,SAAO,YAAY,KAAK,KAAK,YAAgB,UAAU,cAAc,MAAM,SAAS;AACtF;AAEO,SAAS,uBAAuB,OAAsD;AAC3F,SAAO,YAAY,KAAK,KAAK,uBAA2B,UAAU,cAAc,MAAM,SAAS;AACjG;AAEO,SAAS,oBAAoB,MAAmB,UAAiD;AACtG,MAAI,OAAO,aAAa,SAAU,QAAO,iBAAiB,IAAI,MAAM;AACpE,MAAI,YAAY,QAAQ,EAAG,QAAO,gBAAgB,YAAY,iBAAiB,IAAI,MAAM,iBAAiB,QAAQ;AAClH,SAAO,SAAS,YAAY,KAAK,gBAAgB,SAAS,eAAe,iBAAiB,IAAI,MAAM,iBAAiB,QAAQ;AAC/H;AAEO,SAAS,oBAAoB,MAAmB,UAAiD;AACtG,MAAI,OAAO,aAAa,SAAU,QAAO,YAAY,IAAI,MAAM,YAAY,iBAAiB,IAAI,MAAM;AACtG,MAAI,YAAY,QAAQ,EAAG,QAAO,gBAAgB,YAAY,iBAAiB,IAAI,MAAM,iBAAiB,QAAQ;AAClH,SAAO,SAAS,YAAY,KAAK,gBAAgB,SAAS,eAAe,iBAAiB,IAAI,MAAM,iBAAiB,QAAQ;AAC/H;AAEO,SAAS,oBAAoB,MAA6B,UAAiD;AAChH,MAAI,OAAO,aAAa,UAAU;AAChC,WAAO,YAAY,IAAI,MAAM,YAAY,iBAAiB,IAAI,MAAM,YAAY,KAAK,eAAe;AAAA,EACtG;AACA,MAAI,YAAY,QAAQ,EAAG,QAAO,gBAAgB,YAAY,iBAAiB,IAAI,MAAM,iBAAiB,QAAQ;AAClH,SAAO,SAAS,YAAY,KAAK,gBAAgB,SAAS,eAAe,iBAAiB,IAAI,MAAM,iBAAiB,QAAQ;AAC/H;AAEO,SAAS,+BACd,UACA,UACS;AACT,MAAI,OAAO,aAAa,SAAU,QAAO,iBAAiB,QAAQ,MAAM;AACxE,MAAI,uBAAuB,QAAQ,GAAG;AACpC,WAAO,oBAAoB,YAAY,iBAAiB,QAAQ,MAAM,iBAAiB,QAAQ;AAAA,EACjG;AACA,SAAO,aAAa,YACf,SAAS,gBAAgB,SAAS,eAClC,iBAAiB,QAAQ,MAAM,iBAAiB,QAAQ;AAC/D;AAEO,SAAS,eAAe,MAAkD;AAC/E,QAAM,aAAa,KAAK;AACxB,MAAI,WAAY,QAAO;AACvB,QAAM,eAAgB,KAA8B;AACpD,MAAI,iBAAiB,QAAW;AAC9B,UAAM,IAAI;AAAA,MACR,SAAS,iBAAiB,IAAI,CAAC;AAAA,IACjC;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,UAAU,YAAyF;AACjH,SAAO,iBAAiB,UAAU;AACpC;AAEO,SAAS,yBAAyB,OAAiD;AACxF,SAAO,OAAO,UAAU,YACnB,UAAU,QACV,cAAc,UACb,0BAA2B,MAAiC,QAAQ,KACnE,uBAAwB,MAAiC,QAAQ;AAC1E;AAEO,SAAS,2BAA2B,OAAmD;AAC5F,SAAO,0BAA0B,KAAK,KAAK,uBAAuB,KAAK,KAAK,yBAAyB,KAAK;AAC5G;AAEO,SAAS,iBAAiB,WAAmB,MAAoB;AACtE,MAAI,OAAO,UAAU,eAAe,KAAK,WAAW,IAAI,GAAG;AACzD,UAAM,IAAI,MAAM,GAAG,IAAI,KAAK,iBAAiB,SAAS,CAAC,sDAAsD;AAAA,EAC/G;AACF;;;AC5MA,SAAS,SAAiB;AACxB,UAAO,oBAAI,KAAK,GAAE,YAAY;AAChC;AAEA,SAAS,UAAa,OAAa;AACjC,SAAO,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AACzC;AAEO,IAAM,kBAAN,MAAsB;AAAA,EACnB,YAA+B,CAAC;AAAA,EAChC;AAAA,EACA,UAA0B,CAAC;AAAA,EAEnC,IAAI,UAAuC;AACzC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,aAA6B;AAC/B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAQ,OAAsE;AAC5E,SAAK,UAAU,UAAU,MAAM,OAAO;AACtC,SAAK,kBAAkB,MAAM,WAAW,UAAU,MAAM,QAAQ,IAAI;AAAA,EACtE;AAAA,EAEA,eAAe,UAAiC;AAC9C,SAAK,kBAAkB;AACvB,SAAK,UAAU,KAAK,QAAQ;AAAA,EAC9B;AAAA,EAEA,cAAc,WAAoC;AAChD,SAAK,YAAY,UAAU,SAAS;AACpC,SAAK,kBAAkB,KAAK,UAAU,GAAG,EAAE;AAAA,EAC7C;AAAA,EAEA,OAAO,QAA6C;AAClD,QAAI,UAAU,CAAC,GAAG,KAAK,OAAO;AAC9B,QAAI,QAAQ,GAAI,WAAU,QAAQ,OAAO,CAAC,UAAU,MAAM,OAAO,OAAO,EAAE;AAC1E,QAAI,QAAQ,MAAO,WAAU,QAAQ,OAAO,CAAC,UAAU,MAAM,UAAU,OAAO,KAAK;AACnF,QAAI,QAAQ,QAAS,WAAU,QAAQ,OAAO,CAAC,UAAU,MAAM,YAAY,OAAO,OAAO;AACzF,QAAI,QAAQ,WAAY,WAAU,QAAQ,OAAO,CAAC,UAAU,MAAM,aAAa,eAAe,OAAO,UAAU;AAC/G,QAAI,QAAQ,KAAM,WAAU,QAAQ,OAAO,CAAC,UAAU,MAAM,aAAa,eAAe,OAAO,QAAQ,MAAM,aAAa,SAAS,OAAO,IAAI;AAC9I,QAAI,QAAQ,IAAI;AACd,YAAM,KAAK,UAAU,OAAO,EAAE;AAC9B,gBAAU,QAAQ,OAAO,CAAC,UAAU,MAAM,OAAO,EAAE;AAAA,IACrD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,YAA+B,OAAe,QAAiC;AACxF,UAAM,KAAK,UAAU,UAAU;AAC/B,WAAO,KAAK,QAAQ;AAAA,MAAO,CAAC,UAC1B,KAAK,SAAS,OAAO,OAAO,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,gBAAgB;AAAA,IACnF;AAAA,EACF;AAAA,EAEA,YAAY,YAA+B,QAA4B,OAAe,QAAuB;AAC3G,UAAM,KAAK,UAAU,UAAU;AAC/B,SAAK,UAAU,KAAK,QAAQ,IAAI,CAAC,UAAU;AACzC,UAAI,MAAM,OAAO,MAAM,MAAM,gBAAgB,UAAa,CAAC,KAAK,SAAS,OAAO,OAAO,MAAM,EAAG,QAAO;AACvG,aAAO;AAAA,QACL,GAAG;AAAA,QACH,aAAa,OAAO;AAAA,QACpB,oBAAoB,OAAO;AAAA,QAC3B,sBAAsB,OAAO;AAAA,MAC/B;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ,SAA+B;AACrC,UAAM,WAAW,IAAI,IAAI,QAAQ,OAAO,CAAC,UAAU,MAAM,6BAA+B,EAAE,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC;AAClH,QAAI,CAAC,SAAS,KAAM;AACpB,SAAK,UAAU,KAAK,QAAQ,OAAO,CAAC,UAAU,CAAC,SAAS,IAAI,MAAM,EAAE,CAAC;AAAA,EACvE;AAAA,EAEA,YAAY,OAAsB,QAAuB;AACvD,SAAK,UAAU,KAAK,QAAQ,OAAO,CAAC,UAAU;AAC5C,UAAI,MAAM,UAAU,MAAO,QAAO;AAClC,UAAI,+BAAgC,OAAQ,QAAO,MAAM,WAAW;AACpE,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEA,gBAAgB,OAMC;AACf,UAAM,UAAU,MAAM,WAAW,CAAC;AAClC,UAAM,QAAsB;AAAA,MAC1B,IAAI,QAAQ,MAAM,SAAS;AAAA,MAC3B,OAAO,QAAQ;AAAA,MACf,IAAI,UAAU,QAAQ,MAAM,gBAAgB;AAAA,MAC5C,SAAS,QAAQ;AAAA,MACjB,WAAW,OAAO;AAAA,MAClB,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,MACd,QAAQ,MAAM;AAAA,MACd,cAAc,MAAM;AAAA,MACpB,UAAU,QAAQ;AAAA,IACpB;AAEA,QAAI,QAAQ,SAAS;AACnB,WAAK,UAAU,KAAK,QAAQ,OAAO,CAAC,cAAc,UAAU,OAAO,MAAM,EAAE;AAAA,IAC7E,WAAW,KAAK,QAAQ,KAAK,CAAC,cAAc,UAAU,OAAO,MAAM,EAAE,GAAG;AACtE,YAAM,IAAI,MAAM,kBAAkB,MAAM,EAAE,sDAAsD;AAAA,IAClG;AAEA,SAAK,QAAQ,KAAK,KAAK;AACvB,WAAO,UAAU,KAAK;AAAA,EACxB;AAAA,EAEA,OAAO,IAAqB;AAC1B,UAAM,SAAS,KAAK,QAAQ;AAC5B,SAAK,UAAU,KAAK,QAAQ,OAAO,CAAC,UAAU,MAAM,OAAO,EAAE;AAC7D,WAAO,KAAK,QAAQ,WAAW;AAAA,EACjC;AAAA,EAEA,MAAM,QAAqC;AACzC,UAAM,UAAU,IAAI,IAAI,KAAK,OAAO,MAAM,EAAE,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC;AACpE,SAAK,UAAU,KAAK,QAAQ,OAAO,CAAC,UAAU,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC;AACpE,WAAO,QAAQ;AAAA,EACjB;AAAA,EAEA,uBACE,OACA,SACA,UACA,WAIA,OACA,QACA,QACc;AACd,WAAO,KAAK,gBAAgB;AAAA,MAC1B,cAAc,UAAU,OAAO;AAAA,QAC7B,YAAY,UAAU;AAAA,QACtB,eAAe,UAAU;AAAA,MAC3B,CAAC;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,SAAS,OAAqB,OAAe,QAA0B;AAC7E,QAAI,MAAM,kCAAiC,QAAO;AAClD,QAAI,MAAM,0BAA6B,QAAO,MAAM,UAAU;AAC9D,QAAI,MAAM,4BAA8B,QAAO,MAAM,WAAW;AAChE,WAAO;AAAA,EACT;AACF;;;AC1KO,IAAM,iBAAN,MAAqB;AAAA,EAG1B,YACmB,OAyBjB;AAzBiB;AAAA,EAyBhB;AAAA,EAzBgB;AAAA,EAHX;AAAA,EA8BR,IAAI,UAA6C;AAC/C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,aAA6C;AACjD,QAAI,KAAK,QAAS,QAAO,KAAK;AAC9B,UAAM,SAAS,MAAM,KAAK,MAAM,QAAQ,KAAK;AAAA,MAC3C,WAAW,KAAK,MAAM;AAAA,MACtB,OAAO,KAAK,MAAM,SAAS;AAAA,MAC3B,UAAU,KAAK,MAAM;AAAA,MACrB,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK,MAAM,aAAa;AAAA,MACnC,WAAW,KAAK,MAAM;AAAA,IACxB,CAAC;AACD,SAAK,UAAU,KAAK,KAAK,MAAM;AAC/B,SAAK,MAAM,UAAU,EAAE,WAAW,OAAO,IAAI,SAAS,OAAO,QAAQ,CAAC;AACtE,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,QAAuB;AAC3B,UAAM,UAAU,KAAK;AACrB,SAAK,UAAU;AACf,QAAI,CAAC,QAAS;AACd,UAAM,QAAQ,QAAQ;AACtB,SAAK,MAAM,UAAU,EAAE,WAAW,QAAQ,GAAG,CAAC;AAAA,EAChD;AAAA,EAEQ,KAAK,MAAoD;AAC/D,UAAM,QAAQ,KAAK;AACnB,WAAO,IAAI,MAAM,oCAAoC,sBAAsB;AAAA,MAChE,KAAK,KAAK;AAAA,MACV,UAAU,KAAK;AAAA,MAExB,MAAM,KAAK,cAA4D;AACrE,cAAM,UAAU,YAAY,IAAI;AAChC,cAAM,eAAe;AAAA,UACnB,WAAW,KAAK;AAAA,UAChB,SAAS,eAAe,aAAa,OAAO;AAAA,UAC5C,KAAK,aAAa;AAAA,UAClB,WAAW,aAAa;AAAA,QAC1B,CAAC;AACD,YAAI;AACF,gBAAM,SAAS,MAAM,KAAK,KAAK,YAAY;AAC3C,gBAAM,iBAAiB;AAAA,YACrB,WAAW,KAAK;AAAA,YAChB,UAAU,OAAO;AAAA,YACjB,QAAQ,OAAO;AAAA,YACf,UAAU,OAAO;AAAA,YACjB,YAAY,OAAO;AAAA,UACrB,CAAC;AACD,iBAAO;AAAA,QACT,SAAS,OAAO;AACd,gBAAM,cAAc;AAAA,YAClB,WAAW,KAAK;AAAA,YAChB;AAAA,YACA,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,OAAO;AAAA,UACpD,CAAC;AACD,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,MAEA,MAAM,QAAuB;AAC3B,cAAM,KAAK,QAAQ;AAAA,MACrB;AAAA,IACF,EAAE;AAAA,EACJ;AACF;;;AChFO,IAAM,wBAAN,MAA4B;AAAA,EAQjC,YACmB,OAWjB;AAXiB;AAYjB,SAAK,aAAa,MAAM;AACxB,SAAK,kBAAkB,CAAC,MAAM;AAAA,EAChC;AAAA,EAdmB;AAAA,EARX;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB;AAAA,EAmBR,IAAI,SAA6B;AAC/B,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,MAAM,oBAAmC;AACvC,QAAI,KAAK,YAAa;AACtB,UAAM,KAAK,MAAM,QAAQ,CAAC,UAAU,MAAM,KAAK,CAAC;AAChD,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,MAAM,mBAA4D;AAChE,QAAI,KAAK,cAAe,QAAO;AAC/B,SAAK,gBAAgB;AAErB,WAAO;AAAA,MACL,WAAW,MAAM,KAAK,MAAM,kBAAkB,CAAC,UAAU,MAAM,cAAc,CAAC;AAAA,MAC9E,kBAAkB,MAAM,KAAK,MAAM,0BAA0B,CAAC,UAAU,MAAM,qBAAqB,CAAC;AAAA,MACpG,YAAY,MAAM,KAAK,MAAM,mBAAmB,CAAC,UAAU,MAAM,eAAe,CAAC;AAAA,MACjF,QAAQ,MAAM,KAAK,MAAM,eAAe,CAAC,UAAU,MAAM,WAAW,CAAC;AAAA,MACrE,SAAS,MAAM,KAAK,MAAM,gBAAgB,CAAC,UAAU,MAAM,YAAY,CAAC;AAAA,IAC1E;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,UAAyC;AAC5D,UAAM,KAAK,MAAM,mBAAmB,CAAC,UAAU,MAAM,eAAe,QAAQ,CAAC;AAAA,EAC/E;AAAA,EAEA,MAAM,YAAY,SAAoC;AACpD,UAAM,KAAK,MAAM,gBAAgB,CAAC,UAAU,MAAM,YAAY,OAAO,CAAC;AAAA,EACxE;AAAA,EAEA,MAAM,aAAa,UAA0C;AAC3D,UAAM,KAAK,MAAM,iBAAiB,CAAC,UAAU,MAAM,aAAa,QAAQ,CAAC;AAAA,EAC3E;AAAA,EAEA,MAAM,eAAe,IAA2B;AAC9C,UAAM,KAAK,MAAM,mBAAmB,CAAC,UAAU,MAAM,eAAe,EAAE,CAAC;AAAA,EACzE;AAAA,EAEA,MAAM,oBAAoB,UAA0C;AAClE,UAAM,KAAK,MAAM,yBAAyB,CAAC,UAAU,MAAM,oBAAoB,QAAQ,CAAC;AAAA,EAC1F;AAAA,EAEA,MAAM,YAAY,OAA0C;AAC1D,UAAM,KAAK,MAAM,gBAAgB,CAAC,UAAU,MAAM,YAAY,KAAK,CAAC;AAAA,EACtE;AAAA,EAEA,MAAM,YAAY,SAIA;AAChB,UAAM,KAAK,MAAM,gBAAgB,CAAC,UAAU,MAAM,YAAY,OAAO,CAAC;AAAA,EACxE;AAAA,EAEA,MAAM,SAAS,OAA8B;AAC3C,UAAM,KAAK,MAAM;AACjB,SAAK,aAAa;AAClB,SAAK,QAAQ;AACb,SAAK,eAAe;AACpB,SAAK,cAAc;AACnB,SAAK,gBAAgB;AACrB,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEA,MAAM,QAAuB;AAC3B,UAAM,QAAQ,KAAK,UAAU,KAAK,eAAe,MAAM,KAAK,eAAe;AAC3E,UAAM,OAAO,QAAQ;AAAA,EACvB;AAAA,EAEA,MAAc,YAAY,OAAyC;AACjE,QAAI;AACF,UAAI,KAAK,MAAM,mBAAmB,yBAAyB,KAAK,iBAAiB;AAC/E,cAAM,KAAK,MAAM,QAAQ,UAAU;AAAA,UACjC;AAAA,UACA,WAAW,KAAK,MAAM;AAAA,UACtB,UAAU,KAAK,MAAM;AAAA,UACrB,WAAW,KAAK,MAAM;AAAA,UACtB,MAAM,KAAK,MAAM,KAAK;AAAA,QACxB,CAAC;AAAA,MACH;AACA,WAAK,kBAAkB;AACvB,YAAM,QAAQ,MAAM,KAAK,MAAM,QAAQ,QAAQ;AAAA,QAC7C;AAAA,QACA,WAAW,KAAK,MAAM;AAAA,QACtB,UAAU,KAAK,MAAM;AAAA,QACrB,WAAW,KAAK,MAAM;AAAA,MACxB,CAAC;AACD,WAAK,MAAM,UAAU,EAAE,WAAW,KAAK,MAAM,QAAQ,IAAI,OAAO,QAAQ,MAAM,OAAO,CAAC;AACtF,aAAO;AAAA,IACT,SAAS,OAAO;AACd,WAAK,MAAM,UAAU,EAAE,WAAW,YAAY,MAAM,CAAC;AACrD,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAc,WAAqC;AACjD,QAAI,KAAK,MAAO,QAAO,KAAK;AAC5B,SAAK,iBAAiB,KAAK,YAAY,KAAK,UAAU;AACtD,SAAK,QAAQ,MAAM,KAAK;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAc,MACZ,WACA,OACY;AACZ,QAAI;AACF,aAAO,MAAM,MAAM,MAAM,KAAK,SAAS,CAAC;AAAA,IAC1C,SAAS,OAAO;AACd,WAAK,MAAM,UAAU,EAAE,WAAW,MAAM,CAAC;AACzC,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;AC5JA,SAASA,UAAiB;AACxB,UAAO,oBAAI,KAAK,GAAE,YAAY;AAChC;AAEA,IAAM,yBAAN,cAAyD,aAAuB;AAAC;AAE1E,IAAM,gBAAN,MAAoB;AAAA,EACjB,SAAyB,CAAC;AAAA,EAC1B,WAAW;AAAA,EACF,YAAY,oBAAI,IAAyB;AAAA,EAE1D,IAAI,QAAgB;AAClB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,UAAU,UAA2C;AACnD,SAAK,UAAU,IAAI,QAAQ;AAC3B,WAAO,MAAM,KAAK,UAAU,OAAO,QAAQ;AAAA,EAC7C;AAAA,EAEA,KAAK,SAAqC;AACxC,QAAI,QAAQ,WAAW,EAAG;AAC1B,SAAK,SAAS,QAAQ,IAAI,CAAC,WAAW,IAAI,uBAAuB,MAAM,CAAC;AACxE,SAAK,WAAW,KAAK,IAAI,GAAG,GAAG,QAAQ,IAAI,CAAC,UAAU,MAAM,GAAG,CAAC;AAAA,EAClE;AAAA,EAEA,IAAI,IAAqB;AACvB,WAAO,KAAK,OAAO,KAAK,CAAC,UAAU,MAAM,OAAO,EAAE;AAAA,EACpD;AAAA,EAEA,gBAAgB,UAA4C;AAC1D,QAAI;AACJ,eAAW,SAAS,KAAK,QAAQ;AAC/B,UAAI,MAAM,OAAO,aAAa,SAAU;AACxC,UAAI,CAAC,UAAU,MAAM,OAAO,MAAM,OAAO,OAAO,IAAK,UAAS;AAAA,IAChE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAYU;AACf,UAAM,SAA6B;AAAA,MACjC,IAAI,SAAS;AAAA,MACb,KAAK,EAAE,KAAK;AAAA,MACZ,UAAU,MAAM;AAAA,MAChB,MAAM,MAAM;AAAA,MACZ,cAAc,MAAM;AAAA,MACpB,IAAIA,QAAO;AAAA,MACX,QAAQ,MAAM;AAAA,MACd,SAAS,MAAM;AAAA,MACf,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,MACd,QAAQ,MAAM;AAAA,MACd,eAAe,MAAM;AAAA,MACrB,aAAa,MAAM;AAAA,MACnB,QAAQ;AAAA,MACR,UAAU,MAAM;AAAA,IAClB;AAEA,UAAM,QAAQ,IAAI,MAAM,WAAW,MAAM;AACzC,SAAK,OAAO,KAAK,KAAK;AACtB,WAAO;AAAA,EACT;AAAA,EAEA,MACE,QACA,gBAC0B;AAC1B,QAAI,SAAS,KAAK;AAClB,QAAI,CAAC,QAAQ,iBAAiB;AAC5B,eAAS,OAAO,OAAO,CAAC,UAAU;AAChC,cAAM,SAAS,eAAe,IAAI,MAAM,OAAO,QAAQ;AACvD,eAAO,WAAW,UAAa,MAAM,OAAO,OAAO;AAAA,MACrD,CAAC;AAAA,IACH;AACA,QAAI,QAAQ,MAAO,UAAS,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,UAAU,OAAO,KAAM,CAAC;AAC5F,QAAI,QAAQ,KAAM,UAAS,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,OAAO,IAAI;AAC9E,QAAI,QAAQ,WAAY,UAAS,OAAO,OAAO,CAAC,UAAU,MAAM,OAAO,OAAO,SAAS,OAAO,UAAU;AACxG,QAAI,QAAQ,MAAO,UAAS,OAAO,OAAO,CAAC,UAAU,MAAM,MAAM,OAAO,KAAM;AAC9E,QAAI,QAAQ,MAAO,UAAS,OAAO,OAAO,CAAC,UAAU,MAAM,MAAM,OAAO,KAAM;AAC9E,QAAI,OAAO,QAAQ,UAAU,YAAY,OAAO,QAAQ,EAAG,UAAS,OAAO,MAAM,CAAC,OAAO,KAAK;AAC9F,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,QAA2C;AACtD,eAAW,YAAY,KAAK,UAAW,OAAM,SAAS,MAAM;AAAA,EAC9D;AACF;;;ACzFA,IAAM,eAAe;AAErB,SAASC,UAAiB;AACxB,UAAO,oBAAI,KAAK,GAAE,YAAY;AAChC;AAEA,SAASC,WAAa,OAAa;AACjC,SAAO,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AACzC;AAEA,SAAS,uBAAuB,OAIX;AACnB,SAAO;AAAA,IACL,IAAI,SAAS;AAAA,IACb,UAAU,OAAO,YAAY;AAAA,IAC7B,eAAe,OAAO;AAAA,IACtB,KAAK,OAAO,OAAO;AAAA,IACnB,WAAWD,QAAO;AAAA,EACpB;AACF;AAEA,SAAS,kBAAkB,OAIX;AACd,SAAO;AAAA,IACL,IAAI,SAAS;AAAA,IACb,UAAU,OAAO,YAAY;AAAA,IAC7B,aAAa,OAAO;AAAA,IACpB,KAAK,OAAO,OAAO;AAAA,IACnB,WAAWA,QAAO;AAAA,EACpB;AACF;AAOO,IAAM,oBAAN,MAAwB;AAAA,EACrB,WAA2B,CAAC;AAAA,EAC5B,aAAa;AAAA,EACb,mBAAqC,uBAAuB;AAAA,EAC5D,cAA2B,kBAAkB;AAAA,EACpC,WAAW,oBAAI,IAA8B;AAAA,IAC5D,CAAC,cAAc,EAAE,IAAI,cAAc,WAAWA,QAAO,EAAE,CAAC;AAAA,EAC1D,CAAC;AAAA,EAED,IAAI,QAAgB;AAClB,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,IAAI,yBAA2C;AAC7C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,oBAAiC;AACnC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,cAA8B;AAChC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,cAAkC;AACpC,WAAO,CAAC,GAAG,KAAK,SAAS,OAAO,CAAC;AAAA,EACnC;AAAA,EAEA,YAAY,UAAoC;AAC9C,eAAW,UAAU,UAAU;AAC7B,UAAI,CAAC,KAAK,SAAS,IAAI,OAAO,EAAE,EAAG,MAAK,SAAS,IAAI,OAAO,IAAIC,WAAU,MAAM,CAAC;AAAA,IACnF;AAAA,EACF;AAAA,EAEA,eAAe,UAAgC;AAC7C,QAAI,SAAS,WAAW,EAAG;AAC3B,SAAK,WAAWA,WAAU,QAAQ;AAClC,SAAK,aAAa,KAAK,IAAI,GAAG,GAAG,SAAS,IAAI,CAAC,YAAY,QAAQ,GAAG,CAAC;AAAA,EACzE;AAAA,EAEA,YAAY,OAKH;AACP,SAAK,YAAY,MAAM,YAAY,CAAC,CAAC;AACrC,UAAM,iBAAiB,MAAM,iBAAiB;AAC9C,UAAM,YAAY,MAAM,YAAY;AACpC,QAAI,CAAC,kBAAkB,KAAK,SAAS,KAAK,CAAC,YAAY,QAAQ,OAAO,cAAc,GAAG;AACrF,WAAK,mBAAmBA,WAAU,MAAM,gBAAgB;AAAA,IAC1D;AACA,QAAI,CAAC,aAAa,MAAM,YAAY,SAAS,GAAG;AAC9C,WAAK,cAAcA,WAAU,MAAM,WAAW;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,eAAe,OAIN;AACP,SAAK,YAAY,MAAM,YAAY,CAAC,CAAC;AACrC,SAAK,mBAAmBA,WAAU,MAAM,gBAAgB;AACxD,SAAK,cAAcA,WAAU,MAAM,WAAW;AAAA,EAChD;AAAA,EAEA,cAAc,OAWG;AACf,UAAM,WAAW,MAAM,YAAY,KAAK,iBAAiB;AACzD,UAAM,UAAwB;AAAA,MAC5B,IAAI,MAAM,MAAM,SAAS;AAAA,MACzB,KAAK,EAAE,KAAK;AAAA,MACZ;AAAA,MACA,iBAAiB,KAAK,iBAAiB;AAAA,MACvC,MAAM,MAAM;AAAA,MACZ,YAAY,MAAM,UAAU;AAAA,MAC5B,UAAU,MAAM,UAAU;AAAA,MAC1B,SAAS,MAAM;AAAA,MACf,WAAW,MAAM,aAAaD,QAAO;AAAA,MACrC,QAAQ,MAAM;AAAA,MACd,QAAQ,MAAM;AAAA,MACd,QAAQ,MAAM;AAAA,MACd,aAAaC,WAAU,KAAK,WAAW;AAAA,MACvC,UAAU,MAAM;AAAA,IAClB;AACA,SAAK,SAAS,KAAK,OAAO;AAC1B,SAAK,mBAAmB,uBAAuB;AAAA,MAC7C;AAAA,MACA,eAAe,QAAQ;AAAA,MACvB,KAAK,QAAQ;AAAA,IACf,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,uBAAuB,WAA4B;AACjD,UAAM,UAAU,KAAK,SAAS,KAAK,CAAC,cAAc,UAAU,OAAO,SAAS;AAC5E,QAAI,CAAC,QAAS,QAAO;AACrB,YAAQ,cAAcA,WAAU,KAAK,WAAW;AAChD,WAAO;AAAA,EACT;AAAA,EAEA,wBAA8B;AAC5B,UAAM,SAAS,KAAK;AACpB,UAAM,SAAS,KAAK,oBAAoB,OAAO,QAAQ;AACvD,QAAI,CAAC,UAAU,OAAO,OAAO,OAAO,cAAe;AAEnD,UAAM,WAAW,SAAS;AAC1B,UAAM,SAA2B;AAAA,MAC/B,IAAI;AAAA,MACJ,WAAWD,QAAO;AAAA,MAClB,gBAAgB,OAAO;AAAA,MACvB,iBAAiB,OAAO;AAAA,MACxB,kBAAkB,OAAO;AAAA,MACzB,gBAAgB,KAAK,YAAY;AAAA,IACnC;AACA,SAAK,SAAS,IAAI,UAAU,MAAM;AAClC,SAAK,mBAAmB,uBAAuB;AAAA,MAC7C;AAAA,MACA,eAAe,OAAO;AAAA,MACtB,KAAK,OAAO;AAAA,IACd,CAAC;AACD,SAAK,cAAc,kBAAkB;AAAA,MACnC;AAAA,MACA,aAAa,KAAK,YAAY;AAAA,MAC9B,KAAK,KAAK,YAAY;AAAA,IACxB,CAAC;AAAA,EACH;AAAA,EAEA,2BAA2B,aAA6C;AACtE,QAAI,CAAC,eAAe,YAAY,OAAO,OAAO,KAAK,YAAY,IAAK;AAEpE,UAAM,WAAW,SAAS;AAC1B,UAAM,SAA2B;AAAA,MAC/B,IAAI;AAAA,MACJ,WAAWA,QAAO;AAAA,MAClB,gBAAgB,KAAK,YAAY;AAAA,MACjC,iBAAiB,KAAK,iBAAiB;AAAA,MACvC,kBAAkB,KAAK,iBAAiB;AAAA,MACxC,gBAAgB,KAAK,YAAY;AAAA,IACnC;AACA,SAAK,SAAS,IAAI,UAAU,MAAM;AAClC,SAAK,mBAAmB,uBAAuB;AAAA,MAC7C;AAAA,MACA,eAAe,KAAK,iBAAiB;AAAA,MACrC,KAAK,KAAK,iBAAiB;AAAA,IAC7B,CAAC;AACD,SAAK,cAAc,kBAAkB;AAAA,MACnC;AAAA,MACA,aAAa,KAAK,YAAY;AAAA,MAC9B,KAAK,KAAK,YAAY;AAAA,IACxB,CAAC;AAAA,EACH;AAAA,EAEA,mBAAmB,QAAkC;AACnD,SAAK,cAAc,kBAAkB;AAAA,MACnC,UAAU,OAAO;AAAA,MACjB,aAAa,OAAO;AAAA,MACpB,KAAK,OAAO;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,SAA2B,eAAwC;AACxE,UAAM,YAAY,SAAS,kBAAkB,SAAY,KAAK,iBAAiB;AAC/E,QAAI,WAAW,YACX,KAAK,SAAS,OAAO,CAAC,YAAY,UAAU,IAAI,QAAQ,EAAE,CAAC,IAC3D,CAAC,GAAG,KAAK,QAAQ;AACrB,QAAI,CAAC,SAAS,cAAe,YAAW,SAAS,OAAO,CAAC,YAAY,CAAC,QAAQ,MAAM;AACpF,QAAI,SAAS,qBAAqB,eAAe;AAC/C,iBAAW,SAAS,OAAO,CAAC,YAAY,QAAQ,WAAW,aAAa;AAAA,IAC1E;AACA,QAAI,SAAS,OAAO,QAAQ;AAC1B,YAAM,UAAU,IAAI,IAAI,QAAQ,KAAK;AACrC,iBAAW,SAAS,OAAO,CAAC,YAAY,QAAQ,IAAI,QAAQ,IAAI,CAAC;AAAA,IACnE;AACA,aAAS,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG;AACrC,QAAI,OAAO,SAAS,UAAU,YAAY,QAAQ,QAAQ,EAAG,YAAW,SAAS,MAAM,CAAC,QAAQ,KAAK;AACrG,WAAO;AAAA,EACT;AAAA,EAEA,kBAAkB,QAGhB;AACA,QAAI,WAAW,SAAS;AACtB,aAAO;AAAA,QACL,kBAAkB,uBAAuB,EAAE,UAAU,cAAc,KAAK,EAAE,CAAC;AAAA,QAC3E,aAAa,kBAAkB,EAAE,UAAU,cAAc,KAAK,EAAE,CAAC;AAAA,MACnE;AAAA,IACF;AAEA,QAAI,WAAW,UAAU;AACvB,YAAM,mBAAmB,KAAK,sBAAsB,KAAK,iBAAiB,QAAQ;AAClF,YAAME,QAAO,iBAAiB,gBAC1B,KAAK,SAAS,KAAK,CAAC,YAAY,QAAQ,OAAO,iBAAiB,aAAa,IAC7E;AACJ,aAAO;AAAA,QACL;AAAA,QACA,aAAaA,QAAO,KAAK,sBAAsBA,KAAI,IAAI,KAAK;AAAA,MAC9D;AAAA,IACF;AAEA,QAAI,eAAe,QAAQ;AACzB,YAAM,UAAU,KAAK,SAAS,KAAK,CAAC,cAAc,UAAU,OAAO,OAAO,SAAS;AACnF,UAAI,CAAC,QAAS,OAAM,IAAI,MAAM,uBAAuB,OAAO,SAAS,kBAAkB;AACvF,aAAO;AAAA,QACL,kBAAkB,uBAAuB;AAAA,UACvC,UAAU,QAAQ;AAAA,UAClB,eAAe,QAAQ;AAAA,UACvB,KAAK,QAAQ;AAAA,QACf,CAAC;AAAA,QACD,aAAa,KAAK,sBAAsB,OAAO;AAAA,MACjD;AAAA,IACF;AAEA,UAAM,OAAO,OAAO,OAAO,gBACvB,KAAK,SAAS,KAAK,CAAC,YAAY,QAAQ,OAAO,OAAO,OAAO,aAAa,IAC1E;AACJ,WAAO;AAAA,MACL,kBAAkBD,WAAU,OAAO,MAAM;AAAA,MACzC,aAAa,OAAO,KAAK,sBAAsB,IAAI,IAAI,kBAAkB;AAAA,QACvE,UAAU,OAAO,OAAO;AAAA,QACxB,KAAK;AAAA,MACP,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,kBAAkB,UAAkF;AAClG,SAAK,mBAAmB,SAAS;AACjC,SAAK,cAAc,SAAS;AAAA,EAC9B;AAAA,EAEA,oBAAoB,SAAsB,KAAK,aAAkC;AAC/E,UAAM,WAAW,oBAAI,IAAoB;AACzC,QAAI,WAA+B,OAAO;AAC1C,QAAI,SAAS,OAAO;AAEpB,WAAO,UAAU;AACf,YAAM,WAAW,SAAS,IAAI,QAAQ;AACtC,eAAS,IAAI,UAAU,aAAa,SAAY,SAAS,KAAK,IAAI,UAAU,MAAM,CAAC;AACnF,YAAM,SAAS,KAAK,SAAS,IAAI,QAAQ;AACzC,UAAI,CAAC,QAAQ,eAAgB;AAC7B,iBAAW,OAAO;AAClB,eAAS,OAAO,kBAAkB;AAAA,IACpC;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,iBAAiB,SAA2B,KAAK,kBAA+B;AACtF,UAAM,OAAO,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;AAC1E,UAAM,SAAS,oBAAI,IAAY;AAC/B,QAAI,UAAU,OAAO,gBAAgB,KAAK,IAAI,OAAO,aAAa,IAAI;AACtE,WAAO,SAAS;AACd,UAAI,QAAQ,MAAM,OAAO,IAAK;AAC9B,aAAO,IAAI,QAAQ,EAAE;AACrB,gBAAU,QAAQ,kBAAkB,KAAK,IAAI,QAAQ,eAAe,IAAI;AAAA,IAC1E;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,oBAAoB,UAA4C;AACtE,QAAI;AACJ,eAAW,WAAW,KAAK,UAAU;AACnC,UAAI,QAAQ,aAAa,SAAU;AACnC,UAAI,CAAC,UAAU,QAAQ,MAAM,OAAO,IAAK,UAAS;AAAA,IACpD;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,sBAAsB,SAAoC;AAChE,WAAO,QAAQ,cACXA,WAAU,QAAQ,WAAW,IAC7B,kBAAkB;AAAA,MAChB,UAAU,QAAQ;AAAA,MAClB,KAAK,KAAK,YAAY;AAAA,MACtB,aAAa,KAAK,YAAY;AAAA,IAChC,CAAC;AAAA,EACP;AAAA,EAEQ,sBAAsB,UAAoC;AAChE,UAAM,SAAS,KAAK,oBAAoB,QAAQ;AAChD,UAAM,SAAS,KAAK,SAAS,IAAI,QAAQ;AACzC,WAAO,uBAAuB;AAAA,MAC5B;AAAA,MACA,eAAe,QAAQ,MAAM,QAAQ;AAAA,MACrC,KAAK,QAAQ,OAAO,QAAQ,oBAAoB;AAAA,IAClD,CAAC;AAAA,EACH;AACF;;;AC1UO,IAAM,eAAN,MAAmB;AAAA,EACxB,YACmB,OACA,OAIjB;AALiB;AACA;AAAA,EAIhB;AAAA,EALgB;AAAA,EACA;AAAA,EAMnB,QAAQ,UAAsD;AAC5D,UAAM,aAAa,KAAK,uBAAuB,QAAQ;AACvD,QAAI,CAAC,YAAY;AACf,UAAI,OAAO,aAAa,SAAU,OAAM,IAAI,MAAM,iBAAiB,iBAAiB,QAAQ,CAAC,IAAI;AACjG,aAAO;AAAA,QACL,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,WAAO;AAAA,MACL,MAAO,WAAW,cAAc,YAAY,UAAU;AAAA,MACtD,YAAY,YAAY,UAAU;AAAA,MAClC,UAAU,iBAAiB,UAAU;AAAA,MACrC,QAAQ,WAAW;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,oCAAoC,UAAgC;AAClE,eAAW,WAAW,UAAU;AAC9B,UAAI,QAAQ,UAAU,QAAQ,SAAS,QAAS;AAChD,WAAK,gCAAgC,QAAQ,IAAI;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,QAAQ,MAAiD;AACvD,WAAO;AAAA,MACL,MAAM,iBAAiB,IAAI;AAAA,MAC3B,MAAM,YAAY,IAAI;AAAA,MACtB,OAAO,kBAAkB,IAAI;AAAA,MAC7B,QAAQ,KAAK;AAAA,MACb,YAAY,KAAK;AAAA,MACjB,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,IACpB;AAAA,EACF;AAAA,EAEQ,uBAAuB,UAA2E;AACxG,UAAM,aAAa,KAAK,MAAM,KAAK,CAAC,SAAS,oBAAoB,MAAM,QAAQ,CAAC;AAChF,QAAI,WAAY,QAAO;AACvB,QAAI,OAAO,aAAa,SAAU,QAAO;AACzC,QAAI,eAAe,QAAQ,EAAG,QAAO;AACrC,QAAI,YAAY,QAAQ,GAAG;AACzB,UAAI;AACF,eAAO,IAAK,SAA6C;AAAA,MAC3D,QAAQ;AACN,cAAM,IAAI,MAAM,SAAS,iBAAiB,QAAQ,CAAC,0EAA0E;AAAA,MAC/H;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,gCAAgC,MAA8B;AACpE,UAAM,eAAe,KAAK,MAAM;AAChC,QAAI,gBAAgB,CAAC,aAAa,IAAI,GAAG;AACvC,YAAM,IAAI,MAAM,mBAAmB,KAAK,MAAM,eAAe,mCAAmC,IAAI,IAAI;AAAA,IAC1G;AAAA,EACF;AACF;;;ACrDA,SAAS,wBAAwB,QAA2C;AAC1E,SAAO,OAAO,IAAI,CAAC,WAAW;AAAA,IAC5B,MAAM,MAAM;AAAA,IACZ,SAAS,MAAM;AAAA,IACf,MAAM,MAAM;AAAA,IACZ,UAAU,MAAM;AAAA,IAChB,UAAU,MAAM;AAAA,EAClB,EAAE;AACJ;AAEA,SAAS,oBAAoB,QAAiBE,UAAqC;AACjF,QAAM,aAAa,gBAAgB,MAAM;AACzC,QAAM,SAAS,WAAW,UAAUA,QAAO;AAC3C,MAAI,OAAO,QAAS,QAAO,EAAE,IAAI,MAAM,MAAM,OAAO,KAAK;AACzD,QAAM,SAAS,WAAW,gBAAgB,OAAO,KAAK;AACtD,SAAO,EAAE,IAAI,OAAO,OAAO,OAAO,OAAO,QAAQ,eAAe,wBAAwB,MAAM,EAAE;AAClG;AAEA,SAAS,gBAAgB,MAAwB;AAC/C,SAAO,QAAQ,QACT,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI,KAAK,OAAO,KAAK,IAA+B,EAAE,WAAW;AACpH;AAEA,SAAS,iBAAiB,SAAqB,MAA8B;AAC3E,QAAM,WAAW,QAAQ,MAAM,IAAI;AACnC,MAAI,SAAU,QAAO;AACrB,QAAM,SAAS,EAAE,MAAM,OAAO,GAAG,YAAY,GAAG,iBAAiB,EAAE;AACnE,UAAQ,MAAM,IAAI,IAAI;AACtB,SAAO;AACT;AAEA,SAAS,oBAAoB,OAAkC;AAC7D,SAAO,UAAU,8BACZ,UAAU,0BACV,UAAU,yBACV,UAAU,gBACX,QACA;AACN;AAEO,IAAM,eAAN,MAAmB;AAAA,EAGxB,YACmB,OA+BjB;AA/BiB;AAAA,EA+BhB;AAAA,EA/BgB;AAAA,EAHX,QAAQ;AAAA,EAoChB,MAAM,QAAQ,OAOe;AAC3B,QAAI,KAAK,QAAQ,EAAG,OAAM,IAAI,MAAM,iCAAiC;AAErE,UAAM,SAAS,MAAM,UAAU,EAAE,MAAM,UAAU;AACjD,UAAM,KAAK,MAAM,UAAU,SAAS;AACpC,UAAM,aAAiC,EAAE,MAAM,QAAQ,IAAI,MAAM,MAAM,KAAK,KAAK;AACjF,UAAM,QAAQ,YAAY,IAAI;AAC9B,UAAM,UAAU,KAAK,MAAM,WAAW;AACtC,UAAM,SAAS,iBAAiB,SAAS,MAAM,KAAK,IAAI;AACxD,WAAO;AACP,YAAQ;AACR,UAAM,KAAK,MAAM,mBAAmB,MAAM,MAAM,MAAM,MAAM,IAAI,MAAM;AACtE,SAAK,MAAM;AAAA,MACT;AAAA,MACA,EAAE,UAAU,MAAM,KAAK,MAAM,MAAM,eAAe,MAAM,IAAI,GAAG,MAAM,MAAM,KAAK,KAAK;AAAA,MACrF;AAAA,MACA;AAAA,MACA,MAAM,qBAAqB,MAAM;AAAA,IACnC;AACA,QAAI,gBAAgB,MAAM,IAAI,GAAG;AAC/B,WAAK,MAAM,IAAI,kBAAkB,EAAE,UAAU,MAAM,KAAK,KAAK,GAAG,YAAY,IAAI,MAAM,qBAAqB,MAAM,mBAAmB;AAAA,IACtI;AACA,UAAM,aAAa,MAAM,KAAK,MAAM,aAAa,gBAAgB,EAAE,IAAI,MAAM,MAAM,KAAK,MAAM,MAAM,MAAM,KAAK,GAAG;AAAA,MAChH;AAAA,MACA,eAAe;AAAA,MACf,aAAa,MAAM,qBAAqB,MAAM;AAAA,IAChD,CAAC;AACD,UAAM,mBAA4C;AAAA,MAChD,QAAQ;AAAA,MACR,eAAe;AAAA,MACf,aAAa,WAAW;AAAA,IAC1B;AACA,UAAM,qBAA8C;AAAA,MAClD;AAAA,MACA,eAAe;AAAA,MACf,aAAa,WAAW;AAAA,IAC1B;AAEA,UAAM,aAAa,oBAAoB,MAAM,KAAK,aAAa,MAAM,IAAI;AACzE,QAAI,CAAC,WAAW,IAAI;AAClB,YAAM,QAAQ,KAAK,UAAU;AAAA,QAC3B,OAAO,WAAW;AAAA,QAClB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,SAAS,EAAE,eAAe,WAAW,cAAc;AAAA,MACrD,CAAC;AACD,YAAM,SAAS,KAAK,oBAAoB;AAAA,QACtC,UAAU,MAAM,KAAK;AAAA,QACrB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,eAAe,WAAW;AAAA,MAC5B,CAAC;AACD,YAAM,aAAa,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK;AACvD,aAAO;AACP,aAAO,mBAAmB;AAC1B,cAAQ,OAAO,KAAK,qBAAqB,OAAO,KAAK,MAAM,WAAW,CAAC;AACvE,WAAK,MAAM;AAAA,QACT;AAAA,QACA,EAAE,UAAU,MAAM,KAAK,MAAM,QAAQ,WAAW,OAAO;AAAA,QACvD;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX,EAAE,WAAW;AAAA,MACf;AACA,YAAM,KAAK,MAAM,qBAAqB,MAAM,MAAM,QAAQ,EAAE;AAC5D,YAAM,KAAK,cAAc,OAAO,gBAAgB;AAChD,YAAM,KAAK,MAAM,aAAa,cAAc,EAAE,IAAI,MAAM,MAAM,KAAK,MAAM,YAAY,OAAO,GAAG,kBAAkB;AACjH,WAAK,MAAM,4BAA4B;AACvC,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,QACE;AAAA,QACA,MAAM,MAAM,KAAK;AAAA,QACjB,MAAM,WAAW;AAAA,QACjB,QAAQ,KAAK,MAAM,eAAe;AAAA,QAClC,MAAM,MAAM,KAAK;AAAA,QACjB,aAAa,MAAM,KAAK;AAAA,QACxB,mBAAmB,MAAM,KAAK;AAAA,MAChC;AAAA,MACA,MAAM;AAAA,MACN,WAAW;AAAA,MACX;AAAA,IACF;AACA,QAAI,CAAC,UAAU;AACb,YAAM,QAAQ,KAAK,UAAU;AAAA,QAC3B,OAAO,IAAI,MAAM,SAAS,MAAM,KAAK,IAAI,gCAAgC;AAAA,QACzE,MAAM;AAAA,QACN,SAAS,SAAS,MAAM,KAAK,IAAI;AAAA,QACjC,QAAQ;AAAA,QACR,UAAU;AAAA,MACZ,CAAC;AACD,YAAM,SAAS,KAAK,oBAAoB;AAAA,QACtC,UAAU,MAAM,KAAK;AAAA,QACrB,MAAM;AAAA,QACN,SAAS,SAAS,MAAM,KAAK,IAAI;AAAA,QACjC,UAAU,EAAE,QAAQ,KAAK;AAAA,MAC3B,CAAC;AACD,aAAO;AACP,YAAM,aAAa,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK;AACvD,aAAO,mBAAmB;AAC1B,cAAQ,OAAO,KAAK,qBAAqB,OAAO,KAAK,MAAM,WAAW,CAAC;AACvE,WAAK,MAAM,IAAI,eAAe;AAAA,QAC5B,UAAU,MAAM,KAAK;AAAA,QACrB;AAAA,QACA;AAAA,QACA,QAAQ,eAAe,MAAM;AAAA,MAC/B,GAAG,YAAY,IAAI,WAAW,IAAI,EAAE,WAAW,CAAC;AAChD,YAAM,KAAK,MAAM,qBAAqB,MAAM,MAAM,QAAQ,EAAE;AAC5D,YAAM,KAAK,cAAc,OAAO,gBAAgB;AAChD,YAAM,KAAK,MAAM,aAAa,cAAc,EAAE,IAAI,MAAM,MAAM,KAAK,MAAM,YAAY,QAAQ,OAAO,GAAG,kBAAkB;AACzH,WAAK,MAAM,4BAA4B;AACvC,aAAO;AAAA,IACT;AAEA,SAAK;AACL,QAAI;AACF,YAAM,KAAK,MAAM,kBAAkB;AACnC,YAAM,WAAW,MAAM,MAAM,KAAK,QAAQ,WAAW,MAAM,KAAK,MAAM,mBAAmB,EAAE,IAAI,MAAM,MAAM,KAAK,KAAK,GAAG,YAAY,IAAI,WAAW,EAAE,CAAC;AACtJ,YAAM,SAAS,KAAK,gCAAgC,MAAM,MAAM,QAAQ;AACxE,YAAM,aAAa,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK;AACvD,aAAO,mBAAmB;AAC1B,UAAI,OAAO,QAAS,QAAO;AAC3B,UAAI,OAAO,SAAS;AAClB,cAAM,YAAY,oBAAoB,OAAO,UAAU,SAAS;AAChE,cAAM,QAAQ,KAAK,UAAU;AAAA,UAC3B,OAAO,IAAI,MAAM,OAAO,WAAW,wBAAwB;AAAA,UAC3D,MAAM;AAAA,UACN,SAAS,OAAO,WAAW;AAAA,UAC3B,QAAQ;AAAA,UACR,SAAS,OAAO;AAAA,QAClB,CAAC;AACD,gBAAQ,OAAO,KAAK,qBAAqB,OAAO,KAAK,MAAM,WAAW,CAAC;AACvE,aAAK,MAAM,IAAI,eAAe;AAAA,UAC5B,UAAU,MAAM,KAAK;AAAA,UACrB;AAAA,UACA;AAAA,UACA,QAAQ,eAAe,MAAM;AAAA,QAC/B,GAAG,YAAY,IAAI,WAAW,IAAI,EAAE,WAAW,CAAC;AAAA,MAClD,OAAO;AACL,aAAK,MAAM,IAAI,kBAAkB;AAAA,UAC/B,UAAU,MAAM,KAAK;AAAA,UACrB;AAAA,UACA,SAAS;AAAA,UACT,QAAQ,eAAe,MAAM;AAAA,QAC/B,GAAG,YAAY,IAAI,WAAW,IAAI,EAAE,WAAW,CAAC;AAAA,MAClD;AACA,YAAM,KAAK,MAAM,qBAAqB,MAAM,MAAM,QAAQ,EAAE;AAC5D,YAAM,KAAK,MAAM,aAAa,cAAc,EAAE,IAAI,MAAM,MAAM,KAAK,MAAM,YAAY,OAAO,GAAG,kBAAkB;AACjH,WAAK,MAAM,4BAA4B;AACvC,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,aAAa,KAAK,UAAU;AAAA,QAChC;AAAA,QACA,MAAM;AAAA,QACN,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,SAAS,EAAE,UAAU,MAAM,KAAK,KAAK;AAAA,MACvC,CAAC;AACD,YAAM,SAAS,KAAK,oBAAoB;AAAA,QACtC,UAAU,MAAM,KAAK;AAAA,QACrB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,UAAU,EAAE,OAAO,KAAK;AAAA,MAC1B,CAAC;AACD,YAAM,aAAa,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK;AACvD,aAAO;AACP,aAAO,mBAAmB;AAC1B,cAAQ,OAAO,KAAK,qBAAqB,YAAY,KAAK,MAAM,WAAW,CAAC;AAC5E,WAAK,MAAM,IAAI,eAAe;AAAA,QAC5B,UAAU,MAAM,KAAK;AAAA,QACrB;AAAA,QACA,OAAO;AAAA,QACP,eAAe;AAAA,MACjB,GAAG,YAAY,IAAI,WAAW,IAAI,EAAE,WAAW,CAAC;AAChD,YAAM,KAAK,MAAM,qBAAqB,MAAM,MAAM,QAAQ,EAAE;AAC5D,YAAM,KAAK,cAAc,YAAY,gBAAgB;AACrD,YAAM,KAAK,MAAM,aAAa,cAAc,EAAE,IAAI,MAAM,MAAM,KAAK,MAAM,YAAY,OAAO,GAAG,kBAAkB;AACjH,WAAK,MAAM,4BAA4B;AACvC,aAAO;AAAA,IACT,UAAE;AACA,WAAK;AAAA,IACP;AAAA,EACF;AAAA,EAEQ,oBAAoB,OAMR;AAClB,WAAO,sBAAsB,KAAK;AAAA,EACpC;AAAA,EAEQ,gCAAgC,MAA2B,QAA0C;AAC3G,QAAI,CAAC,OAAO,WAAW,OAAO,SAAS,OAAW,QAAO;AACzD,WAAO;AAAA,MACL,GAAG;AAAA,MACH,MAAM,uBAAuB;AAAA,QAC3B,MAAM;AAAA,QACN,SAAS,OAAO,WAAW;AAAA,QAC3B,UAAU,KAAK;AAAA,MACjB,CAAC;AAAA,MACD,UAAU;AAAA,QACR,GAAG,OAAO;AAAA,QACV,WAAW,OAAO,UAAU,aAAa;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,UAAU,OAOI;AACpB,UAAM,aAAa,sBAAsB,MAAM,OAAO;AAAA,MACpD,MAAM,MAAM;AAAA,MACZ,UAAU,MAAM,SAAS,yBAAyB,aAAa,MAAM,SAAS,wBAAwB,YAAY;AAAA,MAClH,UAAU,MAAM,aAAa,MAAM,SAAS,yBAAyB,SAAS;AAAA,MAC9E,aAAa;AAAA,MACb,QAAQ,MAAM;AAAA,MACd,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,IACjB,GAAG,KAAK,MAAM,WAAW;AACzB,yBAAqB,MAAM,OAAO,UAAU;AAC5C,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,cAAc,OAA0B,SAAiD;AACrG,UAAM,YAAY,qBAAqB,OAAO,KAAK,MAAM,WAAW;AACpE,UAAM,KAAK,MAAM,aAAa,YAAY;AAAA,MACxC,OAAO;AAAA,MACP,SAAS,UAAU;AAAA,MACnB,MAAM,UAAU;AAAA,MAChB,aAAa,UAAU;AAAA,MACvB,SAAS,UAAU;AAAA,IACrB,GAAG,OAAO;AAAA,EACZ;AAAA,EAEA,MAAc,YACZ,SACA,MACA,MACA,cACkB;AAClB,UAAM,SAAS,KAAK,MAAM,oBAAoB,KAAK;AACnD,QAAI,WAAW,OAAQ,QAAO,KAAK,yBAAyB,SAAS,YAAY,YAAY;AAC7F,QAAI,WAAW,OAAQ,QAAO,KAAK,yBAAyB,SAAS,UAAU,YAAY;AAE3F,UAAM,mBAAmB,MAAM,KAAK,qBAAqB,MAAM,MAAM,QAAQ,IAAI,aAAa,WAAW;AACzG,QAAI,WAAW,kBAAkB,CAAC,iBAAkB,QAAO;AAE3D,UAAM,KAAK,MAAM;AAAA,MACf;AAAA,MACA;AAAA,QACE,IAAI,QAAQ;AAAA,QACZ,MAAM,QAAQ;AAAA,QACd,MAAM,QAAQ;AAAA,QACd,QAAQ,QAAQ;AAAA,QAChB,MAAM,QAAQ;AAAA,QACd,aAAa,QAAQ;AAAA,MACvB;AAAA,MACA;AAAA,IACF;AACA,SAAK,MAAM;AAAA,MACT;AAAA,MACA,EAAE,UAAU,QAAQ,MAAM,MAAM,QAAQ,MAAM,aAAa,QAAQ,YAAY;AAAA,MAC/E,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAEA,QAAI,CAAC,KAAK,MAAM,YAAa,QAAO,KAAK,yBAAyB,SAAS,UAAU,YAAY;AACjG,UAAM,WAAW,MAAM,KAAK,MAAM,YAAY,OAAO;AACrD,WAAO,KAAK,yBAAyB,SAAS,aAAa,QAAQ,aAAa,aAAa,aAAa,UAAU,YAAY;AAAA,EAClI;AAAA,EAEA,MAAc,qBACZ,MACA,MACA,YACA,aACkB;AAClB,QAAI,OAAO,KAAK,qBAAqB,YAAY;AAC/C,YAAM,KAAK,MAAM,kBAAkB;AACnC,aAAO,KAAK;AAAA,QACV;AAAA,QACA,KAAK,MAAM;AAAA,UACT,EAAE,IAAI,YAAY,MAAM,KAAK,KAAK;AAAA,UAClC,EAAE,MAAM,QAAQ,IAAI,YAAY,MAAM,KAAK,KAAK;AAAA,UAChD;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK,qBAAqB;AAAA,EACnC;AAAA,EAEA,MAAc,yBACZ,SACA,UACA,cACkB;AAClB,UAAM,KAAK,MAAM;AAAA,MACf;AAAA,MACA,EAAE,IAAI,QAAQ,IAAI,MAAM,QAAQ,MAAM,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ,OAAO;AAAA,MAC3F;AAAA,IACF;AACA,SAAK,MAAM;AAAA,MACT;AAAA,MACA,EAAE,UAAU,QAAQ,MAAM,UAAU,aAAa,WAAW;AAAA,MAC5D,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AACA,WAAO,aAAa;AAAA,EACtB;AACF;;;AC/bA,SAASC,WAAa,OAAa;AACjC,SAAO,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AACzC;AAqBO,IAAM,kBAAN,MAAsB;AAAA,EAG3B,YAA6B,OAA8B;AAA9B;AAAA,EAA+B;AAAA,EAA/B;AAAA,EAFrB,YAA+B,CAAC;AAAA,EAIxC,KAAK,UAAiC;AACpC,QAAI,CAAC,KAAK,UAAU,KAAK,CAAC,cAAc,UAAU,OAAO,SAAS,EAAE,GAAG;AACrE,WAAK,UAAU,KAAKA,WAAU,QAAQ,CAAC;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,IAAI,UAAiC;AACnC,SAAK,UAAU,KAAK,QAAQ;AAAA,EAC9B;AAAA,EAEA,IAAI,IAAyC;AAC3C,UAAM,WAAW,KAAK,UAAU,KAAK,CAAC,cAAc,UAAU,OAAO,EAAE;AACvE,WAAO,WAAWA,WAAU,QAAQ,IAAI;AAAA,EAC1C;AAAA,EAEA,OAAO,IAAyC;AAC9C,WAAO,KAAK,UAAU,KAAK,CAAC,cAAc,UAAU,OAAO,EAAE;AAAA,EAC/D;AAAA,EAEA,MAAM,OACJ,QAA8B,CAAC,GAC/B,cAC0B;AAC1B,UAAM,UAAU,KAAK,aAAa;AAClC,UAAM,QAAQ,uBAAuB;AACrC,UAAM,WAA4B;AAAA,MAChC,IAAI,SAAS;AAAA,MACb,OAAO,MAAM;AAAA,MACb,WAAW,QAAQ,IAAI;AAAA,MACvB,GAAGA,WAAU,QAAQ,UAAU,CAAC;AAAA,MAChC,UAAU,MAAM;AAAA,IAClB;AAEA,SAAK,IAAI,QAAQ;AACjB,UAAM,QAAQ,aAAa,QAAQ;AACnC,UAAM,UAAU,KAAK,QAAQ,QAAQ;AACrC,UAAM,QAAQ,YAAY,SAAS,YAAY;AAC/C,YAAQ,WAAW,SAAS,YAAY;AACxC,WAAOA,WAAU,QAAQ;AAAA,EAC3B;AAAA,EAEA,MAAM,QAAQ,IAAY,cAAkE;AAC1F,UAAM,UAAU,KAAK,aAAa;AAClC,UAAM,QAAQ,uBAAuB;AACrC,UAAM,WAAW,KAAK,OAAO,EAAE;AAC/B,QAAI,CAAC,UAAU;AACb,cAAQ,mBAAmB,IAAI,aAAa,YAAY;AACxD,YAAM,IAAI,MAAM,aAAa,EAAE,kBAAkB;AAAA,IACnD;AAEA,YAAQ,aAAa,QAAQ;AAC7B,UAAM,UAAU,KAAK,QAAQ,QAAQ;AACrC,UAAM,QAAQ,aAAa,SAAS,YAAY;AAChD,YAAQ,YAAY,SAAS,YAAY;AACzC,UAAM,QAAQ,eAAe;AAC7B,WAAOA,WAAU,QAAQ;AAAA,EAC3B;AAAA,EAEA,OAAiC;AAC/B,WAAOA,WAAU,KAAK,UAAU,IAAI,CAAC,aAAa,KAAK,QAAQ,QAAQ,CAAC,CAAC;AAAA,EAC3E;AAAA,EAEA,OAAO,IAAyC;AAC9C,UAAM,WAAW,KAAK,UAAU,KAAK,CAAC,cAAc,UAAU,OAAO,EAAE;AACvE,QAAI,CAAC,SAAU,QAAO;AACtB,SAAK,YAAY,KAAK,UAAU,OAAO,CAAC,cAAc,UAAU,OAAO,EAAE;AACzE,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,gBAAgB,IAAY,cAA0D;AAC1F,UAAM,UAAU,KAAK,aAAa;AAClC,UAAM,QAAQ,uBAAuB;AACrC,UAAM,WAAW,KAAK,OAAO,EAAE;AAC/B,QAAI,CAAC,SAAU,QAAO;AACtB,UAAM,QAAQ,eAAe,EAAE;AAC/B,UAAM,UAAU,KAAK,QAAQ,QAAQ;AACrC,UAAM,QAAQ,YAAY,SAAS,YAAY;AAC/C,YAAQ,WAAW,SAAS,YAAY;AACxC,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,UAAmD;AACzD,WAAO;AAAA,MACL,IAAI,SAAS;AAAA,MACb,OAAO,SAAS;AAAA,MAChB,WAAW,SAAS;AAAA,MACpB,UAAU,SAAS;AAAA,MACnB,OAAO,SAAS;AAAA,MAChB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,OAAO,SAAS;AAAA,MAChB,kBAAkBA,WAAU,SAAS,gBAAgB;AAAA,MACrD,aAAaA,WAAU,SAAS,WAAW;AAAA,MAC3C,UAAU,SAAS;AAAA,IACrB;AAAA,EACF;AAAA,EAEQ,eAAqC;AAC3C,QAAI,CAAC,KAAK,MAAO,OAAM,IAAI,MAAM,0DAA0D;AAC3F,WAAO,KAAK;AAAA,EACd;AACF;;;AC1GA,SAAS,aAAa,SAAiB,WAAmB,cAA8B;AACtF,SAAO,KAAK,IAAI,cAAc,YAAY,KAAK,KAAK,IAAI,GAAG,UAAU,CAAC,CAAC;AACzE;AAEA,SAAS,MAAM,IAAY,QAAqC;AAC9D,MAAI,MAAM,EAAG,QAAO,QAAQ,QAAQ;AACpC,MAAI,QAAQ,QAAS,QAAO,QAAQ,OAAO,IAAI,MAAM,cAAc,CAAC;AACpE,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,UAAU,WAAW,SAAS,EAAE;AACtC,YAAQ,iBAAiB,SAAS,MAAM;AACtC,mBAAa,OAAO;AACpB,aAAO,IAAI,MAAM,cAAc,CAAC;AAAA,IAClC,GAAG,EAAE,MAAM,KAAK,CAAC;AAAA,EACnB,CAAC;AACH;AAEO,IAAM,gBAAN,MAAoB;AAAA,EACzB,YACmB,OAwCjB;AAxCiB;AAAA,EAwChB;AAAA,EAxCgB;AAAA,EA0CnB,MAAM,IAAI,OAKQ;AAChB,UAAM,WAAW,MAAM,KAAK,eAAe,MAAM,MAAM,MAAM,WAAW;AACxE,UAAM,eAAe,SAAS;AAC9B,UAAM,WAAW,SAAS;AAC1B,UAAM,QAAQ,KAAK,MAAM,SAAS;AAClC,UAAM,WAAW,KAAK,MAAM,qBAAqB,KAAK;AACtD,UAAM,SAAS,KAAK,oBAAoB,QAAQ;AAEhD,UAAM,aAAa,YAAY,IAAI;AACnC,UAAM,QAAQ,KAAK,MAAM,aAAa,OAAO;AAC7C,UAAM,cAAc,KAAK,IAAI,GAAG,OAAO,YAAY,CAAC;AACpD,UAAM,YAAY,KAAK,IAAI,GAAG,OAAO,aAAa,GAAG;AACrD,UAAM,eAAe,KAAK,IAAI,WAAW,OAAO,gBAAgB,GAAK;AACrE,QAAI;AAEJ,aAAS,UAAU,GAAG,WAAW,aAAa,WAAW;AACvD,UAAI,eAAe;AACnB,UAAI,uBAAuB;AAC3B,WAAK,MAAM,IAAI,qBAAqB,EAAE,OAAO,cAAc,SAAS,OAAO,GAAG,MAAM;AACpF,UAAI;AACF,iBAAS,MAAM,SAAS,SAAS,IAAI;AAAA,UACnC,OAAO,KAAK,MAAM,SAAS;AAAA,UAC3B,QAAQ,KAAK,MAAM,UAAU;AAAA,UAC7B,QAAQ,KAAK,MAAM,UAAU;AAAA,UAC7B,UAAU,SAAS;AAAA,UACnB,UAAU,SAAS;AAAA,UACnB,OAAO,SAAS;AAAA,UAChB;AAAA,UACA;AAAA,UACA,OAAO,KAAK,MAAM;AAAA,UAClB,OAAO,MAAM;AAAA,UACb,UAAU,MAAM,KAAK,YAAY;AAAA,UACjC,QAAQ,MAAM,QAAQ;AAAA,UACtB,gBAAgB,MAAM,KAAK,eAAe,MAAM,MAAM,MAAM,WAAW;AAAA,UACvE,MAAM,OAAO,YAAYC,UAAS,YAAY;AAC5C,mCAAuB;AACvB,kBAAM,QAAQ,MAAM,KAAK,MAAM;AAAA,cAC7B;AAAA,cACAA;AAAA,cACA,KAAK,MAAM,iBAAiB,QAAQ,QAAW,QAAW,OAAO;AAAA,YACnE;AACA,iBAAK,MAAM,4BAA4B;AACvC,mBAAO;AAAA,UACT;AAAA,UACA,aAAa,OAAO,MAAM,MAAM,WAAW;AACzC,2BAAe;AACf,mBAAO,KAAK,MAAM,YAAY,MAAM,MAAM,QAAQ,MAAM;AAAA,UAC1D;AAAA,QACF,CAAC;AACD;AAAA,MACF,SAAS,OAAO;AACd,YAAI,KAAK,MAAM,oBAAoB,KAAK,EAAG;AAC3C,cAAM,aAAa,sBAAsB,OAAO;AAAA,UAC9C,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb;AAAA,QACF,GAAG,KAAK,MAAM,WAAW;AACzB,6BAAqB,OAAO,UAAU;AACtC,aAAK,MAAM,IAAI,oBAAoB,EAAE,OAAO,OAAO,YAAY,eAAe,OAAO,QAAQ,GAAG,MAAM;AAEtG,cAAM,WAAW,UAAU,eACtB,WAAW,aAAa,WACxB,CAAC,gBACD,CAAC,wBACD,MAAM,QAAQ,QAAQ,YAAY;AACvC,YAAI,CAAC,SAAU,OAAM;AACrB,cAAM,MAAM,aAAa,SAAS,WAAW,YAAY,GAAG,MAAM,QAAQ,MAAM;AAAA,MAClF;AAAA,IACF;AAEA,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,yCAAyC;AAEtE,UAAM,mBAAmB,MAAM,KAAK,MAAM,oBAAoB,OAAO,SAAS;AAAA,MAC5E,OAAO,OAAO;AAAA,MACd,cAAc,OAAO;AAAA,IACvB,CAAC;AACD,SAAK,MAAM,eAAe,OAAO,OAAO;AACxC,SAAK,MAAM,WAAW,EAAE,QAAQ,OAAO;AACvC,UAAM,KAAK,MAAM,aAAa,iBAAiB,EAAE,SAAS,iBAAiB,CAAC;AAC5E,UAAM,KAAK,MAAM,uBAAuB,iBAAiB,EAAE;AAC3D,SAAK,MAAM,IAAI,uBAAuB;AAAA,MACpC;AAAA,MACA,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,UAAU;AAAA,MACrD,cAAc,OAAO;AAAA,IACvB,GAAG,MAAM;AACT,UAAM,KAAK,MAAM,aAAa,iBAAiB;AAAA,MAC7C;AAAA,MACA,SAAS,OAAO;AAAA,MAChB,OAAO,OAAO;AAAA,MACd,cAAc,OAAO;AAAA,IACvB,CAAC;AACD,SAAK,MAAM,4BAA4B;AAAA,EACzC;AAAA,EAEQ,oBAAoB,UAAqD;AAC/E,UAAM,KAAK,gBAAgB,SAAS,QAAQ;AAC5C,WAAO,EAAE,MAAM,kBAAkB,IAAI,MAAM,GAAG;AAAA,EAChD;AAAA,EAEA,MAAc,kBAAkB,MAAoC;AAClE,UAAM,SAA6B,EAAE,MAAM,QAAQ,IAAI,iBAAiB,IAAI,GAAG,MAAM,kBAAkB,IAAI,EAAE;AAC7G,QAAI,OAAO,KAAK,cAAc,WAAY,QAAO,KAAK,UAAU,KAAK,MAAM,iBAAiB,MAAM,CAAC;AACnG,QAAI,OAAO,KAAK,WAAW,WAAY,QAAO,KAAK,OAAO,KAAK,MAAM,iBAAiB,MAAM,CAAC;AAC7F,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,MAAc,eAAe,MAAmB,aAI7C;AACD,UAAM,kBAAkB,MAAM,KAAK,MAAM,qBAAqB,gBAAgB;AAC9E,UAAM,SAAS,MAAM,KAAK,kBAAkB,IAAI;AAChD,UAAM,eAAe,CAAC,gBAAgB,cAAc,MAAM,EAAE,OAAO,OAAO,EAAE,KAAK,aAAa;AAC9F,UAAM,WAAW,CAAC,GAAG,gBAAgB,UAAU,WAAW;AAC1D,SAAK,MAAM,oCAAoC,QAAQ;AAEvD,UAAM,KAAK,MAAM,aAAa,mBAAmB;AAAA,MAC/C,YAAY,gBAAgB;AAAA,MAC5B,eAAe,gBAAgB,UAAU;AAAA,MACzC,mBAAmB,gBAAgB,cAAc;AAAA,IACnD,CAAC;AACD,UAAM,KAAK,MAAM,aAAa,kBAAkB,EAAE,OAAO,KAAK,MAAM,SAAS,GAAG,cAAc,SAAS,OAAO,CAAC;AAC/G,SAAK,MAAM,4BAA4B;AAEvC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,UAAU;AAAA,IACZ;AAAA,EACF;AACF;;;AC/EA,SAASC,UAAiB;AACxB,UAAO,oBAAI,KAAK,GAAE,YAAY;AAChC;AAEA,SAASC,WAAa,OAAa;AACjC,SAAO,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AACzC;AAUA,IAAM,oBAAN,cAAgC,MAAM;AAAA,EACpC,cAAc;AACZ,UAAM,yBAAyB;AAC/B,SAAK,OAAO;AAAA,EACd;AACF;AAEA,SAAS,eAAwC;AAC/C,SAAO,CAAC,YAAY,UAAU,eAAe,QAAQ;AACvD;AAEA,SAAS,eAA2B;AAClC,SAAO;AAAA,IACL,WAAWD,QAAO;AAAA,IAClB,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,EACX;AACF;AAEA,SAAS,iBAAiB,SAA0B;AAClD,MAAI,OAAO,YAAY,SAAU,QAAO;AACxC,MAAI,WAAW,KAAM,QAAO;AAC5B,SAAO,KAAK,UAAU,SAAS,MAAM,CAAC;AACxC;AAEA,SAAS,2BAA2B,OAAsD;AACxF,SAAO,OAAO,UAAU,WAAW,EAAE,SAAS,MAAM,IAAI;AAC1D;AAEA,IAAM,sBAAuC;AAAA,EAC3C,OAAO,MAAM;AAAA,EACb,MAAM,MAAM;AAAA,EACZ,MAAM,MAAM;AAAA,EACZ,OAAO,MAAM;AAAA,EACb,MAAM,MAAM;AACd;AAEA,SAAS,aAAa,OAAuB;AAC3C,QAAM,MAAM,MACT,KAAK,EACL,QAAQ,uBAAuB,OAAO,EACtC,QAAQ,mBAAmB,GAAG,EAC9B,QAAQ,WAAW,EAAE,EACrB,YAAY;AACf,SAAO,OAAO;AAChB;AAEA,SAAS,yBAAyB,OAA8B;AAC9D,QAAM,YAAY;AAOlB,MAAI,QAAQ,UAAW,OAAM,IAAI,MAAM,kFAAkF;AACzH,MAAI,YAAY,UAAW,OAAM,IAAI,MAAM,oFAAoF;AAC/H,MAAI,sBAAsB,WAAW;AACnC,UAAM,IAAI,MAAM,2FAA2F;AAAA,EAC7G;AACA,MAAI,CAAC,MAAM,QAAQ,UAAU,KAAK,GAAG;AACnC,UAAM,IAAI,MAAM,oGAAoG;AAAA,EACtH;AACA,MAAI,OAAO,UAAU,gBAAgB,UAAU;AAC7C,UAAM,IAAI,MAAM,6EAA6E;AAAA,EAC/F;AACF;AAEA,SAAS,aAAa,MAA4C;AAChE,MAAI,CAAC,eAAe,IAAI,EAAG,OAAM,IAAI,MAAM,sCAAsC;AACjF,mBAAiB,MAAM,MAAM;AAC7B,MAAI,aAAa,MAAM;AACrB,UAAM,IAAI,MAAM,SAAS,iBAAiB,IAAI,CAAC,+DAA+D;AAAA,EAChH;AACA,MAAI,eAAe,MAAM;AACvB,UAAM,IAAI,MAAM,SAAS,iBAAiB,IAAI,CAAC,qEAAqE;AAAA,EACtH;AACA,MAAI,KAAK,WAAW,UAAa,OAAO,KAAK,cAAc,YAAY;AACrE,UAAM,IAAI,MAAM,SAAS,iBAAiB,IAAI,CAAC,yCAAyC;AAAA,EAC1F;AACF;AAEA,SAAS,cAAc,OAAiF;AACtG,MAAI,CAAC,MAAO,QAAO;AACnB,aAAW,QAAQ,OAAO;AACxB,QAAI,CAAC,eAAe,IAAI,EAAG,OAAM,IAAI,MAAM,sCAAsC;AACjF,qBAAiB,MAAM,MAAM;AAAA,EAC/B;AACA,SAAO;AACT;AAEA,SAAS,cAAc,OAA2D;AAChF,MAAI,CAAC,MAAO,QAAO;AACnB,aAAW,QAAQ,OAAO;AACxB,QAAI,CAAC,eAAe,IAAI,EAAG,OAAM,IAAI,MAAM,sCAAsC;AACjF,qBAAiB,MAAM,MAAM;AAC7B,QAAI,CAAC,eAAe,IAAI,GAAG;AACzB,YAAM,IAAI,MAAM,SAAS,iBAAiB,IAAI,CAAC,4CAA4C;AAAA,IAC7F;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,QAA8E;AAC5G,MAAI,CAAC,OAAQ,QAAO;AACpB,aAAW,cAAc,OAAQ,WAAU,UAAU;AACrD,SAAO;AACT;AAEA,SAAS,uBACP,UACA,OACQ;AACR,aAAW,QAAQ,OAAO,OAAO,KAAK,GAAG;AACvC,QAAI,oBAAoB,MAAM,QAAQ,EAAG,QAAO,iBAAiB,IAAI;AAAA,EACvE;AACA,QAAM,IAAI,MAAM,yBAAyB,iBAAiB,QAAQ,CAAC,IAAI;AACzE;AAEA,SAAS,eAAe,YAAwD;AAC9E,2BAAyB,UAAU;AACnC,QAAM,QAAqC,CAAC;AAC5C,aAAW,QAAQ,WAAW,OAAO;AACnC,iBAAa,IAAI;AACjB,UAAM,OAAO,iBAAiB,IAAI;AAClC,QAAI,MAAM,IAAI,EAAG,OAAM,IAAI,MAAM,wBAAwB,IAAI,IAAI;AACjE,UAAM,IAAI,IAAI;AAAA,EAChB;AACA,QAAM,cAAc,uBAAuB,WAAW,aAAa,KAAK;AACxE,QAAM,MAAM,WAAW,OAAO,aAAa,WAAW,KAAK;AAC3D,SAAO;AAAA,IACL;AAAA,IACA,OAAO,WAAW;AAAA,IAClB;AAAA,IACA;AAAA,IACA,aAAa,WAAW;AAAA,IACxB,OAAO,cAAc,WAAW,KAAK;AAAA,IACrC,OAAO,cAAc,WAAW,KAAK;AAAA,IACrC,gBAAgB,uBAAuB,WAAW,cAAc;AAAA,EAClE;AACF;AAEO,IAAM,qBAAN,MAAyB;AAAA,EAmC9B,YAA6B,SAAoC;AAApC;AAC3B,SAAK,QAAQ,eAAe,QAAQ,KAAK;AACzC,SAAK,iBAAiB,QAAQ,aAAa,SAAS;AACpD,SAAK,aAAa,QAAQ,gBAAgB,SAAS;AACnD,SAAK,kBAAkB,QAAQ,QAAQ,YAAY;AACnD,SAAK,UAAU,QAAQ,WAAW;AAClC,SAAK,YAAY,QAAQ,aAAa;AACtC,UAAM,UAAU,QAAQ,WAAW,IAAI,qBAAqB;AAC5D,UAAM,UAAU,QAAQ,WAAW,IAAI,YAAY;AACnD,SAAK,mBAAmB,IAAI,6BAA6B,QAAQ,SAAS;AAC1E,SAAK,cAAc,KAAK,MAAM;AAC9B,SAAK,YAAY,QAAQ,aAAa,CAAC;AACvC,SAAK,QAAQ,cAAc,QAAQ,KAAK,KAAK,KAAK,MAAM,SAAS,aAAa;AAC9E,UAAM,kBAAkB,KAAK,qBAAqB,QAAQ,YAAY,EAAE;AACxE,SAAK,eAAe,IAAI,aAAa,KAAK,OAAO;AAAA,MAC/C,iBAAiB,gBAAgB,eAAe;AAAA,MAChD,cAAc,CAAC,WAAW,KAAK,qBAAqB,KAAK,eAAe,CAAC,EAAE,SAAS,eAAe,MAAM,KAAK;AAAA,IAChH,CAAC;AACD,SAAK,eAAe,QAAQ;AAC5B,SAAK,qBAAqB,IAAI,sBAAsB;AAAA,MAClD;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,WAAW,KAAK;AAAA,MAChB,UAAU,KAAK,MAAM;AAAA,MACrB,WAAW,KAAK;AAAA,MAChB,MAAM,MAAM,KAAK;AAAA,MACjB,iBAAiB,QAAQ,QAAQ,YAAY;AAAA,MAC7C,WAAW,CAAC,WAAW,KAAK,IAAI,qBAAqB,MAAM;AAAA,MAC3D,WAAW,CAAC,WAAW;AACrB,cAAM,QAAQ,KAAK,eAAe,OAAO,OAAO;AAAA,UAC9C,MAAM;AAAA,UACN,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,SAAS,EAAE,WAAW,OAAO,UAAU;AAAA,QACzC,CAAC;AACD,aAAK,IAAI,uBAAuB,EAAE,WAAW,OAAO,WAAW,OAAO,eAAe,OAAO,MAAM,CAAC;AAAA,MACrG;AAAA,IACF,CAAC;AACD,SAAK,kBAAkB,IAAI,gBAAgB;AAAA,MACzC,KAAK,MAAMA,QAAO;AAAA,MAClB,wBAAwB,MAAM,KAAK,uBAAuB;AAAA,MAC1D,WAAW,OAAO;AAAA,QAChB,UAAU,KAAK,MAAM;AAAA,QACrB,OAAO,KAAK,UAAU,KAAK,QAAQ;AAAA,QACnC,QAAQ,KAAK;AAAA,QACb,QAAQ,KAAK;AAAA,QACb,OAAO,KAAK,eAAe;AAAA,QAC3B,kBAAkBC,WAAU,KAAK,kBAAkB,sBAAsB;AAAA,QACzE,aAAaA,WAAU,KAAK,kBAAkB,iBAAiB;AAAA,QAC/D,OAAOA,WAAU,KAAK,KAAK;AAAA,QAC3B,gBAAgBA,WAAU,KAAK,gBAAgB,UAAU;AAAA,QACzD,iBAAiB,KAAK,gBAAgB,UAAUA,WAAU,KAAK,gBAAgB,OAAO,IAAI;AAAA,QAC1F,UAAUA,WAAU,KAAK,kBAAkB,WAAW;AAAA,MACxD;AAAA,MACA,cAAc,CAAC,aAAa;AAC1B,aAAK,cAAc,SAAS;AAC5B,aAAK,gBAAgB,SAAS;AAC9B,aAAK,QAAQA,WAAU,SAAS,KAAK;AACrC,aAAK,gBAAgB,QAAQ;AAAA,UAC3B,SAAS,SAAS;AAAA,UAClB,UAAU,SAAS;AAAA,QACrB,CAAC;AACD,aAAK,kBAAkB,eAAe;AAAA,UACpC,kBAAkB,SAAS;AAAA,UAC3B,aAAa,SAAS;AAAA,UACtB,UAAU,SAAS;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,MACA,gBAAgB,MAAM,KAAK,eAAe;AAAA,MAC1C,cAAc,CAAC,aAAa,KAAK,mBAAmB,aAAa,QAAQ;AAAA,MACzE,gBAAgB,CAAC,OAAO,KAAK,mBAAmB,eAAe,EAAE;AAAA,MACjE,aAAa,OAAO,SAAS,iBAAiB;AAC5C,cAAM,KAAK,aAAa,sBAAsB,EAAE,UAAU,QAAQ,GAAG;AAAA,UACnE,GAAG;AAAA,UACH,kBAAkB;AAAA,QACpB,CAAC;AAAA,MACH;AAAA,MACA,cAAc,OAAO,SAAS,iBAAiB;AAC7C,cAAM,KAAK,aAAa,uBAAuB,EAAE,UAAU,QAAQ,GAAG;AAAA,UACpE,GAAG;AAAA,UACH,kBAAkB;AAAA,QACpB,CAAC;AAAA,MACH;AAAA,MACA,aAAa,OAAO,SAAS,iBAAiB;AAC5C,cAAM,KAAK,aAAa,sBAAsB,EAAE,UAAU,QAAQ,GAAG;AAAA,UACnE,GAAG;AAAA,UACH,kBAAkB;AAAA,QACpB,CAAC;AAAA,MACH;AAAA,MACA,YAAY,CAAC,SAAS,iBAAiB,KAAK;AAAA,QAC1C;AAAA,QACA,EAAE,YAAY,QAAQ,IAAI,OAAO,QAAQ,MAAM;AAAA,QAC/C,cAAc;AAAA,QACd,cAAc;AAAA,QACd,cAAc;AAAA,MAChB;AAAA,MACA,aAAa,CAAC,SAAS,iBAAiB,KAAK;AAAA,QAC3C;AAAA,QACA,EAAE,YAAY,QAAQ,IAAI,OAAO,QAAQ,MAAM;AAAA,QAC/C,cAAc;AAAA,QACd,cAAc;AAAA,QACd,cAAc;AAAA,MAChB;AAAA,MACA,YAAY,CAAC,SAAS,iBAAiB,KAAK;AAAA,QAC1C;AAAA,QACA,EAAE,YAAY,QAAQ,IAAI,OAAO,QAAQ,MAAM;AAAA,QAC/C,cAAc;AAAA,QACd,cAAc;AAAA,QACd,cAAc;AAAA,MAChB;AAAA,MACA,oBAAoB,CAAC,YAAY,QAAQ,iBAAiB,KAAK;AAAA,QAC7D;AAAA,QACA,EAAE,YAAY,OAAO;AAAA,QACrB,cAAc;AAAA,QACd,cAAc;AAAA,QACd,cAAc;AAAA,MAChB;AAAA,IACF,CAAC;AACD,SAAK,iBAAiB,IAAI,eAAe;AAAA,MACvC;AAAA,MACA,WAAW,KAAK;AAAA,MAChB,UAAU,KAAK,MAAM;AAAA,MACrB,SAAS,KAAK;AAAA,MACd,WAAW,KAAK;AAAA,MAChB,UAAU,MAAM,KAAK;AAAA,MACrB,cAAc,MAAM,KAAK,YAAY;AAAA,MACrC,WAAW,CAAC,WAAW,KAAK,IAAI,kBAAkB,MAAM;AAAA,MACxD,WAAW,CAAC,WAAW,KAAK,IAAI,kBAAkB,MAAM;AAAA,MACxD,gBAAgB,CAAC,WAAW,KAAK,IAAI,uBAAuB,MAAM;AAAA,MAClE,kBAAkB,CAAC,WAAW,KAAK,IAAI,yBAAyB,MAAM;AAAA,MACtE,eAAe,CAAC,WAAW;AACzB,cAAM,QAAQ,KAAK,eAAe,OAAO,OAAO;AAAA,UAC9C,MAAM;AAAA,UACN,UAAU;AAAA,UACV,UAAU;AAAA,UACV,aAAa;AAAA,UACb,SAAS,EAAE,WAAW,OAAO,WAAW,YAAY,OAAO,WAAW;AAAA,QACxE,CAAC;AACD,aAAK,IAAI,sBAAsB;AAAA,UAC7B,WAAW,OAAO;AAAA,UAClB,YAAY,OAAO;AAAA,UACnB;AAAA,UACA,eAAe,OAAO;AAAA,QACxB,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AACD,SAAK,eAAe,IAAI,aAAa;AAAA,MACnC,YAAY,MAAM,KAAK;AAAA,MACvB,gBAAgB,MAAM,KAAK;AAAA,MAC3B,qBAAqB,MAAM,KAAK,kBAAkB,KAAK,WAAW,EAAE;AAAA,MACpE,aAAa,KAAK,QAAQ;AAAA,MAC1B,aAAa,KAAK,QAAQ;AAAA,MAC1B,mBAAmB,MAAM,KAAK,kBAAkB;AAAA,MAChD,oBAAoB,CAAC,MAAM,QAAQ,eAAe,gBAChD,KAAK,mBAAmB,MAAM,QAAQ,eAAe,WAAW;AAAA,MAClE,oBAAoB,CAAC,MAAM,MAAM,YAAY,WAC3C,KAAK,mBAAmB,MAAM,MAAM,YAAY,MAAM;AAAA,MACxD,sBAAsB,CAAC,MAAM,QAAQ,eACnC,KAAK,qBAAqB,MAAM,QAAQ,UAAU;AAAA,MACpD,cAAc,CAAC,YAAYC,UAASC,aAAY,KAAK,aAAa,YAAYD,UAASC,QAAO;AAAA,MAC9F,KAAK,CAAC,UAAU,QAAQ,QAAQ,eAAe,aAAa,cAC1D,KAAK,IAAI,UAAU,QAAQ,QAAQ,eAAe,aAAa,SAAS;AAAA,MAC1E,6BAA6B,MAAM,KAAK,4BAA4B;AAAA,IACtE,CAAC;AACD,SAAK,gBAAgB,IAAI,cAAc;AAAA,MACrC,sBAAsB,CAAC,UAAU,KAAK,qBAAqB,KAAK;AAAA,MAChE,OAAO,KAAK;AAAA,MACZ,UAAU,MAAM,KAAK;AAAA,MACrB,WAAW,MAAM,KAAK;AAAA,MACtB,WAAW,MAAM,KAAK;AAAA,MACtB,UAAU,MAAM,KAAK,eAAe;AAAA,MACpC,YAAY,MAAM,KAAK;AAAA,MACvB,gBAAgB,CAAC,WAAW;AAC1B,aAAK,cAAc;AAAA,MACrB;AAAA,MACA,kBAAkB,CAAC,WAAW,KAAK,iBAAiB,MAAM;AAAA,MAC1D,sBAAsB,CAAC,YAAY,KAAK,qBAAqB,OAAO;AAAA,MACpE,qCAAqC,CAAC,aAAa,KAAK,oCAAoC,QAAQ;AAAA,MACpG,qBAAqB,CAAC,SAAS,aAAa,KAAK,WAAW,aAAa,SAAS,QAAQ;AAAA,MAC1F,wBAAwB,CAAC,cAAc,KAAK,uBAAuB,SAAS;AAAA,MAC5E,aAAa,CAAC,MAAM,MAAM,QAAQ,WAAW,KAAK,YAAY,MAAM,MAAM,QAAQ,MAAM;AAAA,MACxF,cAAc,CAAC,YAAYD,UAAS,iBAAiB,KAAK,aAAa,YAAYA,UAAS,YAAY;AAAA,MACxG,MAAM,CAAC,YAAYA,UAAS,iBAAiB,KAAK,KAAK,YAAYA,UAAS,YAAY;AAAA,MACxF,kBAAkB,CAAC,QAAQ,eAAe,aAAa,iBACrD,KAAK,iBAAiB,QAAQ,eAAe,aAAa,YAAY;AAAA,MACxE,KAAK,CAAC,UAAU,QAAQ,QAAQ,eAAe,aAAa,cAC1D,KAAK,IAAI,UAAU,QAAQ,QAAQ,eAAe,aAAa,SAAS;AAAA,MAC1E,6BAA6B,MAAM,KAAK,4BAA4B;AAAA,MACpE,qBAAqB,CAAC,UAAU,iBAAiB;AAAA,MACjD,aAAa,KAAK,QAAQ;AAAA,IAC5B,CAAC;AACD,SAAK,QAAQ,KAAK,mBAAmB,KAAK,KAAK;AAC/C,eAAW,cAAc,oBAAqB,WAAU,UAAU;AAAA,EACpE;AAAA,EAlM6B;AAAA,EAlCpB;AAAA,EACA;AAAA,EACA;AAAA,EAEQ;AAAA,EACA;AAAA,EACA;AAAA,EACT,aAAa,SAAS;AAAA,EACb,oBAAoB,IAAI,kBAAkB;AAAA,EAC1C,gBAAgB,IAAI,cAAc;AAAA,EAClC,kBAAkB,IAAI,gBAAgB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU,aAAa;AAAA,EACvB,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,gBAA+B,CAAC;AAAA,EAChC,cAAc;AAAA,EACd;AAAA,EACA,gBAA0B,CAAC;AAAA,EAC3B,YAAY;AAAA,EACZ,uBAAuB;AAAA,EACvB,kBAAkB;AAAA,EAsMlB,eAAe,OAAgB,UAA+B,CAAC,GAAsB;AAC3F,UAAM,aAAa,sBAAsB,OAAO,SAAS,KAAK,QAAQ,WAAW;AACjF,yBAAqB,OAAO,UAAU;AACtC,WAAO;AAAA,EACT;AAAA,EAEQ,YAAY,OAA6C;AAC/D,WAAO,qBAAqB,OAAO,KAAK,QAAQ,WAAW;AAAA,EAC7D;AAAA,EAEQ,UAAU,QAA+C;AAC/D,QAAI,CAAC,OAAQ,QAAO,EAAE,MAAM,UAAU;AACtC,WAAO;AAAA,MACL,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MACb,OAAO,OAAO;AAAA,IAChB;AAAA,EACF;AAAA,EAEQ,WACN,QACA,eACA,aACA,YAAwC,CAAC,GACtB;AACnB,WAAO;AAAA,MACL,WAAW,KAAK;AAAA,MAChB,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,MACb,UAAU,KAAK,kBAAkB,uBAAuB;AAAA,MACxD,QAAQ,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EACF;AAAA,EAEQ,IACN,UACA,QACA,QACA,eACA,aACA,WACM;AACN,SAAK,QAAQ,QAAQ,KAAK,UAAU,QAAQ,KAAK,WAAW,QAAQ,eAAe,aAAa,SAAS,CAAC;AAAA,EAC5G;AAAA,EAEQ,cAAcA,UAAkB,SAAyC;AAC/E,UAAM,SAAS,KAAK,QAAQ,QAAQ,eAAe;AACnD,QAAI,WAAW,OAAQ;AACvB,UAAM,OAAOA,YAAW,OAAOA,aAAY,YAAY,UAAUA,WAC7D,OAAQA,SAA+B,QAAQ,EAAE,IACjD;AACJ,SAAK;AAAA,MACH;AAAA,MACA;AAAA,QACE,QAAQ,KAAK;AAAA,QACb,GAAI,WAAW,SAAS,EAAE,KAAK,IAAI,CAAC;AAAA,MACtC;AAAA,MACA,SAAS,UAAU,KAAK,oBAAoB;AAAA,MAC5C,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,QAAgB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,UAAU,UAA2C;AACnD,WAAO,KAAK,cAAc,UAAU,QAAQ;AAAA,EAC9C;AAAA,EAEA,qBAA2B;AACzB,SAAK,uBAAuB;AAAA,EAC9B;AAAA,EAEQ,cAAkC;AACxC,WAAO,KAAK,mBAAmB;AAAA,EACjC;AAAA,EAEA,MAAc,yBAAwC;AACpD,UAAM,KAAK,mBAAmB,kBAAkB;AAChD,UAAM,SAAS,MAAM,KAAK,mBAAmB,iBAAiB;AAC9D,QAAI,OAAQ,MAAK,wBAAwB,MAAM;AAAA,EACjD;AAAA,EAEA,MAAc,oBAAmC;AAC/C,UAAM,KAAK,eAAe,WAAW;AAAA,EACvC;AAAA,EAEA,MAAc,eAA8B;AAC1C,UAAM,KAAK,eAAe,MAAM;AAAA,EAClC;AAAA,EAEA,MAAc,aAA4B;AACxC,UAAM,KAAK,mBAAmB,MAAM;AAAA,EACtC;AAAA,EAEQ,wBAAwB,QAAkC;AAChE,SAAK,gBAAgB,cAAc,OAAO,gBAAgB;AAE1D,eAAW,YAAY,OAAO,WAAW;AACvC,WAAK,gBAAgB,KAAK,QAAQ;AAClC,WAAK,kBAAkB,YAAY,SAAS,QAAQ;AAAA,IACtD;AAEA,SAAK,kBAAkB,eAAe,OAAO,UAAU;AACvD,SAAK,QAAQ,eAAe,KAAK,kBAAkB;AAEnD,SAAK,cAAc,KAAK,OAAO,MAAM;AACrC,SAAK,QAAQ,aAAa,KAAK,cAAc;AAE7C,QAAI,OAAO,SAAS;AAClB,WAAK,kBAAkB,YAAY;AAAA,QACjC,GAAG,OAAO;AAAA,QACV,aAAa,CAAC,YAAY,KAAK,cAAc,IAAI,OAAO;AAAA,MAC1D,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAc,iBAAgC;AAC5C,UAAM,KAAK,uBAAuB;AAClC,UAAM,KAAK,mBAAmB,YAAY;AAAA,MACxC,kBAAkBD,WAAU,KAAK,kBAAkB,sBAAsB;AAAA,MACzE,aAAaA,WAAU,KAAK,kBAAkB,iBAAiB;AAAA,MAC/D,UAAUA,WAAU,KAAK,kBAAkB,WAAW;AAAA,IACxD,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,cAA6B;AACzC,QAAI,KAAK,WAAW,KAAK,iBAAiB;AACxC,YAAM,KAAK,aAAa;AACxB,WAAK,aAAa,SAAS;AAC3B,YAAM,KAAK,mBAAmB,SAAS,KAAK,UAAU;AACtD,WAAK,UAAU;AACf,WAAK,kBAAkB;AAAA,IACzB;AACA,SAAK,gBAAgB;AACrB,SAAK,UAAU,aAAa;AAC5B,SAAK,cAAc;AACnB,SAAK,uBAAuB;AAAA,EAC9B;AAAA,EAEA,MAAM,IAAI,SAAiB,UAAiC,CAAC,GAA4B;AACvF,UAAM,KAAK,YAAY;AACvB,SAAK,mBAAmB;AACxB,SAAK,mBAAmB,KAAK,uBAAuB,QAAQ,KAAK;AACjE,QAAI,aAAa;AACjB,QAAI;AACF,UAAI,QAAQ,QAAQ,QAAS,OAAM,IAAI,MAAM,cAAc;AAC3D,YAAM,KAAK,MAAM;AACjB,mBAAa;AACb,WAAK,cAAc,KAAK;AAAA,QACtB,IAAI,QAAQ;AAAA,QACZ,SAAS;AAAA,QACT,UAAU,QAAQ;AAAA,QAClB,MAAM,QAAQ;AAAA,QACd,UAAU;AAAA,MACZ,CAAC;AAED,YAAM,iBAAiB,KAAK,kBAAkB,KAAK,WAAW,EAAE,YAAY;AAC5E,aAAO,KAAK,cAAc,SAAS,KAAK,KAAK,QAAQ,YAAY,gBAAgB;AAC/E,YAAI,QAAQ,QAAQ,QAAS,OAAM,IAAI,MAAM,cAAc;AAC3D,cAAM,QAAQ,KAAK,cAAc,MAAM;AACvC,cAAM,KAAK,QAAQ,OAAO,OAAO;AAAA,MACnC;AAEA,YAAM,cAAcD,QAAO;AAC3B,WAAK,QAAQ,cAAc;AAC3B,WAAK,QAAQ,aAAa,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK,aAAa;AAC3E,WAAK,QAAQ,YAAY,KAAK;AAC9B,YAAM,KAAK,mBAAmB,eAAe,KAAK,kBAAkB,WAAW;AAC/E,YAAM,KAAK,aAAa,aAAa;AAAA,QACnC,SAASC,WAAU,EAAE,GAAG,KAAK,SAAS,YAAY,KAAK,cAAc,QAAQ,EAAE,CAAC;AAAA,QAChF,aAAa,KAAK;AAAA,MACpB,CAAC;AACD,WAAK,gBAAgB,2BAA6B;AAClD,WAAK,QAAQ,aAAa,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK,aAAa;AAC3E,YAAM,KAAK,mBAAmB,YAAY,KAAK,OAAO;AACtD,WAAK,IAAI,iBAAiB;AAAA,QACxB,YAAY,KAAK,QAAQ;AAAA,QACzB,cAAc,KAAK,QAAQ;AAAA,QAC3B,YAAY,KAAK,QAAQ;AAAA,QACzB,SAASA,WAAU,KAAK,OAAO;AAAA,MACjC,CAAC;AAED,aAAO;AAAA,QACL,OAAO,KAAK;AAAA,QACZ,UAAU,KAAK,MAAM;AAAA,QACrB,aAAa,KAAK;AAAA,QAClB,YAAYA,WAAU,KAAK,iBAAiB,CAAC;AAAA,QAC7C,QAAQ,KAAK,YAAY,EAAE,IAAI,CAAC,UAAUA,WAAU,MAAM,MAAM,CAAC;AAAA,QACjE,SAASA,WAAU,KAAK,OAAO;AAAA,QAC/B,WAAW,KAAK,YAAY;AAAA,MAC9B;AAAA,IACF,SAAS,OAAO;AACd,YAAM,aAAa,KAAK,eAAe,OAAO;AAAA,QAC5C,MAAM;AAAA,QACN,UAAU;AAAA,QACV,UAAU;AAAA,QACV,aAAa;AAAA,QACb,QAAQ,EAAE,MAAM,UAAU;AAAA,MAC5B,CAAC;AACD,YAAM,cAAc,KAAK,YAAY,UAAU;AAC/C,WAAK,gBAAgB;AACrB,WAAK,QAAQ,OAAO,KAAK,WAAW;AAEpC,YAAM,KAAK,gBAAgB,MAAM,KAAK,mBAAmB,eAAe,KAAK,kBAAkB,WAAW,CAAC;AAC3G,YAAM,KAAK,gBAAgB,MAAM,KAAK,aAAa,YAAY;AAAA,QAC7D,OAAO;AAAA,QACP,SAAS,YAAY;AAAA,QACrB,MAAM,YAAY;AAAA,QAClB,aAAa,YAAY;AAAA,QACzB,SAAS,YAAY;AAAA,MACvB,GAAG,EAAE,WAAW,KAAK,CAAC,CAAC;AAEvB,YAAM,gBAAgB,YAAY,SAAS,gBAAgB,kBAAkB;AAC7E,YAAM,KAAK,gBAAgB,MAAM,KAAK,aAAa,eAAe;AAAA,QAChE,OAAO;AAAA,QACP,SAASA,WAAU,EAAE,GAAG,KAAK,SAAS,YAAY,KAAK,cAAc,QAAQ,EAAE,CAAC;AAAA,QAChF,aAAa,KAAK,eAAe;AAAA,MACnC,GAAG,EAAE,WAAW,KAAK,CAAC,CAAC;AAEvB,WAAK,gBAAgB,2BAA6B;AAClD,WAAK,gBAAgB;AACrB,YAAM,KAAK,gBAAgB,MAAM,KAAK,mBAAmB,YAAY,KAAK,OAAO,CAAC;AAClF,WAAK,IAAI,cAAc,EAAE,OAAO,YAAY,eAAe,MAAM,CAAC;AAClE,YAAM;AAAA,IACR,UAAE;AACA,UAAI,WAAY,OAAM,KAAK,aAAa;AACxC,WAAK,mBAAmB;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,SAAiB,UAAiC,CAAC,GAA4B;AAC1F,WAAO,KAAK,IAAI,SAAS,OAAO;AAAA,EAClC;AAAA,EAEQ,kBAAwB;AAC9B,SAAK,QAAQ,cAAc,KAAK,QAAQ,eAAeD,QAAO;AAC9D,SAAK,QAAQ,aAAa,KAAK,gBAAgB,IAAI,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK,aAAa,IAAI;AACxG,SAAK,QAAQ,YAAY,KAAK;AAC9B,SAAK,QAAQ,aAAa,KAAK,cAAc;AAAA,EAC/C;AAAA,EAEA,MAAc,gBAAgB,OAA8C;AAC1E,QAAI;AACF,YAAM,MAAM;AAAA,IACd,QAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEA,MAAM,UAAyB;AAC7B,QAAI,CAAC,KAAK,gBAAiB;AAC3B,UAAM,KAAK,uBAAuB;AAAA,EACpC;AAAA,EAEA,MAAM,QAAuB;AAC3B,UAAM,KAAK,aAAa;AACxB,UAAM,KAAK,WAAW;AAAA,EACxB;AAAA,EAEA,cAAc,SAA2C;AACvD,WAAOC,WAAU,KAAK,iBAAiB,OAAO,CAAC;AAAA,EACjD;AAAA,EAEA,aAAyB;AACvB,WAAOA,WAAU;AAAA,MACf,GAAG,KAAK;AAAA,MACR,YAAY,KAAK,gBAAgB,IAAI,KAAK,MAAM,YAAY,IAAI,IAAI,KAAK,aAAa,IAAI;AAAA,MAC1F,WAAW,KAAK;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,aAAa;AACX,WAAO;AAAA,MACL,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK,MAAM;AAAA,MACrB,SAAS,KAAK;AAAA,MACd,WAAW,KAAK,YAAY;AAAA,MAC5B,SAAS,KAAK;AAAA,MACd,WAAW,KAAK,QAAQ;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,WAAmB;AACjB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA,EAEA,SAAS,OAAqB;AAC5B,SAAK,gBAAgB,KAAK,uBAAuB,KAAK;AAAA,EACxD;AAAA,EAEA,qBAA2B;AACzB,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,uBAAuB;AACrB,UAAM,WAAW,KAAK,qBAAqB,KAAK,eAAe,CAAC;AAChE,WAAO,SAAS,SAAS,UAAU,KAAK;AAAA,MACtC,IAAI,gBAAgB,SAAS,QAAQ;AAAA,MACrC,UAAU,SAAS;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,qBAAqB;AACnB,WAAO,KAAK,iBAAiB,KAAK,EAAE,QAAQ,CAAC,aAAa;AACxD,YAAM,SAAS,SAAS,YAAY,KAAK,CAAC;AAC1C,aAAO,OAAO,IAAI,CAAC,WAAW;AAAA,QAC5B,GAAG;AAAA,QACH,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI,MAAM,KAAK,GAAG,SAAS,SAAS,IAAI,MAAM,EAAE;AAAA,QACzE,UAAU,MAAM,YAAY,SAAS;AAAA,MACvC,EAAE;AAAA,IACJ,CAAC;AAAA,EACH;AAAA,EAEA,mBAAyC;AACvC,WAAO;AAAA,MACL,KAAK,KAAK,MAAM;AAAA,MAChB,OAAO,KAAK,MAAM;AAAA,MAClB,aAAa,KAAK,MAAM;AAAA,MACxB,aAAa,KAAK;AAAA,MAClB,OAAO,OAAO,OAAO,KAAK,MAAM,KAAK,EAAE,IAAI,CAAC,SAAS,YAAY,IAAI,CAAC;AAAA,MACtE,OAAO,KAAK,MAAM,IAAI,CAAC,SAAS,KAAK,aAAa,QAAQ,IAAI,CAAC;AAAA,MAC/D,QAAQ,KAAK,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,KAAK,YAAY,IAAI,CAAC;AAAA,MACpE,kBAAkB,KAAK,oBAAoB,EAAE,IAAI,CAAC,aAAa,uBAAuB,QAAQ,CAAC;AAAA,MAC/F,OAAO,KAAK,YAAY,EAAE,IAAI,CAAC,SAAS,KAAK,mBAAmB,IAAI,CAAC;AAAA,MACrE,QAAQ,KAAK,eAAe;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,UAAU,QAAkD;AAC1D,WAAO,KAAK,YAAY,MAAM,EAAE,IAAI,CAAC,UAAUA,WAAU,MAAM,MAAM,CAAC;AAAA,EACxE;AAAA,EAEA,sBAAwC;AACtC,WAAOA,WAAU,KAAK,kBAAkB,sBAAsB;AAAA,EAChE;AAAA,EAEA,MAAM,eAAe,QAAyD;AAC5E,WAAO,KAAK,oBAAoB,MAAM;AAAA,EACxC;AAAA,EAEA,MAAM,mBAA8C;AAClD,WAAO,KAAK,oBAAoB,QAAQ;AAAA,EAC1C;AAAA,EAEA,WAA6B;AAC3B,WAAOA,WAAU,KAAK,KAAK;AAAA,EAC7B;AAAA,EAEA,YAAY,OAAsB;AAChC,QAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC/D,aAAO,OAAO,KAAK,OAAO,KAAK;AAAA,IACjC,OAAO;AACL,WAAK,MAAM,QAAQ;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,aAAa,MAA8B;AACzC,SAAK,QAAQA,WAAU,IAAI;AAAA,EAC7B;AAAA,EAEA,MAAM,eACJ,OACA,cAC0B;AAC1B,WAAO,KAAK,gBAAgB,OAAO,OAAO,YAAY;AAAA,EACxD;AAAA,EAEA,gBAA0C;AACxC,WAAO,KAAK,gBAAgB,KAAK;AAAA,EACnC;AAAA,EAEA,YAAY,IAAyC;AACnD,WAAO,KAAK,gBAAgB,IAAI,EAAE;AAAA,EACpC;AAAA,EAEA,MAAM,gBAAgB,IAAY,cAAkE;AAClG,WAAO,KAAK,gBAAgB,QAAQ,IAAI,YAAY;AAAA,EACtD;AAAA,EAEA,MAAM,eAAe,IAAY,cAA0D;AACzF,WAAO,KAAK,gBAAgB,gBAAgB,IAAI,YAAY;AAAA,EAC9D;AAAA,EAEA,qBAAkD;AAChD,WAAO,KAAK,gBAAgB,UAAUA,WAAU,KAAK,gBAAgB,OAAO,IAAI;AAAA,EAClF;AAAA,EAEA,kBAAkB,QAA6C;AAC7D,WAAOA,WAAU,KAAK,gBAAgB,OAAO,MAAM,CAAC;AAAA,EACtD;AAAA,EAEA,MAAM,WAAW,MAA2B,OAAgC;AAC1E,UAAM,SAAS,KAAK,gBAAgB,IAAI;AACxC,UAAM,iBAAiB,KAAK;AAC5B,UAAM,WAAW,KAAK,kBAAkB,cAAc;AACtD,QAAI,mBAAmB,QAAQ;AAC7B,YAAM,KAAK,kBAAkB;AAC7B,YAAM,SAAS;AAAA,QACb,KAAK;AAAA,UACH;AAAA,UACA,EAAE,MAAM,QAAQ,IAAI,gBAAgB,MAAM,kBAAkB,QAAQ,EAAE;AAAA,QACxE;AAAA,QACA,YAAY,KAAK,kBAAkB,MAAM,CAAC;AAAA,MAC5C;AACA,WAAK,cAAc;AACnB,YAAM,OAAO,KAAK,kBAAkB,MAAM;AAC1C,YAAM,KAAK;AAAA,QACT,KAAK;AAAA,UACH;AAAA,UACA,EAAE,MAAM,QAAQ,IAAI,QAAQ,MAAM,kBAAkB,IAAI,EAAE;AAAA,QAC5D;AAAA,QACA;AAAA,MACF;AACA,YAAM,KAAK,aAAa,kBAAkB;AAAA,QACxC,cAAc;AAAA,QACd,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AAAA,IACH;AACA,QAAI,UAAU,QAAW;AACvB,WAAK,cAAc,KAAK;AAAA,QACtB,SAAS,OAAO,UAAU,WAAW,QAAQ,KAAK,UAAU,OAAO,MAAM,CAAC;AAAA,QAC1E,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAc,QAAuB;AACnC,QAAI,KAAK,QAAS;AAClB,UAAM,KAAK,uBAAuB;AAClC,UAAM,KAAK,kBAAkB;AAC7B,SAAK,UAAU;AACf,SAAK,gBAAgB,YAAY,IAAI;AACrC,SAAK,IAAI,eAAe,EAAE,QAAQ,KAAK,aAAa,OAAO,KAAK,eAAe,EAAE,CAAC;AAClF,UAAM,KAAK,aAAa,eAAe;AAAA,MACrC,UAAU,KAAK,MAAM;AAAA,MACrB,QAAQ,KAAK;AAAA,MACb,SAAS,KAAK;AAAA,MACd,WAAW,KAAK,YAAY;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,QAAQ,OAAoB,SAA+C;AACvF,QAAI,MAAM,aAAa,OAAO;AAC5B,YAAM,KAAK,eAAe;AAAA,QACxB,OAAO;AAAA,QACP,UAAU;AAAA,UACR,MAAM;AAAA,UACN,WAAW;AAAA,UACX,aAAa,MAAM;AAAA,QACrB;AAAA,MACF,GAAG,EAAE,kBAAkB,MAAM,CAAC;AAC9B,WAAK,kBAAkB,sBAAsB;AAAA,IAC/C;AACA,SAAK,QAAQ;AACb,SAAK,gBAAgB,SAAS;AAC9B,UAAM,YAAY,YAAY,IAAI;AAClC,SAAK,IAAI,gBAAgB,EAAE,QAAQ,KAAK,cAAc,CAAC;AACvD,UAAM,KAAK,aAAa,gBAAgB,EAAE,QAAQ,KAAK,eAAe,OAAO,MAAM,QAAQ,CAAC;AAE5F,UAAM,YAAY,KAAK,YAAY,MAAM,QAAQ,QAAQ;AACzD,UAAM,KAAK,aAAa,mBAAmB,EAAE,MAAM,UAAU,KAAK,CAAC;AACnE,UAAM,cAAc,MAAM,KAAK,WAAW,UAAU,MAAM,MAAM,SAAS,MAAM,UAAU,WAAW,MAAM,EAAE;AAC5G,UAAM,KAAK,aAAa,iBAAiB,EAAE,SAAS,YAAY,CAAC;AACjE,UAAM,KAAK,uBAAuB,YAAY,EAAE;AAEhD,UAAM,OAAO,KAAK,kBAAkB,KAAK,WAAW;AACpD,UAAM,QAAQ,MAAM,KAAK,aAAa;AACtC,UAAM,KAAK,aAAa,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEhE,QAAI;AACF,YAAM,KAAK,cAAc,IAAI;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,UAAI,iBAAiB,kBAAmB;AACxC,YAAM;AAAA,IACR,UAAE;AACA,WAAK,IAAI,kBAAkB;AAAA,QACzB,QAAQ,KAAK;AAAA,QACb,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,SAAS;AAAA,MACtD,CAAC;AACD,YAAM,KAAK,aAAa,cAAc,EAAE,QAAQ,KAAK,eAAe,aAAa,KAAK,YAAY,CAAC;AACnG,WAAK,gBAAgB,+BAAgC,KAAK,aAAa;AACvE,WAAK,gBAAgB;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,MAAc,WACZ,MACA,SACA,UACA,UACA,IACuB;AACvB,UAAM,UAAU,KAAK,kBAAkB,cAAc;AAAA,MACnD;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,MACb;AAAA,MACA;AAAA,IACF,CAAC;AACD,SAAK,QAAQ,eAAe,KAAK,kBAAkB;AACnD,UAAM,KAAK,mBAAmB,eAAe,KAAK,kBAAkB,WAAW;AAC/E,UAAM,KAAK,eAAe;AAC1B,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,sBAAsB,QAA2C;AAC7E,SAAK,kBAAkB,cAAc;AAAA,MACnC,UAAU,OAAO;AAAA,MACjB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,OAAO;AAAA,MAClB,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO;AAAA,MACf,QAAQ;AAAA,MACR,UAAU,EAAE,SAAS,OAAO,IAAI,WAAW,OAAO,KAAK;AAAA,IACzD,CAAC;AACD,SAAK,QAAQ,eAAe,KAAK,kBAAkB;AACnD,UAAM,KAAK,mBAAmB,eAAe,KAAK,kBAAkB,WAAW;AAC/E,UAAM,KAAK,eAAe;AAAA,EAC5B;AAAA,EAEA,MAAc,mBAAmB,MAA2B,MAAe,YAAoB,QAAmD;AAChJ,WAAO,KAAK,WAAW,aAAa,CAAC;AAAA,MACnC,MAAM;AAAA,MACN;AAAA,MACA,UAAU,KAAK;AAAA,MACf,OAAO;AAAA,IACT,CAAC,GAAG;AAAA,MACF;AAAA,MACA,UAAU,KAAK;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,qBAAqB,MAA2B,QAAyB,YAAmC;AACxH,UAAM,KAAK,WAAW,QAAQ,CAAC;AAAA,MAC7B,MAAM;AAAA,MACN;AAAA,MACA,UAAU,KAAK;AAAA,MACf,QAAQ,OAAO,QAAQ,OAAO;AAAA,IAChC,CAAC,GAAG;AAAA,MACF;AAAA,MACA,UAAU,KAAK;AAAA,MACf,SAAS,OAAO;AAAA,MAChB,GAAG,OAAO;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,uBAAuB,WAAkC;AACrE,QAAI,CAAC,KAAK,kBAAkB,uBAAuB,SAAS,EAAG;AAC/D,UAAM,KAAK,mBAAmB,eAAe,KAAK,kBAAkB,WAAW;AAAA,EACjF;AAAA,EAEQ,mBAAmB,OAAoD;AAC7E,UAAM,UAAU,MAAM,aAAa;AACnC,QAAI,OAAO,YAAY,WAAY,QAAOA,WAAU,QAAQ,CAAC;AAC7D,QAAI,WAAW,OAAO,YAAY,SAAU,QAAOA,WAAU,OAAO;AACpE,WAAO,CAAC;AAAA,EACV;AAAA,EAEQ,kBAAkB,QAAgB;AACxC,UAAM,OAAO,KAAK,MAAM,MAAM,MAAM;AACpC,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,iBAAiB,MAAM,gBAAgB,KAAK,MAAM,GAAG,IAAI;AACpF,WAAO;AAAA,EACT;AAAA,EAEQ,gBAAgB,UAAuC;AAC7D,eAAW,QAAQ,OAAO,OAAO,KAAK,MAAM,KAAK,GAAG;AAClD,UAAI,oBAAoB,MAAM,QAAQ,EAAG,QAAO,iBAAiB,IAAI;AAAA,IACvE;AACA,UAAM,IAAI,MAAM,iBAAiB,iBAAiB,QAAQ,CAAC,gBAAgB,KAAK,MAAM,GAAG,IAAI;AAAA,EAC/F;AAAA,EAEQ,iBACN,SAA6B,EAAE,MAAM,UAAU,GAC/C,eACA,aACkB;AAClB,UAAM,MAAM,KAAK,QAAQ,QAAQ,MAAM,KAAK,WAAW,QAAQ,eAAe,WAAW,CAAC,KAAK;AAC/F,WAAO;AAAA,MACL,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,UAAU,KAAK,MAAM;AAAA,MACrB,SAAS,KAAK;AAAA,MACd,WAAW,KAAK,YAAY;AAAA,MAC5B,WAAW,KAAK;AAAA,MAChB,OAAO;AAAA,QACL,KAAK,MAAMA,WAAU,KAAK,KAAK;AAAA,MACjC;AAAA,MACA,SAAS;AAAA,QACP,KAAK,CAAC,YAA8B,KAAK,cAAc,EAAE,eAAe,OAAO,GAAG,QAAQ,CAAC;AAAA,MAC7F;AAAA,MACA,QAAQ;AAAA,QACN,OAAO,CAAqB,WAC1B,KAAK,YAAY,MAAM,EAAE,IAAI,CAAC,UAAUA,WAAU,MAAM,MAAM,CAAC;AAAA,MACnE;AAAA,MACA,MAAM;AAAA,QACJ,SAAS,MAAM,YAAY,KAAK,kBAAkB,KAAK,WAAW,CAAC;AAAA,MACrE;AAAA,MACA,SAAS;AAAA,QACP,KAAK,CAAC,WAAgC,KAAK,kBAAkB,MAAM;AAAA,QACnE,UAAU,MAAM,KAAK,mBAAmB;AAAA,MAC1C;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,mBACN,MACA,SAA6B,OAAO,EAAE,MAAM,QAAQ,IAAI,KAAK,IAAI,MAAM,KAAK,KAAK,IAAI,EAAE,MAAM,UAAU,GACvG,eACA,aACoB;AACpB,UAAM,cAAc,KAAK,iBAAiB,QAAQ,eAAe,WAAW;AAC5E,UAAM,UAAU,KAAK,eAAe;AACpC,QAAI,CAAC,QAAS,OAAM,IAAI,MAAM,sCAAsC;AACpE,UAAM,oBAAoB,CAAC,YACzB,KAAK,iBAAiB,QAAQ,eAAe,aAAa,OAAO;AACnE,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,MACA,OAAO;AAAA,QACL,KAAK,MAAMA,WAAU,KAAK,KAAK;AAAA,QAC/B,QAAQ,CAAC,UAAU,KAAK,YAAY,KAAK;AAAA,QACzC,KAAK,CAAC,SAAS,KAAK,aAAa,IAAI;AAAA,MACvC;AAAA,MACA,QAAQ;AAAA,QACN,GAAG,YAAY;AAAA,QACf,MAAM,CAAC,YAAYC,UAAS,YAC1B,KAAK,KAAK,YAAiCA,UAAS,kBAAkB,OAAO,CAAC;AAAA,MAClF;AAAA,MACA,MAAM;AAAA,QACJ,GAAG,YAAY;AAAA,QACf,QAAQ,OAAO,MAA2B,UAAoB,KAAK,WAAW,MAAM,KAAK;AAAA,MAC3F;AAAA,MACA,OAAO;AAAA,QACL,QAAQ,CAACE,OAA2B,SAClC,KAAK,WAAWA,OAAM,MAAM,QAAQ,eAAe,WAAW;AAAA,MAClE;AAAA,MACA,SAAS;AAAA,QACP,GAAG,YAAY;AAAA,QACf,KAAK,CAAC,OAAiC,YACrC,QAAQ,QAAQ,KAAK,kBAAkB,OAAO,OAAO,CAAC;AAAA,QACxD,QAAQ,CAAC,SAAmC,YAC1C,KAAK,qBAAqB,SAAS,OAAO;AAAA,QAC5C,QAAQ,CAAC,OAAe,QAAQ,QAAQ,KAAK,qBAAqB,EAAE,CAAC;AAAA,QACrE,OAAO,CAAC,WAAgC,QAAQ,QAAQ,KAAK,oBAAoB,MAAM,CAAC;AAAA,MAC1F;AAAA,MACA,UAAU;AAAA,QACR,SAAS,OAAO,OAAO,YAAY;AACjC,gBAAM,UAAU,2BAA2B,KAAK;AAChD,eAAK,cAAc,KAAK;AAAA,YACtB,IAAI,QAAQ;AAAA,YACZ,SAAS,QAAQ;AAAA,YACjB,UAAU,EAAE,GAAG,QAAQ,UAAU,GAAG,SAAS,SAAS;AAAA,YACtD,MAAM,QAAQ;AAAA,YACd,UAAU;AAAA,UACZ,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,QAAQ,CAAC,UAAiC,KAAK,eAAe,OAAO,kBAAkB,EAAE,kBAAkB,MAAM,CAAC,CAAC;AAAA,MACrH;AAAA,MACA,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EAEQ,iBACN,QACA,eACA,aACA,SACyB;AACzB,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ,SAAS,UAAU;AAAA,MAC3B,eAAe,SAAS,iBAAiB;AAAA,MACzC,aAAa,SAAS,eAAe;AAAA,IACvC;AAAA,EACF;AAAA,EAEQ,8BAAoC;AAC1C,QAAI,CAAC,KAAK,qBAAsB;AAChC,SAAK,uBAAuB;AAC5B,UAAM,IAAI,kBAAkB;AAAA,EAC9B;AAAA,EAEQ,uBAAuB,OAA+C;AAC5E,QAAI,UAAU,OAAW,QAAO;AAChC,UAAM,OAAO,MAAM,KAAK;AACxB,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,0BAA0B;AACrD,SAAK,qBAAqB,IAAI;AAC9B,WAAO;AAAA,EACT;AAAA,EAEQ,iBAAyB;AAC/B,WAAO,KAAK,oBAAoB,KAAK,iBAAiB,KAAK,kBAAkB,KAAK,WAAW,EAAE,SAAS,KAAK;AAAA,EAC/G;AAAA,EAEQ,qBAAqB,OAAsC;AACjE,WAAO,KAAK,iBAAiB,QAAQ,KAAK;AAAA,EAC5C;AAAA,EAEQ,sBAA0C;AAChD,UAAM,WAAW,KAAK,qBAAqB,KAAK,eAAe,CAAC;AAChE,UAAM,KAAK,gBAAgB,SAAS,QAAQ;AAC5C,WAAO,EAAE,MAAM,kBAAkB,IAAI,MAAM,GAAG;AAAA,EAChD;AAAA,EAEQ,iBAAiB,SAA2C;AAClE,WAAO,KAAK,kBAAkB,OAAO,SAAS,KAAK,aAAa;AAAA,EAClE;AAAA,EAEQ,mCAA+D;AACrE,UAAM,OAAO,KAAK,kBAAkB,KAAK,WAAW;AACpD,QAAI,CAAC,KAAK,UAAW,QAAO,CAAC;AAC7B,QAAI,KAAK,cAAc,OAAO;AAC5B,aAAO,KAAK,oBAAoB,EAC7B,OAAO,CAAC,aAAa,CAAC,KAAK,kBAAkB,SAAS,iBAAiB,QAAQ,CAAC,CAAC,EACjF,KAAK,CAAC,GAAG,OAAO,EAAE,YAAY,MAAM,EAAE,YAAY,EAAE;AAAA,IACzD;AACA,WAAO,KAAK,UACT,OAAO,CAAC,YAAY,CAAC,KAAK,kBAAkB,SAAS,KAAK,iBAAiB,OAAO,EAAE,IAAI,CAAC;AAAA,EAC9F;AAAA,EAEQ,sBAA8C;AACpD,UAAM,YAAY,oBAAI,IAAkC;AACxD,eAAW,QAAQ,OAAO,OAAO,KAAK,MAAM,KAAK,GAAG;AAClD,UAAI,CAAC,KAAK,aAAa,KAAK,cAAc,MAAO;AACjD,iBAAW,WAAW,KAAK,WAAW;AACpC,cAAM,WAAW,KAAK,sBAAsB,SAAS,KAAK,EAAE;AAC5D,kBAAU,IAAI,iBAAiB,QAAQ,GAAG,QAAQ;AAAA,MACpD;AAAA,IACF;AACA,WAAO,CAAC,GAAG,UAAU,OAAO,CAAC;AAAA,EAC/B;AAAA,EAEQ,sBACN,WACA,oBAC0D;AAC1D,QAAI,CAAC,2BAA2B,SAAS,GAAG;AAC1C,YAAM,IAAI,MAAM,wFAAwF;AAAA,IAC1G;AAEA,UAAM,WAAW,yBAAyB,SAAS,IAAI,UAAU,WAAW;AAC5E,UAAM,UAAU,yBAAyB,SAAS,IAAI,UAAU,UAAU;AAE1E,QAAI,0BAA0B,QAAQ,GAAG;AACvC,uBAAiB,UAAU,kBAAkB;AAC7C,aAAO,EAAE,UAAU,UAAU,QAAQ;AAAA,IACvC;AAEA,QAAI,uBAAuB,QAAQ,GAAG;AACpC,UAAI,CAAC,oBAAoB;AACvB,cAAM,IAAI;AAAA,UACR,qBAAqB,iBAAiB,QAAQ,CAAC;AAAA,QACjD;AAAA,MACF;AACA,YAAM,WAAW,KAAK,oBAAoB,EAAE,KAAK,CAAC,cAAc,+BAA+B,WAAW,QAAQ,CAAC;AACnH,UAAI,CAAC,SAAU,OAAM,IAAI,MAAM,6BAA6B,iBAAiB,QAAQ,CAAC,IAAI;AAC1F,aAAO,EAAE,UAAU,QAAQ;AAAA,IAC7B;AAEA,UAAM,IAAI,MAAM,iFAAiF;AAAA,EACnG;AAAA,EAEQ,iBAAiB,SAA2D;AAClF,UAAM,EAAE,UAAU,QAAQ,IAAI,KAAK,sBAAsB,SAAS,IAAI;AACtE,WAAO,uBAAuB,UAAU,OAAO;AAAA,EACjD;AAAA,EAEQ,yBAAyB,YAA+C;AAC9E,WAAO,KAAK,gBAAgB,WAAW,YAAY,KAAK,OAAO,KAAK,aAAa;AAAA,EACnF;AAAA,EAEQ,0BAA0B,YAA+B,QAAkC;AACjG,SAAK,gBAAgB,YAAY,YAAY,QAAQ,KAAK,OAAO,KAAK,aAAa;AAAA,EACrF;AAAA,EAEQ,sBAAsB,SAA+B;AAC3D,SAAK,gBAAgB,QAAQ,OAAO;AAAA,EACtC;AAAA,EAEQ,kBACN,OACA,UAAsC,CAAC,GACvC,UACc;AACd,UAAM,eAAe,KAAK;AAAA,MACxB;AAAA,MACA;AAAA,QACE,YAAY,UAAU;AAAA,QACtB,eAAe,UAAU;AAAA,MAC3B;AAAA,IACF;AACA,WAAO,KAAK,8BAA8B,cAAc,OAAO;AAAA,EACjE;AAAA,EAEQ,8BACN,cACA,UAAsC,CAAC,GACzB;AACd,WAAO,KAAK,gBAAgB,gBAAgB;AAAA,MAC1C;AAAA,MACA;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,IACf,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,qBACZ,SACA,SACyB;AACzB,UAAM,WAAW,MAAM,KAAK,oBAAoB,OAAO;AACvD,WAAO,SAAS,cAAc,IAAI,CAAC,cAAc,UAC/C,KAAK;AAAA,MACH;AAAA,MACA;AAAA,QACE,GAAG;AAAA,QACH,IAAI,SAAS,MAAM,SAAS,cAAc,WAAW,IAAI,QAAQ,KAAK,SAAS,KAAK,GAAG,QAAQ,EAAE,IAAI,KAAK,KAAK;AAAA,MACjH;AAAA,IACF,CAAC;AAAA,EACL;AAAA,EAEQ,qBAAqB,IAAqB;AAChD,WAAO,KAAK,gBAAgB,OAAO,EAAE;AAAA,EACvC;AAAA,EAEQ,oBAAoB,QAAqC;AAC/D,WAAO,KAAK,gBAAgB,MAAM,MAAM;AAAA,EAC1C;AAAA,EAEA,MAAc,qBAAqB,UAA6B,kBAA4C;AAC1G,UAAM,UAAU,YAAY,IAAI;AAChC,UAAM,iBAAiB,KAAK,iCAAiC;AAC7D,SAAK,IAAI,wBAAwB,EAAE,eAAe,eAAe,OAAO,GAAG,EAAE,MAAM,UAAU,CAAC;AAC9F,UAAM,YAA2C,CAAC;AAClD,eAAW,WAAW,gBAAgB;AACpC,UAAI;AACF,kBAAU,KAAK,MAAM,KAAK,oBAAoB,OAAO,CAAC;AAAA,MACxD,SAAS,OAAO;AACd,YAAI,CAAC,KAAK,6BAA6B,SAAS,KAAK,EAAG,OAAM;AAAA,MAChE;AAAA,IACF;AAEA,UAAM,iBAAiB,KAAK,yBAAyB,OAAO;AAC5D,UAAM,gBAAgB;AAAA,MACpB,GAAG,UAAU,QAAQ,CAAC,aAAa,SAAS,aAAa;AAAA,MACzD,GAAG,eAAe,IAAI,CAAC,UAAU,MAAM,YAAY;AAAA,IACrD;AACA,UAAM,sBAAsB,cAAc,OAAO,CAAC,iBAAiB,KAAK,YAAY,aAAa,IAAI,EAAE,gCAA6B;AACpI,UAAM,uBAAuB,cAAc,OAAO,CAAC,iBAAiB,KAAK,YAAY,aAAa,IAAI,EAAE,oCAA+B;AACvI,UAAM,eAAe,KAAK,0BAA0B,mBAAmB;AACvE,UAAM,WAAW,qBAAqB,IAAI,CAAC,iBAAiB,KAAK,sBAAsB,YAAY,CAAC;AAEpG,UAAM,WAA4B;AAAA,MAChC,IAAI,SAAS;AAAA,MACb,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,MACb,WAAWJ,QAAO;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,SAAK,gBAAgB,eAAe,QAAQ;AAC5C,UAAM,KAAK,mBAAmB,oBAAoB,QAAQ;AAC1D,SAAK,sBAAsB,cAAc;AACzC,SAAK,IAAI,0BAA0B;AAAA,MACjC,eAAe,UAAU;AAAA,MACzB,mBAAmB,cAAc;AAAA,MACjC,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,OAAO;AAAA,IACpD,GAAG,EAAE,MAAM,UAAU,CAAC;AACtB,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,oBAAoB,SAAyE;AACzG,UAAM,EAAE,UAAU,QAAQ,IAAI,KAAK,sBAAsB,SAAS,IAAI;AACtE,UAAM,UAAU,uBAAuB,UAAU,OAAO;AACxD,QAAI,KAAK,cAAc,SAAS,QAAQ,IAAI,GAAG;AAC7C,YAAM,IAAI,MAAM,oCAAoC,CAAC,GAAG,KAAK,eAAe,QAAQ,IAAI,EAAE,KAAK,MAAM,CAAC,EAAE;AAAA,IAC1G;AAEA,SAAK,cAAc,KAAK,QAAQ,IAAI;AACpC,QAAI;AACF,YAAM,SAAS,MAAM,SAAS;AAAA,QAC5B,KAAK;AAAA,UACH,EAAE,MAAM,oBAAoB,IAAI,QAAQ,MAAM,MAAM,QAAQ,MAAM;AAAA,UAClE,KAAK;AAAA,QACP;AAAA,QACA;AAAA,MACF;AACA,aAAO;AAAA,QACL,YAAY,QAAQ;AAAA,QACpB,eAAe,QAAQ;AAAA,QACvB,SAAS;AAAA,QACT,eAAe,KAAK,uBAAuB,UAAU,MAAM;AAAA,MAC7D;AAAA,IACF,UAAE;AACA,WAAK,cAAc,IAAI;AAAA,IACzB;AAAA,EACF;AAAA,EAEQ,6BAA6B,SAAmC,OAAyB;AAC/F,QAAI,UAAkC,EAAE,MAAM,UAAU;AACxD,QAAI,WAAW;AACf,QAAI;AACF,YAAM,EAAE,UAAU,QAAQ,IAAI,KAAK,sBAAsB,SAAS,IAAI;AACtE,gBAAU,uBAAuB,UAAU,OAAO;AAClD,iBAAW,yBAAyB,OAAO,KAAK,OAAO,QAAQ,aAAa,YACxE,QAAQ,WACR,SAAS,YAAY;AAAA,IAC3B,QAAQ;AAAA,IAER;AAEA,UAAM,cAAc,KAAK,kBAAkB,KAAK,WAAW,EAAE;AAC7D,UAAM,mBAAmB,KAAK,QAAQ,aAAa,mBAAmB;AACtE,UAAM,OAAO,qBAAqB,aAAa,SAAS,gBAAgB;AACxE,UAAM,SAA6B,EAAE,MAAM,oBAAoB,IAAI,QAAQ,MAAM,MAAM,QAAQ,MAAM;AACrG,UAAM,aAAa,KAAK,eAAe,OAAO;AAAA,MAC5C,MAAM;AAAA,MACN,UAAU;AAAA,MACV,UAAU,OAAO,SAAS;AAAA,MAC1B,aAAa;AAAA,MACb;AAAA,MACA,SAAS,EAAE,cAAc,QAAQ,KAAK;AAAA,IACxC,CAAC;AACD,SAAK;AAAA,MACH;AAAA,MACA,EAAE,cAAc,QAAQ,MAAM,OAAO,YAAY,eAAe,MAAM;AAAA,MACtE;AAAA,MACA,KAAK;AAAA,IACP;AACA,QAAI,KAAM,MAAK,QAAQ,OAAO,KAAK,KAAK,YAAY,UAAU,CAAC;AAC/D,WAAO;AAAA,EACT;AAAA,EAEQ,6BACN,OACA,UAII,CAAC,GACgB;AACrB,QAAI,OAAO,UAAU,UAAU;AAC7B,YAAMK,QAAO,KAAK,YAAY,QAAQ,eAAe,UAAU;AAC/D,aAAO;AAAA,QACL,YAAY,QAAQ;AAAA,QACpB,eAAe,QAAQ;AAAA,QACvB,MAAMA,MAAK;AAAA,QACX,YAAYA,MAAK;AAAA,QACjB,UAAUA,MAAK;AAAA,QACf,SAAS;AAAA,MACX;AAAA,IACF;AAEA,UAAM,OAAO,KAAK,YAAY,MAAM,QAAQ,QAAQ,eAAe,UAAU;AAC7E,WAAO;AAAA,MACL,YAAY,QAAQ;AAAA,MACpB,eAAe,QAAQ;AAAA,MACvB,MAAM,KAAK;AAAA,MACX,YAAY,KAAK;AAAA,MACjB,UAAU,KAAK;AAAA,MACf,SAAS,MAAM;AAAA,MACf,UAAU,MAAM;AAAA,IAClB;AAAA,EACF;AAAA,EAEQ,uBAAuB,UAAgC,QAAsD;AACnH,UAAM,UAAU,uBAAuB,QAAQ;AAC/C,QAAI,UAAU,KAAM,QAAO,CAAC;AAC5B,UAAM,UAAU,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;AACxD,WAAO,QACJ,IAAI,CAAC,UAA2C;AAC/C,UAAI,OAAO,UAAU,YAAY,CAAC,MAAM,KAAK,EAAG,QAAO;AACvD,UACE,OAAO,UAAU,aACb,MAAM,WAAW,QAAS,OAAO,MAAM,YAAY,YAAY,CAAC,MAAM,QAAQ,KAAK,IACvF;AACA,eAAO;AAAA,MACT;AACA,aAAO,KAAK,6BAA6B,OAAO;AAAA,QAC9C,YAAY,QAAQ;AAAA,QACpB,eAAe,QAAQ;AAAA,QACvB,aAAa,SAAS;AAAA,MACxB,CAAC;AAAA,IACH,CAAC,EACA,OAAO,OAAO;AAAA,EACnB;AAAA,EAEQ,YAAY,UAAsD;AACxE,WAAO,KAAK,aAAa,QAAQ,QAAQ;AAAA,EAC3C;AAAA,EAEQ,oCAAoC,UAAgC;AAC1E,SAAK,aAAa,oCAAoC,QAAQ;AAAA,EAChE;AAAA,EAEQ,0BAA0B,eAA8C;AAC9E,QAAI,CAAC,cAAc,OAAQ,QAAO;AAClC,UAAM,WAAW,cAAc,IAAI,CAAC,iBAAiB;AACnD,YAAM,QAAQ,aAAa,iBAAiB,aAAa,cAAc,aAAa;AACpF,aAAO,MAAM,KAAK;AAAA;AAAA,EAAO,iBAAiB,aAAa,OAAO,CAAC;AAAA,IACjE,CAAC;AACD,WAAO;AAAA;AAAA,EAAwB,SAAS,KAAK,MAAM,CAAC;AAAA,EACtD;AAAA,EAEQ,sBAAsB,cAAiD;AAC7E,UAAM,OAAO,KAAK,YAAY,aAAa,IAAI;AAC/C,WAAO;AAAA,MACL,IAAI,SAAS;AAAA,MACb,KAAK;AAAA,MACL,UAAU,KAAK,kBAAkB,uBAAuB;AAAA,MACxD,MAAM,KAAK;AAAA,MACX,YAAY,aAAa,cAAc,KAAK;AAAA,MAC5C,UAAU,aAAa,YAAY,KAAK;AAAA,MACxC,SAAS,aAAa;AAAA,MACtB,WAAWL,QAAO;AAAA,MAClB,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,MACb,aAAaC,WAAU,KAAK,kBAAkB,iBAAiB;AAAA,MAC/D,UAAU;AAAA,QACR,mBAAmB,aAAa;AAAA,QAChC,aAAa,aAAa,cAAc,aAAa;AAAA,QACrD,iBAAiB,aAAa;AAAA,QAC9B,GAAG,aAAa;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,eAA+C;AAC3D,UAAM,OAAO,KAAK,kBAAkB,KAAK,WAAW;AACpD,UAAM,QAA+B,CAAC;AACtC,eAAW,UAAU,KAAK,SAAS,CAAC,GAAG;AACrC,UAAI,CAAC,eAAe,MAAM,EAAG,OAAM,IAAI,MAAM,2FAA2F;AACxI,uBAAiB,QAAQ,MAAM;AAC/B,YAAM,KAAK,MAAM;AAAA,IACnB;AACA,UAAM,QAAQ,oBAAI,IAAY;AAC9B,eAAW,QAAQ,OAAO;AACxB,UAAI,MAAM,IAAI,KAAK,IAAI,EAAG,OAAM,IAAI,MAAM,uBAAuB,KAAK,IAAI,cAAc,KAAK,WAAW,IAAI;AAC5G,YAAM,IAAI,KAAK,IAAI;AAAA,IACrB;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,cAAqC;AAC3C,UAAM,QAAQ,oBAAI,IAAiC;AACnD,eAAW,QAAQ,OAAO,OAAO,KAAK,MAAM,KAAK,GAAG;AAClD,iBAAW,UAAU,KAAK,SAAS,CAAC,GAAG;AACrC,YAAI,CAAC,eAAe,MAAM,EAAG;AAC7B,cAAM,IAAI,OAAO,MAAM,MAAM;AAAA,MAC/B;AAAA,IACF;AACA,WAAO,CAAC,GAAG,MAAM,OAAO,CAAC;AAAA,EAC3B;AAAA,EAEQ,mBAAmB,MAA6C;AACtE,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,kBAAkB,OAAO,KAAK,qBAAqB,YAAY,KAAK,mBAAmB;AAAA,IACzF;AAAA,EACF;AAAA,EAEQ,YAAY,MAAmF;AACrG,UAAM,aAAa,eAAe,IAAI;AACtC,UAAM,OAAO,UAAU,UAAU;AACjC,WAAO;AAAA,MACL,MAAM,iBAAiB,IAAI;AAAA,MAC3B,OAAO,kBAAkB,IAAI;AAAA,MAC7B,WAAW;AAAA,MACX,cAAc;AAAA,IAChB;AAAA,EACF;AAAA,EAEQ,iBAAwC;AAC9C,UAAM,YAAY,oBAAI,IAAiC;AACvD,UAAM,MAAM,CAAC,YAA+B,UAAU,UAAU;AAC9D,YAAM,OAAO,UAAU,UAAU;AACjC,gBAAU,IAAI,MAAM;AAAA,QAClB;AAAA,QACA,OAAO,kBAAkB,UAAU;AAAA,QACnC,WAAW,iBAAiB,UAAU;AAAA,QACtC;AAAA,MACF,CAAC;AAAA,IACH;AAEA,eAAW,cAAc,oBAAqB,KAAI,YAAY,IAAI;AAClE,eAAW,QAAQ,KAAK,MAAM,SAAS,CAAC,EAAG,KAAI,eAAe,IAAI,CAAE;AACpE,eAAW,cAAc,KAAK,MAAM,kBAAkB,CAAC,EAAG,KAAI,UAAU;AACxE,WAAO,CAAC,GAAG,UAAU,OAAO,CAAC;AAAA,EAC/B;AAAA,EAEA,MAAc,WACZ,UACA,MACA,SAA6B,EAAE,MAAM,UAAU,GAC/C,qBACA,mBAC0B;AAC1B,UAAM,QAAQ,MAAM,KAAK,aAAa,GAAG,KAAK,CAAC,cAAc,oBAAoB,WAAW,QAAQ,CAAC;AACrG,QAAI,CAAC,MAAM;AACT,YAAM,QAAQ,iBAAiB,QAAQ;AACvC,YAAM,IAAI,MAAM,iBAAiB,KAAK,cAAc,KAAK,WAAW,IAAI;AAAA,IAC1E;AACA,WAAO,KAAK,YAAY,MAAM,MAAM,QAAW,QAAQ,qBAAqB,iBAAiB;AAAA,EAC/F;AAAA,EAEA,MAAc,YACZ,MACA,MACA,QACA,SAA6B,EAAE,MAAM,UAAU,GAC/C,qBACA,mBAC0B;AAC1B,WAAO,KAAK,aAAa,QAAQ;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,oBAAoB,QAAyD;AACzF,UAAM,iBAAiBA,WAAU,KAAK,kBAAkB,sBAAsB;AAC9E,UAAM,WAAW,KAAK,kBAAkB,kBAAkB,MAAM;AAChE,SAAK,kBAAkB,kBAAkB,QAAQ;AACjD,UAAM,KAAK,aAAa,8BAA8B;AAAA,MACpD;AAAA,MACA,QAAQ,KAAK,kBAAkB;AAAA,IACjC,GAAG,EAAE,kBAAkB,MAAM,CAAC;AAC9B,SAAK,IAAI,4BAA4B,EAAE,UAAU,KAAK,kBAAkB,uBAAuB,GAAG,CAAC;AACnG,SAAK,kBAAkB,kBAAkB,QAAQ;AACjD,UAAM,KAAK,eAAe;AAC1B,WAAOA,WAAU,KAAK,kBAAkB,sBAAsB;AAAA,EAChE;AAAA,EAEA,MAAc,aACZ,YACAC,UACA,SACuB;AACvB,WAAO,KAAK,mBAAmB,YAAYA,UAAS;AAAA,MAClD,QAAQ,EAAE,MAAM,UAAU;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,KACZ,YACAA,UACA,SACuB;AACvB,WAAO,KAAK,mBAAmB,YAAYA,UAAS,OAAO;AAAA,EAC7D;AAAA,EAEA,MAAc,mBACZ,YACAA,UACA,SACuB;AACvB,UAAM,OAAO,UAAU,UAAU;AACjC,UAAM,gBAAgB,gBAAgB,WAAW,MAAM,EAAE,MAAMA,QAAO;AACtE,QAAI,SAAS,kBAAkB,KAAM,MAAK,cAAc,eAAe,OAAO;AAC9E,SAAK,kBAAkB;AAAA,MACrB,KAAK,cAAc,gBAAgB,KAAK,kBAAkB,kBAAkB,QAAQ;AAAA,IACtF;AACA,UAAM,WAAW,KAAK,kBAAkB,uBAAuB;AAC/D,UAAM,QAAQ,KAAK,cAAc,OAAO;AAAA,MACtC;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,SAAS,UAAU,EAAE,MAAM,SAAS;AAAA,MAC5C,SAAS;AAAA,MACT,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,MACb,eAAe,SAAS;AAAA,MACxB,aAAa,SAAS;AAAA,MACtB,UAAU,SAAS;AAAA,IACrB,CAAC;AACD,UAAM,SAAS,MAAM;AACrB,SAAK,kBAAkB,mBAAmB,MAAM;AAChD,SAAK,QAAQ,aAAa,KAAK,cAAc;AAC7C,UAAM,KAAK,uBAAuB;AAClC,UAAM,KAAK,mBAAmB,YAAY,MAAM;AAChD,UAAM,KAAK,eAAe;AAC1B,SAAK,0BAA0B,YAAY,MAAM;AACjD,QAAI,SAAS,qBAAqB,MAAO,OAAM,KAAK,sBAAsB,MAAM;AAChF,UAAM,KAAK,cAAc,OAAO,MAAM;AACtC,QAAI,CAAC,SAAS,UAAW,OAAM,KAAK,cAAc,KAAK;AACvD,WAAO;AAAA,EACT;AAAA,EAEQ,YAAgC,QAAgE;AACtG,WAAO,KAAK,cAAc,MAAM,QAAQ,KAAK,kBAAkB,oBAAoB,CAAC;AAAA,EACtF;AAAA,EAEA,MAAc,cAAc,OAAoC;AAC9D,QAAI,KAAK,YAAY,GAAI,OAAM,IAAI,MAAM,+BAA+B;AACxE,UAAM,SAAS,KAAK,MAAM,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS;AACtD,YAAM,aAAa,eAAe,IAAI;AACtC,aAAO,aAAa,UAAU,UAAU,MAAM,MAAM,OAAO;AAAA,IAC7D,CAAC;AACD,QAAI,CAAC,MAAM,OAAQ;AAEnB,UAAM,KAAK,kBAAkB;AAC7B,SAAK;AACL,QAAI;AACF,iBAAW,QAAQ,OAAO;AACxB,cAAM,KAAK;AAAA,UACT,KAAK;AAAA,YACH;AAAA,YACA,EAAE,MAAM,QAAQ,IAAI,iBAAiB,IAAI,GAAG,MAAM,kBAAkB,IAAI,EAAE;AAAA,YAC1E,MAAM,OAAO;AAAA,YACb,MAAM;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF,UAAE;AACA,WAAK;AAAA,IACP;AAAA,EACF;AACF;;;AC7oDO,IAAK,sBAAL,kBAAKI,yBAAL;AACL,EAAAA,qBAAA,UAAO;AACP,EAAAA,qBAAA,YAAS;AACT,EAAAA,qBAAA,cAAW;AACX,EAAAA,qBAAA,qBAAkB;AAClB,EAAAA,qBAAA,kBAAe;AACf,EAAAA,qBAAA,iBAAc;AACd,EAAAA,qBAAA,qBAAkB;AAClB,EAAAA,qBAAA,iBAAc;AACd,EAAAA,qBAAA,eAAY;AACZ,EAAAA,qBAAA,WAAQ;AACR,EAAAA,qBAAA,YAAS;AAXC,SAAAA;AAAA,GAAA;;;AChHZ,SAASC,UAAiB;AACxB,UAAO,oBAAI,KAAK,GAAE,YAAY;AAChC;AAQO,SAAS,yBAAyB,OAOlB;AACrB,QAAM,YAAYA,QAAO;AACzB,QAAM,YAAY,MAAM,YAAY,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,SAAS,EAAE,YAAY,IAAI;AAC/F,QAAM,KAAK,SAAS;AACpB,SAAO;AAAA,IACL;AAAA,IACA,WAAW,MAAM;AAAA,IACjB,OAAO,MAAM;AAAA,IACb,YAAY,MAAM,QAAQ;AAAA,IAC1B,MAAM,MAAM,QAAQ;AAAA,IACpB,MAAM,MAAM,QAAQ;AAAA,IACpB,QAAQ,MAAM,QAAQ;AAAA,IACtB,MAAM,MAAM,QAAQ;AAAA,IACpB,aAAa,MAAM,QAAQ;AAAA,IAC3B;AAAA,IACA;AAAA,IACA,SAAS,MAAM,MAAM,QAAQ,EAAE;AAAA,IAC/B,MAAM,CAAC,WAAoB,MAAM,KAAK,IAAI,MAAM;AAAA,EAClD;AACF;;;ACpCO,IAAM,qBAAN,MAAyB;AAAA,EAI9B,YACmB,OAMjB;AANiB;AAAA,EAMhB;AAAA,EANgB;AAAA,EAJF,mBAAmB,oBAAI,IAAiC;AAAA,EACxD,0BAA0B,oBAAI,IAAoB;AAAA,EAWnE,IAAI,QAAgB;AAClB,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AAAA,EAEA,aAAmC;AACjC,WAAO,CAAC,GAAG,KAAK,iBAAiB,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,SAAS,MAAM;AAAA,EAC9E;AAAA,EAEA,kBAAkB,YAA4B;AAC5C,UAAM,aAAa,KAAK,wBAAwB,IAAI,UAAU,KAAK;AACnE,SAAK,wBAAwB,OAAO,UAAU;AAC9C,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,SAA6D;AACnE,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,YAAM,YAAY,QAAQ,qBAAqB,KAAK,MAAM;AAC1D,YAAM,SAAS,yBAAyB;AAAA,QACtC,WAAW,KAAK,MAAM;AAAA,QACtB,OAAO,KAAK,MAAM,SAAS;AAAA,QAC3B;AAAA,QACA;AAAA,QACA,SAAS,OAAO,OAAO,KAAK,QAAQ,IAAI,IAAI;AAAA,QAC5C,MAAM,OAAO,IAAI,WAAW,KAAK,QAAQ,IAAI,OAAO,MAAM;AAAA,MAC5D,CAAC;AACD,YAAM,UAAU,YAAY,IACxB,WAAW,MAAM;AACjB,aAAK,QAAQ,OAAO,IAAI,KAAK;AAAA,MAC/B,GAAG,SAAS,IACV;AAEJ,WAAK,iBAAiB,IAAI,OAAO,IAAI;AAAA,QACnC;AAAA,QACA;AAAA,QACA,SAAS,CAAC,aAAa,QAAQ,WAAW,aAAa,QAAQ;AAAA,MACjE,CAAC;AACD,WAAK,wBAAwB,IAAI,OAAO,YAAY,OAAO,EAAE;AAC7D,WAAK,MAAM,gBAAgB,MAAM;AAAA,IACnC,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ,YAAoB,UAAmB,SAAwB;AACrE,UAAM,UAAU,KAAK,iBAAiB,IAAI,UAAU;AACpD,QAAI,CAAC,QAAS,OAAM,IAAI,MAAM,kBAAkB,UAAU,kBAAkB;AAC5E,QAAI,QAAQ,QAAS,cAAa,QAAQ,OAAO;AACjD,SAAK,iBAAiB,OAAO,UAAU;AACvC,YAAQ,QAAQ,QAAQ;AAAA,EAC1B;AAAA,EAEA,UAAgB;AACd,eAAW,YAAY,CAAC,GAAG,KAAK,iBAAiB,OAAO,CAAC,GAAG;AAC1D,WAAK,QAAQ,SAAS,OAAO,IAAI,KAAK;AAAA,IACxC;AAAA,EACF;AACF;;;ACnEA,eAAsB,aAAa,OAAoD;AACrF,SAAO,MAAM;AACf;AAEO,SAAS,eAAe,SAAkE;AAC/F,SAAO,WAAW,IAAI,qBAAqB;AAC7C;;;ACiBA,SAAS,cAAc,QAAqD;AAC1E,SAAO,OAAO,WAAW,OAAO,OAAO,YAAY,WAAW,OAAO,UAAqC,CAAC;AAC7G;AAOO,IAAM,kBAAN,MAAsB;AAAA,EAG3B,YAA6B,SAAiC;AAAjC;AAAA,EAAkC;AAAA,EAAlC;AAAA,EAFZ,YAAY,oBAAI,IAA4B;AAAA,EAI7D,GAAG,UAA8C;AAC/C,SAAK,UAAU,IAAI,QAAQ;AAC3B,WAAO,MAAM,KAAK,UAAU,OAAO,QAAQ;AAAA,EAC7C;AAAA,EAEA,QACE,YACA,UACY;AACZ,UAAM,aAAa,UAAU,UAAU;AACvC,WAAO,KAAK,GAAG,CAAC,UAAU;AACxB,UAAI,MAAM,SAAS,WAAW,MAAM,MAAM,SAAS,WAAY;AAC/D,WAAK,SAAS,IAAI,WAAW,MAAM,KAAK,CAAW;AAAA,IACrD,CAAC;AAAA,EACH;AAAA,EAEA,aACE,YACA,UAA+B,CAAC,GACf;AACjB,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAI;AACJ,YAAM,UAAU,KAAK,QAAQ,YAAY,CAAC,UAAU;AAClD,YAAI,QAAS,cAAa,OAAO;AACjC,gBAAQ;AACR,gBAAQ,KAAK;AAAA,MACf,CAAC;AAED,UAAI,QAAQ,QAAQ;AAClB,YAAI,QAAQ,OAAO,SAAS;AAC1B,kBAAQ;AACR,iBAAO,QAAQ,OAAO,UAAU,IAAI,MAAM,uBAAuB,CAAC;AAClE;AAAA,QACF;AACA,gBAAQ,OAAO,iBAAiB,SAAS,MAAM;AAC7C,cAAI,QAAS,cAAa,OAAO;AACjC,kBAAQ;AACR,iBAAO,QAAQ,QAAQ,UAAU,IAAI,MAAM,uBAAuB,CAAC;AAAA,QACrE,GAAG,EAAE,MAAM,KAAK,CAAC;AAAA,MACnB;AAEA,UAAI,QAAQ,cAAc,QAAW;AACnC,kBAAU,WAAW,MAAM;AACzB,kBAAQ;AACR,iBAAO,IAAI,MAAM,gCAAgC,UAAU,UAAU,CAAC,IAAI,CAAC;AAAA,QAC7E,GAAG,QAAQ,SAAS;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,OAAiC;AACtC,eAAW,YAAY,KAAK,UAAW,MAAK,SAAS,KAAK;AAAA,EAC5D;AAAA,EAEA,mBAAmB,QAAkC;AACnD,eAAW,SAAS,KAAK,qBAAqB,MAAM,EAAG,MAAK,OAAO,KAAK;AAAA,EAC1E;AAAA,EAEA,qBAAqB,QAAkD;AACrE,UAAM,SAA+B,CAAC;AACtC,UAAMC,WAAU,cAAc,MAAM;AAEpC,QAAI,OAAO,SAAS,cAAc,MAAM;AACtC,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,WAAW,KAAK,QAAQ;AAAA,QACxB,OAAO,OAAO;AAAA,QACd,MAAM,OAAOA,SAAQ,UAAU,OAAO,UAAU,EAAE;AAAA,MACpD,CAAC;AAAA,IACH,WAAW,OAAO,SAAS,eAAe,MAAM;AAC9C,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,OAAO,OAAO;AAAA,QACd,OAAOA,SAAQ;AAAA,QACf,SAASA,SAAQ;AAAA,MACnB,CAAC;AAAA,IACH,WAAW,OAAO,SAAS,gBAAgB,MAAM;AAC/C,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,OAAO,OAAO;AAAA,QACd,OAAOA,SAAQ;AAAA,QACf,SAASA,SAAQ;AAAA,MACnB,CAAC;AAAA,IACH,WAAW,OAAO,SAAS,kBAAkB,MAAM;AACjD,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,MAAM,OAAOA,SAAQ,QAAQ,EAAE;AAAA,QAC/B,OAAO;AAAA,MACT,CAAC;AAAA,IACH,WAAW,OAAO,SAAS,gBAAgB,MAAM;AAC/C,YAAM,UAAUA,SAAQ;AACxB,UAAI,SAAS,SAAS,OAAQ,QAAO,KAAK,EAAE,MAAM,gBAAgB,QAAQ,CAAC;AAC3E,UAAI,SAAS,SAAS,YAAa,QAAO,KAAK,EAAE,MAAM,qBAAqB,QAAQ,CAAC;AAAA,IACvF,WAAW,OAAO,SAAS,eAAe,MAAM;AAC9C,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,YAAY,OAAOA,SAAQ,MAAM,EAAE;AAAA,QACnC,MAAM,OAAOA,SAAQ,QAAQ,EAAE;AAAA,QAC/B,MAAMA,SAAQ;AAAA,MAChB,CAAC;AAAA,IACH,WAAW,OAAO,SAAS,0BAA0B,MAAM;AACzD,YAAM,aAAa,OAAOA,SAAQ,MAAM,EAAE;AAC1C,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,YAAY,KAAK,QAAQ,oBAAoB,UAAU,KAAK;AAAA,QAC5D,UAAUA,SAAQ,aAAa;AAAA,MACjC,CAAC;AAAA,IACH,WAAW,OAAO,SAAS,aAAa,MAAM;AAC5C,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,YAAY,OAAOA,SAAQ,MAAM,EAAE;AAAA,QACnC,MAAM,OAAOA,SAAQ,QAAQ,EAAE;AAAA,QAC/B,QAAQA,SAAQ;AAAA,MAClB,CAAC;AAAA,IACH,WAAW,OAAO,SAAS,iBAAiB,MAAM;AAChD,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,cAAc,OAAOA,SAAQ,gBAAgB,EAAE;AAAA,QAC/C,MAAM,OAAOA,SAAQ,QAAQ,EAAE;AAAA,MACjC,CAAC;AAAA,IACH;AAEA,WAAO,KAAK,EAAE,MAAM,SAAS,OAAO,OAAO,CAAC;AAC5C,WAAO;AAAA,EACT;AAAA,EAEA,QAAc;AACZ,SAAK,UAAU,MAAM;AAAA,EACvB;AACF;;;AC/IA,SAAS,qBAAqB,OAAyE;AACrG,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,UAAU,SAAS,UAAU,OAAW,QAAO;AACnD,SAAO;AACT;AAEA,SAAS,gBAAgB,QAAgD;AACvE,MAAI,OAAO,OAAO,OAAQ,QAAO,OAAO;AACxC,MAAI,OAAO,SAAS,OAAO,UAAU,UAAU;AAC7C,WAAO,CAAC,IAAI,eAAe,EAAE,QAAQ,OAAO,UAAU,SAAS,CAAC,CAAC;AAAA,EACnE;AACA,SAAO,CAAC;AACV;AAEA,SAAS,mBAAmB,gBAAiC;AAC3D,MAAI,0BAA0B,MAAO,QAAO,eAAe;AAC3D,SAAO,OAAO,cAAc;AAC9B;AAEA,SAAS,QAAQ,SAAiB,QAAkC,OAA0C;AAC5G,SAAO;AAAA,IACL,GAAI,UAAU,CAAC;AAAA,IACf;AAAA,IACA,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,EACzC;AACF;AAEO,SAAS,oBAAoB,SAA+B,CAAC,GAAkB;AACpF,QAAM,QAAQ,OAAO,SAAS;AAC9B,QAAM,QAAQ,gBAAgB,MAAM;AACpC,QAAM,cAAc,qBAAqB,OAAO,WAAW;AAE3D,QAAM,OAAO,CAAU,UAAoC,QAAiB,UAA6B,CAAC,MAAM;AAC9G,UAAM,SAAS,oBAAoB,UAAU,QAAQ,SAAS,OAAO,MAAM;AAC3E,QAAI,CAAC,eAAe,OAAO,OAAO,KAAK,EAAG;AAC1C,eAAW,QAAQ,OAAO;AACxB,UAAI;AACF,aAAK,QAAQ,QAAQ,KAAK,MAAM,MAAM,CAAC,EAAE,MAAM,MAAM,MAAS;AAAA,MAChE,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAwB;AAAA,IAC5B;AAAA,IACA;AAAA,IACA,MAAM,SAAS,QAAQ,SAAS;AAC9B,WAAK,eAAe,QAAQ,SAAS,MAAM,GAA0B,OAAO;AAAA,IAC9E;AAAA,IACA,KAAK,SAAS,QAAQ,SAAS;AAC7B,WAAK,cAAc,QAAQ,SAAS,MAAM,GAA0B,OAAO;AAAA,IAC7E;AAAA,IACA,KAAK,SAAS,QAAQ,SAAS;AAC7B,WAAK,cAAc,QAAQ,SAAS,MAAM,GAA0B,OAAO;AAAA,IAC7E;AAAA,IACA,MAAM,gBAAgB,QAAQ,SAAS;AACrC,WAAK,eAAe,QAAQ,mBAAmB,cAAc,GAAG,QAAQ,cAAc,GAAG,OAAO;AAAA,IAClG;AAAA,IACA,MAAM,SAAS;AACb,aAAO;AAAA,QACL,OAAO,CAAC,SAAS,WAAW,OAAO,MAAM,SAAS,QAAQ,OAAO;AAAA,QACjE,MAAM,CAAC,SAAS,WAAW,OAAO,KAAK,SAAS,QAAQ,OAAO;AAAA,QAC/D,MAAM,CAAC,SAAS,WAAW,OAAO,KAAK,SAAS,QAAQ,OAAO;AAAA,QAC/D,OAAO,CAAC,gBAAgB,WAAW,OAAO,MAAM,gBAAgB,QAAQ,OAAO;AAAA,QAC/E,MAAM,CAAC,UAAU,WAAW,OAAO,KAAK,UAAU,QAAQ,OAAO;AAAA,MACnE;AAAA,IACF;AAAA,IACA,MAAM,QAAQ;AACZ,YAAM,QAAQ,IAAI,MAAM,IAAI,OAAO,SAAS;AAC1C,YAAI;AACF,gBAAM,KAAK,QAAQ;AAAA,QACrB,QAAQ;AAAA,QAER;AAAA,MACF,CAAC,CAAC;AAAA,IACJ;AAAA,IACA,MAAM,QAAQ;AACZ,YAAM,QAAQ,IAAI,MAAM,IAAI,OAAO,SAAS;AAC1C,YAAI;AACF,gBAAM,KAAK,QAAQ;AAAA,QACrB,QAAQ;AAAA,QAER;AAAA,MACF,CAAC,CAAC;AAAA,IACJ;AAAA,EACF;AAEA,SAAO;AACT;;;AC9GO,IAAM,eAAN,MAAmB;AAAA,EAChB,QAA0B,QAAQ,QAAQ;AAAA,EACjC,sBAAgC,CAAC;AAAA,EAElD,QAAW,SAAuC;AAChD,UAAM,WAAW,KAAK;AACtB,UAAM,OAAO,SAAS,KAAK,SAAS,OAAO;AAC3C,SAAK,QAAQ,KAAK,MAAM,MAAM,MAAS;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,sBAAsB,OAAiC;AACrD,SAAK,oBAAoB,KAAK,UAAU,SAAS,YAAY,CAAC;AAAA,EAChE;AAAA,EAEA,wBAAwB,QAAsD;AAC5E,UAAM,aAAa,KAAK,oBAAoB,CAAC;AAC7C,QAAI,CAAC,WAAY,QAAO;AAExB,QAAI,OAAO,SAAS,YAAY;AAC9B,WAAK,oBAAoB,MAAM;AAC/B,aAAO,KAAK,mBAAmB,OAAO,IAAI,IAAI,YAAY;AAAA,IAC5D;AAEA,QAAI,KAAK,mBAAmB,OAAO,IAAI,GAAG;AACxC,WAAK,oBAAoB,MAAM;AAC/B,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,mBAAmB,MAAuB;AAChD,WAAO,SAAS,YAAY,QAAQ,SAAS,eAAe,QAAQ,SAAS,gBAAgB;AAAA,EAC/F;AACF;;;ACtCA,IAAM,kBAAN,MAAqD;AAAA,EAC3C,SAAc,CAAC;AAAA,EACf,UAAsD,CAAC;AAAA,EACvD,SAAS;AAAA,EAEjB,KAAK,OAAgB;AACnB,QAAI,KAAK,OAAQ;AACjB,UAAM,SAAS,KAAK,QAAQ,MAAM;AAClC,QAAI,OAAQ,QAAO,EAAE,OAAO,MAAM,MAAM,CAAC;AAAA,QACpC,MAAK,OAAO,KAAK,KAAK;AAAA,EAC7B;AAAA,EAEA,QAAc;AACZ,QAAI,KAAK,OAAQ;AACjB,SAAK,SAAS;AACd,eAAW,UAAU,KAAK,QAAQ,OAAO,CAAC,EAAG,QAAO,EAAE,OAAO,QAAgB,MAAM,KAAK,CAAC;AAAA,EAC3F;AAAA,EAEA,CAAC,OAAO,aAAa,IAAsB;AACzC,WAAO;AAAA,MACL,MAAM,MAAM;AACV,cAAM,QAAQ,KAAK,OAAO,MAAM;AAChC,YAAI,MAAO,QAAO,QAAQ,QAAQ,EAAE,OAAO,MAAM,MAAM,CAAC;AACxD,YAAI,KAAK,OAAQ,QAAO,QAAQ,QAAQ,EAAE,OAAO,QAAgB,MAAM,KAAK,CAAC;AAC7E,eAAO,IAAI,QAA2B,CAAC,YAAY,KAAK,QAAQ,KAAK,OAAO,CAAC;AAAA,MAC/E;AAAA,IACF;AAAA,EACF;AACF;AAOO,SAAS,uBACd,OACA,QACkB;AAClB,QAAM,QAAQ,IAAI,gBAAoC;AACtD,QAAM,aAAyC;AAAA,IAC7C,MAAM,CAAC,UAAU,MAAM,KAAK,KAAK;AAAA,IACjC,OAAO,MAAM,MAAM,MAAM;AAAA,EAC3B;AACA,QAAM,SAAS,MAAM,UAAU,EAAE,QAAQ,MAAM,MAAM,MAAM,CAAC;AAE5D,SAAO;AAAA,IACL,IAAI,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA,CAAC,OAAO,aAAa,GAAG,MAAM,MAAM,OAAO,aAAa,EAAE;AAAA,EAC5D;AACF;;;ACtCA,SAASC,eAAc,QAAqD;AAC1E,SAAO,OAAO,WAAW,OAAO,OAAO,YAAY,WAAW,OAAO,UAAqC,CAAC;AAC7G;AAYO,IAAM,uBAAN,MAA2B;AAAA,EACxB,eAAe;AAAA,EACf,cAAc;AAAA,EACd;AAAA,EACA,wBAAwB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,IAAI,UAAmB;AACrB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,mBAA2B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,aAAuD;AACzD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,QAA6B;AAC/B,WAAO,KAAK,sCAA2C,KAAK;AAAA,EAC9D;AAAA,EAEA,cAAoB;AAClB,SAAK;AACL,QAAI,KAAK,aAAc,MAAK;AAAA,EAC9B;AAAA,EAEA,WAAiB;AACf,SAAK,eAAe;AACpB,SAAK,wBAAwB,KAAK,IAAI,GAAG,KAAK,wBAAwB,CAAC;AACvE,SAAK;AAAA,EACP;AAAA,EAEA,cAAoB;AAClB,SAAK;AAAA,EACP;AAAA,EAEA,QAAQ,OAAgC;AACtC,SAAK,iBAAiB;AACtB,SAAK;AAAA,EACP;AAAA,EAEA,YAAkB;AAChB,SAAK,eAAe;AACpB,QAAI,CAAC,KAAK,eAAe,KAAK,oCAA0C;AACtE,WAAK,aAAa,KAAK,wBAAwB;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,QAAc;AACZ,SAAK,cAAc;AACnB,SAAK;AAAA,EACP;AAAA,EAEA,kBAAwB;AACtB,SAAK;AAAA,EACP;AAAA,EAEA,kBAAkB,QAAkC;AAClD,SAAK,mBAAmB,OAAO;AAC/B,UAAMC,WAAUD,eAAc,MAAM;AAEpC,QAAI,OAAO,SAAS,cAAc,MAAM;AACtC,WAAK;AACL,WAAK,qBAAqB;AAC1B,WAAK,kBAAkB;AACvB,WAAK,iBAAiB;AAAA,IACxB,WAAW,OAAO,SAAS,kBAAkB,MAAM;AACjD,WAAK;AAAA,IACP,WAAW,OAAO,SAAS,iBAAiB,MAAM;AAChD,WAAK;AAAA,IACP,WAAW,OAAO,SAAS,eAAe,MAAM;AAC9C,WAAK;AACL,WAAK,kBAAkB;AAAA,QACrB,IAAI,OAAOC,SAAQ,MAAM,EAAE;AAAA,QAC3B,MAAM,OAAOA,SAAQ,QAAQ,EAAE;AAAA,MACjC;AAAA,IACF,WAAW,OAAO,SAAS,2BAA2B,MAAM;AAC1D,WAAK;AAAA,IACP,WAAW,OAAO,SAAS,aAAa,QAAQ,OAAO,SAAS,0BAA0B,MAAM;AAC9F,WAAK,kBAAkB;AACvB,WAAK;AAAA,IACP,WAAW,OAAO,SAAS,aAAa,MAAM;AAC5C,WAAK;AACL,WAAK,qBAAqB;AAAA,IAC5B,WAAW,OAAO,SAAS,YAAY,MAAM;AAC3C,WAAK;AAAA,IACP,WAAW,OAAO,SAAS,eAAe,QAAQ,OAAO,SAAS,gBAAgB,MAAM;AACtF,WAAK;AACL,WAAK,iBAAiBA,SAAQ;AAAA,IAChC,WAAW,OAAO,SAAS,WAAW,MAAM;AAC1C,YAAM,QAAQA,SAAQ;AACtB,WAAK,iBAAiB,SAAS;AAAA,QAC7B,MAAM;AAAA,QACN,UAAU;AAAA,QACV,UAAU;AAAA,QACV,aAAa;AAAA,QACb,SAAS,OAAOA,SAAQ,WAAW,eAAe;AAAA,MACpD;AACA,UAAI,CAAC,KAAK,eAAe,YAAa,MAAK;AAAA,IAC7C;AAEA,QAAI,OAAO,OAAQ,MAAK,qBAAqB,OAAO;AAAA,EACtD;AAAA,EAEA,WAAkC;AAChC,WAAO;AAAA,MACL,SAAS,KAAK;AAAA,MACd,OAAO,KAAK;AAAA,MACZ,kBAAkB,KAAK;AAAA,MACvB,eAAe,KAAK;AAAA,MACpB,YAAY,KAAK;AAAA,MACjB,aAAa,KAAK;AAAA,MAClB,WAAW,KAAK;AAAA,IAClB;AAAA,EACF;AACF;;;AC3GA,IAAM,2BAA2B,IAAI,KAAK;AAE1C,SAASC,UAAiB;AACxB,UAAO,oBAAI,KAAK,GAAE,YAAY;AAChC;AAEA,SAAS,eAAe,OAAoD;AAC1E,SAAO,OAAO,UAAU,WAAW,EAAE,SAAS,MAAM,IAAI;AAC1D;AAOO,IAAM,qBAAN,MAAmD;AAAA,EAkBxD,YACmB,QACjB,OAKA;AANiB;AAOjB,SAAK,KAAK,MAAM,aAAa,SAAS;AACtC,SAAK,YAAY,MAAM,iBAAiB,aAAa,KAAK;AAC1D,SAAK,eAAe,MAAM,iBAAiB,gBAAgB,KAAK;AAChE,SAAK,SAAS,IAAI,gBAAgB;AAAA,MAChC,WAAW,KAAK;AAAA,MAChB,mBAAmB,CAAC,eAAe,KAAK,UAAU,kBAAkB,UAAU;AAAA,IAChF,CAAC;AACD,SAAK,SAAS,oBAAoB,OAAO,OAAO;AAChD,SAAK,YAAY,IAAI,mBAAmB;AAAA,MACtC,WAAW,KAAK;AAAA,MAChB,UAAU,MAAM,KAAK,OAAO;AAAA,MAC5B,kBAAkB;AAAA,MAClB,iBAAiB,CAAC,aAAa,KAAK,OAAO,EAAE,MAAM,2BAA2B,SAAS,CAAC;AAAA,IAC1F,CAAC;AACD,UAAM,UAAU,eAAe,OAAO,OAAO;AAC7C,SAAK,SAAS,IAAI,mBAAmB;AAAA,MACnC,WAAW,KAAK;AAAA,MAChB,OAAO,MAAM;AAAA,MACb,WAAW,OAAO;AAAA,MAClB,cAAc,OAAO;AAAA,MACrB,SAAS,OAAO;AAAA,MAChB;AAAA,MACA,cAAc,MAAM,iBAAiB;AAAA,MACrC,WAAW,OAAO;AAAA,MAClB,aAAa,CAAC,YAAY,KAAK,oBAAoB,OAAO;AAAA,MAC1D,QAAQ,KAAK;AAAA,MACb,aAAa,OAAO;AAAA,IACtB,CAAC;AACD,SAAK,OAAO,KAAK,mBAAmB,EAAE,WAAW,KAAK,GAAG,GAAG,EAAE,WAAW,KAAK,IAAI,QAAQ,EAAE,MAAM,UAAU,EAAE,CAAC;AAC/G,SAAK,oBAAoB,KAAK,OAAO,UAAU,CAAC,WAAW;AACzD,WAAK,OAAO,kBAAkB,MAAM;AACpC,WAAK,wBAAwB,MAAM;AACnC,WAAK,OAAO,mBAAmB,MAAM;AACrC,WAAK,aAAa;AAAA,IACpB,CAAC;AACD,SAAK,aAAa;AAAA,MAChB,KAAK,CAAC,YAAY,KAAK,OAAO,cAAc,OAAO;AAAA,MACnD,WAAW,MAAM,KAAK,OAAO,oBAAoB;AAAA,MACjD,MAAM,CAAC,WAAW,KAAK,OAAO,eAAe,MAAM;AAAA,MACnD,QAAQ,MAAM,KAAK,OAAO,iBAAiB;AAAA,IAC7C;AACA,SAAK,YAAY;AAAA,MACf,QAAQ,CAACC,WAAiC,KAAK,OAAO,eAAeA,QAAO,EAAE,kBAAkB,MAAM,CAAC;AAAA,MACvG,MAAM,MAAM,KAAK,OAAO,cAAc;AAAA,MACtC,KAAK,CAAC,OAAe,KAAK,OAAO,YAAY,EAAE;AAAA,MAC/C,SAAS,CAAC,OAAe;AACvB,aAAK,6BAA6B;AAClC,eAAO,KAAK,OAAO,gBAAgB,IAAI,EAAE,kBAAkB,MAAM,CAAC;AAAA,MACpE;AAAA,MACA,QAAQ,CAAC,OAAe,KAAK,OAAO,eAAe,IAAI,EAAE,kBAAkB,MAAM,CAAC;AAAA,IACpF;AAAA,EACF;AAAA,EA1DmB;AAAA,EAlBV;AAAA,EACA;AAAA,EACA;AAAA,EAEQ;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ,IAAI,aAAa;AAAA,EACzB,SAAS,IAAI,qBAAqB;AAAA,EAC3C,YAAYD,QAAO;AAAA,EACV;AAAA,EACT,eAAe,KAAK;AAAA,EACpB,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EA+DR,MAAM,KAAK,OAAkC,SAA4C;AACvF,UAAM,SAAS,KAAK,OAAO,OAAO,OAAO;AACzC,qBAAiB,UAAU,QAAQ;AAAA,IAEnC;AACA,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,OAAO,OAAkC,UAAyB,CAAC,GAAqB;AACtF,UAAM,YAAY,eAAe,KAAK;AACtC,UAAM,iBAAiB,QAAQ;AAC/B,UAAM,aAAa,IAAI,gBAAgB;AAEvC,QAAI,gBAAgB;AAClB,UAAI,eAAe,QAAS,YAAW,MAAM,eAAe,MAAM;AAAA,UAC7D,gBAAe,iBAAiB,SAAS,MAAM,WAAW,MAAM,eAAe,MAAM,GAAG,EAAE,MAAM,KAAK,CAAC;AAAA,IAC7G;AAEA,SAAK,OAAO,YAAY;AACxB,QAAI,KAAK,OAAO,QAAS,MAAK,MAAM,sBAAsB,QAAQ,KAAK;AACvE,SAAK,aAAa;AAElB,UAAM,MAAM,OAAO,qBAAsE;AACvF,YAAM,UAAU,YAAiC;AAC/C,YAAI,KAAK,OAAQ,OAAM,IAAI,MAAM,oBAAoB,KAAK,EAAE,cAAc;AAC1E,cAAM,cAAc,KAAK,GAAG,CAAC,UAAU,iBAAiB,KAAK,KAAK,CAAC;AACnE,aAAK,OAAO,SAAS;AACrB,aAAK,cAAc;AACnB,aAAK,eAAeA,QAAO;AAC3B,aAAK,aAAa;AAClB,YAAI;AACF,gBAAM,SAAS,MAAM,KAAK,OAAO,IAAI,UAAU,SAAS;AAAA,YACtD,QAAQ,WAAW;AAAA,YACnB,OAAO,QAAQ;AAAA,YACf,aAAa,UAAU;AAAA,YACvB,cAAc,UAAU;AAAA,YACxB,UAAU,UAAU;AAAA,UACtB,CAAC;AACD,gBAAM,aAAyB;AAAA,YAC7B,WAAW,KAAK;AAAA,YAChB,OAAO,OAAO;AAAA,YACd,UAAU,OAAO;AAAA,YACjB,QAAQ,OAAO;AAAA,YACf,MAAM,KAAK,OAAO;AAAA,YAClB,WAAW,OAAO;AAAA,YAClB,SAAS,OAAO;AAAA,YAChB,YAAY,OAAO;AAAA,YACnB,QAAQ,OAAO;AAAA,UACjB;AACA,eAAK,aAAa;AAClB,eAAK,OAAO,YAAY;AACxB,eAAK,OAAO,EAAE,MAAM,iBAAiB,QAAQ,WAAW,CAAC;AACzD,eAAK,aAAa;AAClB,gBAAM,KAAK,OAAO,MAAM;AACxB,iBAAO;AAAA,QACT,SAAS,OAAO;AACd,gBAAM,SAAS,qBAAqB,sBAAsB,OAAO;AAAA,YAC/D,MAAM;AAAA,YACN,UAAU;AAAA,YACV,UAAU;AAAA,YACV,aAAa;AAAA,YACb,QAAQ,EAAE,MAAM,UAAU;AAAA,UAC5B,GAAG,KAAK,OAAO,WAAW,GAAG,KAAK,OAAO,WAAW;AACpD,eAAK,OAAO,QAAQ,MAAM;AAC1B,eAAK,OAAO,EAAE,MAAM,SAAS,OAAO,OAAO,CAAC;AAC5C,eAAK,aAAa;AAClB,gBAAM,KAAK,OAAO,MAAM;AACxB,cAAI,KAAK,OAAO,aAAa,oBAAqB,OAAM,KAAK,gBAAgB;AAC7E,gBAAM;AAAA,QACR,UAAE;AACA,sBAAY;AACZ,eAAK,OAAO,UAAU;AACtB,cAAI,KAAK,gBAAgB,WAAY,MAAK,cAAc;AACxD,eAAK,eAAeA,QAAO;AAC3B,eAAK,aAAa;AAAA,QACpB;AAAA,MACF;AAEA,aAAO,KAAK,MAAM,QAAQ,OAAO;AAAA,IACnC;AAEA,WAAO,uBAAuB,KAAK,OAAO,WAAoB;AAC5D,iBAAW,MAAM,MAAM;AACvB,YAAM,KAAK,gBAAgB,MAAM;AAAA,IACnC,CAAC;AAAA,EACH;AAAA,EAEA,YAAkC;AAChC,UAAM,UAAU,KAAK,OAAO,WAAW;AACvC,UAAM,SAAS,KAAK,OAAO,SAAS;AACpC,WAAO;AAAA,MACL,WAAW,KAAK;AAAA,MAChB,UAAU,KAAK,OAAO,MAAM;AAAA,MAC5B,MAAM,KAAK,OAAO;AAAA,MAClB,OAAO,KAAK,OAAO,SAAS;AAAA,MAC5B,UAAU,KAAK,OAAO,qBAAqB;AAAA,MAC3C,WAAW,KAAK;AAAA,MAChB,cAAc,KAAK;AAAA,MACnB,SAAS,OAAO;AAAA,MAChB,OAAO,OAAO;AAAA,MACd,kBAAkB,OAAO;AAAA,MACzB,eAAe,OAAO;AAAA,MACtB,YAAY,OAAO;AAAA,MACnB,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,MAClB,sBAAsB,KAAK,UAAU;AAAA,MACrC,OAAO,QAAQ;AAAA,MACf,WAAW,KAAK,YAAY,aAAa,QAAQ;AAAA,MACjD,SAAS,KAAK,YAAY,WAAW,KAAK,OAAO,WAAW;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,UAAkB;AAChB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,WAAmB;AACjB,WAAO,KAAK,OAAO,SAAS;AAAA,EAC9B;AAAA,EAEA,SAAS,OAAqB;AAC5B,SAAK,OAAO,SAAS,KAAK;AAC1B,SAAK,eAAeA,QAAO;AAC3B,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,qBAA2B;AACzB,SAAK,OAAO,mBAAmB;AAC/B,SAAK,eAAeA,QAAO;AAC3B,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,MAAM,WAAW,MAAoC,OAAgC;AACnF,UAAM,KAAK,OAAO,WAAW,KAAK,oBAAoB,IAAI,GAAG,KAAK;AAClE,SAAK,eAAeA,QAAO;AAAA,EAC7B;AAAA,EAEA,WAA6B;AAC3B,WAAO,KAAK,OAAO,SAAS;AAAA,EAC9B;AAAA,EAEA,YAAY,OAAsB;AAChC,SAAK,OAAO,YAAY,KAAK;AAC7B,SAAK,eAAeA,QAAO;AAAA,EAC7B;AAAA,EAEA,aAAa,MAA8B;AACzC,SAAK,OAAO,aAAa,IAAI;AAC7B,SAAK,eAAeA,QAAO;AAAA,EAC7B;AAAA,EAEA,UAAU,QAAkD;AAC1D,WAAO,KAAK,OAAO,UAAU,MAAM;AAAA,EACrC;AAAA,EAEA,qBAAqB;AACnB,WAAO,KAAK,OAAO,mBAAmB;AAAA,EACxC;AAAA,EAEA,mBAAmB;AACjB,WAAO,KAAK,OAAO,iBAAiB;AAAA,EACtC;AAAA,EAEA,sBAA4C;AAC1C,WAAO,KAAK,UAAU,WAAW;AAAA,EACnC;AAAA,EAEA,MAAM,YAAY,YAAmC;AACnD,SAAK,UAAU,QAAQ,YAAY,IAAI;AAAA,EACzC;AAAA,EAEA,MAAM,SAAS,YAAoB,SAAiC;AAClE,SAAK,UAAU,QAAQ,YAAY,KAAK;AAAA,EAC1C;AAAA,EAEA,GAAG,UAA8C;AAC/C,WAAO,KAAK,OAAO,GAAG,QAAQ;AAAA,EAChC;AAAA,EAEA,QACE,YACA,UACY;AACZ,WAAO,KAAK,OAAO,QAAQ,YAAY,QAAQ;AAAA,EACjD;AAAA,EAEA,aACE,YACA,UAA+B,CAAC,GACf;AACjB,WAAO,KAAK,OAAO,aAAa,YAAY,OAAO;AAAA,EACrD;AAAA,EAEA,MAAM,QAAuB;AAC3B,QAAI,KAAK,OAAQ;AACjB,SAAK,SAAS;AACd,SAAK,OAAO,MAAM;AAClB,UAAM,KAAK,gBAAgB,iBAAiB;AAC5C,SAAK,kBAAkB;AACvB,UAAM,KAAK,OAAO,MAAM;AACxB,SAAK,aAAa;AAClB,SAAK,OAAO,MAAM;AAClB,UAAM,KAAK,OAAO,MAAM;AAAA,EAC1B;AAAA,EAEA,MAAM,UAAyB;AAC7B,UAAM,KAAK,OAAO,QAAQ;AAAA,EAC5B;AAAA,EAEQ,OAAO,OAAiC;AAC9C,SAAK,OAAO,OAAO,KAAK;AAAA,EAC1B;AAAA,EAEQ,eAAqB;AAC3B,SAAK,OAAO,EAAE,MAAM,kBAAkB,QAAQ,KAAK,UAAU,EAAE,CAAC;AAAA,EAClE;AAAA,EAEQ,+BAAqC;AAC3C,UAAM,SAAS,CAAC,WAA0B;AACxC,WAAK,OAAO;AAAA,QACV;AAAA,QACA,EAAE,OAAO;AAAA,QACT,EAAE,WAAW,KAAK,IAAI,OAAO,KAAK,OAAO,OAAO,QAAQ,EAAE,MAAM,UAAU,EAAE;AAAA,MAC9E;AACA,YAAM,IAAI,MAAM,MAAM;AAAA,IACxB;AAEA,QAAI,KAAK,OAAQ,QAAO,oBAAoB,KAAK,EAAE,cAAc;AACjE,QAAI,KAAK,OAAO,WAAW,KAAK,OAAO,mBAAmB,KAAK,KAAK,UAAU,QAAQ,KAAK,KAAK,OAAO,YAAY;AACjH,aAAO,wFAAwF;AAAA,IACjG;AACA,QAAI,KAAK,OAAO,6BAAoC;AAClD,aAAO,wFAAwF;AAAA,IACjG;AAAA,EACF;AAAA,EAEQ,wBAAwB,QAAkC;AAChE,QAAI,KAAK,MAAM,wBAAwB,MAAM,MAAM,WAAW;AAC5D,WAAK,OAAO,gBAAgB;AAC5B,WAAK,OAAO,mBAAmB;AAAA,IACjC;AAAA,EACF;AAAA,EAEQ,oBAAoB,MAAyD;AACnF,QAAI,OAAO,SAAS,SAAU,QAAO;AACrC,UAAM,WAAW,OAAO,OAAO,KAAK,OAAO,MAAM,KAAK,EAAE,KAAK,CAAC,cAAc,iBAAiB,SAAS,MAAM,IAAI;AAChH,QAAI,CAAC,SAAU,OAAM,IAAI,MAAM,iBAAiB,IAAI,IAAI;AACxD,WAAO;AAAA,EACT;AAAA,EAEQ,oBAAoB,SAA6D;AACvF,WAAO,KAAK,UAAU,QAAQ,OAAO;AAAA,EACvC;AAAA,EAEA,MAAc,gBAAgB,QAAgC;AAC5D,SAAK,aAAa,MAAM,MAAM;AAC9B,SAAK,UAAU,QAAQ;AAAA,EACzB;AAAA,EAEA,MAAc,kBAAiC;AAC7C,QAAI,KAAK,OAAQ;AACjB,SAAK,SAAS;AACd,SAAK,OAAO,MAAM;AAClB,SAAK,UAAU,QAAQ;AACvB,SAAK,kBAAkB;AACvB,UAAM,KAAK,OAAO,MAAM;AACxB,SAAK,aAAa;AAClB,SAAK,OAAO,MAAM;AAClB,UAAM,KAAK,OAAO,MAAM;AAAA,EAC1B;AACF;AAEA,eAAsB,qBACpB,QACA,UAA+C,CAAC,GACvB;AACzB,QAAM,QAAQ,MAAM,aAAa,OAAO,KAAK;AAC7C,QAAM,UAAU,eAAe,OAAO,OAAO;AAC7C,QAAM,gBAAgB,EAAE,GAAG,QAAQ,QAAQ;AAC3C,QAAM,UAAU,IAAI,mBAAmB,eAAe;AAAA,IACpD,WAAW,QAAQ;AAAA,IACnB;AAAA,IACA,iBAAiB,QAAQ;AAAA,EAC3B,CAAC;AACD,MAAI,CAAC,QAAQ,iBAAiB;AAC5B,UAAM,SAAS,QAAQ,UAAU;AACjC,UAAM,QAAQ,cAAc;AAAA,MAC1B,WAAW,OAAO;AAAA,MAClB,UAAU,OAAO;AAAA,MACjB,WAAW,OAAO;AAAA,MAClB,cAAc,OAAO;AAAA,MACrB,MAAM,OAAO;AAAA,IACf,CAAC;AAAA,EACH;AACA,QAAM,QAAQ,QAAQ;AACtB,SAAO;AACT;;;AC/ZA,SAAS,YAAY,MAAwB,WAAyD;AACpG,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,WAAW,SAAS,KAAK;AAAA,IAChC,WAAW,WAAW,aAAa,KAAK;AAAA,IACxC,WAAW,WAAW,aAAa,KAAK;AAAA,IACxC,SAAS,WAAW,WAAW,KAAK;AAAA,IACpC,aAAa,WAAW,eAAe,KAAK;AAAA,IAC5C,SAAS,WAAW,WAAW,KAAK;AAAA,EACtC;AACF;AAEA,SAAS,gBAAgB,QAA8B,aAA6C;AAClG,SAAO;AAAA,IACL,WAAW,OAAO;AAAA,IAClB,UAAU,OAAO;AAAA,IACjB,WAAW,OAAO;AAAA,IAClB,cAAc,OAAO;AAAA,IACrB,MAAM,OAAO;AAAA,IACb;AAAA,EACF;AACF;AAEA,SAAS,cAAc,OAAyD;AAC9E,SAAO,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM;AAC/B,UAAM,eAAe,EAAE,aAAa,cAAc,EAAE,YAAY;AAChE,WAAO,gBAAgB,EAAE,UAAU,cAAc,EAAE,SAAS;AAAA,EAC9D,CAAC;AACH;AAEA,SAAS,aAAa,SAAwC;AAC5D,SAAO,OAAO,KAAK,KAAK,UAAU,CAAC,QAAQ,cAAc,QAAQ,SAAS,CAAC,GAAG,MAAM,EAAE,SAAS,WAAW;AAC5G;AAEA,SAAS,aAAa,QAA0D;AAC9E,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,OAAO,KAAK,QAAQ,WAAW,EAAE,SAAS,MAAM,CAAC;AAC3E,QAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,OAAO,CAAC,MAAM,YAAY,OAAO,OAAO,CAAC,MAAM,SAAU,QAAO;AACrG,WAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAAA,EAC9B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,eAAe,OAAgC,OAA6C;AACnG,QAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,SAAS,IAAI,GAAG,CAAC;AAC3D,QAAM,SAAS,aAAa,OAAO,MAAM;AACzC,QAAM,WAAW,cAAc,KAAK,EACjC,OAAO,CAAC,YAAY,CAAC,OAAO,YAAY,QAAQ,aAAa,MAAM,QAAQ,EAC3E,OAAO,CAAC,YAAY;AACnB,QAAI,CAAC,OAAQ,QAAO;AACpB,UAAM,CAAC,cAAc,SAAS,IAAI;AAClC,WAAO,QAAQ,eAAe,gBACxB,QAAQ,iBAAiB,gBAAgB,QAAQ,YAAY;AAAA,EACrE,CAAC;AACH,QAAM,OAAO,SAAS,MAAM,GAAG,KAAK;AACpC,SAAO;AAAA,IACL,OAAO;AAAA,IACP,YAAY,SAAS,SAAS,SAAS,KAAK,SAAS,IAAI,aAAa,KAAK,KAAK,SAAS,CAAC,CAAE,IAAI;AAAA,EAClG;AACF;AAEO,IAAM,0BAAN,MAA6D;AAAA,EAQlE,YAA6B,QAA0B;AAA1B;AAC3B,SAAK,UAAU,OAAO,WAAW,IAAI,qBAAqB;AAAA,EAC5D;AAAA,EAF6B;AAAA,EAPZ,WAAW,oBAAI,IAA4B;AAAA,EAC3C,kBAAkB,oBAAI,IAAwB;AAAA,EAC9C,eAAe,oBAAI,IAAoB;AAAA,EACvC,YAAY,oBAAI,IAAiC;AAAA,EACjD;AAAA,EACT,SAAS;AAAA,EAMjB,MAAM,OAAsB;AAC1B,UAAM,KAAK,QAAQ,OAAO;AAAA,EAC5B;AAAA,EAEA,MAAM,YAAY,WAAoB,WAAgE;AACpG,QAAI,KAAK,OAAQ,OAAM,IAAI,MAAM,kCAAkC;AACnE,UAAM,KAAK,WAAW,KAAK,KAAK,SAAS;AACzC,UAAM,WAAW,KAAK,SAAS,IAAI,EAAE;AACrC,QAAI,SAAU,QAAO;AAErB,UAAM,SAAS,YAAY,EAAE,GAAG,KAAK,QAAQ,SAAS,KAAK,QAAQ,GAAG,SAAS;AAC/E,UAAM,SAAS,MAAM,KAAK,QAAQ,WAAW,EAAE;AAC/C,UAAM,UAAU,MAAM,qBAAqB,QAAQ,EAAE,WAAW,IAAI,iBAAiB,OAAO,CAAC;AAC7F,UAAM,SAAS,QAAQ,UAAU;AACjC,QAAI,QAAQ,YAAa,MAAK,aAAa,IAAI,IAAI,OAAO,WAAW;AAAA,QAChE,MAAK,aAAa,OAAO,EAAE;AAEhC,QAAI,CAAC,QAAQ;AACX,YAAM,KAAK,QAAQ,cAAc;AAAA,QAC/B,WAAW;AAAA,QACX,UAAU,OAAO;AAAA,QACjB,WAAW,OAAO;AAAA,QAClB,cAAc,OAAO;AAAA,QACrB,MAAM,OAAO;AAAA,MACf,CAAC;AAAA,IACH;AAEA,SAAK,SAAS,IAAI,IAAI,OAAO;AAC7B,SAAK,gBAAgB,IAAI,IAAI,QAAQ,GAAG,CAAC,UAAU;AACjD,UAAI,MAAM,SAAS,cAAe,MAAK,aAAa,IAAI,IAAI,MAAM,KAAK;AACvE,UAAI,MAAM,SAAS,gBAAiB,MAAK,aAAa,IAAI,IAAI,MAAM,OAAO,KAAK;AAChF,UAAI,MAAM,SAAS,gBAAgB,MAAM,SAAS,cAAe,MAAK,aAAa,IAAI,IAAI,MAAM,KAAK;AACtG,UAAI,MAAM,SAAS,kBAAkB;AACnC,aAAK,KAAK,QAAQ,aAAa;AAAA,UAC7B,WAAW;AAAA,UACX,cAAc,MAAM,OAAO;AAAA,UAC3B,MAAM,MAAM,OAAO;AAAA,QACrB,CAAC;AAAA,MACH;AACA,WAAK,OAAO,EAAE,MAAM,iBAAiB,WAAW,IAAI,MAAM,CAAC;AAAA,IAC7D,CAAC,CAAC;AACF,SAAK,OAAO,EAAE,MAAM,mBAAmB,WAAW,IAAI,OAAO,CAAC;AAC9D,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,WAA+C;AACjD,WAAO,KAAK,SAAS,IAAI,SAAS;AAAA,EACpC;AAAA,EAEA,MAAM,KAAK,OAAsD;AAC/D,QAAI,OAAO,QAAQ;AACjB,aAAO,eAAe,CAAC,GAAG,KAAK,SAAS,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,gBAAgB,QAAQ,UAAU,GAAG,KAAK,aAAa,IAAI,QAAQ,EAAE,CAAC,CAAC,GAAG,KAAK;AAAA,IACpJ;AAEA,UAAM,SAAS,MAAM,KAAK,QAAQ,aAAa,KAAK;AACpD,UAAM,SAAS,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,gBAAgB,QAAQ,UAAU,GAAG,KAAK,aAAa,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1J,WAAO;AAAA,MACL,OAAO,OAAO,MAAM,IAAI,CAAC,SAAS,OAAO,IAAI,KAAK,SAAS,KAAK,IAAI;AAAA,MACpE,YAAY,OAAO;AAAA,IACrB;AAAA,EACF;AAAA,EAIA,MAAM,MAAM,WAA6C;AACvD,QAAI,cAAc,QAAW;AAC3B,UAAI,KAAK,OAAQ;AACjB,WAAK,SAAS;AACd,YAAM,KAAK,SAAS;AACpB,WAAK,UAAU,MAAM;AACrB;AAAA,IACF;AAEA,UAAM,UAAU,KAAK,SAAS,IAAI,SAAS;AAC3C,QAAI,CAAC,QAAS,QAAO;AACrB,SAAK,SAAS,OAAO,SAAS;AAC9B,SAAK,aAAa,OAAO,SAAS;AAClC,SAAK,gBAAgB,IAAI,SAAS,IAAI;AACtC,SAAK,gBAAgB,OAAO,SAAS;AACrC,UAAM,QAAQ,MAAM;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,WAAqC;AAChD,UAAM,KAAK,MAAM,SAAS;AAC1B,SAAK,aAAa,OAAO,SAAS;AAClC,UAAM,UAAU,MAAM,KAAK,QAAQ,cAAc,SAAS;AAC1D,QAAI,QAAS,MAAK,OAAO,EAAE,MAAM,mBAAmB,UAAU,CAAC;AAC/D,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,cAA6B;AACjC,UAAM,KAAK,SAAS;AACpB,SAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAAA,EACzC;AAAA,EAEA,MAAM,WAA0B;AAC9B,eAAW,aAAa,CAAC,GAAG,KAAK,SAAS,KAAK,CAAC,EAAG,OAAM,KAAK,MAAM,SAAS;AAAA,EAC/E;AAAA,EAEA,MAAM,KAAK,WAA+B,OAAkC,SAA4C;AACtH,UAAM,UAAU,MAAM,KAAK,YAAY,SAAS;AAChD,WAAO,QAAQ,KAAK,OAAO,OAAO;AAAA,EACpC;AAAA,EAEA,MAAM,OAAO,WAA+B,OAAkC,SAAoD;AAChI,UAAM,UAAU,MAAM,KAAK,YAAY,SAAS;AAChD,WAAO,QAAQ,OAAO,OAAO,OAAO;AAAA,EACtC;AAAA,EAEA,oBAAoB,WAA0C;AAC5D,QAAI,UAAW,QAAO,KAAK,SAAS,IAAI,SAAS,GAAG,oBAAoB,KAAK,CAAC;AAC9E,WAAO,CAAC,GAAG,KAAK,SAAS,OAAO,CAAC,EAAE,QAAQ,CAAC,YAAY,QAAQ,oBAAoB,CAAC;AAAA,EACvF;AAAA,EAEA,MAAM,YAAY,WAAmB,YAAmC;AACtE,UAAM,UAAU,KAAK,SAAS,IAAI,SAAS;AAC3C,QAAI,CAAC,QAAS,OAAM,IAAI,MAAM,oBAAoB,SAAS,kBAAkB;AAC7E,UAAM,QAAQ,YAAY,UAAU;AAAA,EACtC;AAAA,EAEA,MAAM,SAAS,WAAmB,YAAoB,QAAgC;AACpF,UAAM,UAAU,KAAK,SAAS,IAAI,SAAS;AAC3C,QAAI,CAAC,QAAS,OAAM,IAAI,MAAM,oBAAoB,SAAS,kBAAkB;AAC7E,UAAM,QAAQ,SAAS,YAAY,MAAM;AAAA,EAC3C;AAAA,EAEA,iBAAiB,WAAmB;AAClC,WAAO,KAAK,SAAS,IAAI,SAAS,GAAG,iBAAiB;AAAA,EACxD;AAAA,EAEA,GAAG,UAAmD;AACpD,SAAK,UAAU,IAAI,QAAQ;AAC3B,WAAO,MAAM,KAAK,UAAU,OAAO,QAAQ;AAAA,EAC7C;AAAA,EAEQ,OAAO,OAAuC;AACpD,eAAW,YAAY,KAAK,UAAW,MAAK,SAAS,KAAK;AAAA,EAC5D;AACF;AAEA,eAAsB,0BAA0B,QAAwD;AACtG,QAAM,QAAQ,IAAI,wBAAwB,MAAM;AAChD,QAAM,MAAM,KAAK;AACjB,SAAO;AACT;","names":["nowIso","nowIso","cloneJSON","head","payload","cloneJSON","payload","nowIso","cloneJSON","payload","options","tool","role","HarnessSessionPhase","nowIso","payload","payloadObject","payload","nowIso","input"]}