@nestos/kanban 0.0.0-stage → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +165 -2
  3. package/dist/activity-BbC4sgKL.d.cts +258 -0
  4. package/dist/activity-Czlan5xW.d.ts +258 -0
  5. package/dist/activity-module-DaO1Rry0.d.cts +22 -0
  6. package/dist/activity-module-T22wliZu.d.ts +22 -0
  7. package/dist/activity-ports-Dqxa86zT.d.cts +12 -0
  8. package/dist/activity-ports-cxfrelaL.d.ts +12 -0
  9. package/dist/activity.cjs +16 -0
  10. package/dist/activity.cjs.map +1 -0
  11. package/dist/activity.d.cts +12 -0
  12. package/dist/activity.d.ts +12 -0
  13. package/dist/activity.js +16 -0
  14. package/dist/activity.js.map +1 -0
  15. package/dist/chunk-3JYLJPE5.js +95 -0
  16. package/dist/chunk-3JYLJPE5.js.map +1 -0
  17. package/dist/chunk-3LEIHB7Y.js +221 -0
  18. package/dist/chunk-3LEIHB7Y.js.map +1 -0
  19. package/dist/chunk-4XF6LQSU.cjs +9 -0
  20. package/dist/chunk-4XF6LQSU.cjs.map +1 -0
  21. package/dist/chunk-5Q7WB63A.cjs +282 -0
  22. package/dist/chunk-5Q7WB63A.cjs.map +1 -0
  23. package/dist/chunk-7KDOTBRX.cjs +58 -0
  24. package/dist/chunk-7KDOTBRX.cjs.map +1 -0
  25. package/dist/chunk-AHHEGTUA.js +148 -0
  26. package/dist/chunk-AHHEGTUA.js.map +1 -0
  27. package/dist/chunk-AOHQCX7K.cjs +95 -0
  28. package/dist/chunk-AOHQCX7K.cjs.map +1 -0
  29. package/dist/chunk-DINLR6E6.cjs +443 -0
  30. package/dist/chunk-DINLR6E6.cjs.map +1 -0
  31. package/dist/chunk-EYTVC2H5.cjs +1612 -0
  32. package/dist/chunk-EYTVC2H5.cjs.map +1 -0
  33. package/dist/chunk-FEE2YBZ7.js +1972 -0
  34. package/dist/chunk-FEE2YBZ7.js.map +1 -0
  35. package/dist/chunk-FNO5K3A7.js +282 -0
  36. package/dist/chunk-FNO5K3A7.js.map +1 -0
  37. package/dist/chunk-IHHDXZPZ.js +382 -0
  38. package/dist/chunk-IHHDXZPZ.js.map +1 -0
  39. package/dist/chunk-J3EAIVA3.js +280 -0
  40. package/dist/chunk-J3EAIVA3.js.map +1 -0
  41. package/dist/chunk-KH3WF3K4.js +443 -0
  42. package/dist/chunk-KH3WF3K4.js.map +1 -0
  43. package/dist/chunk-M35X5PHO.js +196 -0
  44. package/dist/chunk-M35X5PHO.js.map +1 -0
  45. package/dist/chunk-QRGZD2JU.cjs +1972 -0
  46. package/dist/chunk-QRGZD2JU.cjs.map +1 -0
  47. package/dist/chunk-RBOER6EW.cjs +221 -0
  48. package/dist/chunk-RBOER6EW.cjs.map +1 -0
  49. package/dist/chunk-RQP77ZTY.js +9 -0
  50. package/dist/chunk-RQP77ZTY.js.map +1 -0
  51. package/dist/chunk-RSH6QSEC.cjs +196 -0
  52. package/dist/chunk-RSH6QSEC.cjs.map +1 -0
  53. package/dist/chunk-VMRDXOLX.cjs +148 -0
  54. package/dist/chunk-VMRDXOLX.cjs.map +1 -0
  55. package/dist/chunk-X4UHZX6F.js +58 -0
  56. package/dist/chunk-X4UHZX6F.js.map +1 -0
  57. package/dist/chunk-XBSGUVCY.cjs +382 -0
  58. package/dist/chunk-XBSGUVCY.cjs.map +1 -0
  59. package/dist/chunk-XKDZHAUE.js +1612 -0
  60. package/dist/chunk-XKDZHAUE.js.map +1 -0
  61. package/dist/chunk-ZUZGAO6G.cjs +280 -0
  62. package/dist/chunk-ZUZGAO6G.cjs.map +1 -0
  63. package/dist/content-C5aJZFlw.d.cts +35 -0
  64. package/dist/content-hLH5BNud.d.ts +35 -0
  65. package/dist/contracts/index.cjs +31 -0
  66. package/dist/contracts/index.cjs.map +1 -0
  67. package/dist/contracts/index.d.cts +5 -0
  68. package/dist/contracts/index.d.ts +5 -0
  69. package/dist/contracts/index.js +31 -0
  70. package/dist/contracts/index.js.map +1 -0
  71. package/dist/discovery-9E-LfwIw.d.cts +61 -0
  72. package/dist/discovery-D60yrjej.d.ts +61 -0
  73. package/dist/discovery.cjs +377 -0
  74. package/dist/discovery.cjs.map +1 -0
  75. package/dist/discovery.d.cts +22 -0
  76. package/dist/discovery.d.ts +22 -0
  77. package/dist/discovery.js +377 -0
  78. package/dist/discovery.js.map +1 -0
  79. package/dist/execution-bridge-fpCnH6z5.d.cts +52 -0
  80. package/dist/execution-bridge-rk0uVy_n.d.ts +52 -0
  81. package/dist/execution.cjs +18 -0
  82. package/dist/execution.cjs.map +1 -0
  83. package/dist/execution.d.cts +42 -0
  84. package/dist/execution.d.ts +42 -0
  85. package/dist/execution.js +18 -0
  86. package/dist/execution.js.map +1 -0
  87. package/dist/index.cjs +74 -0
  88. package/dist/index.cjs.map +1 -0
  89. package/dist/index.d.cts +54 -0
  90. package/dist/index.d.ts +54 -0
  91. package/dist/index.js +74 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/module-CYfE7YhM.d.ts +11 -0
  94. package/dist/module-Ca9L3qCn.d.cts +11 -0
  95. package/dist/planning-CHrOqQ6b.d.cts +879 -0
  96. package/dist/planning-CHrOqQ6b.d.ts +879 -0
  97. package/dist/ports-B0McVg7B.d.ts +143 -0
  98. package/dist/ports-BeGO1VRI.d.cts +49 -0
  99. package/dist/ports-GQy0x-RI.d.cts +143 -0
  100. package/dist/ports-ykGiNUSx.d.ts +49 -0
  101. package/dist/runtime/index.cjs +205 -0
  102. package/dist/runtime/index.cjs.map +1 -0
  103. package/dist/runtime/index.d.cts +75 -0
  104. package/dist/runtime/index.d.ts +75 -0
  105. package/dist/runtime/index.js +205 -0
  106. package/dist/runtime/index.js.map +1 -0
  107. package/dist/runtime/integration.cjs +423 -0
  108. package/dist/runtime/integration.cjs.map +1 -0
  109. package/dist/runtime/integration.d.cts +658 -0
  110. package/dist/runtime/integration.d.ts +658 -0
  111. package/dist/runtime/integration.js +423 -0
  112. package/dist/runtime/integration.js.map +1 -0
  113. package/dist/storage.cjs +21 -0
  114. package/dist/storage.cjs.map +1 -0
  115. package/dist/storage.d.cts +71 -0
  116. package/dist/storage.d.ts +71 -0
  117. package/dist/storage.js +21 -0
  118. package/dist/storage.js.map +1 -0
  119. package/dist/store-DPwHzGiz.d.cts +28 -0
  120. package/dist/store-DgdrPCV9.d.ts +28 -0
  121. package/dist/task-projection-CSorlMws.d.ts +11 -0
  122. package/dist/task-projection-DKKB_ueb.d.cts +11 -0
  123. package/examples/standalone.ts +22 -0
  124. package/package.json +143 -4
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/diagnostics.ts","../src/runtime/automation-journal.ts","../src/runtime/automation-board-index.ts","../src/runtime/ports.ts","../src/runtime/work-log-snapshots.ts","../src/runtime/work-log-store.ts","../src/runtime/work-log-events.ts","../src/runtime/work-log.ts","../src/runtime/journal-command.ts","../src/runtime/record-controls.ts","../src/runtime/record-execution.ts","../src/runtime/analysis-aggregation.ts","../src/runtime/analysis-decomposition.ts","../src/runtime/analysis.ts","../src/runtime/automation.ts","../src/runtime/analysis-history.ts","../src/runtime/logging.ts","../src/runtime/board-deletion-inspection.ts","../src/runtime/board-stop.ts","../src/runtime/board-deletion.ts","../src/runtime/control.ts","../src/runtime/task-maintenance-cancellation.ts","../src/runtime/task-reply-cancellation.ts","../src/runtime/board-stop-work.ts","../src/runtime/task-analysis-controls.ts","../src/runtime/task-controls.ts","../src/runtime/runtime-lifecycle.ts","../src/runtime/runtime.ts","../src/runtime/board-drain.ts","../src/runtime/work-context.ts"],"sourcesContent":["export function safeCode(error: unknown, fallback: string): string {\n const code = (error as {code?: unknown})?.code;\n return typeof code === 'string' && /^[A-Z][A-Z0-9_]{0,79}$/.test(code) ? code : fallback;\n}\n","import {normalizeVirtualPath, type IFileSystem} from '@nestos/vfs-core';\nimport type {KanbanJournalOptions, KanbanRuntimeDiagnostic} from './ports';\nimport {sha256HexSync} from '../utils';\nimport type {KanbanArtifactRef} from '../contracts';\nimport {requireValue} from '../rules';\n\nimport {boardIndexPrefix, boardIndexKeys, migrateBoardIndex, updateBoardIndex} from './automation-board-index';\n\nexport class KanbanAutomationJournal {\n private readonly writes = new Set<Promise<unknown>>();\n readonly directory: string;\n readonly indexPath: string;\n private readonly path: string;\n private readonly artifactScheme: string;\n constructor(private readonly fs: IFileSystem, private readonly options: KanbanJournalOptions = {}) {\n this.directory = normalizeVirtualPath(options.directory ?? '/kanban/runtime');\n this.path = this.directory + '/automation.seq'; this.indexPath = this.directory + '/automation-board-index.seq';\n this.artifactScheme = options.artifactScheme ?? 'kanban-artifact:';\n }\n diagnostic(event: KanbanRuntimeDiagnostic): void {this.options.diagnostic?.(event);}\n async open(): Promise<void> {\n requireValue(this.fs.meta.seq?.transaction, 'TRANSACTION_REQUIRED');\n for (const name of ['automation.seq', 'automation-board-index.seq']) {\n try {await this.fs.driver.createFile({parentPath: this.directory, name, type: 'seqfile', recursive: true});}\n catch (error) {if ((error as {code?: string}).code !== 'EEXIST') throw error;}\n }\n if (await this.fs.meta.seq!.getEntry(this.indexPath, 'version') !== '1')\n await this.fs.meta.seq!.transaction!(tx => migrateBoardIndex(tx, this.path, this.indexPath, event => this.diagnostic(event)));\n }\n async get<T>(key: string): Promise<T | undefined> {\n const raw = await this.fs.meta.seq!.getEntry(this.path, key); return raw ? JSON.parse(raw) as T : undefined;\n }\n async getMany<T>(keys: string[]): Promise<Array<T | undefined>> {\n if (!keys.length) return [];\n const rows = await this.fs.meta.seq!.getEntries(this.path, keys);\n return keys.map(key => rows[key] === undefined ? undefined : JSON.parse(rows[key]) as T);\n }\n async findForBoard<T>(family: string, boardId: string, matches: (value: T) => boolean): Promise<Array<{key: string; value: T}>> {\n const keys: string[] = [];\n await this.fs.meta.seq!.walkEntries(this.indexPath, entry => {\n keys.push(entry.value); requireValue(keys.length <= 1000, 'SESSION_RELATION_LIMIT'); return true;\n }, {keyPrefix: boardIndexPrefix(boardId, family)});\n const values = await this.getMany<T>(keys);\n return values.flatMap((value, index) => value !== undefined && matches(value) ? [{key: keys[index], value}] : []);\n }\n async find<T>(keyPrefix: string, matches: (value: T, key: string) => boolean): Promise<Array<{key: string; value: T}>> {\n const rows: Array<{key: string; value: T}> = [];\n await this.fs.meta.seq!.walkEntries(this.path, entry => {\n const value = JSON.parse(entry.value) as T;\n if (matches(value, entry.key)) rows.push({key: entry.key, value});\n requireValue(rows.length <= 1000, 'SESSION_RELATION_LIMIT'); return true;\n }, {keyPrefix});\n return rows;\n }\n update<T>(key: string, change: (previous: T | undefined) => T): Promise<T> {\n const pending = this.commit(key, change).finally(() => {this.writes.delete(pending);});\n this.writes.add(pending); return pending;\n }\n async drain(): Promise<void> {await Promise.allSettled([...this.writes]);}\n claim(key: string): Promise<boolean> {\n const pending = this.fs.meta.seq!.transaction!(async tx => {\n const raw = await tx.getEntry(this.path, key); requireValue(raw, 'AUTOMATION_JOURNAL_MISSING');\n const record = JSON.parse(raw) as {phase: string};\n if (record.phase !== 'prepared') return false;\n await tx.setEntry(this.path, key, JSON.stringify({...record, phase: 'submitting'})); return true;\n }).finally(() => {this.writes.delete(pending);});\n this.writes.add(pending); return pending;\n }\n private async commit<T>(key: string, change: (previous: T | undefined) => T): Promise<T> {\n return this.fs.meta.seq!.transaction!(async tx => {\n const raw = await tx.getEntry(this.path, key), previous = raw ? JSON.parse(raw) as T : undefined;\n const previousIndex = boardIndexKeys(key, previous), value = change(previous);\n const encoded = JSON.stringify(value);\n if (encoded === raw) return structuredClone(value);\n await updateBoardIndex(tx, key, previousIndex, value, this.indexPath);\n await tx.setEntry(this.path, key, encoded); return structuredClone(value);\n });\n }\n async artifact(dispatchId: string, value: unknown): Promise<KanbanArtifactRef[]> {\n const text = JSON.stringify(value ?? null), bytes = new TextEncoder().encode(text).byteLength;\n requireValue(bytes <= 1024 * 1024, 'AUTOMATION_OUTPUT_TOO_LARGE');\n const sha256 = sha256HexSync(text);\n await this.update<string>('artifact:' + sha256, previous => {requireValue(previous === undefined || previous === text, 'ARTIFACT_CONFLICT'); return text;});\n const outputs = [{name: 'result', ref: this.artifactScheme + sha256, sha256, bytes}];\n await this.update<KanbanArtifactRef[]>('artifact-owner:' + dispatchId, previous => {\n requireValue(!previous || JSON.stringify(previous) === JSON.stringify(outputs), 'ARTIFACT_CONFLICT'); return outputs;\n });\n return outputs;\n }\n async verify(outputs: KanbanArtifactRef[], dispatchId?: string): Promise<boolean> {\n if (dispatchId && JSON.stringify(await this.get('artifact-owner:' + dispatchId)) !== JSON.stringify(outputs)) return false;\n for (const output of outputs) {\n if (output.ref !== this.artifactScheme + output.sha256) return false;\n const text = await this.get<string>('artifact:' + output.sha256);\n if (text === undefined || sha256HexSync(text) !== output.sha256 || new TextEncoder().encode(text).byteLength !== output.bytes) return false;\n }\n return true;\n }\n}\n","import type {ISeqFileTransaction} from '@nestos/vfs-core';\nimport {randomUUID} from '../utils';\nimport type {KanbanRuntimeDiagnostic} from './ports';\nimport {safeCode} from './diagnostics';\n\nexport const boardIndexPath = '/kanban/runtime/automation-board-index.seq';\nconst families = ['review-operation:', 'record-runs:', 'fix:', 'task-reply:'];\nexport function boardIndexPrefix(boardId: string, family: string): string {return JSON.stringify([boardId, family]).slice(0, -1) + ',';}\nexport function boardIndexKeys(key: string, value: unknown): string[] {\n const family = families.find(prefix => key.startsWith(prefix));\n if (!family) return [];\n const boards = new Set<string>();\n for (const row of Array.isArray(value) ? value : [value]) {\n if (!row || typeof row !== 'object') continue;\n for (const id of [row.boardId, row.sourceBoardId]) if (typeof id === 'string' && id) boards.add(id);\n }\n return [...boards].sort().map(board => JSON.stringify([board, family, key]));\n}\n/** Secondary references are committed atomically with their single source record. */\nexport async function updateBoardIndex(tx: ISeqFileTransaction, key: string, previous: string[], value: unknown, indexPath = boardIndexPath): Promise<void> {\n const next = new Set(boardIndexKeys(key, value)), oldKeys = new Set(previous);\n for (const old of previous) if (!next.has(old)) await tx.deleteEntry(indexPath, old);\n for (const index of next) if (!oldKeys.has(index)) await tx.setEntry(indexPath, index, key);\n}\nexport async function migrateBoardIndex(tx: ISeqFileTransaction, source: string, indexPath = boardIndexPath, diagnostic: (event: KanbanRuntimeDiagnostic) => void = () => {}): Promise<void> {\n if (await tx.getEntry(indexPath, 'version') === '1') return;\n const started = Date.now(), operationId = randomUUID(); let count = 0;\n try {\n for (const keyPrefix of families) await tx.walkEntries(source, async entry => {\n await updateBoardIndex(tx, entry.key, [], JSON.parse(entry.value), indexPath); count++; return true;\n }, {keyPrefix});\n await tx.setEntry(indexPath, 'version', '1');\n diagnostic({operation: 'kanban.board.index', operationId, stage: 'migrate', result: 'success', count, durationMs: Date.now() - started});\n } catch (error) {\n diagnostic({operation: 'kanban.board.index', operationId, stage: 'migrate', result: 'failure', code: safeCode(error, 'BOARD_INDEX_MIGRATION_FAILED'), durationMs: Date.now() - started}); throw error;\n }\n}\n","import type {KanbanExternalReference} from '../contracts';\n\nexport interface KanbanRuntimeDiagnostic {\n operationId: string; stage: string; result: 'started' | 'success' | 'failure'; durationMs: number;\n code?: string; operation?: string; boardId?: string; itemId?: string; count?: number;\n}\nexport interface KanbanJournalOptions {\n directory?: string;\n artifactScheme?: string;\n diagnostic?(event: KanbanRuntimeDiagnostic): void;\n}\nexport interface KanbanReferencePolicy {\n resource: string; decision: string; execution: string; nativeExecution?: string; workspace?: string;\n inherit?(references: readonly KanbanExternalReference[]): KanbanExternalReference[];\n}\nexport const defaultReferences: KanbanReferencePolicy = {\n resource: 'kanban-resource', decision: 'kanban-decision', execution: 'kanban-execution', workspace: 'kanban-workspace',\n};\n\nexport interface KanbanResourceCatalog {\n system: string;\n decisionSystem?: string;\n list(): Promise<Array<{reference: KanbanExternalReference; label: string}>>;\n validate(references: readonly KanbanExternalReference[]): Promise<void>;\n}\n\nexport interface KanbanWorkLogOptions {\n directory?: string;\n references?: KanbanReferencePolicy;\n label?(stage: string): string;\n diagnostic?(event: KanbanRuntimeDiagnostic): void;\n onRecord?(input: {boardId: string; itemId: string; record: import('../contracts').KanbanProjectRecord}): Promise<void>;\n}\n","import type {KanbanService, KanbanItemSummary, KanbanProjectRecord} from '../contracts';\nimport type {createWorkLogProjection} from './work-log-events';\n\n/** Reconcile legacy projections using persisted facts without executing coordination commands. */\nexport async function workLogSnapshots(boardId:string, source:KanbanService, items:KanbanItemSummary[], seen:Set<string>, projection: ReturnType<typeof createWorkLogProjection>):Promise<KanbanProjectRecord[]> {\n const {activityRecord, ancestorIds, lifecycleReferences} = projection;\n const workflow=await source.workflow(boardId), records=bindingSnapshots(boardId,items,seen,projection);\n for(const dispatch of Object.values(workflow.dispatches)) {\n const item=items.find(item=>item.id===dispatch.itemId);\n if(dispatch.outcome!=='accepted'||item?.status!=='completed')continue;\n records.push(activityRecord({id:boardId},item,`${dispatch.id}:task.completed:`,item.closedAt??Date.now(),\n {stage:'task.completed',result:'success',dispatchId:dispatch.id,fields:{evidence:'accepted-dispatch'}},\n lifecycleReferences(item.externalRefs),undefined,ancestorIds(item,items)));\n }\n return records;\n}\nfunction bindingSnapshots(board:string, items:KanbanItemSummary[], seen:Set<string>, projection: ReturnType<typeof createWorkLogProjection>):KanbanProjectRecord[] {\n const {activityRecord, ancestorIds, lifecycleReferences} = projection;\n const at=Date.now();\n return items.flatMap(item=>{\n const refs=lifecycleReferences(item.externalRefs).filter(ref=>!seen.has(JSON.stringify([item.id,ref.system,ref.id])));\n if(!refs.length)return [];\n return [activityRecord({id:board},item,'snapshot:'+item.id,at,\n {stage:'association.observed',result:'success',fields:{evidence:'existing-reference'}},refs,undefined,ancestorIds(item,items))];\n });\n}\n","import {FSError, type IFileSystem, type ISeqFileTransaction} from '@nestos/vfs-core';\nimport type {KanbanProjectRecord, KanbanRecordSummary} from '../contracts';\n\nconst snapshotVersion = '2';\nconst prefix = (board: string) => encodeURIComponent(board) + '/';\nconst rowKey = (board: string, id: string) => 'row/' + prefix(board) + encodeURIComponent(id);\n\n/** Derived logs have their own append-only storage, outside the decision record limit. */\nexport class KanbanWorkLogStore {\n private readonly path: string;\n constructor(private readonly fs: IFileSystem, private readonly directory = '/kanban/runtime', private readonly executionSystem = 'kanban-execution') {this.path = directory + '/work-log.seq';}\n async open(): Promise<void> {\n try {await this.fs.driver.createFile({parentPath: this.directory, name: 'work-log.seq', type: 'seqfile', recursive: true});}\n catch (error) {if (!(error instanceof FSError) || error.code !== 'EEXIST') throw error;}\n }\n async record(board: string, id: string): Promise<KanbanProjectRecord | undefined> {\n const raw = await this.fs.meta.seq!.getEntry(this.path, rowKey(board, id)); return raw ? JSON.parse(raw) : undefined;\n }\n async append(board: string, record: KanbanProjectRecord): Promise<void> {\n await this.fs.meta.seq!.transaction!(tx => this.appendTx(tx, board, record));\n }\n async checkpoint(board: string): Promise<number> {return Number(await this.fs.meta.seq!.getEntry(this.path, 'checkpoint/' + prefix(board)) ?? 0);}\n async commit(board: string, after: number, through: number, rows: KanbanProjectRecord[]): Promise<void> {\n await this.fs.meta.seq!.transaction!(async tx => {\n if (Number(await tx.getEntry(this.path, 'checkpoint/' + prefix(board)) ?? 0) !== after) return;\n for (const row of rows) await this.appendTx(tx, board, row);\n await tx.setEntry(this.path, 'checkpoint/' + prefix(board), String(through));\n });\n }\n async needsSnapshot(board: string): Promise<boolean> {return await this.fs.meta.seq!.getEntry(this.path, 'snapshot/' + prefix(board)) !== snapshotVersion;}\n async snapshot(board: string, records: KanbanProjectRecord[]): Promise<void> {\n await this.fs.meta.seq!.transaction!(async tx => {\n const key = 'snapshot/' + prefix(board); if (await tx.getEntry(this.path, key) === snapshotVersion) return;\n for (const record of records) await this.appendTx(tx, board, record);\n await tx.setEntry(this.path, key, snapshotVersion);\n });\n }\n async page(board: string, itemId: string | undefined, offset: number, limit: number) {\n return this.fs.meta.seq!.transaction!(async tx => {\n const rows: KanbanRecordSummary[] = [];\n const keyPrefix = itemId ? 'item/' + prefix(board) + encodeURIComponent(itemId) + '/' : 'summary/' + prefix(board);\n const page = await tx.walkEntries(this.path, entry => {rows.push(JSON.parse(entry.value)); return true;}, {keyPrefix, offset, limit});\n return {items: rows, total: page.total, revision: Number(await tx.getEntry(this.path, 'revision/' + prefix(board)) ?? 0)};\n });\n }\n private async appendTx(tx: ISeqFileTransaction, board: string, row: KanbanProjectRecord): Promise<void> {\n if (await tx.getEntry(this.path, rowKey(board, row.id))) return;\n const {content: _content, rationale: _rationale, sources: _sources, ...metadata} = row;\n const summary: KanbanRecordSummary = {...metadata, sessionIds: row.externalRefs?.filter(ref => ref.system === this.executionSystem).map(ref => ref.id) ?? []};\n const order = String(Number.MAX_SAFE_INTEGER - row.createdAt).padStart(16, '0') + '/' + row.id;\n await tx.setEntry(this.path, rowKey(board, row.id), JSON.stringify(row));\n await tx.setEntry(this.path, 'summary/' + prefix(board) + order, JSON.stringify(summary));\n for (const id of row.itemIds) await tx.setEntry(this.path, 'item/' + prefix(board) + encodeURIComponent(id) + '/' + order, JSON.stringify(summary));\n await tx.increment(this.path, 'revision/' + prefix(board));\n }\n}\n","import {sha256HexSync} from '../utils';\nimport type {KanbanBoard, KanbanEvent, KanbanItemSummary, KanbanProjectRecord, KanbanRecordActivity, KanbanExternalReference} from '../contracts';\nimport {defaultReferences, type KanbanWorkLogOptions} from './ports';\n\n\nexport function createWorkLogProjection(options: KanbanWorkLogOptions = {}) {\nconst references = options.references ?? defaultReferences;\nfunction eventActivity(event: KanbanEvent): KanbanRecordActivity | undefined {\n const base = {actor: {kind: event.actor.kind ?? 'agent' as const, id: event.actor.id ?? event.actor.agentId ?? 'unknown'}, result: 'success' as const, ...(event.data.dispatchId ? {dispatchId: event.data.dispatchId} : {})};\n if (event.kind === 'report-analysis') return {...base, stage:'analysis.'+(event.data.reason?.slice('analysis-'.length) ?? 'unknown'), result:event.data.code?'failure':'success', code:event.data.code};\n if (event.kind === 'control-receipt') return {...base, stage:'execution.'+(event.data.reason ?? 'control-unknown'), result:event.data.code?'failure':'success', code:event.data.code};\n if (event.kind === 'create-item') return {...base, stage: 'task.created'};\n if (event.kind === 'prepare-dispatch') return {...base, stage: 'execution.prepared'};\n if (event.kind === 'continue-execution') return {...base, stage: 'execution.continued'};\n if (event.kind === 'submit') return {...base, stage: 'execution.review'};\n if (event.kind === 'close-plan' || event.kind === 'review' && event.data.reason === 'accepted' || event.kind === 'accept-execution' && event.data.reason === 'accepted') return {...base, stage: 'task.completed'};\n if (event.kind === 'cancel-item' || event.kind === 'release-item' && event.data.reason === 'cancelled') return {...base, stage: 'task.cancelled', result: 'cancelled'};\n if (event.kind === 'observe-execution') {\n const result = event.data.reason?.slice('execution-'.length);\n if (result && ['running', 'succeeded', 'failed', 'cancelled', 'unknown'].includes(result)) return {...base,\n stage: result === 'succeeded' && event.data.status === 'completed' ? 'task.completed' : 'execution.' + result, result: result === 'failed' || result === 'unknown' ? 'failure' : result === 'cancelled' ? 'cancelled' : 'success', code: event.data.code};\n }\n if (event.kind === 'link-reference' && event.data.reference) {\n const system = event.data.reference.system;\n const stage = system === references.execution ? 'session.bound' : system === references.nativeExecution ? 'session.native' : system === references.workspace ? 'worktree.prepared' : undefined;\n if (stage) return {...base, stage};\n }\n if (event.kind === 'message') return {...base, stage: 'task.message'};\n if (event.kind === 'block-item') return {...base, stage: 'task.blocked', result: 'failure', code: event.data.reason};\n return undefined;\n}\nfunction activityRecord(board: Pick<KanbanBoard, 'id'>, item: KanbanItemSummary | undefined, id: string, at: number,\n activity: KanbanRecordActivity, refs: KanbanExternalReference[] = [], content?: string, ancestors: string[] = []): KanbanProjectRecord {\n const label = options.label?.(activity.stage) ?? activity.stage;\n return {id: 'activity-' + sha256HexSync(JSON.stringify([board.id, id])), kind: 'log', title: [item?.title, label].filter(Boolean).join(' · '),\n content: content ?? [label, activity.code, ...Object.entries(activity.fields ?? {}).map(([key, value]) => `${key}: ${value}`)].filter(Boolean).join('\\n'),\n activity, externalRefs: refs, itemIds: [...new Set([...(item ? [item.id] : []), ...ancestors])], sources: [],\n author: activity.actor ?? {kind: 'service', id: 'kanban-activity'}, origin: 'flow', status: 'confirmed', revision: 1, createdAt: at, updatedAt: at};\n}\nfunction ancestorIds(item: KanbanItemSummary | undefined, items: KanbanItemSummary[]): string[] {\n const result: string[] = [], seen = new Set(item ? [item.id] : []); let parent = item?.planning.parentId;\n while (parent && !seen.has(parent)) {seen.add(parent); result.push(parent); parent = items.find(row => row.id === parent)?.planning.parentId;}\n return result;\n}\n\nfunction lifecycleReferences(refs: KanbanExternalReference[] = []): KanbanExternalReference[] {\n return [references.execution, references.nativeExecution, references.workspace].flatMap(system => {\n const ref = refs.filter(ref => ref.system === system).at(-1); return ref ? [ref] : [];\n });\n}\n\nreturn {eventActivity,activityRecord,ancestorIds,lifecycleReferences};\n}\n","import {workLogSnapshots} from './work-log-snapshots';\nimport {sha256HexSync, randomUUID} from '../utils';\nimport {KanbanError} from '../ports';\nimport type {IFileSystem} from '@nestos/vfs-core';\nimport type {KanbanService, KanbanRecordQuery, KanbanRecordPage, KanbanRecordSummary, KanbanRecordActivity, KanbanExternalReference, KanbanItemSummary} from '../contracts';\nimport {KanbanWorkLogStore} from './work-log-store';\nimport {createWorkLogProjection} from './work-log-events';\nimport {defaultReferences, type KanbanReferencePolicy, type KanbanWorkLogOptions, type KanbanRuntimeDiagnostic} from './ports';\nimport {requireValue} from '../rules';\n\nexport interface WorkLogFact extends KanbanRecordActivity {references?: KanbanExternalReference[]; summary?: string}\ninterface Cursor {version: 1; board: string; query: string; revision: number; logRevision: number; manual: number; automatic: number}\nconst order = (a: KanbanRecordSummary, b: KanbanRecordSummary) => b.createdAt - a.createdAt || a.id.localeCompare(b.id);\n\n/** A recoverable read projection; it never appends commands or grows coordination state. */\nexport class KanbanWorkLog {\n private readonly store: KanbanWorkLogStore;\n private readonly projection;\n private readonly log: (event: KanbanRuntimeDiagnostic) => void;\n constructor(fs: IFileSystem, private readonly options: KanbanWorkLogOptions = {}) {\n this.projection = createWorkLogProjection(options); this.log = event => options.diagnostic?.(event);\n this.store = new KanbanWorkLogStore(fs, options.directory, (options.references ?? defaultReferences).execution);\n }\n open(): Promise<void> {return this.store.open();}\n async synchronize(boardId: string, source: KanbanService): Promise<void> {\n const started = Date.now(), operationId = randomUUID();\n try {\n let after = await this.store.checkpoint(boardId);\n const [page, snapshot] = await Promise.all([source.events(boardId, after, 500), this.store.needsSnapshot(boardId)]); if (!page.length && !snapshot) return;\n const board = {id: boardId}, items = await allItems(source, boardId);\n let events = page; const seenReferences = new Set<string>();\n while (events.length) {\n const records = events.flatMap(event => {\n if (event.data.reference && event.itemId) seenReferences.add(JSON.stringify([event.itemId, event.data.reference.system, event.data.reference.id]));\n const activity = this.projection.eventActivity(event); if (!activity || !event.itemId) return [];\n const item = items.find(item => item.id === event.itemId), reference = event.data.reference;\n const snapshot = item && event.data.itemTitle ? {...item, title: event.data.itemTitle} : item;\n const key = factKey(activity, reference ? [reference] : [], event.itemId, 'event:' + event.sequence, this.options.references ?? defaultReferences);\n return [this.projection.activityRecord(board, snapshot, key, event.at, activity, reference ? [reference] : this.projection.lifecycleReferences(item?.externalRefs), event.data.message, this.projection.ancestorIds(item, items))];\n });\n const through = events.at(-1)!.sequence; await this.store.commit(boardId, after, through, records); after = through;\n if (events.length < 500) break;\n events = await source.events(boardId, after, 500);\n }\n if (snapshot) await this.store.snapshot(boardId, await workLogSnapshots(boardId, source, items, seenReferences, this.projection));\n this.log({operationId, boardId, stage: 'work-log.project', result: 'success', durationMs: Date.now() - started});\n } catch (error) {\n const code = (error as {code?: string})?.code;\n this.log({operationId, boardId, stage: 'work-log.project', result: 'failure', code: code && /^[A-Z_]{1,80}$/.test(code) ? code : 'WORK_LOG_PROJECTION_FAILED', durationMs: Date.now() - started});\n throw error;\n }\n }\n async append(source: KanbanService, boardId: string, itemId: string, fact: WorkLogFact): Promise<void> {\n requireValue(/^[a-z][a-z0-9.-]{0,79}$/.test(fact.stage) && ['success', 'failure', 'cancelled'].includes(fact.result), 'INVALID_WORK_LOG');\n const board = {id: boardId}, items = await allItems(source, boardId), item = items.find(item => item.id === itemId);\n requireValue(item, 'ITEM_NOT_FOUND');\n const {references = [], summary, ...activity} = fact;\n const id = factKey(activity, references, itemId, fact.dispatchId ?? itemId, this.options.references ?? defaultReferences);\n const record = this.projection.activityRecord(board, item, id, Date.now(), activity, references, summary, this.projection.ancestorIds(item, items));\n await this.store.append(boardId, record);\n await this.options.onRecord?.({boardId,itemId,record});\n }\n async record(source: KanbanService, boardId: string, id: string) {\n if (!id.startsWith('activity-')) return source.record(boardId, id);\n await source.records(boardId, {limit: 1}); await this.synchronize(boardId, source);\n return await this.store.record(boardId, id) ?? source.record(boardId, id);\n }\n async records(source: KanbanService, boardId: string, query: KanbanRecordQuery = {}): Promise<KanbanRecordPage> {\n if (query.kind === 'decision' || query.status && query.status !== 'confirmed') return source.records(boardId, query);\n await this.synchronize(boardId, source);\n const {cursor, limit = 50, ...filter} = query, fingerprint = sha256HexSync(JSON.stringify({...filter, limit}));\n requireValue(Number.isSafeInteger(limit) && limit > 0 && limit <= 200, 'INVALID_LIMIT');\n const saved = parseCursor(cursor, boardId, fingerprint);\n const manual = await source.records(boardId, {...filter, limit: 200});\n const automatic = await this.store.page(boardId, query.itemId, saved?.automatic ?? 0, limit);\n if (saved && (saved.revision !== manual.revision || saved.logRevision !== automatic.revision)) throw new KanbanError('CURSOR_STALE');\n const remaining = manual.items.slice(saved?.manual ?? 0), autoIds = new Set(automatic.items.map(item => item.id));\n const items = [...remaining, ...automatic.items].sort(order).slice(0, limit);\n const usedAuto = items.filter(item => autoIds.has(item.id)).length, usedManual = items.length - usedAuto;\n const next: Cursor = {version: 1, board: boardId, query: fingerprint, revision: manual.revision, logRevision: automatic.revision,\n manual: (saved?.manual ?? 0) + usedManual, automatic: (saved?.automatic ?? 0) + usedAuto};\n return {revision: manual.revision, total: manual.total + automatic.total, items,\n ...(next.manual < manual.total || next.automatic < automatic.total ? {nextCursor: JSON.stringify(next)} : {})};\n }\n}\nasync function allItems(source: KanbanService, board: string): Promise<KanbanItemSummary[]> {\n const items: KanbanItemSummary[] = []; let cursor: string | undefined;\n do {const page = await source.query(board, {view: 'all', limit: 200, ...(cursor ? {cursor} : {})}); items.push(...page.items); cursor = page.nextCursor;} while (cursor);\n return items;\n}\nfunction parseCursor(cursor: string | undefined, board: string, query: string): Cursor | undefined {\n if (!cursor) return;\n let value: Cursor; try {value = JSON.parse(cursor);} catch {throw new KanbanError('INVALID_CURSOR');}\n requireValue(value?.version === 1 && value.board === board && value.query === query, 'CURSOR_SCOPE_MISMATCH');\n requireValue([value.manual, value.automatic, value.revision, value.logRevision].every(value => Number.isSafeInteger(value) && value >= 0), 'INVALID_CURSOR'); return value;\n}\nfunction factKey(activity: KanbanRecordActivity, refs: KanbanExternalReference[], itemId: string, fallback: string, systems: KanbanReferencePolicy): string {\n const tree = refs.find(ref => ref.system === systems.workspace);\n if (tree && activity.stage === 'worktree.prepared') return `${tree.id}:worktree.prepared`;\n if (activity.dispatchId) return `${activity.dispatchId}:${activity.stage}:${activity.code ?? ''}${['execution.running', 'execution.unknown'].includes(activity.stage) && fallback.startsWith('event:') ? ':' + fallback : ''}`;\n const ref = refs.find(ref => [systems.nativeExecution, systems.execution].includes(ref.system));\n return ref ? JSON.stringify([itemId, activity.stage, ref.system, ref.id]) : fallback;\n}\n","import {randomUUID} from '../utils';\nimport {KanbanError} from '../ports';\nimport type {KanbanCommand, KanbanRequest, KanbanService} from '../contracts';\nimport type {KanbanAutomationJournal} from './automation-journal';\n\ninterface Entry {request: KanbanRequest; done?: boolean}\n\n/** Unknown responses retain the frozen request; only a definite CAS rejection can rebase. */\nexport async function journalCommand(journal: KanbanAutomationJournal, service: Pick<KanbanService, 'read' | 'execute'>,\n boardId: string, key: string, command: KanbanCommand): Promise<void> {\n if ((await journal.get<Entry>(key))?.done) return;\n const board = await service.read(boardId);\n const entry = await journal.update<Entry>(key, old => old ?? {request: {operationId: randomUUID(), expectedRevision: board.revision, command}});\n if (entry.done) return;\n try {await service.execute(boardId, entry.request);}\n catch (error) {\n if (error instanceof KanbanError && error.code === 'REVISION_CONFLICT') {\n const latest = await service.read(boardId);\n await journal.update<Entry>(key, old => old?.request.operationId !== entry.request.operationId || old.done ? old! : {\n request: {...entry.request, operationId: randomUUID(), expectedRevision: latest.revision}});\n }\n throw error;\n }\n await journal.update<Entry>(key, old => ({...old!, done: true}));\n}\n","import {sha256HexSync} from '../utils';\nimport type {KanbanClient, KanbanItem, KanbanRecordExecution} from '../contracts';\nimport type {KanbanAutomationJournal} from './automation-journal';\nimport {journalCommand} from './journal-command';\nimport {requireValue} from '../rules';\n\nexport interface RecordControl {boardId?: string; recordId?: string; operationId: string; action: 'pause' | 'resume' | 'cancel'; controls: Record<string, string>; settled?: boolean}\nexport const recordControlKey = (board: string, record: string) => 'record-control:' + JSON.stringify([board, record]);\n/** Only already materialized work is controlled; cancellation never creates missing work. */\nexport async function advanceRecordControl(service: KanbanClient, journal: KanbanAutomationJournal,\n run: KanbanRecordExecution & {sourceBoardId: string}, control: RecordControl): Promise<KanbanRecordExecution['state']> {\n const ids = new Set([run.rootItemId, ...run.itemIds ?? []]);\n let board;\n try {board = await service.read(run.boardId);}\n catch (error) {if (control.action === 'cancel' && (error as {code?: string}).code === 'BOARD_NOT_FOUND') return 'cancelled'; throw error;}\n let items = board.items.filter(item => ids.has(item.id));\n for (let index = 0; index < board.items.length; index++) {\n const children = board.items.filter(item => ids.has(item.planning?.parentId));\n if (children.every(item => ids.has(item.id))) break;\n for (const child of children) ids.add(child.id);\n }\n items = board.items.filter(item => ids.has(item.id));\n for (const item of items.filter(item => !['completed','cancelled'].includes(item.status))) await requestItemControl(service, journal, run, control, item);\n const latest = await service.read(run.boardId), active = latest.items.filter(item => ids.has(item.id) && !['completed','cancelled'].includes(item.status));\n if (control.action === 'cancel') return active.length ? 'cancelling' : 'cancelled';\n const managed = active.filter(item => control.controls[item.id]);\n if (managed.some(item => item.control?.state === 'unknown')) return 'unknown';\n if (managed.some(item => item.control?.state === 'failed')) return 'blocked';\n const target = control.action === 'pause' ? 'paused' : 'resumed';\n return managed.every(item => item.control?.state === target) ? control.action === 'pause' ? 'paused' : 'running' : control.action === 'pause' ? 'pausing' : 'resuming';\n}\nasync function requestItemControl(service: KanbanClient, journal: KanbanAutomationJournal, run: KanbanRecordExecution & {sourceBoardId: string}, control: RecordControl, item: KanbanItem): Promise<void> {\n const action = control.action, controlId = sha256HexSync(JSON.stringify([run.sourceBoardId, run.recordId, control.operationId, run.boardId, item.id, action]));\n if (item.control?.id !== controlId) {\n if (action === 'resume' && (!control.controls[item.id] || item.control?.id !== control.controls[item.id])) return;\n if (action === 'pause' && item.control?.action === 'pause') return;\n await journalCommand(journal, service, run.boardId, 'record-control-item:' + controlId,\n {type: 'request-control', itemId: item.id, controlId, action});\n }\n const saved = await journal.update<RecordControl>(recordControlKey(run.sourceBoardId, run.recordId), old => ({...old!, controls: {...old!.controls, [item.id]: controlId}}));\n control.controls = saved.controls;\n}\nexport async function requestRecordControl(service: KanbanClient, journal: KanbanAutomationJournal, boardId: string,\n request: {recordId: string; operationId: string; action: RecordControl['action']}): Promise<void> {\n requireValue(/^[\\w-]{1,128}$/.test(request.operationId) && ['pause','resume','cancel'].includes(request.action), 'INVALID_RECORD_CONTROL');\n const board = await service.read(boardId), actor = await service.currentPrincipal(), record = await service.record(boardId, request.recordId);\n requireValue(actor.kind === 'human' && board.members?.some(m => m.kind === actor.kind && m.id === actor.id && m.roles?.includes('coordinator')), 'COORDINATOR_REQUIRED');\n requireValue(record.kind === 'decision' && record.deletedAt === undefined, 'DECISION_REQUIRED');\n await journal.update<RecordControl>(recordControlKey(boardId, record.id), old => {\n if (old?.operationId === request.operationId) {requireValue(old.action === request.action, 'IDEMPOTENCY_CONFLICT'); return old;}\n requireValue(!old || old.action !== 'cancel', 'RECORD_CANCELLING');\n requireValue(request.action !== 'resume' || old?.action === 'pause', 'TASK_NOT_PAUSED');\n return {boardId, recordId: record.id, operationId: request.operationId, action: request.action, controls: old?.controls ?? {}};\n });\n if (request.action === 'cancel') await journalCommand(journal, service, boardId, 'record-cancelling:' + JSON.stringify([boardId,record.id,request.operationId]), {type:'request-record-cancellation',recordId:record.id});\n}\n","import {advanceRecordControl, requestRecordControl, recordControlKey, type RecordControl} from './record-controls';\nimport {DEFAULT_KANBAN_WORK_TYPES} from '../contracts';\nimport {journalCommand} from './journal-command';\nimport {sha256HexSync} from '../utils';\nimport type {KanbanResourceCatalog} from './ports';\nimport type {KanbanBoard, KanbanClient, KanbanCommand, KanbanProjectRecord, KanbanRecordExecution, KanbanRecordRunRequest, KanbanItem} from '../contracts';\nimport {KanbanAutomationJournal} from './automation-journal';\nimport {requireValue} from '../rules';\nimport {safeCode} from './diagnostics';\n\ninterface SavedRun extends KanbanRecordExecution {\n placement?: KanbanRecordRunRequest['placement']; requestRevision?: number; taskKind?: string; parentKind?: string;\n sourceBoardId: string; record: KanbanProjectRecord; automation: NonNullable<KanbanBoard['automation']>}\ntype RunReceipt = Pick<SavedRun, 'id' | 'sourceBoardId' | 'recordId' | 'recordRevision' | 'requestRevision' | 'placement'> & {schema?: 2};\ninterface Options {\n requiresItemResource?(board:KanbanBoard):boolean;\n service: KanbanClient; journal: KanbanAutomationJournal; resources: KanbanResourceCatalog;\n log(input: {operationId: string; boardId: string; stage: string; result: 'success' | 'failure'; code?: string; durationMs: number}): void;\n}\n\n/** A restartable projection from an approved decision into work on its chosen board. */\nexport function createRecordExecution(options: Options) {\n let stopped = false;\n const pending = new Map<string, Promise<KanbanRecordExecution>>();\n const resume = (run: SavedRun) => {\n requireValue(!stopped, 'SERVICE_STOPPING');\n let job = pending.get(run.id);\n if (!job) {job = advance(options, run).finally(() => {pending.delete(run.id);}); pending.set(run.id, job);}\n return job;\n };\n return {\n itemResources:async(boardId:string,parentId?:string)=>{\n const board=await options.service.read(boardId),parent=parentId?(await options.service.item(boardId,parentId)).item:undefined;\n const refs=parent?.externalRefs?.filter(ref=>ref.system===options.resources.system)??[];\n const resources=(await options.resources.list());\n return {resources,selected:refs.length===1?refs[0]:undefined,readonly:refs.length===1,required:refs.length===1||options.requiresItemResource?.(board)===true};\n },\n recordResources: async () => (await options.resources.list()),\n runRecord: async (boardId: string, request: KanbanRecordRunRequest) => {\n requireValue(!stopped, 'SERVICE_STOPPING');\n const started = Date.now(), operationId = sha256HexSync(JSON.stringify([boardId, request.operationId]));\n let run: SavedRun;\n try {\n run = await prepare(options, boardId, request);\n options.log({operationId, boardId, stage: 'record.prepare', result: 'success', durationMs: Date.now() - started});\n } catch (error) {\n options.log({operationId, boardId, stage: 'record.prepare', result: 'failure', code: safeCode(error, 'RECORD_PREPARATION_FAILED'), durationMs: Date.now() - started});\n throw error;\n }\n return resume(run);\n },\n controlRecord: async (boardId: string, request: {recordId: string; operationId: string; action: 'pause' | 'resume' | 'cancel'}) => {\n await requestRecordControl(options.service, options.journal, boardId, request);\n for (const run of await options.journal.get<SavedRun[]>('record-runs:' + boardId) ?? []) if (run.recordId === request.recordId) {\n await pending.get(run.id)?.catch(() => {}); await resume(run);\n }\n const runs = (await options.journal.get<SavedRun[]>('record-runs:' + boardId) ?? []).filter(run => run.recordId === request.recordId);\n if (request.action === 'cancel' && runs.every(run => ['completed','failed','cancelled'].includes(run.state))) await finishDecisionCancellation(options, boardId, request.recordId, request.operationId);\n },\n recordExecutions: async (boardId: string, recordId: string) => {\n await options.service.record(boardId, recordId);\n const runs = await options.journal.get<SavedRun[]>('record-runs:' + boardId) ?? [];\n return runs.filter(run => run.recordId === recordId).map(view);\n },\n async scan() {\n if (stopped) return;\n const errors: unknown[] = [];\n for (const board of await options.service.catalog()) {\n if (stopped) return;\n for (const run of await options.journal.get<SavedRun[]>('record-runs:' + board.id) ?? []) {\n if (stopped) return;\n if (!['completed', 'failed', 'cancelled'].includes(run.state)) {try {await resume(run);} catch (error) {errors.push(error);}}\n }\n }\n for (const row of await options.journal.find<RecordControl>('record-control:', value => value.action === 'cancel' && !value.settled)) {\n if (!row.value.boardId || !row.value.recordId) continue;\n try {await finishDecisionCancellation(options, row.value.boardId, row.value.recordId, row.value.operationId);} catch (error) {errors.push(error);}\n }\n if (errors.length) throw new AggregateError(errors, 'RECORD_EXECUTION_SCAN_FAILED');\n },\n async quiesce() {stopped = true; await Promise.allSettled([...pending.values()]);},\n };\n}\n\nexport async function validateResourceReferences(resources: KanbanResourceCatalog, record: Pick<KanbanProjectRecord, 'externalRefs'>): Promise<void> {\n const refs = record.externalRefs?.filter(ref => ref.system === resources.system) ?? [];\n requireValue(refs.length <= 16 && new Set(refs.map(ref => ref.id)).size === refs.length, 'INVALID_RESOURCE_SELECTION');\n await resources.validate(refs);\n}\n\nasync function prepare(options: Options, boardId: string, request: KanbanRecordRunRequest): Promise<SavedRun> {\n requireValue(typeof request.operationId === 'string' && /^[a-zA-Z0-9_-]{1,128}$/.test(request.operationId), 'INVALID_OPERATION_ID');\n requireValue(!(await options.service.read(boardId)).lifecycle,'BOARD_STOPPING');\n const record = await options.service.record(boardId, request.recordId);\n const control = await options.journal.get<RecordControl>(recordControlKey(boardId, record.id));\n requireValue(record.deletedAt === undefined && (!control || control.action === 'resume' && control.settled), 'RECORD_CONTROL_ACTIVE');\n const frozen = await options.journal.get<RunReceipt>('record-operation:' + request.operationId);\n if (frozen) {\n requireValue(frozen.sourceBoardId === boardId && frozen.recordId === request.recordId && (frozen.requestRevision ?? frozen.recordRevision) === request.expectedRevision\n && (!frozen.placement || frozen.placement === (request.placement ?? 'current-board')), 'IDEMPOTENCY_CONFLICT');\n const current = (await options.journal.get<SavedRun[]>('record-runs:' + boardId))?.find(run => run.id === frozen.id);\n requireValue(current, 'RECORD_EXECUTION_CHECKPOINT_MISSING');\n return freezeOperation(options, request, current);\n }\n requireValue(record.kind === 'decision' && record.status === 'confirmed', 'DECISION_NOT_CONFIRMED');\n requireValue(record.revision === request.expectedRevision, 'REVISION_CONFLICT');\n const board = await options.service.read(boardId);\n requireValue(board.automation, 'AUTOMATION_BINDING_REQUIRED');\n await validateResourceReferences(options.resources, record);\n requireValue(record.externalRefs?.some(ref => ref.system === options.resources.system), 'REMOTE_PROJECT_REQUIRED');\n const id = sha256HexSync(JSON.stringify([boardId, record.id, record.revision]));\n const placement = request.placement ?? 'current-board';\n requireValue(['current-board', 'new-board'].includes(placement), 'INVALID_EXECUTION_PLACEMENT');\n const saved = await options.journal.update<SavedRun[]>('record-runs:' + boardId, previous => {\n requireValue(!previous?.some(row => row.recordId === record.id && row.state === 'completed'), 'DECISION_EXECUTION_COMPLETED');\n const same = previous?.find(row => row.id === id || row.recordId === record.id && decisionSignature(row.record) === decisionSignature(record));\n if (same) {requireValue(!same.placement || same.placement === placement, 'DECISION_EXECUTION_PLACEMENT_CONFLICT'); return previous!;}\n requireValue(!previous?.some(row => row.recordId === record.id && !['completed', 'failed'].includes(row.state)), 'DECISION_EXECUTION_UNSETTLED');\n requireValue((previous?.length ?? 0) < 100, 'RECORD_EXECUTION_LIMIT');\n return [...previous ?? [], newRun(board, record, request, id, options.resources.system)];\n });\n await options.journal.update('record-context:'+id,old=>old??{sourceBoardId:boardId,recordId:record.id,recordRevision:record.revision,runId:id});\n const original = saved.find(row => row.id === id || row.recordId === record.id && decisionSignature(row.record) === decisionSignature(record))!;\n return freezeOperation(options, request, original);\n}\nasync function freezeOperation(options: Options, request: KanbanRecordRunRequest, run: SavedRun): Promise<SavedRun> {\n await options.journal.update<RunReceipt>('record-operation:' + request.operationId, previous => {\n requireValue(!previous || previous.id === run.id && (previous.requestRevision ?? previous.recordRevision) === request.expectedRevision\n && (!previous.placement || previous.placement === (request.placement ?? 'current-board')), 'IDEMPOTENCY_CONFLICT');\n return {schema: 2, id: run.id, sourceBoardId: run.sourceBoardId, recordId: run.recordId,\n recordRevision: run.recordRevision, requestRevision: request.expectedRevision, ...(run.placement ? {placement: run.placement} : {})};\n });\n return run;\n}\n\nasync function advance(options: Options, run: SavedRun): Promise<KanbanRecordExecution> {\n const started = Date.now();\n try {\n const control = await options.journal.get<RecordControl>(recordControlKey(run.sourceBoardId, run.recordId));\n if (control && !control.settled) {\n const state = await advanceRecordControl(options.service, options.journal, run, control);\n const updated = await save(options, {...run, state, updatedAt: Date.now()});\n if (state !== run.state) options.log({operationId:control.operationId, boardId:run.sourceBoardId, stage:'record.control.' + control.action, result:state==='unknown'||state==='blocked'?'failure':'success', code:updated.code, durationMs:Date.now()-started});\n if (control.action === 'resume' && state === 'running') {\n const runs = await options.journal.get<SavedRun[]>('record-runs:' + run.sourceBoardId);\n if (runs?.filter(row => row.recordId === run.recordId).every(row => ['running','completed','failed','cancelled'].includes(row.state))) await options.journal.update<RecordControl>(recordControlKey(run.sourceBoardId, run.recordId), old => ({...old!, settled: true}));\n }\n if (state === 'cancelled') {\n const runs = await options.journal.get<SavedRun[]>('record-runs:' + run.sourceBoardId);\n if (runs?.filter(row => row.recordId === run.recordId).every(row => ['completed','failed','cancelled'].includes(row.state))) await finishDecisionCancellation(options, run.sourceBoardId, run.recordId, control.operationId);\n }\n return view(updated);\n }\n await validateResourceReferences(options.resources, run.record);\n await materialize(options, run);\n const board = await options.service.read(run.boardId);\n const items = run.itemIds ? await Promise.all(run.itemIds.map(async id => board.items.find(item => item.id === id) ?? (await options.service.item(run.boardId, id)).item)) : board.items;\n const state = runState(items);\n if (state === 'completed' && run.rootItemId && !run.itemIds?.includes(run.rootItemId) && board.items.find(item => item.id === run.rootItemId)?.status !== 'completed') {\n await once(options, run, 'close-root', {type: 'close-plan', itemId: run.rootItemId, resultRef: 'kanban-run:' + run.id});\n }\n const code = state === 'failed' ? 'DECISION_TASK_CANCELLED' : undefined;\n if (run.state === state && run.code === code) return view(run);\n const updated = await save(options, {...run, state, code, updatedAt: Date.now()});\n options.log({operationId: run.id, boardId: run.sourceBoardId, stage: 'record.run', result: state === 'failed' ? 'failure' : 'success', code: updated.code, durationMs: Date.now() - started});\n return view(updated);\n } catch (error) {\n const code = safeCode(error, 'RECORD_EXECUTION_FAILED');\n if (code === 'SERVICE_STOPPING') throw error;\n await save(options, {...run, state: 'blocked', code, updatedAt: Date.now()});\n options.log({operationId: run.id, boardId: run.sourceBoardId, stage: 'record.run', result: 'failure', code, durationMs: Date.now() - started});\n throw error;\n }\n}\n\nfunction decisionSignature(record: KanbanProjectRecord): string {\n return sha256HexSync(JSON.stringify([record.title, record.content, record.rationale, record.externalRefs]));\n}\nfunction newRun(board: KanbanBoard, record: KanbanProjectRecord, request: KanbanRecordRunRequest, id: string, resourceSystem: string): SavedRun {\n const placement = request.placement ?? 'current-board';\n requireValue(['current-board', 'new-board'].includes(placement), 'INVALID_EXECUTION_PLACEMENT');\n requireValue(placement === 'new-board' || board.automation?.enabled, 'AUTOMATION_PAUSED');\n const refs = record.externalRefs!.filter(ref => ref.system === resourceSystem);\n const types = board.workTypes ?? DEFAULT_KANBAN_WORK_TYPES;\n const task = types.find(type => type.id === (board.defaultWorkType ?? 'task') && type.executable) ?? types.find(type => type.executable);\n const parent = types.filter(type => !type.executable && type.rank < (task?.rank ?? 0)).sort((a, b) => b.rank - a.rank)[0];\n requireValue(task && (refs.length === 1 || parent), 'DECISION_WORK_TYPES_REQUIRED');\n const itemIds = refs.map((_, index) => 'work-' + id + '-' + index);\n return {id, sourceBoardId: board.id, recordId: record.id, recordRevision: record.revision,\n boardId: placement === 'new-board' ? 'run-' + id : board.id, placement, taskKind: task.id, parentKind: parent?.id,\n rootItemId: refs.length === 1 ? itemIds[0] : 'feature-' + id, itemIds,\n state: 'preparing', createdAt: Date.now(), updatedAt: Date.now(), record, automation: structuredClone(board.automation!)};\n}\nfunction runState(items: KanbanItem[]): KanbanRecordExecution['state'] {\n if (items.some(item => item.status === 'cancelled')) return 'failed';\n if (items.length && items.every(item => item.status === 'completed')) return 'completed';\n if (items.some(item => item.blocked)) return 'blocked';\n return items.length && items.every(item => ['completed', 'review'].includes(item.status)) ? 'review' : 'running';\n}\nasync function materialize(options: Options, run: SavedRun): Promise<void> {\n if (run.boardId !== run.sourceBoardId) {\n const actor = await options.service.currentPrincipal(), source = await options.service.read(run.sourceBoardId);\n await options.service.create({id: run.boardId, title: run.record.title, scope: {kind: 'collection', namespace: 'decision-run', id: run.id},\n members: [{...actor, responsibility: 'Review decision execution', roles: ['coordinator', 'reviewer', 'worker']}],\n ...(run.placement && source.workTypes ? {workTypes: source.workTypes, defaultWorkType: source.defaultWorkType} : {}),\n policy: {requireEstimate: false, review: 'independent'}});\n }\n const refs = run.record.externalRefs!.filter(ref => ref.system === options.resources.system);\n const group = !!run.rootItemId && !run.itemIds?.includes(run.rootItemId);\n if (group) await once(options, run, 'root', {type: 'create-item', item: {id: run.rootItemId!, title: run.record.title,\n responsibility: run.record.content, acceptance: run.record.rationale ?? run.record.content},\n planning: {kind: run.parentKind!, priority: 2, dependencies: [], references: []}});\n for (const [index, reference] of refs.entries()) {\n await once(options, run, 'item-' + index, {type: 'create-item', item: {id: run.itemIds?.[index] ?? 'work-' + index,\n title: run.record.title, responsibility: run.record.content, acceptance: run.record.rationale ?? run.record.content,\n externalRefs: [reference, {system: options.resources.decisionSystem ?? 'kanban-decision', id: run.id}]},\n ...(run.taskKind ? {planning: {kind: run.taskKind, priority: 2, dependencies: [], references: [], ...(group ? {parentId: run.rootItemId} : {})}} : {})});\n }\n if (run.boardId !== run.sourceBoardId) await once(options, run, 'automation', {type: 'configure-automation', settings: {...run.automation, enabled: true, autoAccept: false}});\n if (run.rootItemId && run.boardId === run.sourceBoardId) await once(options, run, 'link-root', {type: 'link-record', recordId: run.recordId, itemId: run.rootItemId});\n}\n\nasync function once(options: Options, run: SavedRun, stage: string, command: KanbanCommand): Promise<void> {\n const key = 'record-stage:' + run.id + ':' + stage;\n await journalCommand(options.journal, options.service, run.boardId, key, command);\n}\nasync function save(options: Options, run: SavedRun): Promise<SavedRun> {\n const rows = await options.journal.update<SavedRun[]>('record-runs:' + run.sourceBoardId, previous => {\n const current = previous ?? [];\n requireValue(current.some(row => row.id === run.id), 'RECORD_EXECUTION_CHECKPOINT_MISSING');\n return current.map(row => row.id !== run.id || row.state === run.state && row.code === run.code ? row : run);\n });\n return rows.find(row => row.id === run.id)!;\n}\n\nfunction view(run: SavedRun): KanbanRecordExecution {\n const {id, recordId, recordRevision, boardId, rootItemId, itemIds, state, createdAt, updatedAt, code} = run;\n return {id, recordId, recordRevision, boardId, ...(rootItemId ? {rootItemId, itemIds} : {}), state, createdAt, updatedAt, ...(code ? {code} : {})};\n}\n\nasync function cancelDecision(options: Options, boardId: string, recordId: string, operationId: string): Promise<void> {\n const record = await options.service.record(boardId, recordId);\n if (record.status !== 'cancelled') await journalCommand(options.journal, options.service, boardId, 'record-cancel:' + JSON.stringify([boardId,recordId,operationId]), {type: 'cancel-record', recordId});\n await options.journal.update<RecordControl>(recordControlKey(boardId, recordId), old => ({...old!, settled: true}));\n}\n\nasync function finishDecisionCancellation(options: Options, boardId: string, recordId: string, operationId: string): Promise<void> {\n const runs = (await options.journal.get<SavedRun[]>('record-runs:' + boardId) ?? []).filter(run => run.recordId === recordId);\n if (runs.some(run => !['completed','failed','cancelled'].includes(run.state))) return;\n const record = await options.service.record(boardId, recordId);\n const control = await options.journal.get<RecordControl>(recordControlKey(boardId, recordId));\n requireValue(control, 'RECORD_CONTROL_ACTIVE');\n const state = await advanceRecordControl(options.service, options.journal, {id: operationId, sourceBoardId: boardId, boardId, recordId, recordRevision: record.revision, itemIds: record.itemIds, state: 'cancelling', createdAt: 0, updatedAt: 0}, control);\n if (state === 'cancelled') await cancelDecision(options, boardId, recordId, operationId);\n}\n","import type {KanbanActor, KanbanService} from '../contracts';\nimport type {KanbanAutomationJournal} from './automation-journal';\nimport {journalCommand} from './journal-command';\n\n/** Completing a composite never starts another execution or substitutes for child acceptance. */\nexport async function completeCompositePlans(service:KanbanService,journal:KanbanAutomationJournal,boardId:string,serviceFor:(actor:KanbanActor)=>KanbanService):Promise<void> {\n const workflow=await service.workflow(boardId),boardSnapshot=await service.read(boardId);\n const roots=new Set(boardSnapshot.items.filter(item=>item.planning?.execution==='children').map(item=>item.id));\n for(const id of roots) {\n const board=await service.read(boardId),parent=board.items.find(item=>item.id===id);\n if(!board.automation||!parent||parent.control?.action==='cancel'||parent.owner||parent.blocked||parent.planning?.execution!=='children'||!['backlog','open'].includes(parent.status))continue;\n if(!await childrenCompleted(service,boardId,id))continue;\n await journalCommand(journal,serviceFor(board.automation.coordinator),boardId,'aggregate-complete:'+id,\n {type:'close-plan',itemId:id,resultRef:'kanban:plans:'+JSON.stringify(Object.values(workflow.plans).filter(plan=>plan.rootItemId===id).map(plan=>plan.id))});\n }\n}\n\nasync function childrenCompleted(service:KanbanService,boardId:string,parentId:string):Promise<boolean> {\n let cursor:string|undefined,count=0;\n do {\n const page=await service.query(boardId,{view:'all',parentId,limit:200,cursor});\n if(page.items.some(item=>item.status!=='completed'))return false;\n count+=page.items.length;cursor=page.nextCursor;\n }while(cursor);\n return count>0;\n}\n","import {sha256HexSync} from '../utils';\nimport {DEFAULT_KANBAN_WORK_TYPES, type KanbanBoard, type KanbanItem, type KanbanService, type KanbanWorkDefinition, type KanbanEstimate} from '../contracts';\nimport type {KanbanAutomationJournal} from './automation-journal';\nimport {requireValue} from '../rules';\n\nexport interface AnalysisSubtask {key:string;title:string;responsibility:string;acceptance:string;dependsOn:string[];estimate?:KanbanEstimate}\ninterface Input {id:string;reason:string;dependencies:string[];subtasks:AnalysisSubtask[]}\nexport function validateSubtasks(value:unknown):AnalysisSubtask[]|undefined {\n if(value===undefined)return;\n requireValue(Array.isArray(value)&&value.length>=2&&value.length<=16,'AUTOMATION_SUBTASKS_INVALID');\n const tasks=value as AnalysisSubtask[],keys=new Set(tasks.map(task=>task?.key));\n requireValue(keys.size===tasks.length,'AUTOMATION_SUBTASKS_INVALID');\n for(const task of tasks) {\n requireValue(task&&typeof task.key==='string'&&/^[a-zA-Z0-9_-]{1,64}$/.test(task.key)&&[task.title,task.responsibility,task.acceptance].every(text=>typeof text==='string'&&text.trim().length>0&&text.length<=8000),'AUTOMATION_SUBTASKS_INVALID');\n requireValue(Array.isArray(task.dependsOn)&&task.dependsOn.length<=16&&new Set(task.dependsOn).size===task.dependsOn.length\n &&task.dependsOn.every(key=>keys.has(key)&&key!==task.key),'AUTOMATION_SUBTASK_DEPENDENCY_INVALID');\n if(task.estimate)requireValue(['low','medium','high'].includes(task.estimate.confidence)&&[task.estimate.complexity,task.estimate.workUnits,task.estimate.durationMs].every(number=>Number.isFinite(number)&&number>0),'AUTOMATION_ESTIMATE_INVALID');\n }\n const pending=[...tasks],done=new Set<string>();\n while(pending.length) {const index=pending.findIndex(task=>task.dependsOn.every(key=>done.has(key)));requireValue(index>=0,'DEPENDENCY_CYCLE');done.add(pending.splice(index,1)[0].key);}\n return tasks;\n}\n/** The model supplies local keys; the host owns stable identities, resource inheritance and publication. */\nexport async function adoptDecomposition(journal:KanbanAutomationJournal, board:KanbanBoard, parent:KanbanItem, input:Input, service:KanbanService, inherited: import('../contracts').KanbanExternalReference[] = []):Promise<void> {\n const types=board.workTypes??DEFAULT_KANBAN_WORK_TYPES,parentRank=types.find(type=>type.id===(parent.planning?.kind??board.defaultWorkType??'task'))?.rank;\n const type=types.filter(type=>type.executable&&parentRank!==undefined&&type.rank>parentRank).sort((a,b)=>a.rank-b.rank)[0];\n requireValue(type,'AUTOMATION_SUBTASK_TYPE_UNAVAILABLE');\n const ids=new Map(input.subtasks.map(task=>[task.key,'sub-'+sha256HexSync(JSON.stringify([input.id,task.key])).slice(0,40)]));\n const definitions:KanbanWorkDefinition[]=input.subtasks.map(task=>({id:ids.get(task.key)!,workType:type.id,title:task.title,responsibility:task.responsibility,acceptance:task.acceptance,\n assignee:board.automation!.worker,externalRefs:inherited,\n dependsOn:[...new Set([...input.dependencies,...task.dependsOn.map(key=>ids.get(key)! )])],outputs:['result']}));\n for(const [index,definition] of definitions.entries()) {\n const estimate=input.subtasks[index].estimate;\n requireValue(board.policy.requireEstimate===false||estimate,'ESTIMATE_REQUIRED');\n if(estimate)await journal.update('decomposition-estimate:'+JSON.stringify([board.id,definition.id]),old=>old??estimate);\n await journal.update('decomposition-status:'+JSON.stringify([board.id,definition.id]),old=>old??{itemId:definition.id,state:'ready',reason:input.reason,dependencies:definition.dependsOn});\n }\n await service.execute(board.id,{operationId:'analysis-plan:'+input.id,expectedRevision:board.revision,command:{type:'publish-plan',plan:{\n schema:'kanban.plan/1',id:input.id,revision:1,sealed:true,rootItemId:parent.id,items:definitions}}});\n}\n","import {sha256HexSync, randomUUID} from '../utils';\nimport type {KanbanAnalysisStatus,KanbanBoard,KanbanItem,KanbanService,KanbanEstimate,KanbanExternalReference} from '../contracts';\nimport {requireValue} from '../rules';\nimport {adoptDecomposition,validateSubtasks,type AnalysisSubtask} from './analysis-decomposition';\nimport type {KanbanAutomationJournal} from './automation-journal';\nimport type {AnalysisJournalEntry} from './analysis-history';\nimport {safeCode} from './diagnostics';\nexport interface AnalysisResult {ready:boolean;dependencies:string[];reason:string;estimate?:KanbanEstimate;subtasks?:AnalysisSubtask[]}\nexport interface KanbanAnalysisObservation {state:'running'|'unknown'|'succeeded'|'failed'|'cancelled';output?:unknown;code?:string}\nexport interface KanbanAnalysisPort<Target = KanbanExternalReference, Input = unknown> {\n prepare(input:{id:string;board:KanbanBoard;item:KanbanItem;target:Target}):Promise<Input>;\n prepareExecution(id:string,input:Input):Promise<void>;\n submit(input:Input):Promise<void>;\n inspect(id:string,input:Input):Promise<KanbanAnalysisObservation>;\n}\ninterface AnalysisJob<Input> extends AnalysisJournalEntry {input:Input;result?:AnalysisResult}\nexport interface KanbanAnalysisOptions<Target = KanbanExternalReference, Input = unknown> {\n journal:KanbanAutomationJournal;port:KanbanAnalysisPort<Target,Input>;active():boolean;\n inheritReferences?(references:readonly KanbanExternalReference[]):KanbanExternalReference[];\n onSettled?(input:{boardId:string;id:string;item:KanbanItem;request:Input;outcome:'succeeded'|'failed'|'cancelled';code?:string}):Promise<void>;\n log(input:{operationId:string;stage:string;result:'success'|'failure';code?:string;durationMs:number}):void;\n}\nconst keyFor = (board: string, item: string) => 'analysis-current:' + JSON.stringify([board, item]);\nexport async function analysisStatus<Input = unknown>(journal: KanbanAutomationJournal, board: string, item: string): Promise<KanbanAnalysisStatus | null> {\n const key = await journal.get<string>(keyFor(board, item));\n return key ? (await journal.get<AnalysisJob<Input>>(key))?.status ?? null : await journal.get<KanbanAnalysisStatus>('decomposition-status:'+JSON.stringify([board,item]))??null;\n}\nexport function analysisSignature(board: KanbanBoard): string {\n return sha256HexSync(JSON.stringify([board.automation, board.items.map(item => [item.id, item.title, item.responsibility, item.acceptance, item.planning])]));\n}\nexport async function analyzeItem<Target, Input>(options: KanbanAnalysisOptions<Target, Input>, board: KanbanBoard, item: KanbanItem, target: Target | undefined, service: KanbanService): Promise<void> {\n const started = Date.now();\n if (!options.active()) return;\n const loaded = await loadJob(options, board, item, target);\n if (!loaded || !options.active()) return;\n const {key} = loaded; let {job} = loaded;\n if (job.phase === 'prepared') job = await submitAnalysis(options, key, job);\n if (!options.active()) return;\n if (job.phase === 'submitting') job = await observeAnalysis(options, key, job);\n job = await finalizeAnalysis(options, board.id, item, key, job);\n if (job.result?.ready && job.status.state === 'ready' && !board.executionControl?.paused && board.automation?.enabled && options.active()) {\n try {await adoptAnalysis(options.journal, board, item, job, service, options.inheritReferences?.(item.externalRefs ?? []) ?? []);}\n catch (error) {await saveFailure(options, key, job, safeCode(error, 'AUTOMATION_PLAN_REJECTED'));}\n }\n if (!options.active()) return;\n const status = (await options.journal.get<AnalysisJob<Input>>(key))?.status;\n if (status) {\n const currentBoard = await service.read(board.id), currentItem = currentBoard.items.find(i => i.id === item.id)!;\n if (currentItem.control?.action === 'cancel' || ['completed','cancelled'].includes(currentItem.status)) return;\n if (JSON.stringify(currentItem.analysis) !== JSON.stringify(status)) await service.execute(board.id, {operationId:'analysis-status:'+job.id+':'+sha256HexSync(JSON.stringify(status)), expectedRevision:currentBoard.revision, command:{type:'report-analysis',itemId:item.id,operationId:job.id,status}});\n }\n options.log({operationId: job.id, stage: 'automation.analysis', result: status?.state === 'failed' || status?.state === 'unknown' ? 'failure' : 'success', code: status?.code, durationMs: Date.now() - started});\n}\nasync function finalizeAnalysis<Target, Input>(options: KanbanAnalysisOptions<Target, Input>, boardId: string, item: KanbanItem, key: string, job: AnalysisJob<Input>): Promise<AnalysisJob<Input>> {\n if (!options.active() || job.phase !== 'settled' || !options.onSettled) return job;\n try {\n await options.onSettled({boardId, id: job.id, item, request: job.input,\n outcome: job.terminalOutcome ?? (job.status.state === 'failed' ? 'failed' : 'succeeded'), code: job.status.code});\n return job;\n } catch (error) {return options.active() ? saveFailure(options, key, job, safeCode(error, 'AUTOMATION_ANALYSIS_FINALIZATION_FAILED')) : job;}\n}\nasync function loadJob<Target, Input>(options: KanbanAnalysisOptions<Target, Input>, board: KanbanBoard, item: KanbanItem, target?: Target) {\n requireValue(board.items.length <= 200, 'AUTOMATION_CONTEXT_LIMIT');\n const signature = analysisSignature(board), currentKey = await options.journal.get<string>(keyFor(board.id, item.id));\n const currentJob = currentKey ? await options.journal.get<AnalysisJob<Input>>(currentKey) : undefined;\n if (!board.automation?.enabled && currentJob?.phase !== 'submitting') return;\n const key = currentJob?.phase === 'submitting' ? currentKey! : 'analysis:' + sha256HexSync(JSON.stringify([board.id, item.id, item.launch?.requestedAt, item.launch?.analysisEpoch, signature]));\n let job = await options.journal.get<AnalysisJob<Input>>(key);\n if (!job) {\n requireValue(target, 'AUTOMATION_TARGET_CHANGED');\n const id = await options.journal.update<string>('analysis-identity:' + key, old => old ?? randomUUID());\n const input = await options.port.prepare({id, board, item, target});\n const candidate: AnalysisJob<Input> = {id,signature,itemRevision:item.revision,phase:'prepared',status:{itemId:item.id,state:'analyzing'},input};\n job = await options.journal.update<AnalysisJob<Input>>(key, previous => previous ?? candidate);\n }\n if (!options.active()) return;\n if (currentKey !== key) await options.journal.update<{keys: string[]; indexed?: boolean}>('analysis-history:' + JSON.stringify([board.id, item.id]), old =>\n ({...old, keys: [...new Set([...old?.keys ?? [], ...currentKey ? [currentKey] : [], key])]}));\n await options.journal.update(keyFor(board.id, item.id), () => key);\n if (!options.active()) return;\n return {key, job};\n}\n\nasync function submitAnalysis<Target,Input>(options:KanbanAnalysisOptions<Target,Input>,key:string,job:AnalysisJob<Input>):Promise<AnalysisJob<Input>> {\n try {await options.port.prepareExecution(job.id,job.input);}\n catch(error){return options.active()?saveFailure(options,key,job,safeCode(error,'AUTOMATION_ANALYSIS_PREPARE_FAILED')):job;}\n if(!options.active())return job;\n const claimed=await options.journal.claim(key),latest=(await options.journal.get<AnalysisJob<Input>>(key))!;\n if(!claimed||!options.active())return latest;\n try {await options.port.submit(job.input);}\n catch{return options.active()?options.journal.update<AnalysisJob<Input>>(key,current=>current!.phase==='submitting'?{...current!,status:{...job.status,state:'unknown',code:'AUTOMATION_ADMISSION_UNKNOWN'}}:current!):latest;}\n return latest;\n}\nasync function observeAnalysis<Target,Input>(options:KanbanAnalysisOptions<Target,Input>,key:string,job:AnalysisJob<Input>):Promise<AnalysisJob<Input>> {\n const observation=await options.port.inspect(job.id,job.input);\n if(!options.active()||observation.state==='running')return job;\n if(observation.state==='unknown')return options.journal.update<AnalysisJob<Input>>(key,current=>current!.phase==='submitting'?{...current!,status:{...job.status,state:'unknown',code:observation.code??'AUTOMATION_ADMISSION_UNKNOWN'}}:current!);\n if(observation.state==='failed'||observation.state==='cancelled')return saveFailure(options,key,job,observation.code??'AUTOMATION_ANALYSIS_FAILED',observation.state);\n try {\n requireValue(observation.output!==undefined,'AUTOMATION_ANALYSIS_INVALID');const analysis=parseAnalysis(observation.output);\n return options.journal.update<AnalysisJob<Input>>(key,current=>({...current!,phase:'settled',result:analysis,status:{itemId:job.status.itemId,state:analysis.ready?'ready':'clarification',reason:analysis.reason,dependencies:analysis.dependencies}}));\n }catch(error){return saveFailure(options,key,job,safeCode(error,'AUTOMATION_ANALYSIS_INVALID'));}\n}\nasync function saveFailure<Target,Input>(options:KanbanAnalysisOptions<Target,Input>,key:string,job:AnalysisJob<Input>,code:string,terminalOutcome:'failed'|'cancelled'='failed'):Promise<AnalysisJob<Input>> {\n return options.journal.update<AnalysisJob<Input>>(key,current=>({...current!,phase:'settled',terminalOutcome,status:{itemId:job.status.itemId,state:'failed',code}}));\n}\nexport function parseAnalysis(output: unknown): AnalysisResult {\n const result = output as AnalysisResult;\n requireValue(result && typeof result.ready === 'boolean' && typeof result.reason === 'string' && result.reason.length > 0 && result.reason.length <= 8000, 'AUTOMATION_ANALYSIS_INVALID');\n requireValue(Array.isArray(result.dependencies) && result.dependencies.length <= 100 && result.dependencies.every(id => typeof id === 'string' && id.length > 0 && id.length <= 256), 'AUTOMATION_DEPENDENCIES_INVALID');\n if (result.estimate) requireValue(['low', 'medium', 'high'].includes(result.estimate.confidence)\n && [result.estimate.complexity, result.estimate.workUnits, result.estimate.durationMs].every(value => Number.isFinite(value) && value > 0), 'AUTOMATION_ESTIMATE_INVALID');\n const subtasks=validateSubtasks(result.subtasks);\n return {ready: result.ready, reason: result.reason, dependencies: [...new Set(result.dependencies)], ...(subtasks?{subtasks}:{}), ...(result.estimate ? {estimate: result.estimate} : {})};\n}async function adoptAnalysis<Input>(journal:KanbanAutomationJournal, snapshot: KanbanBoard, item: KanbanItem, job: AnalysisJob<Input>, service: KanbanService, inherited: KanbanExternalReference[]): Promise<void> {\n if ((await service.workflow(snapshot.id)).plans[job.id]) return;\n const board = await service.read(snapshot.id), current = board.items.find(candidate => candidate.id === item.id);\n requireValue(board.automation?.enabled && current && analysisSignature(board) === job.signature, 'AUTOMATION_ANALYSIS_STALE');\n requireValue(board.policy.requireEstimate === false || job.result?.estimate, 'ESTIMATE_REQUIRED');\n const dependencies = [...new Set([...(item.planning?.dependencies ?? []), ...job.result!.dependencies])];\n if(job.result?.subtasks?.length) return adoptDecomposition(journal,board,item,{id:job.id,reason:job.result.reason,dependencies,subtasks:job.result.subtasks},service,inherited);\n await service.execute(board.id, {operationId: 'analysis-plan:' + job.id, expectedRevision: board.revision, command: {type: 'publish-plan', plan: {\n schema: 'kanban.plan/1', id: job.id, revision: 1, sealed: true,\n items: [{id: item.id, title: item.title, responsibility: item.responsibility, acceptance: item.acceptance,\n expectedRevision: current!.revision, assignee: board.automation.worker, dependsOn: dependencies, outputs: ['result']}],\n }}});\n}\n","import type {IFileSystem} from '@nestos/vfs-core';\nimport {boardAllowsStart,executableWorkItem,type KanbanActor,type KanbanBoard,type KanbanItem,type KanbanService,type KanbanArtifactRef,type KanbanAutomationCatalog} from '../contracts';\nimport {taskDue} from '../contracts/task-projection';\nimport {createKanbanExecutionBridge,type KanbanExecutionPort,type KanbanExecutionBridgeOptions} from '../execution';\nimport type {KanbanAutomationJournal} from './automation-journal';\nimport type {KanbanWorkLog} from './work-log';\nimport type {KanbanRuntimeDiagnostic} from './ports';\nimport {completeCompositePlans} from './analysis-aggregation';\nimport {analysisStatus} from './analysis';\nimport {safeCode} from './diagnostics';\nimport {requireValue} from '../rules';\nexport interface KanbanExecutorContext {\n boardId:string;service:KanbanService;\n dependencies(item:KanbanItem):Promise<unknown>;\n}\nexport interface KanbanAutomationOptions {\n fs:IFileSystem;directory:string;service:KanbanService;journal:KanbanAutomationJournal;workLog?:KanbanWorkLog;\n serviceFor(actor:KanbanActor):KanbanService;\n catalog():Promise<KanbanAutomationCatalog>;\n executor(context:KanbanExecutorContext):Promise<KanbanExecutionPort>;\n analyze?(board:KanbanBoard,item:KanbanItem,service:KanbanService,active:()=>boolean):Promise<void>;\n controls?(board:KanbanBoard,service:KanbanService):Promise<void>;\n drain?(board:KanbanBoard,service:KanbanService):Promise<void>;\n executionReference?:KanbanExecutionBridgeOptions['executionReference'];\n log(event:KanbanRuntimeDiagnostic & {result:'success'|'failure'}):void;\n}\ntype Bridge=Awaited<ReturnType<typeof createKanbanExecutionBridge>>;\nexport function createKanbanAutomation(options:KanbanAutomationOptions) {\n let stopped=false,pending:Promise<void>|undefined;const bridges=new Map<string,Bridge>();\n const scan=()=>stopped?Promise.resolve():pending??=scanBoards(options,bridges,()=>!stopped).finally(()=>{pending=undefined;});\n return {scan,async quiesce(){\n stopped=true;await Promise.allSettled([...bridges.values()].map(bridge=>bridge.quiesce()));\n let timer:ReturnType<typeof setTimeout>|undefined;\n try{await Promise.race([pending?.catch(()=>{}),new Promise<void>(resolve=>{timer=setTimeout(resolve,5000);})]);}\n finally{if(timer)clearTimeout(timer);await options.journal.drain();}\n },automationCatalog:()=>{requireValue(!stopped,'SERVICE_STOPPING');return options.catalog();},\n analysisStatus:async(board:string,item:string)=>(await options.service.item(board,item)).item.analysis??analysisStatus(options.journal,board,item),\n verifyOutputs:(outputs:KanbanArtifactRef[])=>options.journal.verify(outputs)};\n}\nasync function scanBoards(options:KanbanAutomationOptions,bridges:Map<string,Bridge>,active:()=>boolean):Promise<void> {\n const errors:unknown[]=[];\n for(const entry of await options.service.catalog()) {\n if(!active())return;\n const started=Date.now();\n try {\n const board=await options.service.read(entry.id);if(!active())return;\n if(!board.automation){await options.controls?.(board,options.service);continue;}\n const service=options.serviceFor(board.automation.coordinator);\n let bridge=bridges.get(board.id);if(!bridge){bridge=await createBridge(options,board.id);bridges.set(board.id,bridge);}\n if(!active()){await bridge.quiesce();return;}\n await options.controls?.(board,service);if(!active())return;await bridge.scan();if(!active())return;\n await options.drain?.(await service.read(board.id),service);\n await planNext(options,await service.read(board.id),active);\n if(active())await bridge.scan();\n if(active())await completeCompositePlans(options.service,options.journal,board.id,options.serviceFor);\n options.log({operationId:board.id,boardId:board.id,stage:'automation.scan',result:'success',durationMs:Date.now()-started});\n }catch(error){errors.push(error);options.log({operationId:entry.id,boardId:entry.id,stage:'automation.scan',result:'failure',code:safeCode(error,'AUTOMATION_SCAN_FAILED'),durationMs:Date.now()-started});}\n }\n if(errors.length)throw new AggregateError(errors,'KANBAN_AUTOMATION_FAILED');\n}\nasync function planNext(options:KanbanAutomationOptions,board:KanbanBoard,active:()=>boolean):Promise<void> {\n if(!options.analyze)return;\n const workflow=await options.service.workflow(board.id),planned=new Set(Object.values(workflow.plans).flatMap(plan=>plan.itemIds));\n const candidates=board.items.filter(item=>!planned.has(item.id)&&['backlog','open'].includes(item.status)&&!item.owner&&!item.blocked\n &&boardAllowsStart(board,item)&&!['failed','clarification'].includes(item.analysis?.state??'')&&executableWorkItem(board,item)\n &&(!item.control||item.control.action==='resume'&&item.control.state==='resumed')&&(item.launch?.admittedAt!==undefined||taskDue(item,Date.now())));\n for(const item of candidates) {\n if(!active())return;if(!await dependenciesComplete(options.service,board,item))continue;\n const service=options.serviceFor(board.automation!.coordinator);\n if(item.launch?.admittedAt===undefined){if(!await admit(options,board,item,service))return;board=await service.read(board.id);Object.assign(item,board.items.find(row=>row.id===item.id));}\n try{await options.analyze(board,item,service,active);}\n catch(error){\n const latest=await service.read(board.id),code=safeCode(error,'AUTOMATION_ANALYSIS_PREPARATION_FAILED');\n await service.execute(board.id,{operationId:'analysis-prepare-failed:'+item.id+':'+item.revision,expectedRevision:latest.revision,command:{type:'report-analysis',itemId:item.id,operationId:item.id,status:{itemId:item.id,state:'failed',code}}});\n options.log({operationId:item.id,boardId:board.id,stage:'automation.analysis.prepare',result:'failure',code,durationMs:0});\n }\n const status=await analysisStatus(options.journal,board.id,item.id);\n if(status&&['analyzing','unknown','ready'].includes(status.state))return;\n }\n}\nasync function admit(_options:KanbanAutomationOptions,board:KanbanBoard,item:KanbanItem,service:KanbanService):Promise<boolean> {\n const latest=await service.read(board.id);\n try{await service.execute(board.id,{operationId:'admit:'+item.id+':'+item.revision,expectedRevision:latest.revision,command:{type:'admit-item',itemId:item.id,trigger:item.launch?.requestedAt!==undefined?'manual':'automatic'}});return true;}\n catch(error){if(['REVISION_CONFLICT','TASK_DEFINITION_FROZEN','EDIT_LEASE_ACTIVE'].includes(safeCode(error,'')))return false;throw error;}\n}\nasync function createBridge(options:KanbanAutomationOptions,boardId:string):Promise<Bridge> {\n const board=await options.service.read(boardId),service=options.serviceFor(board.automation!.coordinator);\n const executor=await options.executor({boardId,service,dependencies:item=>dependencyResults(options,boardId,item)});\n return createKanbanExecutionBridge({fs:options.fs,directory:options.directory+'/'+encodeURIComponent(boardId),boardId,service,\n worker:async actor=>options.serviceFor(actor),executor,executionReference:options.executionReference,\n autoDispatch:async()=>(await options.service.read(boardId)).automation?.enabled===true,\n estimate:item=>estimateFor(options.journal,boardId,item),\n authorize:async stage=>{const latest=await options.service.read(boardId);if(stage!=='inspect'){requireValue(latest.automation?.enabled,'AUTOMATION_PAUSED');requireValue(!latest.executionControl?.paused,'BOARD_EXECUTION_PAUSED');}},\n log:event=>options.log({...event,boardId})});\n}\nasync function estimateFor(journal: KanbanAutomationJournal, boardId: string, item: KanbanItem) {\n const decomposed=await journal.get<import('../contracts').KanbanEstimate>('decomposition-estimate:'+JSON.stringify([boardId,item.id]));\n if(decomposed)return decomposed;\n const key = await journal.get<string>('analysis-current:' + JSON.stringify([boardId, item.id]));\n return key ? (await journal.get<{result?: {estimate?: import('../contracts').KanbanEstimate}}>(key))?.result?.estimate : undefined;\n}\nexport async function dependencyResults(options: KanbanAutomationOptions, boardId: string, item: KanbanItem): Promise<unknown> {\n const workflow = await options.service.workflow(boardId), results: Array<{itemId: string; outputs: Array<{reference: KanbanArtifactRef; value: unknown}>}> = [];\n for (const itemId of item.planning?.dependencies ?? []) {\n const dispatch = Object.values(workflow.dispatches).reverse().find(dispatch => dispatch.itemId === itemId && dispatch.outcome === 'accepted');\n const outputs: Array<{reference: KanbanArtifactRef; value: unknown}> = [];\n for (const output of dispatch?.outputs ?? []) {\n requireValue(await options.journal.verify(dispatch?.outputs ?? [], dispatch?.id), 'DEPENDENCY_OUTPUT_INVALID');\n outputs.push({reference: output, value: JSON.parse((await options.journal.get<string>('artifact:' + output.sha256))!)});\n }\n results.push({itemId, outputs});\n }\n requireValue(new TextEncoder().encode(JSON.stringify(results)).byteLength <= 128 * 1024, 'DEPENDENCY_CONTEXT_TOO_LARGE');\n return results;\n}\n\nasync function dependenciesComplete(service:KanbanService,board:KanbanBoard,item:KanbanItem):Promise<boolean> {\n for(const id of item.planning?.dependencies??[]) {\n const dependency=board.items.find(i=>i.id===id)??(await service.item(board.id,id)).item;\n if(dependency.status!=='completed')return false;\n }\n return true;\n}\n","import {sha256HexSync} from '../utils';\nimport type {KanbanAnalysisStatus} from '../contracts';\nimport type {KanbanAutomationJournal} from './automation-journal';\nexport interface AnalysisJournalEntry {id:string;itemRevision:number;signature:string;phase:'prepared'|'submitting'|'settled';status:KanbanAnalysisStatus;terminalOutcome?:'succeeded'|'failed'|'cancelled'}\n/** Rebuild legacy history once; the hash proves board/item scope even when item IDs overlap. */\nexport async function analysisHistory<T extends AnalysisJournalEntry = AnalysisJournalEntry>(journal: KanbanAutomationJournal, boardId: string, itemId: string) {\n const key = 'analysis-history:' + JSON.stringify([boardId, itemId]);\n let saved = await journal.get<{keys: string[]; indexed?: boolean}>(key);\n if (!saved?.indexed) {\n const rows = await journal.find<T>('analysis:', (job, entryKey) => job.status?.itemId === itemId\n && entryKey === 'analysis:' + sha256HexSync(JSON.stringify([boardId, itemId, job.itemRevision, job.signature])));\n saved = await journal.update<{keys: string[]; indexed?: boolean}>(key, old =>\n ({keys: [...new Set([...old?.keys ?? [], ...rows.map(row => row.key)])], indexed: true}));\n }\n const jobs = await journal.getMany<T>(saved.keys);\n return jobs.filter((job): job is T => !!job);\n}\n","import type {KanbanAutomationJournal} from './automation-journal';\nimport type {KanbanRuntimeDiagnostic} from './ports';\nexport function runtimeLogger(journal: KanbanAutomationJournal) {\n const emit = (_message: string, event: KanbanRuntimeDiagnostic) => journal.diagnostic(event);\n return {info: emit, warn: emit};\n}\n","import {runtimeLogger} from './logging';\nimport {randomUUID, sha256HexSync} from '../utils';\nimport type {KanbanClient, KanbanDeletionPreview} from '../contracts';\nimport type {KanbanAutomationJournal} from './automation-journal';\nimport {safeCode} from './diagnostics';\nimport {analysisHistory} from './analysis-history';\nimport {requireValue} from '../rules';\n\nexport interface Options {service: KanbanClient; journal: KanbanAutomationJournal}\ntype Blocker = KanbanDeletionPreview['blockers'][number];\nconst settled = new Set(['idle', 'completed', 'failed', 'cancelled']);\n\nexport async function boardDeletionBlockers({service, journal}: Options, boardId: string, items?: Array<{id: string; title: string}>): Promise<Blocker[]> {\n const board = await service.read(boardId), workflow = await service.workflow(boardId), rows: Blocker[] = [];\n for (const item of board.items) if (!['completed','cancelled'].includes(item.status) && (item.owner || item.transfer || item.status === 'claimed')) rows.push({code: 'BOARD_EXECUTION_ACTIVE', itemId: item.id});\n for (const item of board.items) if (item.control?.action === 'cancel' && item.control.state !== 'cancelled' && !['completed','cancelled'].includes(item.status)) rows.push({code:'BOARD_CONTROL_UNSETTLED',itemId:item.id});\n for (const dispatch of Object.values(workflow.dispatches)) if (['prepared', 'running', 'unknown', 'succeeded'].includes(dispatch.outcome)) rows.push({code: 'BOARD_EXECUTION_UNSETTLED', itemId: dispatch.itemId});\n const reviews = await journal.findForBoard<{boardId: string; itemId: string; phase: string}>('review-operation:', boardId, job => job.boardId === boardId && job.phase !== 'settled');\n rows.push(...reviews.map(({value}) => ({code: 'BOARD_MAINTENANCE_ACTIVE', itemId: value.itemId})));\n const runs = await journal.findForBoard<Array<{sourceBoardId: string; boardId: string; state: string}>>('record-runs:', boardId, runs => runs.some(run => (run.sourceBoardId === boardId || run.boardId === boardId) && !['completed', 'failed', 'cancelled'].includes(run.state)));\n if (runs.length) rows.push({code: 'BOARD_DECISION_UNSETTLED'});\n rows.push(...await pendingCollaboration(journal, boardId));\n rows.push(...(await inspectItems(items ?? await deletionItems(service, boardId), item => itemBlockers(service, journal, boardId, item.id))).flat());\n return [...new Map(rows.map(row => [JSON.stringify([row.code, row.itemId, row.sessionId]), row])).values()];\n}\n\nexport async function deletionPreview(options: Options, boardId: string): Promise<KanbanDeletionPreview> {\n const {service} = options;\n const board = await service.read(boardId), actor = await service.currentPrincipal();\n requireValue(board.deletedAt === undefined, 'BOARD_DELETED');\n requireValue(actor.kind === 'human' && board.members?.some(row => row.kind === actor.kind && row.id === actor.id && row.roles?.includes('coordinator')), 'COORDINATOR_REQUIRED');\n const items = await deletionItems(service, boardId), itemTitles = Object.fromEntries(items.map(item => [item.id, item.title]));\n const operationId = randomUUID();\n const blockers = await inspectionStage(operationId, 'local-and-sessions', () => boardDeletionBlockers(options, boardId, items), options.journal);\n const resources = (await inspectionStage(operationId, 'work-resources', () => inspectItems(items, async item =>\n (await service.workResources?.(boardId, item.id) ?? []).map(resource => ({itemId: item.id, resource}))), options.journal)).flat();\n for (const {itemId, resource} of resources) if (resource.state === 'in-use' && resource.ownership !== 'other' && resource.ownership !== 'unknown' && !blockers.some(row => row.code === 'BOARD_EXECUTION_ACTIVE' && row.itemId === itemId)) blockers.push({code: 'BOARD_EXECUTION_ACTIVE', itemId});\n const result = {...(board.lifecycle?.intent === 'delete' ? {pendingDeletion:{operationId:board.lifecycle.operationId,mode:board.lifecycle.mode,phase:board.lifecycle.phase,code:board.lifecycle.code}} : {}), boardId, title: board.title, revision: board.revision, itemTitles, blockers, pendingItems: board.items.filter(item => !['completed', 'cancelled'].includes(item.status)).length, resources};\n requireValue((await service.read(boardId)).revision === board.revision, 'REVISION_CONFLICT');\n return {...result, version: sha256HexSync(JSON.stringify(result))};\n}\n\nasync function deletionItems(service: KanbanClient, board: string): Promise<Array<{id: string; title: string}>> {\n const items: Array<{id: string; title: string}> = []; let cursor: string | undefined;\n do {const page = await service.query(board, {view: 'all', includeDeleted: true, limit: 200, ...(cursor ? {cursor} : {})});\n items.push(...page.items.map(({id, title}) => ({id, title}))); cursor = page.nextCursor;\n requireValue(items.length <= 10000, 'BOARD_DELETE_RESOURCE_LIMIT');\n } while (cursor);\n return items;\n}\nasync function itemBlockers(service: KanbanClient, journal: KanbanAutomationJournal, board: string, item: string): Promise<Blocker[]> {\n const rows: Blocker[] = [];\n if ((await analysisHistory(journal, board, item)).some(job => job.phase !== 'settled')) rows.push({code: 'BOARD_ANALYSIS_UNSETTLED', itemId: item});\n if (!service.executionSession) return rows;\n const detail = await service.executionSession(board, item, {includeRelated: true});\n if (detail.sessionsCode) rows.push({code: detail.sessionsCode, itemId: item});\n for (const session of detail.sessions ?? []) {\n if (session.purposes?.every(purpose => purpose === 'discussion')) continue;\n const executions = session.executions.filter(run => run.purpose !== 'discussion');\n const pending = executions.length && executions.every(run => run.state) ? executions.some(run => !settled.has(run.state!)) : !settled.has(session.state);\n if (session.stale || pending) rows.push({code: 'BOARD_SESSION_UNSETTLED', itemId: item, sessionId: session.sessionId});\n }\n return rows;\n}\n\nasync function pendingCollaboration(journal: KanbanAutomationJournal, boardId: string): Promise<Blocker[]> {\n const [fixes, replies] = await Promise.all([\n journal.findForBoard<{itemId: string; accepted?: boolean; state?: string}>('fix:', boardId, fix => !fix.accepted && fix.state !== 'cancelled'),\n journal.findForBoard<{request: {itemId: string}; phase?:string}>('task-reply:', boardId, () => true),\n ]);\n const delivered = await journal.getMany(replies.map(row => 'task-reply-delivered:' + row.key.slice('task-reply:'.length)));\n const cancelled = await journal.getMany(replies.map(row => 'task-reply-cancelled:' + row.key.slice('task-reply:'.length)));\n return [...fixes.map(({value}) => ({code: 'BOARD_FIX_UNSETTLED', itemId: value.itemId})),\n ...replies.filter((_, index) => (!delivered[index] || replies[index].value.phase === 'cancelling') && !cancelled[index]).map(({value}) => ({code: 'BOARD_REPLY_UNSETTLED', itemId: value.request.itemId}))];\n}\n/** Bound remote pressure, preserve order, and drain workers before propagating failures. */\nasync function inspectItems<T, R>(items: T[], run: (item: T) => Promise<R>): Promise<R[]> {\n const results: R[] = []; let next = 0, stopped = false;\n const workers = Array.from({length: Math.min(4, items.length)}, async () => {\n while (!stopped && next < items.length) {\n const index = next++;\n try {results[index] = await run(items[index]);} catch (error) {stopped = true; throw error;}\n }\n });\n const settled = await Promise.allSettled(workers), failed = settled.find(row => row.status === 'rejected');\n if (failed?.status === 'rejected') throw failed.reason;\n return results;\n}\nasync function inspectionStage<T>(operationId: string, stage: string, run: () => Promise<T>, journal: KanbanAutomationJournal): Promise<T> {\n const log = runtimeLogger(journal);\n const started = Date.now();\n try {const result = await run(); log.info('board.deletion.inspect', {operation: 'kanban.board.delete', operationId, stage, result: 'success', durationMs: Date.now() - started}); return result;}\n catch (error) {log.warn('board.deletion.inspect', {operation: 'kanban.board.delete', operationId, stage, result: 'failure', code: safeCode(error, 'BOARD_INSPECTION_FAILED'), durationMs: Date.now() - started}); throw error;}\n}\n","import {runtimeLogger} from './logging';\nimport {sha256HexSync} from '../utils';\nimport type {KanbanBoard, KanbanDeletionRequest} from '../contracts';\nimport type {Options} from './board-deletion-inspection';\nimport {deletionPreview} from './board-deletion-inspection';\nimport {journalCommand} from './journal-command';\nimport {requireValue} from '../rules';\nimport {safeCode} from './diagnostics';\ntype Lifecycle = NonNullable<KanbanBoard['lifecycle']>;\ninterface Request {operationId:string;expectedRevision:number;cleanup?:boolean;mode?:'drain'|'cancel';version?:string}\ninterface Saved {boardId:string;principalId:string;intent:Lifecycle['intent'];request:Request;phase:'prepared'|'admitted'|'done'}\nconst keyFor = (board:string) => 'board-stop:' + board;\nexport function createBoardStop(options: Options, remove: (board:string,request:KanbanDeletionRequest)=>Promise<void>) {\n const log = runtimeLogger(options.journal);\n return {\n cancelBoard: (board:string,request:{operationId:string;expectedRevision:number}) => requestStop(options,board,{...request,mode:'cancel'},'cancel'),\n requestBoardDeletion: (board:string,request:KanbanDeletionRequest & {mode:'drain'|'cancel'}) => requestStop(options,board,request,'delete'),\n preparePending: async () => {\n for (const row of await pending(options)) {\n const started=Date.now();\n try {await admit(options,row.value);} catch(error) {log.warn('Board stop admission pending',{operation:'kanban.board.stop',operationId:row.value.request.operationId,boardId:row.value.boardId,stage:'admit',result:'failure',code:safeCode(error,'BOARD_STOP_ADMISSION_UNKNOWN'),durationMs:Date.now()-started});}\n }\n },\n resumePending: async () => {\n for (const row of await pending(options)) {\n const started=Date.now(), saved=row.value;\n try {\n if ((await options.service.read(saved.boardId)).deletedAt !== undefined) {await done(options,saved);continue;}\n if ((await authorize(options,saved)).lifecycle?.operationId !== saved.request.operationId) continue;\n const preview=await deletionPreview(options,saved.boardId);\n if (preview.blockers.length) {await progress(options,saved,'blocked',preview.blockers[0].code);continue;}\n await progress(options,saved,'ready');\n if (saved.intent === 'cancel') {await done(options,saved);continue;}\n const current=await deletionPreview(options,saved.boardId);\n await remove(saved.boardId,{operationId:sha256HexSync(JSON.stringify([saved.request.operationId,current.version])),expectedRevision:current.revision,version:current.version,cleanup:saved.request.cleanup===true});\n await done(options,saved);\n log.info('Deferred board deletion completed',{operation:'kanban.board.stop',operationId:saved.request.operationId,boardId:saved.boardId,stage:'delete',result:'success',durationMs:Date.now()-started});\n } catch(error) {\n const code=safeCode(error,'BOARD_DELETION_UNKNOWN');\n await progress(options,saved,'blocked',code).catch(()=>{});\n log.warn('Deferred board deletion pending',{operation:'kanban.board.stop',operationId:saved.request.operationId,boardId:saved.boardId,stage:'settle',result:'failure',code,durationMs:Date.now()-started});\n }\n }\n },\n };\n}\nfunction pending({journal}:Options) {return journal.find<Saved>('board-stop:',value=>value.phase!=='done');}\nasync function authorize(options:Options,saved:Pick<Saved,'boardId'|'principalId'>):Promise<KanbanBoard> {\n const board=await options.service.read(saved.boardId),actor=await options.service.currentPrincipal();\n requireValue(actor.kind==='human'&&actor.id===saved.principalId&&board.members?.some(member=>member.kind===actor.kind&&member.id===actor.id&&member.roles?.includes('coordinator')),'COORDINATOR_REQUIRED');\n return board;\n}\nasync function requestStop(options:Options,boardId:string,request:Request,intent:Lifecycle['intent']):Promise<void> {\n requireValue(/^[\\w-]{1,128}$/.test(request.operationId) && Number.isSafeInteger(request.expectedRevision),'INVALID_OPERATION_ID');\n if (intent === 'delete') requireValue(typeof request.cleanup === 'boolean' && ['drain','cancel'].includes(request.mode ?? '') && /^[a-f0-9]{64}$/.test(request.version ?? ''),'INVALID_BOARD_CONTROL');\n const actor=await options.service.currentPrincipal(),board=await authorize(options,{boardId,principalId:actor.id});\n const old=await options.journal.get<Saved>(keyFor(boardId));\n if (old?.request.operationId===request.operationId) {requireValue(old.intent===intent&&JSON.stringify(old.request)===JSON.stringify(request),'IDEMPOTENCY_CONFLICT');if(old.phase!=='done')await admit(options,old);return;}\n requireValue(board.deletedAt===undefined,'BOARD_DELETED');\n requireValue(!old||old.intent==='cancel'&&intent==='delete','BOARD_STOP_PENDING');\n requireValue(board.revision===request.expectedRevision,'REVISION_CONFLICT');\n if(intent==='delete'){const preview=await deletionPreview(options,boardId);requireValue(preview.version===request.version,'BOARD_DELETE_PREVIEW_CHANGED');}\n const saved=await options.journal.update<Saved>(keyFor(boardId),current=>{\n requireValue(!current||current.request.operationId===old?.request.operationId,'BOARD_STOP_PENDING');\n return {boardId,principalId:actor.id,intent,request:structuredClone(request),phase:'prepared'};\n });\n await admit(options,saved);\n}\nasync function admit(options:Options,saved:Saved):Promise<void> {\n if(saved.phase!=='prepared')return;\n const board=await authorize(options,saved);\n if(board.deletedAt!==undefined){await done(options,saved);return;}\n await journalCommand(options.journal,options.service,saved.boardId,'board-stop-admit:'+JSON.stringify([saved.boardId,saved.request.operationId]),\n {type:'request-board-stop',controlId:saved.request.operationId,intent:saved.intent,mode:saved.request.mode??'cancel'});\n await options.journal.update<Saved>(keyFor(saved.boardId),old=>old?.request.operationId === saved.request.operationId ? {...old,phase:'admitted'} : old!);\n}\nasync function progress(options:Options,saved:Saved,phase:Lifecycle['phase'],code?:string):Promise<void> {\n const board=await authorize(options,saved);\n if(board.deletedAt!==undefined||board.lifecycle?.operationId!==saved.request.operationId||board.lifecycle?.phase===phase&&board.lifecycle.code===code)return;\n await journalCommand(options.journal,options.service,saved.boardId,'board-stop-progress:'+JSON.stringify([saved.boardId,saved.request.operationId,board.revision,phase,code??'']),\n {type:'observe-board-stop',controlId:saved.request.operationId,phase,code});\n}\nasync function done(options:Options,saved:Saved) {await options.journal.update<Saved>(keyFor(saved.boardId),old=>old?.request.operationId === saved.request.operationId ? {...old,phase:'done'} : old!);}\n","import type {KanbanAutomationJournal} from './automation-journal';\nimport {runtimeLogger} from './logging';\nimport {createBoardStop} from './board-stop';\nimport {randomUUID, sha256HexSync} from '../utils';\nimport type {KanbanClient, KanbanDeletionPreview, KanbanDeletionRequest} from '../contracts';\nimport {KanbanError} from '../ports';\nimport {requireValue} from '../rules';\nimport {safeCode} from './diagnostics';\nimport {boardDeletionBlockers, deletionPreview, type Options} from './board-deletion-inspection';\n\n/** A retained tombstone preserves audit and resource provenance without owning Sessions. */\nexport function createBoardDeletion(options: Options) {\n const stop = createBoardStop(options,(board,request)=>removeBoard(options,board,request));\n return {...stop,\n previewDeletion: (id: string) => traced(id, randomUUID(), 'preview', () => deletionPreview(options, id), options.journal),\n assertSettled: async (id: string) => {const rows = await boardDeletionBlockers(options, id); requireValue(!rows.length, rows[0]?.code ?? 'BOARD_EXECUTION_UNSETTLED');},\n deleteBoard: (id: string, request: KanbanDeletionRequest) => traced(id, request.operationId, 'delete', () => removeBoard(options, id, request), options.journal),\n };\n}\ninterface Receipt {request: KanbanDeletionRequest; preview: KanbanDeletionPreview; phase: string}\nasync function removeBoard(options: Options, id: string, request: KanbanDeletionRequest): Promise<void> {\n const {service, journal} = options;\n requireValue(/^[\\w-]{1,128}$/.test(request.operationId) && typeof request.cleanup === 'boolean' && /^[a-f0-9]{64}$/.test(request.version), 'INVALID_OPERATION_ID');\n const key = 'board-deletion:' + id, receipt = await journal.get<Receipt>(key);\n if (receipt?.request.operationId === request.operationId) {\n requireValue(JSON.stringify(receipt.request) === JSON.stringify(request), 'IDEMPOTENCY_CONFLICT');\n if ((await service.read(id)).deletedAt !== undefined) return;\n }\n const current = await deletionPreview(options, id);\n requireValue(current.revision === request.expectedRevision && current.version === request.version, 'BOARD_DELETE_PREVIEW_CHANGED');\n requireValue(!current.blockers.length, current.blockers[0]?.code ?? 'BOARD_EXECUTION_UNSETTLED');\n await journal.update(key, () => ({request, preview: current, phase: 'prepared'}));\n if (request.cleanup) await cleanupResources(options, id, request, current);\n const board = await service.read(id);\n requireValue(board.revision === request.expectedRevision, 'BOARD_DELETE_PREVIEW_CHANGED');\n await service.execute(id, {operationId: request.operationId, expectedRevision: board.revision, command: {type: 'delete-board'}});\n await journal.update<Receipt>(key, old => ({...old!, phase: 'deleted'}));\n}\nasync function cleanupResources({service, journal}: Options, id: string, request: KanbanDeletionRequest, preview: KanbanDeletionPreview): Promise<void> {\n const groups = new Map<string, KanbanDeletionPreview['resources']>();\n for (const row of preview.resources) {\n const key = JSON.stringify([row.resource.kind, row.resource.id, row.resource.location]);\n const group = groups.get(key) ?? []; group.push(row); groups.set(key, group);\n }\n for (const group of groups.values()) if (group.every(row => row.resource.canCleanup && row.resource.ownership !== 'other' && row.resource.ownership !== 'unknown')) {\n const {itemId, resource} = group[0];\n requireValue(service.cleanupWorkResource, 'WORK_RESOURCE_CLEANUP_UNAVAILABLE');\n await traced(id, request.operationId, 'cleanup', () => service.cleanupWorkResource!(id, {itemId, resourceId: resource.id, version: resource.version,\n operationId: sha256HexSync(JSON.stringify([request.operationId, resource.id]))}), journal);\n }\n}\nasync function traced<T>(boardId: string, operationId: string, stage: string, run: () => Promise<T>, journal: KanbanAutomationJournal): Promise<T> {\n const log = runtimeLogger(journal);\n const started = Date.now(); operationId = /^[\\w-]{1,128}$/.test(operationId) ? operationId : randomUUID();\n try {const result = await run(); log.info('board.deletion', {operation: 'kanban.board.delete', boardId, operationId, stage, result: 'success', durationMs: Date.now() - started}); return result;}\n catch (error) {log.warn('board.deletion', {operation: 'kanban.board.delete', boardId, operationId, stage, result: 'failure', code: safeCode(error, 'BOARD_DELETE_FAILED'), durationMs: Date.now() - started}); throw error;}\n}\n\n/** Concurrent admissions share an exclusive deletion barrier; queries never wait for scans. */\nexport function withBoardDeletion<T extends KanbanClient & {quiesce?(): Promise<void>; dispose?(): Promise<void>}>(service: T, deletion: ReturnType<typeof createBoardDeletion>): T & Pick<typeof deletion, 'previewDeletion' | 'deleteBoard'> {\n let barrier: Promise<unknown> = Promise.resolve(), stopping = false;\n const pending = new Set<Promise<unknown>>();\n const items = new Map<string, Promise<unknown>>();\n const itemMutation = <R>(board: string, item: string, run: () => Promise<R>, checkDeleted = true): Promise<R> => {\n const key = JSON.stringify([board,item]);\n const next = (items.get(key) ?? Promise.resolve()).catch(() => {}).then(async () => {\n if (checkDeleted) requireValue((await service.item(board,item)).item.deletedAt === undefined, 'ITEM_DELETED');\n return run();\n });\n items.set(key,next);\n void next.finally(() => {if (items.get(key) === next) items.delete(key);}).catch(() => {});\n return next;\n };\n let quiescing: Promise<void> | undefined, disposing: Promise<void> | undefined;\n const quiesce = () => {\n stopping = true;\n if (!quiescing) {\n // Broadcast immediately, including while an exclusive operation is finishing.\n const acknowledgements = Promise.allSettled([service.quiesce?.() ?? Promise.resolve(), ...pending]);\n quiescing = (async () => {\n await barrier;\n const [ack] = await acknowledgements;\n if (ack.status === 'rejected') throw ack.reason;\n })();\n }\n return quiescing;\n };\n const close = (method: 'quiesce' | 'dispose') => method === 'quiesce' ? quiesce()\n : disposing ??= quiesce().then(() => service.dispose?.());\n const admit = <R>(run: () => Promise<R>): Promise<R> => {\n if (stopping) return Promise.reject(new KanbanError('SERVICE_STOPPING'));\n const next = barrier.then(run); pending.add(next); void next.finally(() => pending.delete(next)).catch(() => {}); return next;\n };\n const exclusive = <R>(run: () => Promise<R>): Promise<R> => {\n if (stopping) return Promise.reject(new KanbanError('SERVICE_STOPPING'));\n const admitted = [...pending], next = barrier.then(async () => {await Promise.allSettled(admitted); return run();});\n barrier = next.catch(() => {}); return next;\n };\n const active = async <R>(id: string, run: () => Promise<R>) => {requireValue((await service.read(id)).deletedAt === undefined, 'BOARD_DELETED'); return run();};\n return {...service, ...(service.quiesce ? {quiesce: () => close('quiesce')} : {}), ...(service.dispose ? {dispose: () => close('dispose')} : {}), previewDeletion: deletion.previewDeletion, deleteBoard: (id, request) => exclusive(() => deletion.deleteBoard(id, request)),\n execute: (id, request) => admit(() => active(id, () => {if (request.command.type === 'delete-board') throw new KanbanError('BOARD_DELETE_CONFIRMATION_REQUIRED'); return 'itemId' in request.command && request.command.itemId ? itemMutation(id,request.command.itemId,() => service.execute(id,request),false) : service.execute(id, request);})),\n scan: async () => {await admit(async () => {await deletion.preparePending();await service.scan();});if (!stopping) await exclusive(() => deletion.resumePending());},\n cancelBoard: (id,request) => admit(() => active(id,()=>deletion.cancelBoard(id,request))),\n requestBoardDeletion: (id,request) => admit(() => active(id,()=>deletion.requestBoardDeletion(id,request))),\n ...(service.cancelFix ? {cancelFix: (id: string, request: Parameters<NonNullable<T['cancelFix']>>[1]) => admit(() => active(id, () => service.cancelFix!(id, request)))} : {}),\n ...(service.controlRecord ? {controlRecord: (id: string, request: Parameters<NonNullable<T['controlRecord']>>[1]) => admit(() => active(id, () => service.controlRecord!(id, request)))} : {}),\n ...(service.fixTask ? {fixTask: (id: string, request: Parameters<NonNullable<T['fixTask']>>[1]) => admit(() => active(id, () => itemMutation(id,request.itemId,() => service.fixTask!(id, request))))} : {}),\n ...(service.replyTask ? {replyTask: (id: string, request: Parameters<NonNullable<T['replyTask']>>[1]) => admit(() => active(id, () => itemMutation(id,request.itemId,() => service.replyTask!(id, request))))} : {}),\n ...(service.runRecord ? {runRecord: (id: string, request: Parameters<NonNullable<T['runRecord']>>[1]) => admit(() => active(id, () => service.runRecord!(id, request)))} : {}),\n ...(service.runItemOperation ? {runItemOperation: (id: string, request: Parameters<NonNullable<T['runItemOperation']>>[1]) => admit(() => active(id, () => itemMutation(id,request.itemId,() => service.runItemOperation!(id, request))))} : {}),\n ...(service.bindItemOperation ? {bindItemOperation: (id: string, request: Parameters<NonNullable<T['bindItemOperation']>>[1]) => admit(() => active(id, () => itemMutation(id,request.itemId,() => service.bindItemOperation!(id, request))))} : {}),\n ...(service.cleanupWorkResource ? {cleanupWorkResource: (id: string, request: Parameters<NonNullable<T['cleanupWorkResource']>>[1]) => admit(() => service.cleanupWorkResource!(id, request))} : {}),\n };\n}\n","import type {KanbanAutomationJournal} from './automation-journal';\nimport type {KanbanTaskControlOptions,KanbanControlState} from './control-ports';\nexport function controlExecution(options:KanbanTaskControlOptions,_journal:KanbanAutomationJournal,executionId:string,operationId:string,\n action:'pause'|'resume'|'cancel',attemptId=executionId,previousKey?:string,direct=false):Promise<KanbanControlState> {\n return options.control.control({executionId,operationId,action,attemptId,previousKey,...(direct?{fallbackSubmission:true}:{})});\n}\n","import type {KanbanAutomationJournal} from './automation-journal';\nimport type {TaskControlPorts} from './task-controls';\ninterface ReviewJob {id:string;boardId:string;itemId:string;phase:string;action:string;state:string;code?:string;sessionId?:string;input?:unknown;request?:unknown}\nimport {controlExecution as controlCall} from './control';\nimport {requireValue} from '../rules';\nimport {sha256HexSync} from '../utils';\n\n/** Submission claims and definite no-start cancellation compete in the original journal transaction. */\nexport async function cancelTaskMaintenance(options: TaskControlPorts, journal: KanbanAutomationJournal, board: string, item: string, controlId: string): Promise<'cancelled' | 'accepted' | 'unknown'> {\n const jobs = await journal.findForBoard<ReviewJob>('review-operation:', board, job => job.itemId === item && job.phase !== 'settled');\n for (const row of jobs) {\n const saved = await journal.update<ReviewJob>(row.key, old => old!.phase === 'prepared' ? {...old!,phase:'settled',state:'failed',code:'USER_CANCELLED'} : old!);\n if (saved.phase === 'settled') continue;\n if (saved.action === 'accept') return 'accepted';\n requireValue(saved.request ?? saved.input, 'TASK_CONTROL_ROUTE_MISSING');\n const id = sha256HexSync(JSON.stringify([controlId,saved.id]));\n const state = await options.control.control({executionId:saved.sessionId??saved.id,operationId:id,action:'cancel',attemptId:saved.id,kind:saved.request?'submission':'call',prepared:saved.request??saved.input});\n if (state !== 'cancelled') return state === 'unknown' ? 'unknown' : 'accepted';\n await journal.update<ReviewJob>(row.key, old => old!.phase === 'settled' ? old! : {...old!,phase:'settled',state:'failed',code:'USER_CANCELLED'});\n }\n return cancelPostloads(options,journal,board,item,controlId);\n}\ninterface Postload {boardId: string; dispatch: {itemId: string; id: string}; phase: string; done?: boolean; observation?: {outcome:string;code?:string}}\nasync function cancelPostloads(options: TaskControlPorts, journal: KanbanAutomationJournal, board: string, item: string, controlId: string): Promise<'cancelled' | 'accepted' | 'unknown'> {\n const rows = await journal.find<Postload>(options.finalizerPrefix ?? 'execution-finalizer:', job => job.boardId === board && job.dispatch.itemId === item && !job.done);\n for (const row of rows) {\n const job = await journal.update<Postload>(row.key, old => old!.phase === 'prepared' ? {...old!,phase:'settled',done:true,observation:{outcome:'cancelled',code:'USER_CANCELLED'}} : old!);\n if (job.done) continue;\n const state = await controlCall(options,journal,job.dispatch.id,sha256HexSync(JSON.stringify([controlId,job.dispatch.id])),'cancel');\n if (state !== 'cancelled') return state === 'unknown' ? 'unknown' : 'accepted';\n await journal.update<Postload>(row.key, old => ({...old!,phase:'settled',done:true,observation:{outcome:'cancelled',code:'USER_CANCELLED'}}));\n }\n return 'cancelled';\n}\n","import {sha256HexSync} from '../utils';\nimport type {KanbanAutomationJournal} from './automation-journal';\nimport type {TaskControlPorts} from './task-controls';\ninterface FrozenReply {phase?:string;sessionId:string;request:{itemId:string;operationId:string}}\nimport {requireValue} from '../rules';\n\n/** Freeze out later delivery before reconciling an already admitted reply in its original Session. */\nexport async function cancelTaskReplies(options: TaskControlPorts, journal: KanbanAutomationJournal, board: string, item: string, controlId: string): Promise<'cancelled' | 'accepted' | 'unknown'> {\n const replies = await journal.findForBoard<FrozenReply>('task-reply:', board, reply => reply.request.itemId === item);\n for (const row of replies) {\n const id = row.value.request.operationId;\n if (await journal.get('task-reply-cancelled:' + id)) continue;\n const saved = await journal.update<FrozenReply>(row.key, old => ({...old!,phase:old!.phase === 'prepared' ? 'cancelled' : old!.phase === 'cancelled' ? 'cancelled' : 'cancelling'}));\n if (saved.phase !== 'cancelled') {\n requireValue(options.control, 'TASK_CONTROL_UNSUPPORTED');\n const state = await options.control.control({executionId:saved.sessionId,attemptId:id,operationId:sha256HexSync(JSON.stringify([controlId,id])),action:'cancel',kind:'submission'});\n if (state !== 'cancelled') return state === 'unknown' ? 'unknown' : 'accepted';\n }\n await journal.update('task-reply-cancelled:' + id, () => true);\n }\n return 'cancelled';\n}\n","import {runtimeLogger} from './logging';\nimport {safeCode} from './diagnostics';\nimport {sha256HexSync} from '../utils';\nimport type {KanbanClient, KanbanFixSession} from '../contracts';\nimport type {KanbanAutomationJournal} from './automation-journal';\nimport type {TaskControlPorts} from './task-controls';\nimport {cancelTaskMaintenance} from './task-maintenance-cancellation';\nimport {cancelTaskReplies} from './task-reply-cancellation';\ninterface Options {service:KanbanClient;journal:KanbanAutomationJournal;ports:TaskControlPorts;\n fixes?:{cancelFix(board:string,request:{fixId:string;operationId:string}):Promise<KanbanFixSession>};\n records?:{controlRecord(board:string,request:{recordId:string;operationId:string;action:'cancel'}):Promise<void>}}\n/** Cancellation is explicit; drain mode only freezes future admissions and retains user settlement choices. */\nexport async function scanBoardStopWork(options:Options):Promise<void> {\n for (const board of await options.service.list()) {\n if (board.lifecycle?.mode !== 'cancel' || board.lifecycle.phase === 'ready') continue;\n const control=board.lifecycle.operationId;\n if (options.fixes) for (const row of await options.journal.findForBoard<{id:string;accepted?:boolean;state:string}>('fix:',board.id,fix=>!fix.accepted&&fix.state!=='cancelled'))\n await attempt(options.journal,board.id,control,'fix.cancel',()=>options.fixes!.cancelFix(board.id,{fixId:row.value.id,operationId:sha256HexSync(JSON.stringify([control,row.value.id]))}));\n if (options.records) for (const run of (await options.journal.get<Array<{recordId:string}>>('record-runs:'+board.id))??[]) {\n const key='record-control:'+JSON.stringify([board.id,run.recordId]);\n if ((await options.journal.get<{action:string}>(key))?.action !== 'cancel') await attempt(options.journal,board.id,control,'record.cancel',()=>options.records!.controlRecord(board.id,{recordId:run.recordId,operationId:sha256HexSync(JSON.stringify([control,run.recordId])),action:'cancel'}));\n }\n for (const item of board.items.filter(item=>['completed','cancelled'].includes(item.status))) {\n const id=sha256HexSync(JSON.stringify([control,item.id]));\n await attempt(options.journal,board.id,control,'reply.cancel',()=>cancelTaskReplies(options.ports,options.journal,board.id,item.id,id));\n await attempt(options.journal,board.id,control,'maintenance.cancel',()=>cancelTaskMaintenance(options.ports,options.journal,board.id,item.id,id));\n }\n }\n}\n\nasync function attempt(journal:KanbanAutomationJournal,boardId:string,operationId:string,stage:string,run:()=>Promise<unknown>):Promise<void> {\n const started=Date.now();\n try {await run();} catch(error) {runtimeLogger(journal).warn('Board work settlement pending',{operation:'kanban.board.stop',operationId,boardId,stage,result:'failure',code:safeCode(error,'BOARD_WORK_STOP_UNKNOWN'),durationMs:Date.now()-started});}\n}\n","import type {KanbanItem, KanbanTaskControl} from '../contracts';\nimport type {KanbanAutomationJournal} from './automation-journal';\nimport {analysisHistory} from './analysis-history';\nimport type {KanbanTaskControlOptions as CallLifecyclePorts} from './control-ports';\nimport {controlExecution as controlCall} from './control';\nimport {requireValue} from '../rules';\ntype Job = Awaited<ReturnType<typeof analysisHistory>>[number];\n/** Every historical unsettled analysis must acknowledge control before the task can settle. */\nexport async function controlTaskAnalyses(options: CallLifecyclePorts, journal: KanbanAutomationJournal, board: string, item: KanbanItem): Promise<KanbanTaskControl['state'] | undefined> {\n const analyses = await analysisHistory(journal, board, item.id);\n requireValue(analyses.length || !['analyzing','unknown'].includes(item.analysis?.state ?? ''), 'TASK_CONTROL_ROUTE_MISSING');\n const keys = (await journal.get<{keys: string[]}>('analysis-history:' + JSON.stringify([board, item.id])))?.keys ?? [];\n const byId = new Map((await journal.getMany<Job>(keys)).flatMap((job, index) => job ? [[job.id, keys[index]] as const] : []));\n for (const job of analyses) {\n if (job.phase === 'settled') continue;\n const key = byId.get(job.id); requireValue(key, 'TASK_CONTROL_ROUTE_MISSING');\n const state = await controlAnalysis(options,journal,key,job,item.control!);\n if (state) return state;\n }\n}\nasync function controlAnalysis(options: CallLifecyclePorts, journal: KanbanAutomationJournal, key: string, job: Job, control: KanbanTaskControl): Promise<KanbanTaskControl['state'] | undefined> {\n if (control.action === 'cancel') {\n const current = await journal.update<Job>(key, old => old!.phase === 'prepared' ? cancelled(old!) : old!);\n if (current.phase === 'settled') return;\n } else if (job.phase === 'prepared') return;\n const state = await controlCall(options,journal,job.id,control.id + '-analysis-' + job.id,control.action);\n const target = control.action === 'pause' ? 'paused' : control.action === 'resume' ? 'resumed' : 'cancelled';\n if (state !== target) return state;\n if (control.action === 'cancel') await journal.update<Job>(key, old => cancelled(old!));\n}\nfunction cancelled(job: Job): Job {\n return {...job,phase:'settled',terminalOutcome:'cancelled',status:{...job.status,state:'failed',code:'USER_CANCELLED'}};\n}\n","import {runtimeLogger} from './logging';\nimport {defaultReferences} from './ports';\nimport {cancelTaskMaintenance} from './task-maintenance-cancellation';\nimport {cancelTaskReplies} from './task-reply-cancellation';\n\nimport type {KanbanBoard, KanbanItem, KanbanService, KanbanTaskControl} from '../contracts';\nimport type {KanbanAutomationJournal} from './automation-journal';\nimport {journalCommand} from './journal-command';\nimport {controlTaskAnalyses} from './task-analysis-controls';\nimport type {KanbanTaskControlOptions as CallLifecyclePorts} from './control-ports';\nimport {controlExecution as controlCall} from './control';\nimport {requireValue} from '../rules';\nexport type TaskControlPorts = CallLifecyclePorts;\n\ntype Observation = Pick<KanbanTaskControl, 'state' | 'code'>;\n\n/** Controls run even with scheduling disabled and never depend on the business channel. */\nexport async function scanTaskControls(options: TaskControlPorts, journal: KanbanAutomationJournal, board: KanbanBoard, service: KanbanService): Promise<void> {\n const log = runtimeLogger(journal);\n for (const item of board.items) {\n const control = item.control; if (!control || ['failed','paused','resumed','cancelled'].includes(control.state)) continue;\n const started = Date.now();\n let result: Observation;\n try {\n const state = await observe(options, journal, board, item, service);\n const latest = state === 'cancelled' ? await service.read(board.id) : board;\n const childrenPending = latest.items.some(child => child.planning?.parentId === item.id && !['completed','cancelled'].includes(child.status));\n result = {state: state === 'cancelled' && childrenPending ? 'accepted' : state};\n } catch (error) {result = controlFailure(error);}\n if (result.state === control.state && result.code === control.code) continue;\n const fields = {operation:'kanban.task.control', operationId:control.id, boardId:board.id, itemId:item.id, stage:control.action, result:['failed','unknown'].includes(result.state)?'failure' as const:'success' as const, code:result.code, state:result.state, durationMs:Date.now()-started};\n if (fields.result === 'failure') log.warn('Task control observed', fields); else log.info('Task control observed', fields);\n await journalCommand(journal, service, board.id, 'task-control-projection:' + JSON.stringify([board.id,item.id,control.id]) + ':' + result.state + ':' + (result.code ?? ''),\n {type: 'control-receipt', itemId: item.id, controlId: control.id, ...result});\n }\n}\nasync function observe(options: TaskControlPorts, journal: KanbanAutomationJournal, board: KanbanBoard, item: KanbanItem, service: KanbanService): Promise<KanbanTaskControl['state']> {\n const control = item.control!;\n if (control.action === 'cancel') {\n const state = await cancelTaskReplies(options, journal, board.id, item.id, control.id);\n if (state !== 'cancelled') return state;\n const maintenance = await cancelTaskMaintenance(options,journal,board.id,item.id,control.id);\n if (maintenance !== 'cancelled') return maintenance;\n }\n const analysis = await controlTaskAnalyses(options,journal,board.id,item);\n if (analysis) return analysis;\n const workflow = await service.workflow(board.id);\n const dispatch = Object.values(workflow.dispatches).filter(d => d.itemId === item.id).sort((a,b) => b.attempt - a.attempt)[0];\n if (dispatch) {\n if (control.action === 'cancel' && ['failed','cancelled','rejected'].includes(dispatch.outcome)) return 'cancelled';\n return controlCall(options, journal, dispatch.continuation ? dispatch.executionSessionId ?? dispatch.id : dispatch.id, control.id, control.action, dispatch.id, 'task-control:' + board.id + ':' + control.id, !!dispatch.continuation);\n }\n requireValue((!item.owner || item.owner.kind === 'human') && !item.externalRefs?.some(ref => ref.system === (options.references ?? defaultReferences).execution), 'TASK_CONTROL_ROUTE_MISSING');\n return control.action === 'cancel' ? 'cancelled' : control.action === 'pause' ? 'paused' : 'resumed';\n}\nfunction controlFailure(error: unknown): Observation {\n const raw = (error as {code?: unknown})?.code, code = typeof raw === 'string' && /^[A-Z][A-Z0-9_]{0,79}$/.test(raw) ? raw : 'TASK_CONTROL_UNKNOWN';\n return {state: ['TASK_CONTROL_UNSUPPORTED','CALL_READ_ONLY','CONTROL_EPOCH_CONFLICT'].includes(code) ? 'failed' : 'unknown', code};\n}\n","import type {KanbanBoard,KanbanCommand,KanbanService} from '../contracts';\nimport {KanbanError} from '../ports';\nimport {boardDeletionBlockers} from './board-deletion-inspection';\nimport type {KanbanAutomationJournal} from './automation-journal';\nimport type {KanbanRuntimeExtension} from './runtime-ports';\nimport {safeCode} from './diagnostics';\nexport async function verifyRuntimeLifecycle(service:KanbanService,journal:KanbanAutomationJournal,board:KanbanBoard,command:KanbanCommand) {\n if(command.type==='delete-item') {\n const blocker=(await boardDeletionBlockers({service,journal},board.id)).find(row=>row.itemId===command.itemId);\n if(blocker)throw new KanbanError(blocker.code);\n }\n if(command.type==='cancel-record'||command.type==='delete-record') {\n const runs=await journal.get<Array<{recordId:string;state:string}>>('record-runs:'+board.id);\n if(runs?.some(run=>run.recordId===command.recordId&&!['completed','failed','cancelled'].includes(run.state)))throw new KanbanError('RECORD_EXECUTION_UNSETTLED');\n }\n}\nexport function runtimeLifecycle(service:KanbanService & {quiesce():Promise<void>;dispose():Promise<void>},journal:KanbanAutomationJournal,extensions:KanbanRuntimeExtension[],beforeScan:()=>Promise<void>) {\n let stopping=false,pending:Promise<void>|undefined,closing:Promise<void>|undefined,disposing:Promise<void>|undefined;\n const scan=()=>stopping?Promise.resolve():pending??=(async()=>{await service.scan();await beforeScan();await all(extensions,'scan',journal);})().finally(()=>{pending=undefined;});\n const quiesce=()=>closing??=(async()=>{\n stopping=true;\n const results=await Promise.allSettled([all(extensions,'quiesce',journal),pending]);\n await service.quiesce();await journal.drain();\n failures(results,'KANBAN_QUIESCE_FAILED');\n })();\n return {scan,quiesce,dispose:()=>disposing??=(async()=>{await quiesce();await all(extensions,'dispose',journal);await service.dispose();})()};\n}\nasync function all(extensions:KanbanRuntimeExtension[],method:'scan'|'quiesce'|'dispose',journal:KanbanAutomationJournal) {\n const results=await Promise.allSettled(extensions.map(async(extension,index)=>{\n const started=Date.now();\n try{await extension[method]?.();}catch(error){journal.diagnostic({operationId:'runtime:'+method+':'+index,stage:'runtime.'+method,result:'failure',code:safeCode(error,'KANBAN_'+method.toUpperCase()+'_FAILED'),durationMs:Date.now()-started});throw error;}\n }));\n failures(results,'KANBAN_'+method.toUpperCase()+'_FAILED');\n}\nfunction failures(results:PromiseSettledResult<unknown>[],code:string) {\n const errors=results.flatMap(result=>result.status==='rejected'?[result.reason]:[]);\n if(errors.length)throw new AggregateError(errors,code);\n}\n","import {SeqKanbanStore} from '../storage';\nimport {createKanbanActivityModule} from '../activity';\nimport {KanbanAutomationJournal} from './automation-journal';\nimport {KanbanWorkLog} from './work-log';\nimport {defaultReferences} from './ports';\nimport {createRecordExecution} from './record-execution';\nimport {createKanbanAutomation} from './automation';\nimport {createBoardDeletion,withBoardDeletion} from './board-deletion';\nimport {scanBoardStopWork} from './board-stop-work';\nimport {scanTaskControls} from './task-controls';\nimport {verifyRuntimeLifecycle,runtimeLifecycle} from './runtime-lifecycle';\nimport type {KanbanRuntimeOptions,KanbanRuntimeContext,KanbanRuntimeExtension} from './runtime-ports';\nimport type {KanbanActor} from '../contracts';\n\n/** One entry point owns durable coordination; the host supplies I/O and authorization. */\nexport async function assembleKanbanRuntime(options:KanbanRuntimeOptions) {\n const directory=options.directory??'/kanban',fs=options.fs;\n const store=options.store??await SeqKanbanStore.open(fs,directory);\n const journal=options.journal instanceof KanbanAutomationJournal?options.journal:new KanbanAutomationJournal(fs,{directory:directory+'/runtime',diagnostic:options.log,...options.journal});\n const workLog=new KanbanWorkLog(fs,{directory:directory+'/runtime',diagnostic:options.log,...options.workLog});\n await journal.open();await workLog.open();\n let verifyDeletion:(id:string)=>Promise<void>=async()=>{};\n const createService=options.createService??createKanbanActivityModule;\n const serviceFor=(actor:KanbanActor)=>createService({...options,store,actor,\n referenceSystem:options.referenceSystem??defaultReferences.execution,\n verifyLifecycle:async(board,command)=>{await verifyRuntimeLifecycle(service,journal,board,command);await options.verifyLifecycle?.(board,command);},\n verifyDeletion:async board=>{await verifyDeletion(board.id);await options.verifyDeletion?.(board);},\n onCommitted:async(id,source,now)=>{await workLog.synchronize(id,source);await options.onCommitted?.(id,source,now);}});\n const service=serviceFor(options.actor),context:KanbanRuntimeContext={fs,store,journal,workLog,service,serviceFor};\n const extensions=options.extensions?.(context)??[];\n return assembleRuntime(options,context,extensions,verify=>{verifyDeletion=verify;});\n}\nfunction assembleRuntime(options:KanbanRuntimeOptions,context:KanbanRuntimeContext,extensions:KanbanRuntimeExtension[],setDeletion:(verify:(id:string)=>Promise<void>)=>void) {\n const {service,journal,workLog}=context,directory=options.directory??'/kanban';\n const records=options.resources?createRecordExecution({service,journal,resources:options.resources,requiresItemResource:options.requiresItemResource,log:options.log??(()=>{})}):undefined;\n const automation=options.automation?createKanbanAutomation({...options.automation,...context,\n directory:directory+'/automation',log:options.log??(()=>{})}):undefined;\n const capabilities:Partial<import('../contracts').KanbanClient>=Object.assign({},...extensions.map(extension=>extension.capabilities));\n const client={...service,...capabilities,\n ...(records?{...records,recordExecutions:async(board:string,id:string)=>(await workLog.record(service,board,id)).kind==='decision'?records.recordExecutions(board,id):[]}:{}),\n ...(automation?{automationCatalog:automation.automationCatalog,analysisStatus:automation.analysisStatus}:{}),\n records:(board:string,query?:import('../contracts').KanbanRecordQuery)=>workLog.records(service,board,query),\n record:(board:string,id:string)=>workLog.record(service,board,id)};\n const deletion=createBoardDeletion({service:client,journal});setDeletion(deletion.assertSettled);\n const participants=[...extensions,...records?[records]:[],...automation?[automation]:[]];\n const lifecycle=runtimeLifecycle(service,journal,participants,async()=>{\n await scanBoardStopWork({service,journal,ports:options.control??{control:{control:async()=> 'unknown'}},fixes:capabilities.cancelFix?{cancelFix:capabilities.cancelFix}:undefined,records});\n if(!automation&&options.control)for(const board of await service.list())await scanTaskControls(options.control,journal,board,service);\n });\n return {...context,service:withBoardDeletion({...client,...lifecycle},deletion)};\n}\n","import type {KanbanBoard, KanbanService} from '../contracts';\nimport type {KanbanTaskControlOptions as CallLifecyclePorts} from './control-ports';\n\nimport {analysisHistory} from './analysis-history';\nimport type {KanbanAutomationJournal} from './automation-journal';\nimport {journalCommand} from './journal-command';\n/** Observe accepted analyses to completion, without adopting a new plan or starting another call. */\nexport async function drainBoardAnalyses(ports: CallLifecyclePorts, journal: KanbanAutomationJournal, board: KanbanBoard, service: KanbanService): Promise<void> {\n if (!board.lifecycle) return;\n for (const item of board.items) {\n const jobs = await analysisHistory(journal,board.id,item.id);\n const keys = (await journal.get<{keys:string[]}>('analysis-history:' + JSON.stringify([board.id,item.id])))?.keys ?? [];\n for (const job of jobs) {\n if (job.phase === 'settled') continue;\n const key = keys[(await journal.getMany<{id:string}>(keys)).findIndex(row=>row?.id===job.id)];\n if (!key) continue;\n const view = job.phase === 'submitting' ? await ports.control.inspect?.(job.id,job.id) : undefined;\n if (job.phase === 'submitting' && (!view || !view.settled)) continue;\n const saved = await journal.update<typeof job>(key,old=>old!.phase !== job.phase ? old! : {...old!,phase:'settled',terminalOutcome:view?.outcome??(job.phase==='prepared'?'cancelled':undefined),status:{...old!.status,state:'failed',code:'BOARD_STOPPED_AFTER_ANALYSIS'}});\n if (saved.phase === 'settled' && !['completed','cancelled'].includes(item.status) && item.control?.action !== 'cancel') await journalCommand(journal,service,board.id,'board-drained-analysis:'+JSON.stringify([board.id,job.id]),\n {type:'report-analysis',itemId:item.id,operationId:job.id,status:saved.status});\n }\n }\n}\n","import {defaultReferences,type KanbanReferencePolicy} from './ports';\nimport type {KanbanBoard,KanbanItem} from '../contracts';\nimport type {KanbanAutomationJournal} from './automation-journal';\n\nexport interface DecisionContext {sourceBoardId:string;recordId:string;recordRevision:number;runId:string}\n/** The host resolves business identity; execution transports receive opaque structured context. */\nexport async function workContext(journal:KanbanAutomationJournal,board:KanbanBoard,item:KanbanItem,references:KanbanReferencePolicy=defaultReferences) {\n const runId=item.externalRefs?.find(ref=>ref.system===references.decision)?.id;\n let decision=runId?await journal.get<DecisionContext>('record-context:'+runId):undefined;\n if(runId&&!decision) {\n const runs=await journal.get<Array<{id:string;sourceBoardId:string;recordId:string;recordRevision:number}>>('record-runs:'+board.id);\n const run=runs?.find(run=>run.id===runId);\n if(run)decision={sourceBoardId:run.sourceBoardId,recordId:run.recordId,recordRevision:run.recordRevision,runId};\n }\n const snapshot = decision ? (await journal.get<Array<{id:string;record:unknown}>>('record-runs:'+decision.sourceBoardId))?.find(run=>run.id===decision.runId)?.record : undefined;\n return {board:{id:board.id,title:board.title,revision:board.revision},decision:decision ? {...decision,...(snapshot ? {snapshot} : {})} : null,\n task:{id:item.id,revision:item.revision,parentId:item.planning?.parentId??null,title:item.title,responsibility:item.responsibility,acceptance:item.acceptance,\n dependencies:item.planning?.dependencies??[]},\n resources:item.externalRefs?.filter(ref=>ref.system===references.resource)??[]};\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,SAAS,SAAS,OAAgB,UAA0B;AAC/D,QAAM,OAAQ,OAA4B;AAC1C,SAAO,OAAO,SAAS,YAAY,yBAAyB,KAAK,IAAI,IAAI,OAAO;AACpF;;;ACHA,SAAQ,4BAA6C;;;ACK9C,IAAM,iBAAiB;AAC9B,IAAM,WAAW,CAAC,qBAAqB,gBAAgB,QAAQ,aAAa;AACrE,SAAS,iBAAiB,SAAiB,QAAwB;AAAC,SAAO,KAAK,UAAU,CAAC,SAAS,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI;AAAI;AAChI,SAAS,eAAe,KAAa,OAA0B;AAClE,QAAM,SAAS,SAAS,KAAK,CAAAA,YAAU,IAAI,WAAWA,OAAM,CAAC;AAC7D,MAAI,CAAC,OAAQ,QAAO,CAAC;AACrB,QAAM,SAAS,oBAAI,IAAY;AAC/B,aAAW,OAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK,GAAG;AACtD,QAAI,CAAC,OAAO,OAAO,QAAQ,SAAU;AACrC,eAAW,MAAM,CAAC,IAAI,SAAS,IAAI,aAAa,EAAG,KAAI,OAAO,OAAO,YAAY,GAAI,QAAO,IAAI,EAAE;AAAA,EACtG;AACA,SAAO,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,WAAS,KAAK,UAAU,CAAC,OAAO,QAAQ,GAAG,CAAC,CAAC;AAC/E;AAEA,eAAsB,iBAAiB,IAAyB,KAAa,UAAoB,OAAgB,YAAY,gBAA+B;AACxJ,QAAM,OAAO,IAAI,IAAI,eAAe,KAAK,KAAK,CAAC,GAAG,UAAU,IAAI,IAAI,QAAQ;AAC5E,aAAW,OAAO,SAAU,KAAI,CAAC,KAAK,IAAI,GAAG,EAAG,OAAM,GAAG,YAAY,WAAW,GAAG;AACnF,aAAW,SAAS,KAAM,KAAI,CAAC,QAAQ,IAAI,KAAK,EAAG,OAAM,GAAG,SAAS,WAAW,OAAO,GAAG;AAC9F;AACA,eAAsB,kBAAkB,IAAyB,QAAgB,YAAY,gBAAgB,aAAuD,MAAM;AAAC,GAAkB;AACzL,MAAI,MAAM,GAAG,SAAS,WAAW,SAAS,MAAM,IAAK;AACrD,QAAM,UAAU,KAAK,IAAI,GAAG,cAAc,WAAW;AAAG,MAAI,QAAQ;AACpE,MAAI;AACA,eAAW,aAAa,SAAU,OAAM,GAAG,YAAY,QAAQ,OAAM,UAAS;AAC1E,YAAM,iBAAiB,IAAI,MAAM,KAAK,CAAC,GAAG,KAAK,MAAM,MAAM,KAAK,GAAG,SAAS;AAAG;AAAS,aAAO;AAAA,IACnG,GAAG,EAAC,UAAS,CAAC;AACd,UAAM,GAAG,SAAS,WAAW,WAAW,GAAG;AAC3C,eAAW,EAAC,WAAW,sBAAsB,aAAa,OAAO,WAAW,QAAQ,WAAW,OAAO,YAAY,KAAK,IAAI,IAAI,QAAO,CAAC;AAAA,EAC3I,SAAS,OAAO;AACZ,eAAW,EAAC,WAAW,sBAAsB,aAAa,OAAO,WAAW,QAAQ,WAAW,MAAM,SAAS,OAAO,8BAA8B,GAAG,YAAY,KAAK,IAAI,IAAI,QAAO,CAAC;AAAG,UAAM;AAAA,EACpM;AACJ;;;AD5BO,IAAM,0BAAN,MAA8B;AAAA,EAMjC,YAA6B,IAAkC,UAAgC,CAAC,GAAG;AAAtE;AAAkC;AAC3D,SAAK,YAAY,qBAAqB,QAAQ,aAAa,iBAAiB;AAC5E,SAAK,OAAO,KAAK,YAAY;AAAmB,SAAK,YAAY,KAAK,YAAY;AAClF,SAAK,iBAAiB,QAAQ,kBAAkB;AAAA,EACpD;AAAA,EATiB,SAAS,oBAAI,IAAsB;AAAA,EAC3C;AAAA,EACA;AAAA,EACQ;AAAA,EACA;AAAA,EAMjB,WAAW,OAAsC;AAAC,SAAK,QAAQ,aAAa,KAAK;AAAA,EAAE;AAAA,EACnF,MAAM,OAAsB;AACxB,iBAAa,KAAK,GAAG,KAAK,KAAK,aAAa,sBAAsB;AAClE,eAAW,QAAQ,CAAC,kBAAkB,4BAA4B,GAAG;AACjE,UAAI;AAAC,cAAM,KAAK,GAAG,OAAO,WAAW,EAAC,YAAY,KAAK,WAAW,MAAM,MAAM,WAAW,WAAW,KAAI,CAAC;AAAA,MAAE,SACpG,OAAO;AAAC,YAAK,MAA0B,SAAS,SAAU,OAAM;AAAA,MAAM;AAAA,IACjF;AACA,QAAI,MAAM,KAAK,GAAG,KAAK,IAAK,SAAS,KAAK,WAAW,SAAS,MAAM;AAChE,YAAM,KAAK,GAAG,KAAK,IAAK,YAAa,QAAM,kBAAkB,IAAI,KAAK,MAAM,KAAK,WAAW,WAAS,KAAK,WAAW,KAAK,CAAC,CAAC;AAAA,EACpI;AAAA,EACA,MAAM,IAAO,KAAqC;AAC9C,UAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAK,SAAS,KAAK,MAAM,GAAG;AAAG,WAAO,MAAM,KAAK,MAAM,GAAG,IAAS;AAAA,EACtG;AAAA,EACA,MAAM,QAAW,MAA+C;AAC5D,QAAI,CAAC,KAAK,OAAQ,QAAO,CAAC;AAC1B,UAAM,OAAO,MAAM,KAAK,GAAG,KAAK,IAAK,WAAW,KAAK,MAAM,IAAI;AAC/D,WAAO,KAAK,IAAI,SAAO,KAAK,GAAG,MAAM,SAAY,SAAY,KAAK,MAAM,KAAK,GAAG,CAAC,CAAM;AAAA,EAC3F;AAAA,EACA,MAAM,aAAgB,QAAgB,SAAiB,SAAyE;AAC5H,UAAM,OAAiB,CAAC;AACxB,UAAM,KAAK,GAAG,KAAK,IAAK,YAAY,KAAK,WAAW,WAAS;AACzD,WAAK,KAAK,MAAM,KAAK;AAAG,mBAAa,KAAK,UAAU,KAAM,wBAAwB;AAAG,aAAO;AAAA,IAChG,GAAG,EAAC,WAAW,iBAAiB,SAAS,MAAM,EAAC,CAAC;AACjD,UAAM,SAAS,MAAM,KAAK,QAAW,IAAI;AACzC,WAAO,OAAO,QAAQ,CAAC,OAAO,UAAU,UAAU,UAAa,QAAQ,KAAK,IAAI,CAAC,EAAC,KAAK,KAAK,KAAK,GAAG,MAAK,CAAC,IAAI,CAAC,CAAC;AAAA,EACpH;AAAA,EACA,MAAM,KAAQ,WAAmB,SAAsF;AACnH,UAAM,OAAuC,CAAC;AAC9C,UAAM,KAAK,GAAG,KAAK,IAAK,YAAY,KAAK,MAAM,WAAS;AACpD,YAAM,QAAQ,KAAK,MAAM,MAAM,KAAK;AACpC,UAAI,QAAQ,OAAO,MAAM,GAAG,EAAG,MAAK,KAAK,EAAC,KAAK,MAAM,KAAK,MAAK,CAAC;AAChE,mBAAa,KAAK,UAAU,KAAM,wBAAwB;AAAG,aAAO;AAAA,IACxE,GAAG,EAAC,UAAS,CAAC;AACd,WAAO;AAAA,EACX;AAAA,EACA,OAAU,KAAa,QAAoD;AACvE,UAAMC,WAAU,KAAK,OAAO,KAAK,MAAM,EAAE,QAAQ,MAAM;AAAC,WAAK,OAAO,OAAOA,QAAO;AAAA,IAAE,CAAC;AACrF,SAAK,OAAO,IAAIA,QAAO;AAAG,WAAOA;AAAA,EACrC;AAAA,EACA,MAAM,QAAuB;AAAC,UAAM,QAAQ,WAAW,CAAC,GAAG,KAAK,MAAM,CAAC;AAAA,EAAE;AAAA,EACzE,MAAM,KAA+B;AACjC,UAAMA,WAAU,KAAK,GAAG,KAAK,IAAK,YAAa,OAAM,OAAM;AACvD,YAAM,MAAM,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG;AAAG,mBAAa,KAAK,4BAA4B;AAC7F,YAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,UAAI,OAAO,UAAU,WAAY,QAAO;AACxC,YAAM,GAAG,SAAS,KAAK,MAAM,KAAK,KAAK,UAAU,EAAC,GAAG,QAAQ,OAAO,aAAY,CAAC,CAAC;AAAG,aAAO;AAAA,IAChG,CAAC,EAAE,QAAQ,MAAM;AAAC,WAAK,OAAO,OAAOA,QAAO;AAAA,IAAE,CAAC;AAC/C,SAAK,OAAO,IAAIA,QAAO;AAAG,WAAOA;AAAA,EACrC;AAAA,EACA,MAAc,OAAU,KAAa,QAAoD;AACrF,WAAO,KAAK,GAAG,KAAK,IAAK,YAAa,OAAM,OAAM;AAC9C,YAAM,MAAM,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,GAAG,WAAW,MAAM,KAAK,MAAM,GAAG,IAAS;AACvF,YAAM,gBAAgB,eAAe,KAAK,QAAQ,GAAG,QAAQ,OAAO,QAAQ;AAC5E,YAAM,UAAU,KAAK,UAAU,KAAK;AACpC,UAAI,YAAY,IAAK,QAAO,gBAAgB,KAAK;AACjD,YAAM,iBAAiB,IAAI,KAAK,eAAe,OAAO,KAAK,SAAS;AACpE,YAAM,GAAG,SAAS,KAAK,MAAM,KAAK,OAAO;AAAG,aAAO,gBAAgB,KAAK;AAAA,IAC5E,CAAC;AAAA,EACL;AAAA,EACA,MAAM,SAAS,YAAoB,OAA8C;AAC7E,UAAM,OAAO,KAAK,UAAU,SAAS,IAAI,GAAG,QAAQ,IAAI,YAAY,EAAE,OAAO,IAAI,EAAE;AACnF,iBAAa,SAAS,OAAO,MAAM,6BAA6B;AAChE,UAAM,SAAS,cAAc,IAAI;AACjC,UAAM,KAAK,OAAe,cAAc,QAAQ,cAAY;AAAC,mBAAa,aAAa,UAAa,aAAa,MAAM,mBAAmB;AAAG,aAAO;AAAA,IAAK,CAAC;AAC1J,UAAM,UAAU,CAAC,EAAC,MAAM,UAAU,KAAK,KAAK,iBAAiB,QAAQ,QAAQ,MAAK,CAAC;AACnF,UAAM,KAAK,OAA4B,oBAAoB,YAAY,cAAY;AAC/E,mBAAa,CAAC,YAAY,KAAK,UAAU,QAAQ,MAAM,KAAK,UAAU,OAAO,GAAG,mBAAmB;AAAG,aAAO;AAAA,IACjH,CAAC;AACD,WAAO;AAAA,EACX;AAAA,EACA,MAAM,OAAO,SAA8B,YAAuC;AAC9E,QAAI,cAAc,KAAK,UAAU,MAAM,KAAK,IAAI,oBAAoB,UAAU,CAAC,MAAM,KAAK,UAAU,OAAO,EAAG,QAAO;AACrH,eAAW,UAAU,SAAS;AAC1B,UAAI,OAAO,QAAQ,KAAK,iBAAiB,OAAO,OAAQ,QAAO;AAC/D,YAAM,OAAO,MAAM,KAAK,IAAY,cAAc,OAAO,MAAM;AAC/D,UAAI,SAAS,UAAa,cAAc,IAAI,MAAM,OAAO,UAAU,IAAI,YAAY,EAAE,OAAO,IAAI,EAAE,eAAe,OAAO,MAAO,QAAO;AAAA,IAC1I;AACA,WAAO;AAAA,EACX;AACJ;;;AEnFO,IAAM,oBAA2C;AAAA,EACpD,UAAU;AAAA,EAAmB,UAAU;AAAA,EAAmB,WAAW;AAAA,EAAoB,WAAW;AACxG;;;ACbA,eAAsB,iBAAiB,SAAgB,QAAsB,OAA2B,MAAkB,YAAuF;AAC7M,QAAM,EAAC,gBAAgB,aAAa,oBAAmB,IAAI;AAC3D,QAAM,WAAS,MAAM,OAAO,SAAS,OAAO,GAAG,UAAQ,iBAAiB,SAAQ,OAAM,MAAK,UAAU;AACrG,aAAU,YAAY,OAAO,OAAO,SAAS,UAAU,GAAG;AACtD,UAAM,OAAK,MAAM,KAAK,CAAAC,UAAMA,MAAK,OAAK,SAAS,MAAM;AACrD,QAAG,SAAS,YAAU,cAAY,MAAM,WAAS,YAAY;AAC7D,YAAQ,KAAK;AAAA,MAAe,EAAC,IAAG,QAAO;AAAA,MAAE;AAAA,MAAK,GAAG,SAAS,EAAE;AAAA,MAAmB,KAAK,YAAU,KAAK,IAAI;AAAA,MACnG,EAAC,OAAM,kBAAiB,QAAO,WAAU,YAAW,SAAS,IAAG,QAAO,EAAC,UAAS,oBAAmB,EAAC;AAAA,MACrG,oBAAoB,KAAK,YAAY;AAAA,MAAE;AAAA,MAAU,YAAY,MAAK,KAAK;AAAA,IAAC,CAAC;AAAA,EACjF;AACA,SAAO;AACX;AACA,SAAS,iBAAiB,OAAc,OAA2B,MAAkB,YAA8E;AAC/J,QAAM,EAAC,gBAAgB,aAAa,oBAAmB,IAAI;AAC3D,QAAM,KAAG,KAAK,IAAI;AAClB,SAAO,MAAM,QAAQ,UAAM;AACvB,UAAM,OAAK,oBAAoB,KAAK,YAAY,EAAE,OAAO,SAAK,CAAC,KAAK,IAAI,KAAK,UAAU,CAAC,KAAK,IAAG,IAAI,QAAO,IAAI,EAAE,CAAC,CAAC,CAAC;AACpH,QAAG,CAAC,KAAK,OAAO,QAAO,CAAC;AACxB,WAAO,CAAC;AAAA,MAAe,EAAC,IAAG,MAAK;AAAA,MAAE;AAAA,MAAK,cAAY,KAAK;AAAA,MAAG;AAAA,MACvD,EAAC,OAAM,wBAAuB,QAAO,WAAU,QAAO,EAAC,UAAS,qBAAoB,EAAC;AAAA,MAAE;AAAA,MAAK;AAAA,MAAU,YAAY,MAAK,KAAK;AAAA,IAAC,CAAC;AAAA,EACtI,CAAC;AACL;;;ACzBA,SAAQ,eAA0D;AAGlE,IAAM,kBAAkB;AACxB,IAAM,SAAS,CAAC,UAAkB,mBAAmB,KAAK,IAAI;AAC9D,IAAM,SAAS,CAAC,OAAe,OAAe,SAAS,OAAO,KAAK,IAAI,mBAAmB,EAAE;AAGrF,IAAM,qBAAN,MAAyB;AAAA,EAE5B,YAA6B,IAAkC,YAAY,mBAAoC,kBAAkB,oBAAoB;AAAxH;AAAkC;AAAgD;AAAuC,SAAK,OAAO,YAAY;AAAA,EAAgB;AAAA,EAD7K;AAAA,EAEjB,MAAM,OAAsB;AACxB,QAAI;AAAC,YAAM,KAAK,GAAG,OAAO,WAAW,EAAC,YAAY,KAAK,WAAW,MAAM,gBAAgB,MAAM,WAAW,WAAW,KAAI,CAAC;AAAA,IAAE,SACpH,OAAO;AAAC,UAAI,EAAE,iBAAiB,YAAY,MAAM,SAAS,SAAU,OAAM;AAAA,IAAM;AAAA,EAC3F;AAAA,EACA,MAAM,OAAO,OAAe,IAAsD;AAC9E,UAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAK,SAAS,KAAK,MAAM,OAAO,OAAO,EAAE,CAAC;AAAG,WAAO,MAAM,KAAK,MAAM,GAAG,IAAI;AAAA,EAC/G;AAAA,EACA,MAAM,OAAO,OAAe,QAA4C;AACpE,UAAM,KAAK,GAAG,KAAK,IAAK,YAAa,QAAM,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC;AAAA,EAC/E;AAAA,EACA,MAAM,WAAW,OAAgC;AAAC,WAAO,OAAO,MAAM,KAAK,GAAG,KAAK,IAAK,SAAS,KAAK,MAAM,gBAAgB,OAAO,KAAK,CAAC,KAAK,CAAC;AAAA,EAAE;AAAA,EACjJ,MAAM,OAAO,OAAe,OAAe,SAAiB,MAA4C;AACpG,UAAM,KAAK,GAAG,KAAK,IAAK,YAAa,OAAM,OAAM;AAC7C,UAAI,OAAO,MAAM,GAAG,SAAS,KAAK,MAAM,gBAAgB,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,MAAO;AACxF,iBAAW,OAAO,KAAM,OAAM,KAAK,SAAS,IAAI,OAAO,GAAG;AAC1D,YAAM,GAAG,SAAS,KAAK,MAAM,gBAAgB,OAAO,KAAK,GAAG,OAAO,OAAO,CAAC;AAAA,IAC/E,CAAC;AAAA,EACL;AAAA,EACA,MAAM,cAAc,OAAiC;AAAC,WAAO,MAAM,KAAK,GAAG,KAAK,IAAK,SAAS,KAAK,MAAM,cAAc,OAAO,KAAK,CAAC,MAAM;AAAA,EAAgB;AAAA,EAC1J,MAAM,SAAS,OAAe,SAA+C;AACzE,UAAM,KAAK,GAAG,KAAK,IAAK,YAAa,OAAM,OAAM;AAC7C,YAAM,MAAM,cAAc,OAAO,KAAK;AAAG,UAAI,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,MAAM,gBAAiB;AACpG,iBAAW,UAAU,QAAS,OAAM,KAAK,SAAS,IAAI,OAAO,MAAM;AACnE,YAAM,GAAG,SAAS,KAAK,MAAM,KAAK,eAAe;AAAA,IACrD,CAAC;AAAA,EACL;AAAA,EACA,MAAM,KAAK,OAAe,QAA4B,QAAgB,OAAe;AACjF,WAAO,KAAK,GAAG,KAAK,IAAK,YAAa,OAAM,OAAM;AAC9C,YAAM,OAA8B,CAAC;AACrC,YAAM,YAAY,SAAS,UAAU,OAAO,KAAK,IAAI,mBAAmB,MAAM,IAAI,MAAM,aAAa,OAAO,KAAK;AACjH,YAAM,OAAO,MAAM,GAAG,YAAY,KAAK,MAAM,WAAS;AAAC,aAAK,KAAK,KAAK,MAAM,MAAM,KAAK,CAAC;AAAG,eAAO;AAAA,MAAK,GAAG,EAAC,WAAW,QAAQ,MAAK,CAAC;AACpI,aAAO,EAAC,OAAO,MAAM,OAAO,KAAK,OAAO,UAAU,OAAO,MAAM,GAAG,SAAS,KAAK,MAAM,cAAc,OAAO,KAAK,CAAC,KAAK,CAAC,EAAC;AAAA,IAC5H,CAAC;AAAA,EACL;AAAA,EACA,MAAc,SAAS,IAAyB,OAAe,KAAyC;AACpG,QAAI,MAAM,GAAG,SAAS,KAAK,MAAM,OAAO,OAAO,IAAI,EAAE,CAAC,EAAG;AACzD,UAAM,EAAC,SAAS,UAAU,WAAW,YAAY,SAAS,UAAU,GAAG,SAAQ,IAAI;AACnF,UAAM,UAA+B,EAAC,GAAG,UAAU,YAAY,IAAI,cAAc,OAAO,SAAO,IAAI,WAAW,KAAK,eAAe,EAAE,IAAI,SAAO,IAAI,EAAE,KAAK,CAAC,EAAC;AAC5J,UAAMC,SAAQ,OAAO,OAAO,mBAAmB,IAAI,SAAS,EAAE,SAAS,IAAI,GAAG,IAAI,MAAM,IAAI;AAC5F,UAAM,GAAG,SAAS,KAAK,MAAM,OAAO,OAAO,IAAI,EAAE,GAAG,KAAK,UAAU,GAAG,CAAC;AACvE,UAAM,GAAG,SAAS,KAAK,MAAM,aAAa,OAAO,KAAK,IAAIA,QAAO,KAAK,UAAU,OAAO,CAAC;AACxF,eAAW,MAAM,IAAI,QAAS,OAAM,GAAG,SAAS,KAAK,MAAM,UAAU,OAAO,KAAK,IAAI,mBAAmB,EAAE,IAAI,MAAMA,QAAO,KAAK,UAAU,OAAO,CAAC;AAClJ,UAAM,GAAG,UAAU,KAAK,MAAM,cAAc,OAAO,KAAK,CAAC;AAAA,EAC7D;AACJ;;;AClDO,SAAS,wBAAwB,UAAgC,CAAC,GAAG;AAC5E,QAAM,aAAa,QAAQ,cAAc;AACzC,WAAS,cAAc,OAAsD;AACzE,UAAM,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,MAAM,QAAQ,SAAkB,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,WAAW,UAAS,GAAG,QAAQ,WAAoB,GAAI,MAAM,KAAK,aAAa,EAAC,YAAY,MAAM,KAAK,WAAU,IAAI,CAAC,EAAE;AAC5N,QAAI,MAAM,SAAS,kBAAmB,QAAO,EAAC,GAAG,MAAM,OAAM,eAAa,MAAM,KAAK,QAAQ,MAAM,YAAY,MAAM,KAAK,YAAY,QAAO,MAAM,KAAK,OAAK,YAAU,WAAW,MAAK,MAAM,KAAK,KAAI;AACtM,QAAI,MAAM,SAAS,kBAAmB,QAAO,EAAC,GAAG,MAAM,OAAM,gBAAc,MAAM,KAAK,UAAU,oBAAoB,QAAO,MAAM,KAAK,OAAK,YAAU,WAAW,MAAK,MAAM,KAAK,KAAI;AACpL,QAAI,MAAM,SAAS,cAAe,QAAO,EAAC,GAAG,MAAM,OAAO,eAAc;AACxE,QAAI,MAAM,SAAS,mBAAoB,QAAO,EAAC,GAAG,MAAM,OAAO,qBAAoB;AACnF,QAAI,MAAM,SAAS,qBAAsB,QAAO,EAAC,GAAG,MAAM,OAAO,sBAAqB;AACtF,QAAI,MAAM,SAAS,SAAU,QAAO,EAAC,GAAG,MAAM,OAAO,mBAAkB;AACvE,QAAI,MAAM,SAAS,gBAAgB,MAAM,SAAS,YAAY,MAAM,KAAK,WAAW,cAAc,MAAM,SAAS,sBAAsB,MAAM,KAAK,WAAW,WAAY,QAAO,EAAC,GAAG,MAAM,OAAO,iBAAgB;AACjN,QAAI,MAAM,SAAS,iBAAiB,MAAM,SAAS,kBAAkB,MAAM,KAAK,WAAW,YAAa,QAAO,EAAC,GAAG,MAAM,OAAO,kBAAkB,QAAQ,YAAW;AACrK,QAAI,MAAM,SAAS,qBAAqB;AACpC,YAAM,SAAS,MAAM,KAAK,QAAQ,MAAM,aAAa,MAAM;AAC3D,UAAI,UAAU,CAAC,WAAW,aAAa,UAAU,aAAa,SAAS,EAAE,SAAS,MAAM,EAAG,QAAO;AAAA,QAAC,GAAG;AAAA,QAClG,OAAO,WAAW,eAAe,MAAM,KAAK,WAAW,cAAc,mBAAmB,eAAe;AAAA,QAAQ,QAAQ,WAAW,YAAY,WAAW,YAAY,YAAY,WAAW,cAAc,cAAc;AAAA,QAAW,MAAM,MAAM,KAAK;AAAA,MAAI;AAAA,IAChQ;AACA,QAAI,MAAM,SAAS,oBAAoB,MAAM,KAAK,WAAW;AACzD,YAAM,SAAS,MAAM,KAAK,UAAU;AACpC,YAAM,QAAQ,WAAW,WAAW,YAAY,kBAAkB,WAAW,WAAW,kBAAkB,mBAAmB,WAAW,WAAW,YAAY,sBAAsB;AACrL,UAAI,MAAO,QAAO,EAAC,GAAG,MAAM,MAAK;AAAA,IACrC;AACA,QAAI,MAAM,SAAS,UAAW,QAAO,EAAC,GAAG,MAAM,OAAO,eAAc;AACpE,QAAI,MAAM,SAAS,aAAc,QAAO,EAAC,GAAG,MAAM,OAAO,gBAAgB,QAAQ,WAAW,MAAM,MAAM,KAAK,OAAM;AACnH,WAAO;AAAA,EACX;AACA,WAAS,eAAe,OAAgC,MAAqC,IAAY,IACrG,UAAgC,OAAkC,CAAC,GAAG,SAAkB,YAAsB,CAAC,GAAwB;AACvI,UAAM,QAAQ,QAAQ,QAAQ,SAAS,KAAK,KAAK,SAAS;AAC1D,WAAO;AAAA,MAAC,IAAI,cAAc,cAAc,KAAK,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAAA,MAAG,MAAM;AAAA,MAAO,OAAO,CAAC,MAAM,OAAO,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,QAAK;AAAA,MACxI,SAAS,WAAW,CAAC,OAAO,SAAS,MAAM,GAAG,OAAO,QAAQ,SAAS,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,MACxJ;AAAA,MAAU,cAAc;AAAA,MAAM,SAAS,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAI,GAAG,SAAS,CAAC,CAAC;AAAA,MAAG,SAAS,CAAC;AAAA,MAC3G,QAAQ,SAAS,SAAS,EAAC,MAAM,WAAW,IAAI,kBAAiB;AAAA,MAAG,QAAQ;AAAA,MAAQ,QAAQ;AAAA,MAAa,UAAU;AAAA,MAAG,WAAW;AAAA,MAAI,WAAW;AAAA,IAAE;AAAA,EAC1J;AACA,WAAS,YAAY,MAAqC,OAAsC;AAC5F,UAAM,SAAmB,CAAC,GAAG,OAAO,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAAG,QAAI,SAAS,MAAM,SAAS;AAChG,WAAO,UAAU,CAAC,KAAK,IAAI,MAAM,GAAG;AAAC,WAAK,IAAI,MAAM;AAAG,aAAO,KAAK,MAAM;AAAG,eAAS,MAAM,KAAK,SAAO,IAAI,OAAO,MAAM,GAAG,SAAS;AAAA,IAAS;AAC7I,WAAO;AAAA,EACX;AAEA,WAAS,oBAAoB,OAAkC,CAAC,GAA8B;AAC1F,WAAO,CAAC,WAAW,WAAW,WAAW,iBAAiB,WAAW,SAAS,EAAE,QAAQ,YAAU;AAC9F,YAAM,MAAM,KAAK,OAAO,CAAAC,SAAOA,KAAI,WAAW,MAAM,EAAE,GAAG,EAAE;AAAG,aAAO,MAAM,CAAC,GAAG,IAAI,CAAC;AAAA,IACxF,CAAC;AAAA,EACL;AAEA,SAAO,EAAC,eAAc,gBAAe,aAAY,oBAAmB;AACpE;;;ACxCA,IAAM,QAAQ,CAAC,GAAwB,MAA2B,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,cAAc,EAAE,EAAE;AAG/G,IAAM,gBAAN,MAAoB;AAAA,EAIvB,YAAY,IAAkC,UAAgC,CAAC,GAAG;AAApC;AAC1C,SAAK,aAAa,wBAAwB,OAAO;AAAG,SAAK,MAAM,WAAS,QAAQ,aAAa,KAAK;AAClG,SAAK,QAAQ,IAAI,mBAAmB,IAAI,QAAQ,YAAY,QAAQ,cAAc,mBAAmB,SAAS;AAAA,EAClH;AAAA,EANiB;AAAA,EACA;AAAA,EACA;AAAA,EAKjB,OAAsB;AAAC,WAAO,KAAK,MAAM,KAAK;AAAA,EAAE;AAAA,EAChD,MAAM,YAAY,SAAiB,QAAsC;AACrE,UAAM,UAAU,KAAK,IAAI,GAAG,cAAc,WAAW;AACrD,QAAI;AACA,UAAI,QAAQ,MAAM,KAAK,MAAM,WAAW,OAAO;AAC/C,YAAM,CAAC,MAAM,QAAQ,IAAI,MAAM,QAAQ,IAAI,CAAC,OAAO,OAAO,SAAS,OAAO,GAAG,GAAG,KAAK,MAAM,cAAc,OAAO,CAAC,CAAC;AAAG,UAAI,CAAC,KAAK,UAAU,CAAC,SAAU;AACpJ,YAAM,QAAQ,EAAC,IAAI,QAAO,GAAG,QAAQ,MAAM,SAAS,QAAQ,OAAO;AACnE,UAAI,SAAS;AAAM,YAAM,iBAAiB,oBAAI,IAAY;AAC1D,aAAO,OAAO,QAAQ;AAClB,cAAM,UAAU,OAAO,QAAQ,WAAS;AACpC,cAAI,MAAM,KAAK,aAAa,MAAM,OAAQ,gBAAe,IAAI,KAAK,UAAU,CAAC,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,KAAK,UAAU,EAAE,CAAC,CAAC;AACjJ,gBAAM,WAAW,KAAK,WAAW,cAAc,KAAK;AAAG,cAAI,CAAC,YAAY,CAAC,MAAM,OAAQ,QAAO,CAAC;AAC/F,gBAAM,OAAO,MAAM,KAAK,CAAAC,UAAQA,MAAK,OAAO,MAAM,MAAM,GAAG,YAAY,MAAM,KAAK;AAClF,gBAAMC,YAAW,QAAQ,MAAM,KAAK,YAAY,EAAC,GAAG,MAAM,OAAO,MAAM,KAAK,UAAS,IAAI;AACzF,gBAAM,MAAM,QAAQ,UAAU,YAAY,CAAC,SAAS,IAAI,CAAC,GAAG,MAAM,QAAQ,WAAW,MAAM,UAAU,KAAK,QAAQ,cAAc,iBAAiB;AACjJ,iBAAO,CAAC,KAAK,WAAW,eAAe,OAAOA,WAAU,KAAK,MAAM,IAAI,UAAU,YAAY,CAAC,SAAS,IAAI,KAAK,WAAW,oBAAoB,MAAM,YAAY,GAAG,MAAM,KAAK,SAAS,KAAK,WAAW,YAAY,MAAM,KAAK,CAAC,CAAC;AAAA,QACrO,CAAC;AACD,cAAM,UAAU,OAAO,GAAG,EAAE,EAAG;AAAU,cAAM,KAAK,MAAM,OAAO,SAAS,OAAO,SAAS,OAAO;AAAG,gBAAQ;AAC5G,YAAI,OAAO,SAAS,IAAK;AACzB,iBAAS,MAAM,OAAO,OAAO,SAAS,OAAO,GAAG;AAAA,MACpD;AACA,UAAI,SAAU,OAAM,KAAK,MAAM,SAAS,SAAS,MAAM,iBAAiB,SAAS,QAAQ,OAAO,gBAAgB,KAAK,UAAU,CAAC;AAChI,WAAK,IAAI,EAAC,aAAa,SAAS,OAAO,oBAAoB,QAAQ,WAAW,YAAY,KAAK,IAAI,IAAI,QAAO,CAAC;AAAA,IACnH,SAAS,OAAO;AACZ,YAAM,OAAQ,OAA2B;AACzC,WAAK,IAAI,EAAC,aAAa,SAAS,OAAO,oBAAoB,QAAQ,WAAW,MAAM,QAAQ,iBAAiB,KAAK,IAAI,IAAI,OAAO,8BAA8B,YAAY,KAAK,IAAI,IAAI,QAAO,CAAC;AAChM,YAAM;AAAA,IACV;AAAA,EACJ;AAAA,EACA,MAAM,OAAO,QAAuB,SAAiB,QAAgB,MAAkC;AACnG,iBAAa,0BAA0B,KAAK,KAAK,KAAK,KAAK,CAAC,WAAW,WAAW,WAAW,EAAE,SAAS,KAAK,MAAM,GAAG,kBAAkB;AACxI,UAAM,QAAQ,EAAC,IAAI,QAAO,GAAG,QAAQ,MAAM,SAAS,QAAQ,OAAO,GAAG,OAAO,MAAM,KAAK,CAAAD,UAAQA,MAAK,OAAO,MAAM;AAClH,iBAAa,MAAM,gBAAgB;AACnC,UAAM,EAAC,aAAa,CAAC,GAAG,SAAS,GAAG,SAAQ,IAAI;AAChD,UAAM,KAAK,QAAQ,UAAU,YAAY,QAAQ,KAAK,cAAc,QAAQ,KAAK,QAAQ,cAAc,iBAAiB;AACxH,UAAM,SAAS,KAAK,WAAW,eAAe,OAAO,MAAM,IAAI,KAAK,IAAI,GAAG,UAAU,YAAY,SAAS,KAAK,WAAW,YAAY,MAAM,KAAK,CAAC;AAClJ,UAAM,KAAK,MAAM,OAAO,SAAS,MAAM;AACvC,UAAM,KAAK,QAAQ,WAAW,EAAC,SAAQ,QAAO,OAAM,CAAC;AAAA,EACzD;AAAA,EACA,MAAM,OAAO,QAAuB,SAAiB,IAAY;AAC7D,QAAI,CAAC,GAAG,WAAW,WAAW,EAAG,QAAO,OAAO,OAAO,SAAS,EAAE;AACjE,UAAM,OAAO,QAAQ,SAAS,EAAC,OAAO,EAAC,CAAC;AAAG,UAAM,KAAK,YAAY,SAAS,MAAM;AACjF,WAAO,MAAM,KAAK,MAAM,OAAO,SAAS,EAAE,KAAK,OAAO,OAAO,SAAS,EAAE;AAAA,EAC5E;AAAA,EACA,MAAM,QAAQ,QAAuB,SAAiB,QAA2B,CAAC,GAA8B;AAC5G,QAAI,MAAM,SAAS,cAAc,MAAM,UAAU,MAAM,WAAW,YAAa,QAAO,OAAO,QAAQ,SAAS,KAAK;AACnH,UAAM,KAAK,YAAY,SAAS,MAAM;AACtC,UAAM,EAAC,QAAQ,QAAQ,IAAI,GAAG,OAAM,IAAI,OAAO,cAAc,cAAc,KAAK,UAAU,EAAC,GAAG,QAAQ,MAAK,CAAC,CAAC;AAC7G,iBAAa,OAAO,cAAc,KAAK,KAAK,QAAQ,KAAK,SAAS,KAAK,eAAe;AACtF,UAAM,QAAQ,YAAY,QAAQ,SAAS,WAAW;AACtD,UAAM,SAAS,MAAM,OAAO,QAAQ,SAAS,EAAC,GAAG,QAAQ,OAAO,IAAG,CAAC;AACpE,UAAM,YAAY,MAAM,KAAK,MAAM,KAAK,SAAS,MAAM,QAAQ,OAAO,aAAa,GAAG,KAAK;AAC3F,QAAI,UAAU,MAAM,aAAa,OAAO,YAAY,MAAM,gBAAgB,UAAU,UAAW,OAAM,IAAI,YAAY,cAAc;AACnI,UAAM,YAAY,OAAO,MAAM,MAAM,OAAO,UAAU,CAAC,GAAG,UAAU,IAAI,IAAI,UAAU,MAAM,IAAI,UAAQ,KAAK,EAAE,CAAC;AAChH,UAAM,QAAQ,CAAC,GAAG,WAAW,GAAG,UAAU,KAAK,EAAE,KAAK,KAAK,EAAE,MAAM,GAAG,KAAK;AAC3E,UAAM,WAAW,MAAM,OAAO,UAAQ,QAAQ,IAAI,KAAK,EAAE,CAAC,EAAE,QAAQ,aAAa,MAAM,SAAS;AAChG,UAAM,OAAe;AAAA,MAAC,SAAS;AAAA,MAAG,OAAO;AAAA,MAAS,OAAO;AAAA,MAAa,UAAU,OAAO;AAAA,MAAU,aAAa,UAAU;AAAA,MACpH,SAAS,OAAO,UAAU,KAAK;AAAA,MAAY,YAAY,OAAO,aAAa,KAAK;AAAA,IAAQ;AAC5F,WAAO;AAAA,MAAC,UAAU,OAAO;AAAA,MAAU,OAAO,OAAO,QAAQ,UAAU;AAAA,MAAO;AAAA,MACtE,GAAI,KAAK,SAAS,OAAO,SAAS,KAAK,YAAY,UAAU,QAAQ,EAAC,YAAY,KAAK,UAAU,IAAI,EAAC,IAAI,CAAC;AAAA,IAAE;AAAA,EACrH;AACJ;AACA,eAAe,SAAS,QAAuB,OAA6C;AACxF,QAAM,QAA6B,CAAC;AAAG,MAAI;AAC3C,KAAG;AAAC,UAAM,OAAO,MAAM,OAAO,MAAM,OAAO,EAAC,MAAM,OAAO,OAAO,KAAK,GAAI,SAAS,EAAC,OAAM,IAAI,CAAC,EAAE,CAAC;AAAG,UAAM,KAAK,GAAG,KAAK,KAAK;AAAG,aAAS,KAAK;AAAA,EAAW,SAAS;AACjK,SAAO;AACX;AACA,SAAS,YAAY,QAA4B,OAAe,OAAmC;AAC/F,MAAI,CAAC,OAAQ;AACb,MAAI;AAAe,MAAI;AAAC,YAAQ,KAAK,MAAM,MAAM;AAAA,EAAE,QAAQ;AAAC,UAAM,IAAI,YAAY,gBAAgB;AAAA,EAAE;AACpG,eAAa,OAAO,YAAY,KAAK,MAAM,UAAU,SAAS,MAAM,UAAU,OAAO,uBAAuB;AAC5G,eAAa,CAAC,MAAM,QAAQ,MAAM,WAAW,MAAM,UAAU,MAAM,WAAW,EAAE,MAAM,CAAAE,WAAS,OAAO,cAAcA,MAAK,KAAKA,UAAS,CAAC,GAAG,gBAAgB;AAAG,SAAO;AACzK;AACA,SAAS,QAAQ,UAAgC,MAAiC,QAAgB,UAAkB,SAAwC;AACxJ,QAAM,OAAO,KAAK,KAAK,CAAAC,SAAOA,KAAI,WAAW,QAAQ,SAAS;AAC9D,MAAI,QAAQ,SAAS,UAAU,oBAAqB,QAAO,GAAG,KAAK,EAAE;AACrE,MAAI,SAAS,WAAY,QAAO,GAAG,SAAS,UAAU,IAAI,SAAS,KAAK,IAAI,SAAS,QAAQ,EAAE,GAAG,CAAC,qBAAqB,mBAAmB,EAAE,SAAS,SAAS,KAAK,KAAK,SAAS,WAAW,QAAQ,IAAI,MAAM,WAAW,EAAE;AAC5N,QAAM,MAAM,KAAK,KAAK,CAAAA,SAAO,CAAC,QAAQ,iBAAiB,QAAQ,SAAS,EAAE,SAASA,KAAI,MAAM,CAAC;AAC9F,SAAO,MAAM,KAAK,UAAU,CAAC,QAAQ,SAAS,OAAO,IAAI,QAAQ,IAAI,EAAE,CAAC,IAAI;AAChF;;;AC9FA,eAAsB,eAAe,SAAkC,SACnE,SAAiB,KAAa,SAAuC;AACrE,OAAK,MAAM,QAAQ,IAAW,GAAG,IAAI,KAAM;AAC3C,QAAM,QAAQ,MAAM,QAAQ,KAAK,OAAO;AACxC,QAAM,QAAQ,MAAM,QAAQ,OAAc,KAAK,SAAO,OAAO,EAAC,SAAS,EAAC,aAAa,WAAW,GAAG,kBAAkB,MAAM,UAAU,QAAO,EAAC,CAAC;AAC9I,MAAI,MAAM,KAAM;AAChB,MAAI;AAAC,UAAM,QAAQ,QAAQ,SAAS,MAAM,OAAO;AAAA,EAAE,SAC5C,OAAO;AACV,QAAI,iBAAiB,eAAe,MAAM,SAAS,qBAAqB;AACpE,YAAM,SAAS,MAAM,QAAQ,KAAK,OAAO;AACzC,YAAM,QAAQ,OAAc,KAAK,SAAO,KAAK,QAAQ,gBAAgB,MAAM,QAAQ,eAAe,IAAI,OAAO,MAAO;AAAA,QAChH,SAAS,EAAC,GAAG,MAAM,SAAS,aAAa,WAAW,GAAG,kBAAkB,OAAO,SAAQ;AAAA,MAAC,CAAC;AAAA,IAClG;AACA,UAAM;AAAA,EACV;AACA,QAAM,QAAQ,OAAc,KAAK,UAAQ,EAAC,GAAG,KAAM,MAAM,KAAI,EAAE;AACnE;;;ACjBO,IAAM,mBAAmB,CAAC,OAAe,WAAmB,oBAAoB,KAAK,UAAU,CAAC,OAAO,MAAM,CAAC;AAErH,eAAsB,qBAAqB,SAAuB,SAC9D,KAAsD,SAAiE;AACvH,QAAM,MAAM,oBAAI,IAAI,CAAC,IAAI,YAAY,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;AAC1D,MAAI;AACJ,MAAI;AAAC,YAAQ,MAAM,QAAQ,KAAK,IAAI,OAAO;AAAA,EAAE,SACtC,OAAO;AAAC,QAAI,QAAQ,WAAW,YAAa,MAA0B,SAAS,kBAAmB,QAAO;AAAa,UAAM;AAAA,EAAM;AACzI,MAAI,QAAQ,MAAM,MAAM,OAAO,UAAQ,IAAI,IAAI,KAAK,EAAE,CAAC;AACvD,WAAS,QAAQ,GAAG,QAAQ,MAAM,MAAM,QAAQ,SAAS;AACrD,UAAM,WAAW,MAAM,MAAM,OAAO,UAAQ,IAAI,IAAI,KAAK,UAAU,QAAQ,CAAC;AAC5E,QAAI,SAAS,MAAM,UAAQ,IAAI,IAAI,KAAK,EAAE,CAAC,EAAG;AAC9C,eAAW,SAAS,SAAU,KAAI,IAAI,MAAM,EAAE;AAAA,EAClD;AACA,UAAQ,MAAM,MAAM,OAAO,UAAQ,IAAI,IAAI,KAAK,EAAE,CAAC;AACnD,aAAW,QAAQ,MAAM,OAAO,CAAAC,UAAQ,CAAC,CAAC,aAAY,WAAW,EAAE,SAASA,MAAK,MAAM,CAAC,EAAG,OAAM,mBAAmB,SAAS,SAAS,KAAK,SAAS,IAAI;AACxJ,QAAM,SAAS,MAAM,QAAQ,KAAK,IAAI,OAAO,GAAG,SAAS,OAAO,MAAM,OAAO,UAAQ,IAAI,IAAI,KAAK,EAAE,KAAK,CAAC,CAAC,aAAY,WAAW,EAAE,SAAS,KAAK,MAAM,CAAC;AACzJ,MAAI,QAAQ,WAAW,SAAU,QAAO,OAAO,SAAS,eAAe;AACvE,QAAM,UAAU,OAAO,OAAO,UAAQ,QAAQ,SAAS,KAAK,EAAE,CAAC;AAC/D,MAAI,QAAQ,KAAK,UAAQ,KAAK,SAAS,UAAU,SAAS,EAAG,QAAO;AACpE,MAAI,QAAQ,KAAK,UAAQ,KAAK,SAAS,UAAU,QAAQ,EAAG,QAAO;AACnE,QAAM,SAAS,QAAQ,WAAW,UAAU,WAAW;AACvD,SAAO,QAAQ,MAAM,UAAQ,KAAK,SAAS,UAAU,MAAM,IAAI,QAAQ,WAAW,UAAU,WAAW,YAAY,QAAQ,WAAW,UAAU,YAAY;AAChK;AACA,eAAe,mBAAmB,SAAuB,SAAkC,KAAsD,SAAwB,MAAiC;AACtM,QAAM,SAAS,QAAQ,QAAQ,YAAY,cAAc,KAAK,UAAU,CAAC,IAAI,eAAe,IAAI,UAAU,QAAQ,aAAa,IAAI,SAAS,KAAK,IAAI,MAAM,CAAC,CAAC;AAC7J,MAAI,KAAK,SAAS,OAAO,WAAW;AAChC,QAAI,WAAW,aAAa,CAAC,QAAQ,SAAS,KAAK,EAAE,KAAK,KAAK,SAAS,OAAO,QAAQ,SAAS,KAAK,EAAE,GAAI;AAC3G,QAAI,WAAW,WAAW,KAAK,SAAS,WAAW,QAAS;AAC5D,UAAM;AAAA,MAAe;AAAA,MAAS;AAAA,MAAS,IAAI;AAAA,MAAS,yBAAyB;AAAA,MACzE,EAAC,MAAM,mBAAmB,QAAQ,KAAK,IAAI,WAAW,OAAM;AAAA,IAAC;AAAA,EACrE;AACA,QAAM,QAAQ,MAAM,QAAQ,OAAsB,iBAAiB,IAAI,eAAe,IAAI,QAAQ,GAAG,UAAQ,EAAC,GAAG,KAAM,UAAU,EAAC,GAAG,IAAK,UAAU,CAAC,KAAK,EAAE,GAAG,UAAS,EAAC,EAAE;AAC3K,UAAQ,WAAW,MAAM;AAC7B;AACA,eAAsB,qBAAqB,SAAuB,SAAkC,SAChG,SAAkG;AAClG,eAAa,iBAAiB,KAAK,QAAQ,WAAW,KAAK,CAAC,SAAQ,UAAS,QAAQ,EAAE,SAAS,QAAQ,MAAM,GAAG,wBAAwB;AACzI,QAAM,QAAQ,MAAM,QAAQ,KAAK,OAAO,GAAG,QAAQ,MAAM,QAAQ,iBAAiB,GAAG,SAAS,MAAM,QAAQ,OAAO,SAAS,QAAQ,QAAQ;AAC5I,eAAa,MAAM,SAAS,WAAW,MAAM,SAAS,KAAK,OAAK,EAAE,SAAS,MAAM,QAAQ,EAAE,OAAO,MAAM,MAAM,EAAE,OAAO,SAAS,aAAa,CAAC,GAAG,sBAAsB;AACvK,eAAa,OAAO,SAAS,cAAc,OAAO,cAAc,QAAW,mBAAmB;AAC9F,QAAM,QAAQ,OAAsB,iBAAiB,SAAS,OAAO,EAAE,GAAG,SAAO;AAC7E,QAAI,KAAK,gBAAgB,QAAQ,aAAa;AAAC,mBAAa,IAAI,WAAW,QAAQ,QAAQ,sBAAsB;AAAG,aAAO;AAAA,IAAI;AAC/H,iBAAa,CAAC,OAAO,IAAI,WAAW,UAAU,mBAAmB;AACjE,iBAAa,QAAQ,WAAW,YAAY,KAAK,WAAW,SAAS,iBAAiB;AACtF,WAAO,EAAC,SAAS,UAAU,OAAO,IAAI,aAAa,QAAQ,aAAa,QAAQ,QAAQ,QAAQ,UAAU,KAAK,YAAY,CAAC,EAAC;AAAA,EACjI,CAAC;AACD,MAAI,QAAQ,WAAW,SAAU,OAAM,eAAe,SAAS,SAAS,SAAS,uBAAuB,KAAK,UAAU,CAAC,SAAQ,OAAO,IAAG,QAAQ,WAAW,CAAC,GAAG,EAAC,MAAK,+BAA8B,UAAS,OAAO,GAAE,CAAC;AAC5N;;;AClCO,SAAS,sBAAsB,SAAkB;AACpD,MAAI,UAAU;AACd,QAAMC,WAAU,oBAAI,IAA4C;AAChE,QAAM,SAAS,CAAC,QAAkB;AAC9B,iBAAa,CAAC,SAAS,kBAAkB;AACzC,QAAI,MAAMA,SAAQ,IAAI,IAAI,EAAE;AAC5B,QAAI,CAAC,KAAK;AAAC,YAAM,QAAQ,SAAS,GAAG,EAAE,QAAQ,MAAM;AAAC,QAAAA,SAAQ,OAAO,IAAI,EAAE;AAAA,MAAE,CAAC;AAAG,MAAAA,SAAQ,IAAI,IAAI,IAAI,GAAG;AAAA,IAAE;AAC1G,WAAO;AAAA,EACX;AACA,SAAO;AAAA,IACH,eAAc,OAAM,SAAe,aAAmB;AAClD,YAAM,QAAM,MAAM,QAAQ,QAAQ,KAAK,OAAO,GAAE,SAAO,YAAU,MAAM,QAAQ,QAAQ,KAAK,SAAQ,QAAQ,GAAG,OAAK;AACpH,YAAM,OAAK,QAAQ,cAAc,OAAO,SAAK,IAAI,WAAS,QAAQ,UAAU,MAAM,KAAG,CAAC;AACtF,YAAM,YAAW,MAAM,QAAQ,UAAU,KAAK;AAC9C,aAAO,EAAC,WAAU,UAAS,KAAK,WAAS,IAAE,KAAK,CAAC,IAAE,QAAU,UAAS,KAAK,WAAS,GAAE,UAAS,KAAK,WAAS,KAAG,QAAQ,uBAAuB,KAAK,MAAI,KAAI;AAAA,IAChK;AAAA,IACA,iBAAiB,YAAa,MAAM,QAAQ,UAAU,KAAK;AAAA,IAC3D,WAAW,OAAO,SAAiB,YAAoC;AACnE,mBAAa,CAAC,SAAS,kBAAkB;AACzC,YAAM,UAAU,KAAK,IAAI,GAAG,cAAc,cAAc,KAAK,UAAU,CAAC,SAAS,QAAQ,WAAW,CAAC,CAAC;AACtG,UAAI;AACJ,UAAI;AACA,cAAM,MAAM,QAAQ,SAAS,SAAS,OAAO;AAC7C,gBAAQ,IAAI,EAAC,aAAa,SAAS,OAAO,kBAAkB,QAAQ,WAAW,YAAY,KAAK,IAAI,IAAI,QAAO,CAAC;AAAA,MACpH,SAAS,OAAO;AACZ,gBAAQ,IAAI,EAAC,aAAa,SAAS,OAAO,kBAAkB,QAAQ,WAAW,MAAM,SAAS,OAAO,2BAA2B,GAAG,YAAY,KAAK,IAAI,IAAI,QAAO,CAAC;AACpK,cAAM;AAAA,MACV;AACA,aAAO,OAAO,GAAG;AAAA,IACrB;AAAA,IACA,eAAe,OAAO,SAAiB,YAA4F;AAC/H,YAAM,qBAAqB,QAAQ,SAAS,QAAQ,SAAS,SAAS,OAAO;AAC7E,iBAAW,OAAO,MAAM,QAAQ,QAAQ,IAAgB,iBAAiB,OAAO,KAAK,CAAC,EAAG,KAAI,IAAI,aAAa,QAAQ,UAAU;AAC5H,cAAMA,SAAQ,IAAI,IAAI,EAAE,GAAG,MAAM,MAAM;AAAA,QAAC,CAAC;AAAG,cAAM,OAAO,GAAG;AAAA,MAChE;AACA,YAAM,QAAQ,MAAM,QAAQ,QAAQ,IAAgB,iBAAiB,OAAO,KAAK,CAAC,GAAG,OAAO,SAAO,IAAI,aAAa,QAAQ,QAAQ;AACpI,UAAI,QAAQ,WAAW,YAAY,KAAK,MAAM,SAAO,CAAC,aAAY,UAAS,WAAW,EAAE,SAAS,IAAI,KAAK,CAAC,EAAG,OAAM,2BAA2B,SAAS,SAAS,QAAQ,UAAU,QAAQ,WAAW;AAAA,IAC1M;AAAA,IACA,kBAAkB,OAAO,SAAiB,aAAqB;AAC3D,YAAM,QAAQ,QAAQ,OAAO,SAAS,QAAQ;AAC9C,YAAM,OAAO,MAAM,QAAQ,QAAQ,IAAgB,iBAAiB,OAAO,KAAK,CAAC;AACjF,aAAO,KAAK,OAAO,SAAO,IAAI,aAAa,QAAQ,EAAE,IAAI,IAAI;AAAA,IACjE;AAAA,IACA,MAAM,OAAO;AACT,UAAI,QAAS;AACb,YAAM,SAAoB,CAAC;AAC3B,iBAAW,SAAS,MAAM,QAAQ,QAAQ,QAAQ,GAAG;AACjD,YAAI,QAAS;AACb,mBAAW,OAAO,MAAM,QAAQ,QAAQ,IAAgB,iBAAiB,MAAM,EAAE,KAAK,CAAC,GAAG;AACtF,cAAI,QAAS;AACb,cAAI,CAAC,CAAC,aAAa,UAAU,WAAW,EAAE,SAAS,IAAI,KAAK,GAAG;AAAC,gBAAI;AAAC,oBAAM,OAAO,GAAG;AAAA,YAAE,SAAS,OAAO;AAAC,qBAAO,KAAK,KAAK;AAAA,YAAE;AAAA,UAAC;AAAA,QAChI;AAAA,MACJ;AACA,iBAAW,OAAO,MAAM,QAAQ,QAAQ,KAAoB,mBAAmB,WAAS,MAAM,WAAW,YAAY,CAAC,MAAM,OAAO,GAAG;AAClI,YAAI,CAAC,IAAI,MAAM,WAAW,CAAC,IAAI,MAAM,SAAU;AAC/C,YAAI;AAAC,gBAAM,2BAA2B,SAAS,IAAI,MAAM,SAAS,IAAI,MAAM,UAAU,IAAI,MAAM,WAAW;AAAA,QAAE,SAAS,OAAO;AAAC,iBAAO,KAAK,KAAK;AAAA,QAAE;AAAA,MACrJ;AACA,UAAI,OAAO,OAAQ,OAAM,IAAI,eAAe,QAAQ,8BAA8B;AAAA,IACtF;AAAA,IACA,MAAM,UAAU;AAAC,gBAAU;AAAM,YAAM,QAAQ,WAAW,CAAC,GAAGA,SAAQ,OAAO,CAAC,CAAC;AAAA,IAAE;AAAA,EACrF;AACJ;AAEA,eAAsB,2BAA2B,WAAkC,QAAkE;AACjJ,QAAM,OAAO,OAAO,cAAc,OAAO,SAAO,IAAI,WAAW,UAAU,MAAM,KAAK,CAAC;AACrF,eAAa,KAAK,UAAU,MAAM,IAAI,IAAI,KAAK,IAAI,SAAO,IAAI,EAAE,CAAC,EAAE,SAAS,KAAK,QAAQ,4BAA4B;AACrH,QAAM,UAAU,SAAS,IAAI;AACjC;AAEA,eAAe,QAAQ,SAAkB,SAAiB,SAAoD;AAC1G,eAAa,OAAO,QAAQ,gBAAgB,YAAY,yBAAyB,KAAK,QAAQ,WAAW,GAAG,sBAAsB;AAClI,eAAa,EAAE,MAAM,QAAQ,QAAQ,KAAK,OAAO,GAAG,WAAU,gBAAgB;AAC9E,QAAM,SAAS,MAAM,QAAQ,QAAQ,OAAO,SAAS,QAAQ,QAAQ;AACrE,QAAM,UAAU,MAAM,QAAQ,QAAQ,IAAmB,iBAAiB,SAAS,OAAO,EAAE,CAAC;AAC7F,eAAa,OAAO,cAAc,WAAc,CAAC,WAAW,QAAQ,WAAW,YAAY,QAAQ,UAAU,uBAAuB;AACpI,QAAM,SAAS,MAAM,QAAQ,QAAQ,IAAgB,sBAAsB,QAAQ,WAAW;AAC9F,MAAI,QAAQ;AACR,iBAAa,OAAO,kBAAkB,WAAW,OAAO,aAAa,QAAQ,aAAa,OAAO,mBAAmB,OAAO,oBAAoB,QAAQ,qBAC/I,CAAC,OAAO,aAAa,OAAO,eAAe,QAAQ,aAAa,mBAAmB,sBAAsB;AACjH,UAAM,WAAW,MAAM,QAAQ,QAAQ,IAAgB,iBAAiB,OAAO,IAAI,KAAK,SAAO,IAAI,OAAO,OAAO,EAAE;AACnH,iBAAa,SAAS,qCAAqC;AAC3D,WAAO,gBAAgB,SAAS,SAAS,OAAO;AAAA,EACpD;AACA,eAAa,OAAO,SAAS,cAAc,OAAO,WAAW,aAAa,wBAAwB;AAClG,eAAa,OAAO,aAAa,QAAQ,kBAAkB,mBAAmB;AAC9E,QAAM,QAAQ,MAAM,QAAQ,QAAQ,KAAK,OAAO;AAChD,eAAa,MAAM,YAAY,6BAA6B;AAC5D,QAAM,2BAA2B,QAAQ,WAAW,MAAM;AAC1D,eAAa,OAAO,cAAc,KAAK,SAAO,IAAI,WAAW,QAAQ,UAAU,MAAM,GAAG,yBAAyB;AACjH,QAAM,KAAK,cAAc,KAAK,UAAU,CAAC,SAAS,OAAO,IAAI,OAAO,QAAQ,CAAC,CAAC;AAC9E,QAAM,YAAY,QAAQ,aAAa;AACvC,eAAa,CAAC,iBAAiB,WAAW,EAAE,SAAS,SAAS,GAAG,6BAA6B;AAC9F,QAAM,QAAQ,MAAM,QAAQ,QAAQ,OAAmB,iBAAiB,SAAS,cAAY;AACzF,iBAAa,CAAC,UAAU,KAAK,SAAO,IAAI,aAAa,OAAO,MAAM,IAAI,UAAU,WAAW,GAAG,8BAA8B;AAC5H,UAAM,OAAO,UAAU,KAAK,SAAO,IAAI,OAAO,MAAM,IAAI,aAAa,OAAO,MAAM,kBAAkB,IAAI,MAAM,MAAM,kBAAkB,MAAM,CAAC;AAC7I,QAAI,MAAM;AAAC,mBAAa,CAAC,KAAK,aAAa,KAAK,cAAc,WAAW,uCAAuC;AAAG,aAAO;AAAA,IAAU;AACpI,iBAAa,CAAC,UAAU,KAAK,SAAO,IAAI,aAAa,OAAO,MAAM,CAAC,CAAC,aAAa,QAAQ,EAAE,SAAS,IAAI,KAAK,CAAC,GAAG,8BAA8B;AAC/I,kBAAc,UAAU,UAAU,KAAK,KAAK,wBAAwB;AACpE,WAAO,CAAC,GAAG,YAAY,CAAC,GAAG,OAAO,OAAO,QAAQ,SAAS,IAAI,QAAQ,UAAU,MAAM,CAAC;AAAA,EAC3F,CAAC;AACD,QAAM,QAAQ,QAAQ,OAAO,oBAAkB,IAAG,SAAK,OAAK,EAAC,eAAc,SAAQ,UAAS,OAAO,IAAG,gBAAe,OAAO,UAAS,OAAM,GAAE,CAAC;AAC9I,QAAM,WAAW,MAAM,KAAK,SAAO,IAAI,OAAO,MAAM,IAAI,aAAa,OAAO,MAAM,kBAAkB,IAAI,MAAM,MAAM,kBAAkB,MAAM,CAAC;AAC7I,SAAO,gBAAgB,SAAS,SAAS,QAAQ;AACrD;AACA,eAAe,gBAAgB,SAAkB,SAAiC,KAAkC;AAChH,QAAM,QAAQ,QAAQ,OAAmB,sBAAsB,QAAQ,aAAa,cAAY;AAC5F,iBAAa,CAAC,YAAY,SAAS,OAAO,IAAI,OAAO,SAAS,mBAAmB,SAAS,oBAAoB,QAAQ,qBAC9G,CAAC,SAAS,aAAa,SAAS,eAAe,QAAQ,aAAa,mBAAmB,sBAAsB;AACrH,WAAO;AAAA,MAAC,QAAQ;AAAA,MAAG,IAAI,IAAI;AAAA,MAAI,eAAe,IAAI;AAAA,MAAe,UAAU,IAAI;AAAA,MAC3E,gBAAgB,IAAI;AAAA,MAAgB,iBAAiB,QAAQ;AAAA,MAAkB,GAAI,IAAI,YAAY,EAAC,WAAW,IAAI,UAAS,IAAI,CAAC;AAAA,IAAE;AAAA,EAC3I,CAAC;AACD,SAAO;AACX;AAEA,eAAe,QAAQ,SAAkB,KAA+C;AACpF,QAAM,UAAU,KAAK,IAAI;AACzB,MAAI;AACA,UAAM,UAAU,MAAM,QAAQ,QAAQ,IAAmB,iBAAiB,IAAI,eAAe,IAAI,QAAQ,CAAC;AAC1G,QAAI,WAAW,CAAC,QAAQ,SAAS;AAC7B,YAAMC,SAAQ,MAAM,qBAAqB,QAAQ,SAAS,QAAQ,SAAS,KAAK,OAAO;AACvF,YAAMC,WAAU,MAAM,KAAK,SAAS,EAAC,GAAG,KAAK,OAAAD,QAAO,WAAW,KAAK,IAAI,EAAC,CAAC;AAC1E,UAAIA,WAAU,IAAI,MAAO,SAAQ,IAAI,EAAC,aAAY,QAAQ,aAAa,SAAQ,IAAI,eAAe,OAAM,oBAAoB,QAAQ,QAAQ,QAAOA,WAAQ,aAAWA,WAAQ,YAAU,YAAU,WAAW,MAAKC,SAAQ,MAAM,YAAW,KAAK,IAAI,IAAE,QAAO,CAAC;AAC9P,UAAI,QAAQ,WAAW,YAAYD,WAAU,WAAW;AACpD,cAAM,OAAO,MAAM,QAAQ,QAAQ,IAAgB,iBAAiB,IAAI,aAAa;AACrF,YAAI,MAAM,OAAO,SAAO,IAAI,aAAa,IAAI,QAAQ,EAAE,MAAM,SAAO,CAAC,WAAU,aAAY,UAAS,WAAW,EAAE,SAAS,IAAI,KAAK,CAAC,EAAG,OAAM,QAAQ,QAAQ,OAAsB,iBAAiB,IAAI,eAAe,IAAI,QAAQ,GAAG,UAAQ,EAAC,GAAG,KAAM,SAAS,KAAI,EAAE;AAAA,MAC3Q;AACA,UAAIA,WAAU,aAAa;AACvB,cAAM,OAAO,MAAM,QAAQ,QAAQ,IAAgB,iBAAiB,IAAI,aAAa;AACrF,YAAI,MAAM,OAAO,SAAO,IAAI,aAAa,IAAI,QAAQ,EAAE,MAAM,SAAO,CAAC,aAAY,UAAS,WAAW,EAAE,SAAS,IAAI,KAAK,CAAC,EAAG,OAAM,2BAA2B,SAAS,IAAI,eAAe,IAAI,UAAU,QAAQ,WAAW;AAAA,MAC/N;AACA,aAAO,KAAKC,QAAO;AAAA,IACvB;AACA,UAAM,2BAA2B,QAAQ,WAAW,IAAI,MAAM;AAC9D,UAAM,YAAY,SAAS,GAAG;AAC9B,UAAM,QAAQ,MAAM,QAAQ,QAAQ,KAAK,IAAI,OAAO;AACpD,UAAM,QAAQ,IAAI,UAAU,MAAM,QAAQ,IAAI,IAAI,QAAQ,IAAI,OAAM,OAAM,MAAM,MAAM,KAAK,UAAQ,KAAK,OAAO,EAAE,MAAM,MAAM,QAAQ,QAAQ,KAAK,IAAI,SAAS,EAAE,GAAG,IAAI,CAAC,IAAI,MAAM;AACnL,UAAM,QAAQ,SAAS,KAAK;AAC5B,QAAI,UAAU,eAAe,IAAI,cAAc,CAAC,IAAI,SAAS,SAAS,IAAI,UAAU,KAAK,MAAM,MAAM,KAAK,UAAQ,KAAK,OAAO,IAAI,UAAU,GAAG,WAAW,aAAa;AACnK,YAAM,KAAK,SAAS,KAAK,cAAc,EAAC,MAAM,cAAc,QAAQ,IAAI,YAAY,WAAW,gBAAgB,IAAI,GAAE,CAAC;AAAA,IAC1H;AACA,UAAM,OAAO,UAAU,WAAW,4BAA4B;AAC9D,QAAI,IAAI,UAAU,SAAS,IAAI,SAAS,KAAM,QAAO,KAAK,GAAG;AAC7D,UAAM,UAAU,MAAM,KAAK,SAAS,EAAC,GAAG,KAAK,OAAO,MAAM,WAAW,KAAK,IAAI,EAAC,CAAC;AAChF,YAAQ,IAAI,EAAC,aAAa,IAAI,IAAI,SAAS,IAAI,eAAe,OAAO,cAAc,QAAQ,UAAU,WAAW,YAAY,WAAW,MAAM,QAAQ,MAAM,YAAY,KAAK,IAAI,IAAI,QAAO,CAAC;AAC5L,WAAO,KAAK,OAAO;AAAA,EACvB,SAAS,OAAO;AACZ,UAAM,OAAO,SAAS,OAAO,yBAAyB;AACtD,QAAI,SAAS,mBAAoB,OAAM;AACvC,UAAM,KAAK,SAAS,EAAC,GAAG,KAAK,OAAO,WAAW,MAAM,WAAW,KAAK,IAAI,EAAC,CAAC;AAC3E,YAAQ,IAAI,EAAC,aAAa,IAAI,IAAI,SAAS,IAAI,eAAe,OAAO,cAAc,QAAQ,WAAW,MAAM,YAAY,KAAK,IAAI,IAAI,QAAO,CAAC;AAC7I,UAAM;AAAA,EACV;AACJ;AAEA,SAAS,kBAAkB,QAAqC;AAC5D,SAAO,cAAc,KAAK,UAAU,CAAC,OAAO,OAAO,OAAO,SAAS,OAAO,WAAW,OAAO,YAAY,CAAC,CAAC;AAC9G;AACA,SAAS,OAAO,OAAoB,QAA6B,SAAiC,IAAY,gBAAkC;AAC5I,QAAM,YAAY,QAAQ,aAAa;AACvC,eAAa,CAAC,iBAAiB,WAAW,EAAE,SAAS,SAAS,GAAG,6BAA6B;AAC9F,eAAa,cAAc,eAAe,MAAM,YAAY,SAAS,mBAAmB;AACxF,QAAM,OAAO,OAAO,aAAc,OAAO,SAAO,IAAI,WAAW,cAAc;AAC7E,QAAM,QAAQ,MAAM,aAAa;AACjC,QAAM,OAAO,MAAM,KAAK,UAAQ,KAAK,QAAQ,MAAM,mBAAmB,WAAW,KAAK,UAAU,KAAK,MAAM,KAAK,UAAQ,KAAK,UAAU;AACvI,QAAM,SAAS,MAAM,OAAO,UAAQ,CAAC,KAAK,cAAc,KAAK,QAAQ,MAAM,QAAQ,EAAE,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxH,eAAa,SAAS,KAAK,WAAW,KAAK,SAAS,8BAA8B;AAClF,QAAM,UAAU,KAAK,IAAI,CAAC,GAAG,UAAU,UAAU,KAAK,MAAM,KAAK;AACjE,SAAO;AAAA,IAAC;AAAA,IAAI,eAAe,MAAM;AAAA,IAAI,UAAU,OAAO;AAAA,IAAI,gBAAgB,OAAO;AAAA,IAC7E,SAAS,cAAc,cAAc,SAAS,KAAK,MAAM;AAAA,IAAI;AAAA,IAAW,UAAU,KAAK;AAAA,IAAI,YAAY,QAAQ;AAAA,IAC/G,YAAY,KAAK,WAAW,IAAI,QAAQ,CAAC,IAAI,aAAa;AAAA,IAAI;AAAA,IAC9D,OAAO;AAAA,IAAa,WAAW,KAAK,IAAI;AAAA,IAAG,WAAW,KAAK,IAAI;AAAA,IAAG;AAAA,IAAQ,YAAY,gBAAgB,MAAM,UAAW;AAAA,EAAC;AAChI;AACA,SAAS,SAAS,OAAqD;AACnE,MAAI,MAAM,KAAK,UAAQ,KAAK,WAAW,WAAW,EAAG,QAAO;AAC5D,MAAI,MAAM,UAAU,MAAM,MAAM,UAAQ,KAAK,WAAW,WAAW,EAAG,QAAO;AAC7E,MAAI,MAAM,KAAK,UAAQ,KAAK,OAAO,EAAG,QAAO;AAC7C,SAAO,MAAM,UAAU,MAAM,MAAM,UAAQ,CAAC,aAAa,QAAQ,EAAE,SAAS,KAAK,MAAM,CAAC,IAAI,WAAW;AAC3G;AACA,eAAe,YAAY,SAAkB,KAA8B;AACvE,MAAI,IAAI,YAAY,IAAI,eAAe;AACnC,UAAM,QAAQ,MAAM,QAAQ,QAAQ,iBAAiB,GAAG,SAAS,MAAM,QAAQ,QAAQ,KAAK,IAAI,aAAa;AAC7G,UAAM,QAAQ,QAAQ,OAAO;AAAA,MAAC,IAAI,IAAI;AAAA,MAAS,OAAO,IAAI,OAAO;AAAA,MAAO,OAAO,EAAC,MAAM,cAAc,WAAW,gBAAgB,IAAI,IAAI,GAAE;AAAA,MACrI,SAAS,CAAC,EAAC,GAAG,OAAO,gBAAgB,6BAA6B,OAAO,CAAC,eAAe,YAAY,QAAQ,EAAC,CAAC;AAAA,MAC/G,GAAI,IAAI,aAAa,OAAO,YAAY,EAAC,WAAW,OAAO,WAAW,iBAAiB,OAAO,gBAAe,IAAI,CAAC;AAAA,MAClH,QAAQ,EAAC,iBAAiB,OAAO,QAAQ,cAAa;AAAA,IAAC,CAAC;AAAA,EAChE;AACA,QAAM,OAAO,IAAI,OAAO,aAAc,OAAO,SAAO,IAAI,WAAW,QAAQ,UAAU,MAAM;AAC3F,QAAM,QAAQ,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,SAAS,SAAS,IAAI,UAAU;AACvE,MAAI,MAAO,OAAM,KAAK,SAAS,KAAK,QAAQ;AAAA,IAAC,MAAM;AAAA,IAAe,MAAM;AAAA,MAAC,IAAI,IAAI;AAAA,MAAa,OAAO,IAAI,OAAO;AAAA,MAC5G,gBAAgB,IAAI,OAAO;AAAA,MAAS,YAAY,IAAI,OAAO,aAAa,IAAI,OAAO;AAAA,IAAO;AAAA,IAC1F,UAAU,EAAC,MAAM,IAAI,YAAa,UAAU,GAAG,cAAc,CAAC,GAAG,YAAY,CAAC,EAAC;AAAA,EAAC,CAAC;AACrF,aAAW,CAAC,OAAO,SAAS,KAAK,KAAK,QAAQ,GAAG;AAC7C,UAAM,KAAK,SAAS,KAAK,UAAU,OAAO;AAAA,MAAC,MAAM;AAAA,MAAe,MAAM;AAAA,QAAC,IAAI,IAAI,UAAU,KAAK,KAAK,UAAU;AAAA,QACzG,OAAO,IAAI,OAAO;AAAA,QAAO,gBAAgB,IAAI,OAAO;AAAA,QAAS,YAAY,IAAI,OAAO,aAAa,IAAI,OAAO;AAAA,QAC5G,cAAc,CAAC,WAAW,EAAC,QAAQ,QAAQ,UAAU,kBAAkB,mBAAmB,IAAI,IAAI,GAAE,CAAC;AAAA,MAAC;AAAA,MACtG,GAAI,IAAI,WAAW,EAAC,UAAU,EAAC,MAAM,IAAI,UAAU,UAAU,GAAG,cAAc,CAAC,GAAG,YAAY,CAAC,GAAG,GAAI,QAAQ,EAAC,UAAU,IAAI,WAAU,IAAI,CAAC,EAAE,EAAC,IAAI,CAAC;AAAA,IAAE,CAAC;AAAA,EAC/J;AACA,MAAI,IAAI,YAAY,IAAI,cAAe,OAAM,KAAK,SAAS,KAAK,cAAc,EAAC,MAAM,wBAAwB,UAAU,EAAC,GAAG,IAAI,YAAY,SAAS,MAAM,YAAY,MAAK,EAAC,CAAC;AAC7K,MAAI,IAAI,cAAc,IAAI,YAAY,IAAI,cAAe,OAAM,KAAK,SAAS,KAAK,aAAa,EAAC,MAAM,eAAe,UAAU,IAAI,UAAU,QAAQ,IAAI,WAAU,CAAC;AACxK;AAEA,eAAe,KAAK,SAAkB,KAAe,OAAe,SAAuC;AACvG,QAAM,MAAM,kBAAkB,IAAI,KAAK,MAAM;AAC7C,QAAM,eAAe,QAAQ,SAAS,QAAQ,SAAS,IAAI,SAAS,KAAK,OAAO;AACpF;AACA,eAAe,KAAK,SAAkB,KAAkC;AACpE,QAAM,OAAO,MAAM,QAAQ,QAAQ,OAAmB,iBAAiB,IAAI,eAAe,cAAY;AAClG,UAAM,UAAU,YAAY,CAAC;AAC7B,iBAAa,QAAQ,KAAK,SAAO,IAAI,OAAO,IAAI,EAAE,GAAG,qCAAqC;AAC1F,WAAO,QAAQ,IAAI,SAAO,IAAI,OAAO,IAAI,MAAM,IAAI,UAAU,IAAI,SAAS,IAAI,SAAS,IAAI,OAAO,MAAM,GAAG;AAAA,EAC/G,CAAC;AACD,SAAO,KAAK,KAAK,SAAO,IAAI,OAAO,IAAI,EAAE;AAC7C;AAEA,SAAS,KAAK,KAAsC;AAChD,QAAM,EAAC,IAAI,UAAU,gBAAgB,SAAS,YAAY,SAAS,OAAO,WAAW,WAAW,KAAI,IAAI;AACxG,SAAO,EAAC,IAAI,UAAU,gBAAgB,SAAS,GAAI,aAAa,EAAC,YAAY,QAAO,IAAI,CAAC,GAAI,OAAO,WAAW,WAAW,GAAI,OAAO,EAAC,KAAI,IAAI,CAAC,EAAE;AACrJ;AAEA,eAAe,eAAe,SAAkB,SAAiB,UAAkB,aAAoC;AACnH,QAAM,SAAS,MAAM,QAAQ,QAAQ,OAAO,SAAS,QAAQ;AAC7D,MAAI,OAAO,WAAW,YAAa,OAAM,eAAe,QAAQ,SAAS,QAAQ,SAAS,SAAS,mBAAmB,KAAK,UAAU,CAAC,SAAQ,UAAS,WAAW,CAAC,GAAG,EAAC,MAAM,iBAAiB,SAAQ,CAAC;AACvM,QAAM,QAAQ,QAAQ,OAAsB,iBAAiB,SAAS,QAAQ,GAAG,UAAQ,EAAC,GAAG,KAAM,SAAS,KAAI,EAAE;AACtH;AAEA,eAAe,2BAA2B,SAAkB,SAAiB,UAAkB,aAAoC;AAC/H,QAAM,QAAQ,MAAM,QAAQ,QAAQ,IAAgB,iBAAiB,OAAO,KAAK,CAAC,GAAG,OAAO,SAAO,IAAI,aAAa,QAAQ;AAC5H,MAAI,KAAK,KAAK,SAAO,CAAC,CAAC,aAAY,UAAS,WAAW,EAAE,SAAS,IAAI,KAAK,CAAC,EAAG;AAC/E,QAAM,SAAS,MAAM,QAAQ,QAAQ,OAAO,SAAS,QAAQ;AAC7D,QAAM,UAAU,MAAM,QAAQ,QAAQ,IAAmB,iBAAiB,SAAS,QAAQ,CAAC;AAC5F,eAAa,SAAS,uBAAuB;AAC7C,QAAM,QAAQ,MAAM,qBAAqB,QAAQ,SAAS,QAAQ,SAAS,EAAC,IAAI,aAAa,eAAe,SAAS,SAAS,UAAU,gBAAgB,OAAO,UAAU,SAAS,OAAO,SAAS,OAAO,cAAc,WAAW,GAAG,WAAW,EAAC,GAAG,OAAO;AAC3P,MAAI,UAAU,YAAa,OAAM,eAAe,SAAS,SAAS,UAAU,WAAW;AAC3F;;;ACzPA,eAAsB,uBAAuB,SAAsB,SAAgC,SAAe,YAA6D;AAC3K,QAAM,WAAS,MAAM,QAAQ,SAAS,OAAO,GAAE,gBAAc,MAAM,QAAQ,KAAK,OAAO;AACvF,QAAM,QAAM,IAAI,IAAI,cAAc,MAAM,OAAO,UAAM,KAAK,UAAU,cAAY,UAAU,EAAE,IAAI,UAAM,KAAK,EAAE,CAAC;AAC9G,aAAU,MAAM,OAAO;AACnB,UAAM,QAAM,MAAM,QAAQ,KAAK,OAAO,GAAE,SAAO,MAAM,MAAM,KAAK,UAAM,KAAK,OAAK,EAAE;AAClF,QAAG,CAAC,MAAM,cAAY,CAAC,UAAQ,OAAO,SAAS,WAAS,YAAU,OAAO,SAAO,OAAO,WAAS,OAAO,UAAU,cAAY,cAAY,CAAC,CAAC,WAAU,MAAM,EAAE,SAAS,OAAO,MAAM,EAAE;AACrL,QAAG,CAAC,MAAM,kBAAkB,SAAQ,SAAQ,EAAE,EAAE;AAChD,UAAM;AAAA,MAAe;AAAA,MAAQ,WAAW,MAAM,WAAW,WAAW;AAAA,MAAE;AAAA,MAAQ,wBAAsB;AAAA,MAChG,EAAC,MAAK,cAAa,QAAO,IAAG,WAAU,kBAAgB,KAAK,UAAU,OAAO,OAAO,SAAS,KAAK,EAAE,OAAO,UAAM,KAAK,eAAa,EAAE,EAAE,IAAI,UAAM,KAAK,EAAE,CAAC,EAAC;AAAA,IAAC;AAAA,EACnK;AACJ;AAEA,eAAe,kBAAkB,SAAsB,SAAe,UAAkC;AACpG,MAAI,QAAwB,QAAM;AAClC,KAAG;AACC,UAAM,OAAK,MAAM,QAAQ,MAAM,SAAQ,EAAC,MAAK,OAAM,UAAS,OAAM,KAAI,OAAM,CAAC;AAC7E,QAAG,KAAK,MAAM,KAAK,UAAM,KAAK,WAAS,WAAW,EAAE,QAAO;AAC3D,aAAO,KAAK,MAAM;AAAO,aAAO,KAAK;AAAA,EACzC,SAAO;AACP,SAAO,QAAM;AACjB;;;AClBO,SAAS,iBAAiB,OAA2C;AACxE,MAAG,UAAQ,OAAU;AACrB,eAAa,MAAM,QAAQ,KAAK,KAAG,MAAM,UAAQ,KAAG,MAAM,UAAQ,IAAG,6BAA6B;AAClG,QAAM,QAAM,OAA2B,OAAK,IAAI,IAAI,MAAM,IAAI,UAAM,MAAM,GAAG,CAAC;AAC9E,eAAa,KAAK,SAAO,MAAM,QAAO,6BAA6B;AACnE,aAAU,QAAQ,OAAO;AACrB,iBAAa,QAAM,OAAO,KAAK,QAAM,YAAU,wBAAwB,KAAK,KAAK,GAAG,KAAG,CAAC,KAAK,OAAM,KAAK,gBAAe,KAAK,UAAU,EAAE,MAAM,UAAM,OAAO,SAAO,YAAU,KAAK,KAAK,EAAE,SAAO,KAAG,KAAK,UAAQ,GAAI,GAAE,6BAA6B;AAClP,iBAAa,MAAM,QAAQ,KAAK,SAAS,KAAG,KAAK,UAAU,UAAQ,MAAI,IAAI,IAAI,KAAK,SAAS,EAAE,SAAO,KAAK,UAAU,UAC/G,KAAK,UAAU,MAAM,SAAK,KAAK,IAAI,GAAG,KAAG,QAAM,KAAK,GAAG,GAAE,uCAAuC;AACtG,QAAG,KAAK,SAAS,cAAa,CAAC,OAAM,UAAS,MAAM,EAAE,SAAS,KAAK,SAAS,UAAU,KAAG,CAAC,KAAK,SAAS,YAAW,KAAK,SAAS,WAAU,KAAK,SAAS,UAAU,EAAE,MAAM,YAAQ,OAAO,SAAS,MAAM,KAAG,SAAO,CAAC,GAAE,6BAA6B;AAAA,EACxP;AACA,QAAMC,WAAQ,CAAC,GAAG,KAAK,GAAEC,QAAK,oBAAI,IAAY;AAC9C,SAAMD,SAAQ,QAAQ;AAAC,UAAM,QAAMA,SAAQ,UAAU,UAAM,KAAK,UAAU,MAAM,SAAKC,MAAK,IAAI,GAAG,CAAC,CAAC;AAAE,iBAAa,SAAO,GAAE,kBAAkB;AAAE,IAAAA,MAAK,IAAID,SAAQ,OAAO,OAAM,CAAC,EAAE,CAAC,EAAE,GAAG;AAAA,EAAE;AACxL,SAAO;AACX;AAEA,eAAsB,mBAAmB,SAAiC,OAAmB,QAAmB,OAAa,SAAuB,YAA8D,CAAC,GAAiB;AAChO,QAAM,QAAM,MAAM,aAAW,2BAA0B,aAAW,MAAM,KAAK,CAAAE,UAAMA,MAAK,QAAM,OAAO,UAAU,QAAM,MAAM,mBAAiB,OAAO,GAAG;AACtJ,QAAM,OAAK,MAAM,OAAO,CAAAA,UAAMA,MAAK,cAAY,eAAa,UAAWA,MAAK,OAAK,UAAU,EAAE,KAAK,CAAC,GAAE,MAAI,EAAE,OAAK,EAAE,IAAI,EAAE,CAAC;AACzH,eAAa,MAAK,qCAAqC;AACvD,QAAM,MAAI,IAAI,IAAI,MAAM,SAAS,IAAI,UAAM,CAAC,KAAK,KAAI,SAAO,cAAc,KAAK,UAAU,CAAC,MAAM,IAAG,KAAK,GAAG,CAAC,CAAC,EAAE,MAAM,GAAE,EAAE,CAAC,CAAC,CAAC;AAC5H,QAAM,cAAmC,MAAM,SAAS,IAAI,WAAO;AAAA,IAAC,IAAG,IAAI,IAAI,KAAK,GAAG;AAAA,IAAG,UAAS,KAAK;AAAA,IAAG,OAAM,KAAK;AAAA,IAAM,gBAAe,KAAK;AAAA,IAAe,YAAW,KAAK;AAAA,IAC3K,UAAS,MAAM,WAAY;AAAA,IAAO,cAAa;AAAA,IAC/C,WAAU,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,MAAM,cAAa,GAAG,KAAK,UAAU,IAAI,SAAK,IAAI,IAAI,GAAG,CAAG,CAAC,CAAC,CAAC;AAAA,IAAE,SAAQ,CAAC,QAAQ;AAAA,EAAC,EAAE;AACnH,aAAU,CAAC,OAAM,UAAU,KAAK,YAAY,QAAQ,GAAG;AACnD,UAAM,WAAS,MAAM,SAAS,KAAK,EAAE;AACrC,iBAAa,MAAM,OAAO,oBAAkB,SAAO,UAAS,mBAAmB;AAC/E,QAAG,SAAS,OAAM,QAAQ,OAAO,4BAA0B,KAAK,UAAU,CAAC,MAAM,IAAG,WAAW,EAAE,CAAC,GAAE,SAAK,OAAK,QAAQ;AACtH,UAAM,QAAQ,OAAO,0BAAwB,KAAK,UAAU,CAAC,MAAM,IAAG,WAAW,EAAE,CAAC,GAAE,SAAK,OAAK,EAAC,QAAO,WAAW,IAAG,OAAM,SAAQ,QAAO,MAAM,QAAO,cAAa,WAAW,UAAS,CAAC;AAAA,EAC9L;AACA,QAAM,QAAQ,QAAQ,MAAM,IAAG,EAAC,aAAY,mBAAiB,MAAM,IAAG,kBAAiB,MAAM,UAAS,SAAQ,EAAC,MAAK,gBAAe,MAAK;AAAA,IACpI,QAAO;AAAA,IAAgB,IAAG,MAAM;AAAA,IAAG,UAAS;AAAA,IAAE,QAAO;AAAA,IAAK,YAAW,OAAO;AAAA,IAAG,OAAM;AAAA,EAAW,EAAC,EAAC,CAAC;AAC3G;;;ACjBA,IAAM,SAAS,CAAC,OAAe,SAAiB,sBAAsB,KAAK,UAAU,CAAC,OAAO,IAAI,CAAC;AAClG,eAAsB,eAAgC,SAAkC,OAAe,MAAoD;AACvJ,QAAM,MAAM,MAAM,QAAQ,IAAY,OAAO,OAAO,IAAI,CAAC;AACzD,SAAO,OAAO,MAAM,QAAQ,IAAwB,GAAG,IAAI,UAAU,OAAO,MAAM,QAAQ,IAA0B,0BAAwB,KAAK,UAAU,CAAC,OAAM,IAAI,CAAC,CAAC,KAAG;AAC/K;AACO,SAAS,kBAAkB,OAA4B;AAC1D,SAAO,cAAc,KAAK,UAAU,CAAC,MAAM,YAAY,MAAM,MAAM,IAAI,UAAQ,CAAC,KAAK,IAAI,KAAK,OAAO,KAAK,gBAAgB,KAAK,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;AAChK;AACA,eAAsB,YAA2B,SAA+C,OAAoB,MAAkB,QAA4B,SAAuC;AACrM,QAAM,UAAU,KAAK,IAAI;AACzB,MAAI,CAAC,QAAQ,OAAO,EAAG;AACvB,QAAM,SAAS,MAAM,QAAQ,SAAS,OAAO,MAAM,MAAM;AACzD,MAAI,CAAC,UAAU,CAAC,QAAQ,OAAO,EAAG;AAClC,QAAM,EAAC,IAAG,IAAI;AAAQ,MAAI,EAAC,IAAG,IAAI;AAClC,MAAI,IAAI,UAAU,WAAY,OAAM,MAAM,eAAe,SAAS,KAAK,GAAG;AAC1E,MAAI,CAAC,QAAQ,OAAO,EAAG;AACvB,MAAI,IAAI,UAAU,aAAc,OAAM,MAAM,gBAAgB,SAAS,KAAK,GAAG;AAC7E,QAAM,MAAM,iBAAiB,SAAS,MAAM,IAAI,MAAM,KAAK,GAAG;AAC9D,MAAI,IAAI,QAAQ,SAAS,IAAI,OAAO,UAAU,WAAW,CAAC,MAAM,kBAAkB,UAAU,MAAM,YAAY,WAAW,QAAQ,OAAO,GAAG;AACvI,QAAI;AAAC,YAAM,cAAc,QAAQ,SAAS,OAAO,MAAM,KAAK,SAAS,QAAQ,oBAAoB,KAAK,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC;AAAA,IAAE,SAC1H,OAAO;AAAC,YAAM,YAAY,SAAS,KAAK,KAAK,SAAS,OAAO,0BAA0B,CAAC;AAAA,IAAE;AAAA,EACrG;AACA,MAAI,CAAC,QAAQ,OAAO,EAAG;AACvB,QAAM,UAAU,MAAM,QAAQ,QAAQ,IAAwB,GAAG,IAAI;AACrE,MAAI,QAAQ;AACR,UAAM,eAAe,MAAM,QAAQ,KAAK,MAAM,EAAE,GAAG,cAAc,aAAa,MAAM,KAAK,OAAK,EAAE,OAAO,KAAK,EAAE;AAC9G,QAAI,YAAY,SAAS,WAAW,YAAY,CAAC,aAAY,WAAW,EAAE,SAAS,YAAY,MAAM,EAAG;AACxG,QAAI,KAAK,UAAU,YAAY,QAAQ,MAAM,KAAK,UAAU,MAAM,EAAG,OAAM,QAAQ,QAAQ,MAAM,IAAI,EAAC,aAAY,qBAAmB,IAAI,KAAG,MAAI,cAAc,KAAK,UAAU,MAAM,CAAC,GAAG,kBAAiB,aAAa,UAAU,SAAQ,EAAC,MAAK,mBAAkB,QAAO,KAAK,IAAG,aAAY,IAAI,IAAG,OAAM,EAAC,CAAC;AAAA,EAC7S;AACA,UAAQ,IAAI,EAAC,aAAa,IAAI,IAAI,OAAO,uBAAuB,QAAQ,QAAQ,UAAU,YAAY,QAAQ,UAAU,YAAY,YAAY,WAAW,MAAM,QAAQ,MAAM,YAAY,KAAK,IAAI,IAAI,QAAO,CAAC;AACpN;AACA,eAAe,iBAAgC,SAA+C,SAAiB,MAAkB,KAAa,KAAsD;AAChM,MAAI,CAAC,QAAQ,OAAO,KAAK,IAAI,UAAU,aAAa,CAAC,QAAQ,UAAW,QAAO;AAC/E,MAAI;AACA,UAAM,QAAQ,UAAU;AAAA,MAAC;AAAA,MAAS,IAAI,IAAI;AAAA,MAAI;AAAA,MAAM,SAAS,IAAI;AAAA,MAC7D,SAAS,IAAI,oBAAoB,IAAI,OAAO,UAAU,WAAW,WAAW;AAAA,MAAc,MAAM,IAAI,OAAO;AAAA,IAAI,CAAC;AACpH,WAAO;AAAA,EACX,SAAS,OAAO;AAAC,WAAO,QAAQ,OAAO,IAAI,YAAY,SAAS,KAAK,KAAK,SAAS,OAAO,yCAAyC,CAAC,IAAI;AAAA,EAAI;AAChJ;AACA,eAAe,QAAuB,SAA+C,OAAoB,MAAkB,QAAiB;AACxI,eAAa,MAAM,MAAM,UAAU,KAAK,0BAA0B;AAClE,QAAM,YAAY,kBAAkB,KAAK,GAAG,aAAa,MAAM,QAAQ,QAAQ,IAAY,OAAO,MAAM,IAAI,KAAK,EAAE,CAAC;AACpH,QAAM,aAAa,aAAa,MAAM,QAAQ,QAAQ,IAAwB,UAAU,IAAI;AAC5F,MAAI,CAAC,MAAM,YAAY,WAAW,YAAY,UAAU,aAAc;AACtE,QAAM,MAAM,YAAY,UAAU,eAAe,aAAc,cAAc,cAAc,KAAK,UAAU,CAAC,MAAM,IAAI,KAAK,IAAI,KAAK,QAAQ,aAAa,KAAK,QAAQ,eAAe,SAAS,CAAC,CAAC;AAC/L,MAAI,MAAM,MAAM,QAAQ,QAAQ,IAAwB,GAAG;AAC3D,MAAI,CAAC,KAAK;AACN,iBAAa,QAAQ,2BAA2B;AAChD,UAAM,KAAK,MAAM,QAAQ,QAAQ,OAAe,uBAAuB,KAAK,SAAO,OAAO,WAAW,CAAC;AACtG,UAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,EAAC,IAAI,OAAO,MAAM,OAAM,CAAC;AAClE,UAAM,YAAgC,EAAC,IAAG,WAAU,cAAa,KAAK,UAAS,OAAM,YAAW,QAAO,EAAC,QAAO,KAAK,IAAG,OAAM,YAAW,GAAE,MAAK;AAC/I,UAAM,MAAM,QAAQ,QAAQ,OAA2B,KAAK,cAAY,YAAY,SAAS;AAAA,EACjG;AACA,MAAI,CAAC,QAAQ,OAAO,EAAG;AACvB,MAAI,eAAe,IAAK,OAAM,QAAQ,QAAQ,OAA4C,sBAAsB,KAAK,UAAU,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,GAAG,UAChJ,EAAC,GAAG,KAAK,MAAM,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,GAAG,aAAa,CAAC,UAAU,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAC,EAAE;AAChG,QAAM,QAAQ,QAAQ,OAAO,OAAO,MAAM,IAAI,KAAK,EAAE,GAAG,MAAM,GAAG;AACjE,MAAI,CAAC,QAAQ,OAAO,EAAG;AACvB,SAAO,EAAC,KAAK,IAAG;AACpB;AAEA,eAAe,eAA6B,SAA4C,KAAW,KAAoD;AACnJ,MAAI;AAAC,UAAM,QAAQ,KAAK,iBAAiB,IAAI,IAAG,IAAI,KAAK;AAAA,EAAE,SACrD,OAAM;AAAC,WAAO,QAAQ,OAAO,IAAE,YAAY,SAAQ,KAAI,KAAI,SAAS,OAAM,oCAAoC,CAAC,IAAE;AAAA,EAAI;AAC3H,MAAG,CAAC,QAAQ,OAAO,EAAE,QAAO;AAC5B,QAAM,UAAQ,MAAM,QAAQ,QAAQ,MAAM,GAAG,GAAE,SAAQ,MAAM,QAAQ,QAAQ,IAAwB,GAAG;AACxG,MAAG,CAAC,WAAS,CAAC,QAAQ,OAAO,EAAE,QAAO;AACtC,MAAI;AAAC,UAAM,QAAQ,KAAK,OAAO,IAAI,KAAK;AAAA,EAAE,QACrC;AAAC,WAAO,QAAQ,OAAO,IAAE,QAAQ,QAAQ,OAA2B,KAAI,aAAS,QAAS,UAAQ,eAAa,EAAC,GAAG,SAAS,QAAO,EAAC,GAAG,IAAI,QAAO,OAAM,WAAU,MAAK,+BAA8B,EAAC,IAAE,OAAQ,IAAE;AAAA,EAAO;AAC9N,SAAO;AACX;AACA,eAAe,gBAA8B,SAA4C,KAAW,KAAoD;AACpJ,QAAM,cAAY,MAAM,QAAQ,KAAK,QAAQ,IAAI,IAAG,IAAI,KAAK;AAC7D,MAAG,CAAC,QAAQ,OAAO,KAAG,YAAY,UAAQ,UAAU,QAAO;AAC3D,MAAG,YAAY,UAAQ,UAAU,QAAO,QAAQ,QAAQ,OAA2B,KAAI,aAAS,QAAS,UAAQ,eAAa,EAAC,GAAG,SAAS,QAAO,EAAC,GAAG,IAAI,QAAO,OAAM,WAAU,MAAK,YAAY,QAAM,+BAA8B,EAAC,IAAE,OAAQ;AACjP,MAAG,YAAY,UAAQ,YAAU,YAAY,UAAQ,YAAY,QAAO,YAAY,SAAQ,KAAI,KAAI,YAAY,QAAM,8BAA6B,YAAY,KAAK;AACpK,MAAI;AACA,iBAAa,YAAY,WAAS,QAAU,6BAA6B;AAAE,UAAM,WAAS,cAAc,YAAY,MAAM;AAC1H,WAAO,QAAQ,QAAQ,OAA2B,KAAI,cAAU,EAAC,GAAG,SAAS,OAAM,WAAU,QAAO,UAAS,QAAO,EAAC,QAAO,IAAI,OAAO,QAAO,OAAM,SAAS,QAAM,UAAQ,iBAAgB,QAAO,SAAS,QAAO,cAAa,SAAS,aAAY,EAAC,EAAE;AAAA,EAC3P,SAAO,OAAM;AAAC,WAAO,YAAY,SAAQ,KAAI,KAAI,SAAS,OAAM,6BAA6B,CAAC;AAAA,EAAE;AACpG;AACA,eAAe,YAA0B,SAA4C,KAAW,KAAuB,MAAY,kBAAqC,UAAsC;AAC1M,SAAO,QAAQ,QAAQ,OAA2B,KAAI,cAAU,EAAC,GAAG,SAAS,OAAM,WAAU,iBAAgB,QAAO,EAAC,QAAO,IAAI,OAAO,QAAO,OAAM,UAAS,KAAI,EAAC,EAAE;AACxK;AACO,SAAS,cAAc,QAAiC;AAC3D,QAAM,SAAS;AACf,eAAa,UAAU,OAAO,OAAO,UAAU,aAAa,OAAO,OAAO,WAAW,YAAY,OAAO,OAAO,SAAS,KAAK,OAAO,OAAO,UAAU,KAAM,6BAA6B;AACxL,eAAa,MAAM,QAAQ,OAAO,YAAY,KAAK,OAAO,aAAa,UAAU,OAAO,OAAO,aAAa,MAAM,QAAM,OAAO,OAAO,YAAY,GAAG,SAAS,KAAK,GAAG,UAAU,GAAG,GAAG,iCAAiC;AACvN,MAAI,OAAO,SAAU,cAAa,CAAC,OAAO,UAAU,MAAM,EAAE,SAAS,OAAO,SAAS,UAAU,KACxF,CAAC,OAAO,SAAS,YAAY,OAAO,SAAS,WAAW,OAAO,SAAS,UAAU,EAAE,MAAM,WAAS,OAAO,SAAS,KAAK,KAAK,QAAQ,CAAC,GAAG,6BAA6B;AAC7K,QAAM,WAAS,iBAAiB,OAAO,QAAQ;AAC/C,SAAO,EAAC,OAAO,OAAO,OAAO,QAAQ,OAAO,QAAQ,cAAc,CAAC,GAAG,IAAI,IAAI,OAAO,YAAY,CAAC,GAAG,GAAI,WAAS,EAAC,SAAQ,IAAE,CAAC,GAAI,GAAI,OAAO,WAAW,EAAC,UAAU,OAAO,SAAQ,IAAI,CAAC,EAAE;AAC7L;AAAC,eAAe,cAAqB,SAAiC,UAAuB,MAAkB,KAAyB,SAAwB,WAAqD;AACjN,OAAK,MAAM,QAAQ,SAAS,SAAS,EAAE,GAAG,MAAM,IAAI,EAAE,EAAG;AACzD,QAAM,QAAQ,MAAM,QAAQ,KAAK,SAAS,EAAE,GAAG,UAAU,MAAM,MAAM,KAAK,eAAa,UAAU,OAAO,KAAK,EAAE;AAC/G,eAAa,MAAM,YAAY,WAAW,WAAW,kBAAkB,KAAK,MAAM,IAAI,WAAW,2BAA2B;AAC5H,eAAa,MAAM,OAAO,oBAAoB,SAAS,IAAI,QAAQ,UAAU,mBAAmB;AAChG,QAAM,eAAe,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAI,KAAK,UAAU,gBAAgB,CAAC,GAAI,GAAG,IAAI,OAAQ,YAAY,CAAC,CAAC;AACvG,MAAG,IAAI,QAAQ,UAAU,OAAQ,QAAO,mBAAmB,SAAQ,OAAM,MAAK,EAAC,IAAG,IAAI,IAAG,QAAO,IAAI,OAAO,QAAO,cAAa,UAAS,IAAI,OAAO,SAAQ,GAAE,SAAQ,SAAS;AAC9K,QAAM,QAAQ,QAAQ,MAAM,IAAI,EAAC,aAAa,mBAAmB,IAAI,IAAI,kBAAkB,MAAM,UAAU,SAAS,EAAC,MAAM,gBAAgB,MAAM;AAAA,IAC7I,QAAQ;AAAA,IAAiB,IAAI,IAAI;AAAA,IAAI,UAAU;AAAA,IAAG,QAAQ;AAAA,IAC1D,OAAO,CAAC;AAAA,MAAC,IAAI,KAAK;AAAA,MAAI,OAAO,KAAK;AAAA,MAAO,gBAAgB,KAAK;AAAA,MAAgB,YAAY,KAAK;AAAA,MAC3F,kBAAkB,QAAS;AAAA,MAAU,UAAU,MAAM,WAAW;AAAA,MAAQ,WAAW;AAAA,MAAc,SAAS,CAAC,QAAQ;AAAA,IAAC,CAAC;AAAA,EAC7H,EAAC,EAAC,CAAC;AACP;;;ACnGO,SAAS,uBAAuB,SAAiC;AACpE,MAAI,UAAQ,OAAMC;AAAgC,QAAM,UAAQ,oBAAI,IAAmB;AACvF,QAAM,OAAK,MAAI,UAAQ,QAAQ,QAAQ,IAAEA,aAAU,WAAW,SAAQ,SAAQ,MAAI,CAAC,OAAO,EAAE,QAAQ,MAAI;AAAC,IAAAA,WAAQ;AAAA,EAAU,CAAC;AAC5H,SAAO;AAAA,IAAC;AAAA,IAAK,MAAM,UAAS;AACxB,gBAAQ;AAAK,YAAM,QAAQ,WAAW,CAAC,GAAG,QAAQ,OAAO,CAAC,EAAE,IAAI,YAAQ,OAAO,QAAQ,CAAC,CAAC;AACzF,UAAI;AACJ,UAAG;AAAC,cAAM,QAAQ,KAAK,CAACA,UAAS,MAAM,MAAI;AAAA,QAAC,CAAC,GAAE,IAAI,QAAc,aAAS;AAAC,kBAAM,WAAW,SAAQ,GAAI;AAAA,QAAE,CAAC,CAAC,CAAC;AAAA,MAAE,UAC/G;AAAQ,YAAG,MAAM,cAAa,KAAK;AAAE,cAAM,QAAQ,QAAQ,MAAM;AAAA,MAAE;AAAA,IACvE;AAAA,IAAE,mBAAkB,MAAI;AAAC,mBAAa,CAAC,SAAQ,kBAAkB;AAAE,aAAO,QAAQ,QAAQ;AAAA,IAAE;AAAA,IACxF,gBAAe,OAAM,OAAa,UAAe,MAAM,QAAQ,QAAQ,KAAK,OAAM,IAAI,GAAG,KAAK,YAAU,eAAe,QAAQ,SAAQ,OAAM,IAAI;AAAA,IACjJ,eAAc,CAAC,YAA8B,QAAQ,QAAQ,OAAO,OAAO;AAAA,EAAC;AACpF;AACA,eAAe,WAAW,SAAgC,SAA2B,QAAkC;AACnH,QAAM,SAAiB,CAAC;AACxB,aAAU,SAAS,MAAM,QAAQ,QAAQ,QAAQ,GAAG;AAChD,QAAG,CAAC,OAAO,EAAE;AACb,UAAM,UAAQ,KAAK,IAAI;AACvB,QAAI;AACA,YAAM,QAAM,MAAM,QAAQ,QAAQ,KAAK,MAAM,EAAE;AAAE,UAAG,CAAC,OAAO,EAAE;AAC9D,UAAG,CAAC,MAAM,YAAW;AAAC,cAAM,QAAQ,WAAW,OAAM,QAAQ,OAAO;AAAE;AAAA,MAAS;AAC/E,YAAM,UAAQ,QAAQ,WAAW,MAAM,WAAW,WAAW;AAC7D,UAAI,SAAO,QAAQ,IAAI,MAAM,EAAE;AAAE,UAAG,CAAC,QAAO;AAAC,iBAAO,MAAM,aAAa,SAAQ,MAAM,EAAE;AAAE,gBAAQ,IAAI,MAAM,IAAG,MAAM;AAAA,MAAE;AACtH,UAAG,CAAC,OAAO,GAAE;AAAC,cAAM,OAAO,QAAQ;AAAE;AAAA,MAAO;AAC5C,YAAM,QAAQ,WAAW,OAAM,OAAO;AAAE,UAAG,CAAC,OAAO,EAAE;AAAO,YAAM,OAAO,KAAK;AAAE,UAAG,CAAC,OAAO,EAAE;AAC7F,YAAM,QAAQ,QAAQ,MAAM,QAAQ,KAAK,MAAM,EAAE,GAAE,OAAO;AAC1D,YAAM,SAAS,SAAQ,MAAM,QAAQ,KAAK,MAAM,EAAE,GAAE,MAAM;AAC1D,UAAG,OAAO,EAAE,OAAM,OAAO,KAAK;AAC9B,UAAG,OAAO,EAAE,OAAM,uBAAuB,QAAQ,SAAQ,QAAQ,SAAQ,MAAM,IAAG,QAAQ,UAAU;AACpG,cAAQ,IAAI,EAAC,aAAY,MAAM,IAAG,SAAQ,MAAM,IAAG,OAAM,mBAAkB,QAAO,WAAU,YAAW,KAAK,IAAI,IAAE,QAAO,CAAC;AAAA,IAC9H,SAAO,OAAM;AAAC,aAAO,KAAK,KAAK;AAAE,cAAQ,IAAI,EAAC,aAAY,MAAM,IAAG,SAAQ,MAAM,IAAG,OAAM,mBAAkB,QAAO,WAAU,MAAK,SAAS,OAAM,wBAAwB,GAAE,YAAW,KAAK,IAAI,IAAE,QAAO,CAAC;AAAA,IAAE;AAAA,EAC/M;AACA,MAAG,OAAO,OAAO,OAAM,IAAI,eAAe,QAAO,0BAA0B;AAC/E;AACA,eAAe,SAAS,SAAgC,OAAkB,QAAkC;AACxG,MAAG,CAAC,QAAQ,QAAQ;AACpB,QAAM,WAAS,MAAM,QAAQ,QAAQ,SAAS,MAAM,EAAE,GAAE,UAAQ,IAAI,IAAI,OAAO,OAAO,SAAS,KAAK,EAAE,QAAQ,UAAM,KAAK,OAAO,CAAC;AACjI,QAAM,aAAW,MAAM,MAAM,OAAO,UAAM,CAAC,QAAQ,IAAI,KAAK,EAAE,KAAG,CAAC,WAAU,MAAM,EAAE,SAAS,KAAK,MAAM,KAAG,CAAC,KAAK,SAAO,CAAC,KAAK,WACxH,iBAAiB,OAAM,IAAI,KAAG,CAAC,CAAC,UAAS,eAAe,EAAE,SAAS,KAAK,UAAU,SAAO,EAAE,KAAG,mBAAmB,OAAM,IAAI,MAC1H,CAAC,KAAK,WAAS,KAAK,QAAQ,WAAS,YAAU,KAAK,QAAQ,UAAQ,eAAa,KAAK,QAAQ,eAAa,UAAW,QAAQ,MAAK,KAAK,IAAI,CAAC,EAAE;AACtJ,aAAU,QAAQ,YAAY;AAC1B,QAAG,CAAC,OAAO,EAAE;AAAO,QAAG,CAAC,MAAM,qBAAqB,QAAQ,SAAQ,OAAM,IAAI,EAAE;AAC/E,UAAM,UAAQ,QAAQ,WAAW,MAAM,WAAY,WAAW;AAC9D,QAAG,KAAK,QAAQ,eAAa,QAAU;AAAC,UAAG,CAAC,MAAM,MAAM,SAAQ,OAAM,MAAK,OAAO,EAAE;AAAO,cAAM,MAAM,QAAQ,KAAK,MAAM,EAAE;AAAE,aAAO,OAAO,MAAK,MAAM,MAAM,KAAK,SAAK,IAAI,OAAK,KAAK,EAAE,CAAC;AAAA,IAAE;AAC1L,QAAG;AAAC,YAAM,QAAQ,QAAQ,OAAM,MAAK,SAAQ,MAAM;AAAA,IAAE,SAC/C,OAAM;AACR,YAAM,SAAO,MAAM,QAAQ,KAAK,MAAM,EAAE,GAAE,OAAK,SAAS,OAAM,wCAAwC;AACtG,YAAM,QAAQ,QAAQ,MAAM,IAAG,EAAC,aAAY,6BAA2B,KAAK,KAAG,MAAI,KAAK,UAAS,kBAAiB,OAAO,UAAS,SAAQ,EAAC,MAAK,mBAAkB,QAAO,KAAK,IAAG,aAAY,KAAK,IAAG,QAAO,EAAC,QAAO,KAAK,IAAG,OAAM,UAAS,KAAI,EAAC,EAAC,CAAC;AAClP,cAAQ,IAAI,EAAC,aAAY,KAAK,IAAG,SAAQ,MAAM,IAAG,OAAM,+BAA8B,QAAO,WAAU,MAAK,YAAW,EAAC,CAAC;AAAA,IAC7H;AACA,UAAM,SAAO,MAAM,eAAe,QAAQ,SAAQ,MAAM,IAAG,KAAK,EAAE;AAClE,QAAG,UAAQ,CAAC,aAAY,WAAU,OAAO,EAAE,SAAS,OAAO,KAAK,EAAE;AAAA,EACtE;AACJ;AACA,eAAe,MAAM,UAAiC,OAAkB,MAAgB,SAAwC;AAC5H,QAAM,SAAO,MAAM,QAAQ,KAAK,MAAM,EAAE;AACxC,MAAG;AAAC,UAAM,QAAQ,QAAQ,MAAM,IAAG,EAAC,aAAY,WAAS,KAAK,KAAG,MAAI,KAAK,UAAS,kBAAiB,OAAO,UAAS,SAAQ,EAAC,MAAK,cAAa,QAAO,KAAK,IAAG,SAAQ,KAAK,QAAQ,gBAAc,SAAU,WAAS,YAAW,EAAC,CAAC;AAAE,WAAO;AAAA,EAAK,SACzO,OAAM;AAAC,QAAG,CAAC,qBAAoB,0BAAyB,mBAAmB,EAAE,SAAS,SAAS,OAAM,EAAE,CAAC,EAAE,QAAO;AAAM,UAAM;AAAA,EAAM;AAC7I;AACA,eAAe,aAAa,SAAgC,SAAgC;AACxF,QAAM,QAAM,MAAM,QAAQ,QAAQ,KAAK,OAAO,GAAE,UAAQ,QAAQ,WAAW,MAAM,WAAY,WAAW;AACxG,QAAM,WAAS,MAAM,QAAQ,SAAS,EAAC,SAAQ,SAAQ,cAAa,UAAM,kBAAkB,SAAQ,SAAQ,IAAI,EAAC,CAAC;AAClH,SAAO,4BAA4B;AAAA,IAAC,IAAG,QAAQ;AAAA,IAAG,WAAU,QAAQ,YAAU,MAAI,mBAAmB,OAAO;AAAA,IAAE;AAAA,IAAQ;AAAA,IAClH,QAAO,OAAM,UAAO,QAAQ,WAAW,KAAK;AAAA,IAAE;AAAA,IAAS,oBAAmB,QAAQ;AAAA,IAClF,cAAa,aAAU,MAAM,QAAQ,QAAQ,KAAK,OAAO,GAAG,YAAY,YAAU;AAAA,IAClF,UAAS,UAAM,YAAY,QAAQ,SAAQ,SAAQ,IAAI;AAAA,IACvD,WAAU,OAAM,UAAO;AAAC,YAAM,SAAO,MAAM,QAAQ,QAAQ,KAAK,OAAO;AAAE,UAAG,UAAQ,WAAU;AAAC,qBAAa,OAAO,YAAY,SAAQ,mBAAmB;AAAE,qBAAa,CAAC,OAAO,kBAAkB,QAAO,wBAAwB;AAAA,MAAE;AAAA,IAAC;AAAA,IACrO,KAAI,WAAO,QAAQ,IAAI,EAAC,GAAG,OAAM,QAAO,CAAC;AAAA,EAAC,CAAC;AACnD;AACA,eAAe,YAAY,SAAkC,SAAiB,MAAkB;AAC5F,QAAM,aAAW,MAAM,QAAQ,IAA2C,4BAA0B,KAAK,UAAU,CAAC,SAAQ,KAAK,EAAE,CAAC,CAAC;AACrI,MAAG,WAAW,QAAO;AACrB,QAAM,MAAM,MAAM,QAAQ,IAAY,sBAAsB,KAAK,UAAU,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;AAC9F,SAAO,OAAO,MAAM,QAAQ,IAAmE,GAAG,IAAI,QAAQ,WAAW;AAC7H;AACA,eAAsB,kBAAkB,SAAkC,SAAiB,MAAoC;AAC3H,QAAM,WAAW,MAAM,QAAQ,QAAQ,SAAS,OAAO,GAAG,UAAmG,CAAC;AAC9J,aAAW,UAAU,KAAK,UAAU,gBAAgB,CAAC,GAAG;AACpD,UAAM,WAAW,OAAO,OAAO,SAAS,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAAC,cAAYA,UAAS,WAAW,UAAUA,UAAS,YAAY,UAAU;AAC5I,UAAM,UAAiE,CAAC;AACxE,eAAW,UAAU,UAAU,WAAW,CAAC,GAAG;AAC1C,mBAAa,MAAM,QAAQ,QAAQ,OAAO,UAAU,WAAW,CAAC,GAAG,UAAU,EAAE,GAAG,2BAA2B;AAC7G,cAAQ,KAAK,EAAC,WAAW,QAAQ,OAAO,KAAK,MAAO,MAAM,QAAQ,QAAQ,IAAY,cAAc,OAAO,MAAM,CAAG,EAAC,CAAC;AAAA,IAC1H;AACA,YAAQ,KAAK,EAAC,QAAQ,QAAO,CAAC;AAAA,EAClC;AACA,eAAa,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,OAAO,CAAC,EAAE,cAAc,MAAM,MAAM,8BAA8B;AACvH,SAAO;AACX;AAEA,eAAe,qBAAqB,SAAsB,OAAkB,MAAkC;AAC1G,aAAU,MAAM,KAAK,UAAU,gBAAc,CAAC,GAAG;AAC7C,UAAM,aAAW,MAAM,MAAM,KAAK,OAAG,EAAE,OAAK,EAAE,MAAI,MAAM,QAAQ,KAAK,MAAM,IAAG,EAAE,GAAG;AACnF,QAAG,WAAW,WAAS,YAAY,QAAO;AAAA,EAC9C;AACA,SAAO;AACX;;;ACrHA,eAAsB,gBAAuE,SAAkC,SAAiB,QAAgB;AAC5J,QAAM,MAAM,sBAAsB,KAAK,UAAU,CAAC,SAAS,MAAM,CAAC;AAClE,MAAI,QAAQ,MAAM,QAAQ,IAAyC,GAAG;AACtE,MAAI,CAAC,OAAO,SAAS;AACjB,UAAM,OAAO,MAAM,QAAQ,KAAQ,aAAa,CAAC,KAAK,aAAa,IAAI,QAAQ,WAAW,UACnF,aAAa,cAAc,cAAc,KAAK,UAAU,CAAC,SAAS,QAAQ,IAAI,cAAc,IAAI,SAAS,CAAC,CAAC,CAAC;AACnH,YAAQ,MAAM,QAAQ,OAA4C,KAAK,UAClE,EAAC,MAAM,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,GAAG,KAAK,IAAI,SAAO,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,KAAI,EAAE;AAAA,EAChG;AACA,QAAM,OAAO,MAAM,QAAQ,QAAW,MAAM,IAAI;AAChD,SAAO,KAAK,OAAO,CAAC,QAAkB,CAAC,CAAC,GAAG;AAC/C;;;ACdO,SAAS,cAAc,SAAkC;AAC5D,QAAM,OAAO,CAAC,UAAkB,UAAmC,QAAQ,WAAW,KAAK;AAC3F,SAAO,EAAC,MAAM,MAAM,MAAM,KAAI;AAClC;;;ACKA,IAAM,UAAU,oBAAI,IAAI,CAAC,QAAQ,aAAa,UAAU,WAAW,CAAC;AAEpE,eAAsB,sBAAsB,EAAC,SAAS,QAAO,GAAY,SAAiB,OAAgE;AACtJ,QAAM,QAAQ,MAAM,QAAQ,KAAK,OAAO,GAAG,WAAW,MAAM,QAAQ,SAAS,OAAO,GAAG,OAAkB,CAAC;AAC1G,aAAW,QAAQ,MAAM,MAAO,KAAI,CAAC,CAAC,aAAY,WAAW,EAAE,SAAS,KAAK,MAAM,MAAM,KAAK,SAAS,KAAK,YAAY,KAAK,WAAW,WAAY,MAAK,KAAK,EAAC,MAAM,0BAA0B,QAAQ,KAAK,GAAE,CAAC;AAC/M,aAAW,QAAQ,MAAM,MAAO,KAAI,KAAK,SAAS,WAAW,YAAY,KAAK,QAAQ,UAAU,eAAe,CAAC,CAAC,aAAY,WAAW,EAAE,SAAS,KAAK,MAAM,EAAG,MAAK,KAAK,EAAC,MAAK,2BAA0B,QAAO,KAAK,GAAE,CAAC;AAC1N,aAAW,YAAY,OAAO,OAAO,SAAS,UAAU,EAAG,KAAI,CAAC,YAAY,WAAW,WAAW,WAAW,EAAE,SAAS,SAAS,OAAO,EAAG,MAAK,KAAK,EAAC,MAAM,6BAA6B,QAAQ,SAAS,OAAM,CAAC;AACjN,QAAM,UAAU,MAAM,QAAQ,aAA+D,qBAAqB,SAAS,SAAO,IAAI,YAAY,WAAW,IAAI,UAAU,SAAS;AACpL,OAAK,KAAK,GAAG,QAAQ,IAAI,CAAC,EAAC,MAAK,OAAO,EAAC,MAAM,4BAA4B,QAAQ,MAAM,OAAM,EAAE,CAAC;AACjG,QAAM,OAAO,MAAM,QAAQ,aAA6E,gBAAgB,SAAS,CAAAC,UAAQA,MAAK,KAAK,UAAQ,IAAI,kBAAkB,WAAW,IAAI,YAAY,YAAY,CAAC,CAAC,aAAa,UAAU,WAAW,EAAE,SAAS,IAAI,KAAK,CAAC,CAAC;AAClR,MAAI,KAAK,OAAQ,MAAK,KAAK,EAAC,MAAM,2BAA0B,CAAC;AAC7D,OAAK,KAAK,GAAG,MAAM,qBAAqB,SAAS,OAAO,CAAC;AACzD,OAAK,KAAK,IAAI,MAAM,aAAa,SAAS,MAAM,cAAc,SAAS,OAAO,GAAG,UAAQ,aAAa,SAAS,SAAS,SAAS,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;AAClJ,SAAO,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,SAAO,CAAC,KAAK,UAAU,CAAC,IAAI,MAAM,IAAI,QAAQ,IAAI,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;AAC9G;AAEA,eAAsB,gBAAgB,SAAkB,SAAiD;AACrG,QAAM,EAAC,QAAO,IAAI;AAClB,QAAM,QAAQ,MAAM,QAAQ,KAAK,OAAO,GAAG,QAAQ,MAAM,QAAQ,iBAAiB;AAClF,eAAa,MAAM,cAAc,QAAW,eAAe;AAC3D,eAAa,MAAM,SAAS,WAAW,MAAM,SAAS,KAAK,SAAO,IAAI,SAAS,MAAM,QAAQ,IAAI,OAAO,MAAM,MAAM,IAAI,OAAO,SAAS,aAAa,CAAC,GAAG,sBAAsB;AAC/K,QAAM,QAAQ,MAAM,cAAc,SAAS,OAAO,GAAG,aAAa,OAAO,YAAY,MAAM,IAAI,UAAQ,CAAC,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC;AAC7H,QAAM,cAAc,WAAW;AAC/B,QAAM,WAAW,MAAM,gBAAgB,aAAa,sBAAsB,MAAM,sBAAsB,SAAS,SAAS,KAAK,GAAG,QAAQ,OAAO;AAC/I,QAAM,aAAa,MAAM,gBAAgB,aAAa,kBAAkB,MAAM,aAAa,OAAO,OAAM,UACnG,MAAM,QAAQ,gBAAgB,SAAS,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,eAAa,EAAC,QAAQ,KAAK,IAAI,SAAQ,EAAE,CAAC,GAAG,QAAQ,OAAO,GAAG,KAAK;AACpI,aAAW,EAAC,QAAQ,SAAQ,KAAK,UAAW,KAAI,SAAS,UAAU,YAAY,SAAS,cAAc,WAAW,SAAS,cAAc,aAAa,CAAC,SAAS,KAAK,SAAO,IAAI,SAAS,4BAA4B,IAAI,WAAW,MAAM,EAAG,UAAS,KAAK,EAAC,MAAM,0BAA0B,OAAM,CAAC;AAClS,QAAM,SAAS,EAAC,GAAI,MAAM,WAAW,WAAW,WAAW,EAAC,iBAAgB,EAAC,aAAY,MAAM,UAAU,aAAY,MAAK,MAAM,UAAU,MAAK,OAAM,MAAM,UAAU,OAAM,MAAK,MAAM,UAAU,KAAI,EAAC,IAAI,CAAC,GAAI,SAAS,OAAO,MAAM,OAAO,UAAU,MAAM,UAAU,YAAY,UAAU,cAAc,MAAM,MAAM,OAAO,UAAQ,CAAC,CAAC,aAAa,WAAW,EAAE,SAAS,KAAK,MAAM,CAAC,EAAE,QAAQ,UAAS;AACxY,gBAAc,MAAM,QAAQ,KAAK,OAAO,GAAG,aAAa,MAAM,UAAU,mBAAmB;AAC3F,SAAO,EAAC,GAAG,QAAQ,SAAS,cAAc,KAAK,UAAU,MAAM,CAAC,EAAC;AACrE;AAEA,eAAe,cAAc,SAAuB,OAA4D;AAC5G,QAAM,QAA4C,CAAC;AAAG,MAAI;AAC1D,KAAG;AAAC,UAAM,OAAO,MAAM,QAAQ,MAAM,OAAO,EAAC,MAAM,OAAO,gBAAgB,MAAM,OAAO,KAAK,GAAI,SAAS,EAAC,OAAM,IAAI,CAAC,EAAE,CAAC;AACpH,UAAM,KAAK,GAAG,KAAK,MAAM,IAAI,CAAC,EAAC,IAAI,MAAK,OAAO,EAAC,IAAI,MAAK,EAAE,CAAC;AAAG,aAAS,KAAK;AAC7E,iBAAa,MAAM,UAAU,KAAO,6BAA6B;AAAA,EACrE,SAAS;AACT,SAAO;AACX;AACA,eAAe,aAAa,SAAuB,SAAkC,OAAe,MAAkC;AAClI,QAAM,OAAkB,CAAC;AACzB,OAAK,MAAM,gBAAgB,SAAS,OAAO,IAAI,GAAG,KAAK,SAAO,IAAI,UAAU,SAAS,EAAG,MAAK,KAAK,EAAC,MAAM,4BAA4B,QAAQ,KAAI,CAAC;AAClJ,MAAI,CAAC,QAAQ,iBAAkB,QAAO;AACtC,QAAM,SAAS,MAAM,QAAQ,iBAAiB,OAAO,MAAM,EAAC,gBAAgB,KAAI,CAAC;AACjF,MAAI,OAAO,aAAc,MAAK,KAAK,EAAC,MAAM,OAAO,cAAc,QAAQ,KAAI,CAAC;AAC5E,aAAW,WAAW,OAAO,YAAY,CAAC,GAAG;AACzC,QAAI,QAAQ,UAAU,MAAM,aAAW,YAAY,YAAY,EAAG;AAClE,UAAM,aAAa,QAAQ,WAAW,OAAO,SAAO,IAAI,YAAY,YAAY;AAChF,UAAMC,WAAU,WAAW,UAAU,WAAW,MAAM,SAAO,IAAI,KAAK,IAAI,WAAW,KAAK,SAAO,CAAC,QAAQ,IAAI,IAAI,KAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK;AACvJ,QAAI,QAAQ,SAASA,SAAS,MAAK,KAAK,EAAC,MAAM,2BAA2B,QAAQ,MAAM,WAAW,QAAQ,UAAS,CAAC;AAAA,EACzH;AACA,SAAO;AACX;AAEA,eAAe,qBAAqB,SAAkC,SAAqC;AACvG,QAAM,CAAC,OAAO,OAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,IACvC,QAAQ,aAAmE,QAAQ,SAAS,SAAO,CAAC,IAAI,YAAY,IAAI,UAAU,WAAW;AAAA,IAC7I,QAAQ,aAAyD,eAAe,SAAS,MAAM,IAAI;AAAA,EACvG,CAAC;AACD,QAAM,YAAY,MAAM,QAAQ,QAAQ,QAAQ,IAAI,SAAO,0BAA0B,IAAI,IAAI,MAAM,cAAc,MAAM,CAAC,CAAC;AACzH,QAAMC,aAAY,MAAM,QAAQ,QAAQ,QAAQ,IAAI,SAAO,0BAA0B,IAAI,IAAI,MAAM,cAAc,MAAM,CAAC,CAAC;AACzH,SAAO;AAAA,IAAC,GAAG,MAAM,IAAI,CAAC,EAAC,MAAK,OAAO,EAAC,MAAM,uBAAuB,QAAQ,MAAM,OAAM,EAAE;AAAA,IACnF,GAAG,QAAQ,OAAO,CAAC,GAAG,WAAW,CAAC,UAAU,KAAK,KAAK,QAAQ,KAAK,EAAE,MAAM,UAAU,iBAAiB,CAACA,WAAU,KAAK,CAAC,EAAE,IAAI,CAAC,EAAC,MAAK,OAAO,EAAC,MAAM,yBAAyB,QAAQ,MAAM,QAAQ,OAAM,EAAE;AAAA,EAAC;AAClN;AAEA,eAAe,aAAmB,OAAY,KAA4C;AACtF,QAAM,UAAe,CAAC;AAAG,MAAI,OAAO,GAAG,UAAU;AACjD,QAAM,UAAU,MAAM,KAAK,EAAC,QAAQ,KAAK,IAAI,GAAG,MAAM,MAAM,EAAC,GAAG,YAAY;AACxE,WAAO,CAAC,WAAW,OAAO,MAAM,QAAQ;AACpC,YAAM,QAAQ;AACd,UAAI;AAAC,gBAAQ,KAAK,IAAI,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,MAAE,SAAS,OAAO;AAAC,kBAAU;AAAM,cAAM;AAAA,MAAM;AAAA,IAC/F;AAAA,EACJ,CAAC;AACD,QAAMC,WAAU,MAAM,QAAQ,WAAW,OAAO,GAAG,SAASA,SAAQ,KAAK,SAAO,IAAI,WAAW,UAAU;AACzG,MAAI,QAAQ,WAAW,WAAY,OAAM,OAAO;AAChD,SAAO;AACX;AACA,eAAe,gBAAmB,aAAqB,OAAe,KAAuB,SAA8C;AACvI,QAAM,MAAM,cAAc,OAAO;AACjC,QAAM,UAAU,KAAK,IAAI;AACzB,MAAI;AAAC,UAAM,SAAS,MAAM,IAAI;AAAG,QAAI,KAAK,0BAA0B,EAAC,WAAW,uBAAuB,aAAa,OAAO,QAAQ,WAAW,YAAY,KAAK,IAAI,IAAI,QAAO,CAAC;AAAG,WAAO;AAAA,EAAO,SACzL,OAAO;AAAC,QAAI,KAAK,0BAA0B,EAAC,WAAW,uBAAuB,aAAa,OAAO,QAAQ,WAAW,MAAM,SAAS,OAAO,yBAAyB,GAAG,YAAY,KAAK,IAAI,IAAI,QAAO,CAAC;AAAG,UAAM;AAAA,EAAM;AAClO;;;AClFA,IAAMC,UAAS,CAAC,UAAiB,gBAAgB;AAC1C,SAAS,gBAAgB,SAAkB,QAAqE;AACnH,QAAM,MAAM,cAAc,QAAQ,OAAO;AACzC,SAAO;AAAA,IACH,aAAa,CAAC,OAAa,YAAyD,YAAY,SAAQ,OAAM,EAAC,GAAG,SAAQ,MAAK,SAAQ,GAAE,QAAQ;AAAA,IACjJ,sBAAsB,CAAC,OAAa,YAA4D,YAAY,SAAQ,OAAM,SAAQ,QAAQ;AAAA,IAC1I,gBAAgB,YAAY;AACxB,iBAAW,OAAO,MAAM,QAAQ,OAAO,GAAG;AACtC,cAAM,UAAQ,KAAK,IAAI;AACvB,YAAI;AAAC,gBAAMC,OAAM,SAAQ,IAAI,KAAK;AAAA,QAAE,SAAQ,OAAO;AAAC,cAAI,KAAK,gCAA+B,EAAC,WAAU,qBAAoB,aAAY,IAAI,MAAM,QAAQ,aAAY,SAAQ,IAAI,MAAM,SAAQ,OAAM,SAAQ,QAAO,WAAU,MAAK,SAAS,OAAM,8BAA8B,GAAE,YAAW,KAAK,IAAI,IAAE,QAAO,CAAC;AAAA,QAAE;AAAA,MACtT;AAAA,IACJ;AAAA,IACA,eAAe,YAAY;AACvB,iBAAW,OAAO,MAAM,QAAQ,OAAO,GAAG;AACtC,cAAM,UAAQ,KAAK,IAAI,GAAG,QAAM,IAAI;AACpC,YAAI;AACA,eAAK,MAAM,QAAQ,QAAQ,KAAK,MAAM,OAAO,GAAG,cAAc,QAAW;AAAC,kBAAM,KAAK,SAAQ,KAAK;AAAE;AAAA,UAAS;AAC7G,eAAK,MAAM,UAAU,SAAQ,KAAK,GAAG,WAAW,gBAAgB,MAAM,QAAQ,YAAa;AAC3F,gBAAM,UAAQ,MAAM,gBAAgB,SAAQ,MAAM,OAAO;AACzD,cAAI,QAAQ,SAAS,QAAQ;AAAC,kBAAM,SAAS,SAAQ,OAAM,WAAU,QAAQ,SAAS,CAAC,EAAE,IAAI;AAAE;AAAA,UAAS;AACxG,gBAAM,SAAS,SAAQ,OAAM,OAAO;AACpC,cAAI,MAAM,WAAW,UAAU;AAAC,kBAAM,KAAK,SAAQ,KAAK;AAAE;AAAA,UAAS;AACnE,gBAAM,UAAQ,MAAM,gBAAgB,SAAQ,MAAM,OAAO;AACzD,gBAAM,OAAO,MAAM,SAAQ,EAAC,aAAY,cAAc,KAAK,UAAU,CAAC,MAAM,QAAQ,aAAY,QAAQ,OAAO,CAAC,CAAC,GAAE,kBAAiB,QAAQ,UAAS,SAAQ,QAAQ,SAAQ,SAAQ,MAAM,QAAQ,YAAU,KAAI,CAAC;AAClN,gBAAM,KAAK,SAAQ,KAAK;AACxB,cAAI,KAAK,qCAAoC,EAAC,WAAU,qBAAoB,aAAY,MAAM,QAAQ,aAAY,SAAQ,MAAM,SAAQ,OAAM,UAAS,QAAO,WAAU,YAAW,KAAK,IAAI,IAAE,QAAO,CAAC;AAAA,QAC1M,SAAQ,OAAO;AACX,gBAAM,OAAK,SAAS,OAAM,wBAAwB;AAClD,gBAAM,SAAS,SAAQ,OAAM,WAAU,IAAI,EAAE,MAAM,MAAI;AAAA,UAAC,CAAC;AACzD,cAAI,KAAK,mCAAkC,EAAC,WAAU,qBAAoB,aAAY,MAAM,QAAQ,aAAY,SAAQ,MAAM,SAAQ,OAAM,UAAS,QAAO,WAAU,MAAK,YAAW,KAAK,IAAI,IAAE,QAAO,CAAC;AAAA,QAC7M;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;AACA,SAAS,QAAQ,EAAC,QAAO,GAAW;AAAC,SAAO,QAAQ,KAAY,eAAc,WAAO,MAAM,UAAQ,MAAM;AAAE;AAC3G,eAAe,UAAU,SAAgB,OAAgE;AACrG,QAAM,QAAM,MAAM,QAAQ,QAAQ,KAAK,MAAM,OAAO,GAAE,QAAM,MAAM,QAAQ,QAAQ,iBAAiB;AACnG,eAAa,MAAM,SAAO,WAAS,MAAM,OAAK,MAAM,eAAa,MAAM,SAAS,KAAK,YAAQ,OAAO,SAAO,MAAM,QAAM,OAAO,OAAK,MAAM,MAAI,OAAO,OAAO,SAAS,aAAa,CAAC,GAAE,sBAAsB;AAC1M,SAAO;AACX;AACA,eAAe,YAAY,SAAgB,SAAe,SAAgB,QAA0C;AAChH,eAAa,iBAAiB,KAAK,QAAQ,WAAW,KAAK,OAAO,cAAc,QAAQ,gBAAgB,GAAE,sBAAsB;AAChI,MAAI,WAAW,SAAU,cAAa,OAAO,QAAQ,YAAY,aAAa,CAAC,SAAQ,QAAQ,EAAE,SAAS,QAAQ,QAAQ,EAAE,KAAK,iBAAiB,KAAK,QAAQ,WAAW,EAAE,GAAE,uBAAuB;AACrM,QAAM,QAAM,MAAM,QAAQ,QAAQ,iBAAiB,GAAE,QAAM,MAAM,UAAU,SAAQ,EAAC,SAAQ,aAAY,MAAM,GAAE,CAAC;AACjH,QAAM,MAAI,MAAM,QAAQ,QAAQ,IAAWD,QAAO,OAAO,CAAC;AAC1D,MAAI,KAAK,QAAQ,gBAAc,QAAQ,aAAa;AAAC,iBAAa,IAAI,WAAS,UAAQ,KAAK,UAAU,IAAI,OAAO,MAAI,KAAK,UAAU,OAAO,GAAE,sBAAsB;AAAE,QAAG,IAAI,UAAQ,OAAO,OAAMC,OAAM,SAAQ,GAAG;AAAE;AAAA,EAAO;AAC3N,eAAa,MAAM,cAAY,QAAU,eAAe;AACxD,eAAa,CAAC,OAAK,IAAI,WAAS,YAAU,WAAS,UAAS,oBAAoB;AAChF,eAAa,MAAM,aAAW,QAAQ,kBAAiB,mBAAmB;AAC1E,MAAG,WAAS,UAAS;AAAC,UAAM,UAAQ,MAAM,gBAAgB,SAAQ,OAAO;AAAE,iBAAa,QAAQ,YAAU,QAAQ,SAAQ,8BAA8B;AAAA,EAAE;AAC1J,QAAM,QAAM,MAAM,QAAQ,QAAQ,OAAcD,QAAO,OAAO,GAAE,aAAS;AACrE,iBAAa,CAAC,WAAS,QAAQ,QAAQ,gBAAc,KAAK,QAAQ,aAAY,oBAAoB;AAClG,WAAO,EAAC,SAAQ,aAAY,MAAM,IAAG,QAAO,SAAQ,gBAAgB,OAAO,GAAE,OAAM,WAAU;AAAA,EACjG,CAAC;AACD,QAAMC,OAAM,SAAQ,KAAK;AAC7B;AACA,eAAeA,OAAM,SAAgB,OAA2B;AAC5D,MAAG,MAAM,UAAQ,WAAW;AAC5B,QAAM,QAAM,MAAM,UAAU,SAAQ,KAAK;AACzC,MAAG,MAAM,cAAY,QAAU;AAAC,UAAM,KAAK,SAAQ,KAAK;AAAE;AAAA,EAAO;AACjE,QAAM;AAAA,IAAe,QAAQ;AAAA,IAAQ,QAAQ;AAAA,IAAQ,MAAM;AAAA,IAAQ,sBAAoB,KAAK,UAAU,CAAC,MAAM,SAAQ,MAAM,QAAQ,WAAW,CAAC;AAAA,IAC3I,EAAC,MAAK,sBAAqB,WAAU,MAAM,QAAQ,aAAY,QAAO,MAAM,QAAO,MAAK,MAAM,QAAQ,QAAM,SAAQ;AAAA,EAAC;AACzH,QAAM,QAAQ,QAAQ,OAAcD,QAAO,MAAM,OAAO,GAAE,SAAK,KAAK,QAAQ,gBAAgB,MAAM,QAAQ,cAAc,EAAC,GAAG,KAAI,OAAM,WAAU,IAAI,GAAI;AAC5J;AACA,eAAe,SAAS,SAAgB,OAAY,OAAyB,MAA4B;AACrG,QAAM,QAAM,MAAM,UAAU,SAAQ,KAAK;AACzC,MAAG,MAAM,cAAY,UAAW,MAAM,WAAW,gBAAc,MAAM,QAAQ,eAAa,MAAM,WAAW,UAAQ,SAAO,MAAM,UAAU,SAAO,KAAK;AACtJ,QAAM;AAAA,IAAe,QAAQ;AAAA,IAAQ,QAAQ;AAAA,IAAQ,MAAM;AAAA,IAAQ,yBAAuB,KAAK,UAAU,CAAC,MAAM,SAAQ,MAAM,QAAQ,aAAY,MAAM,UAAS,OAAM,QAAM,EAAE,CAAC;AAAA,IAC5K,EAAC,MAAK,sBAAqB,WAAU,MAAM,QAAQ,aAAY,OAAM,KAAI;AAAA,EAAC;AAClF;AACA,eAAe,KAAK,SAAgB,OAAa;AAAC,QAAM,QAAQ,QAAQ,OAAcA,QAAO,MAAM,OAAO,GAAE,SAAK,KAAK,QAAQ,gBAAgB,MAAM,QAAQ,cAAc,EAAC,GAAG,KAAI,OAAM,OAAM,IAAI,GAAI;AAAE;;;ACvEjM,SAAS,oBAAoB,SAAkB;AAClD,QAAM,OAAO,gBAAgB,SAAQ,CAAC,OAAM,YAAU,YAAY,SAAQ,OAAM,OAAO,CAAC;AACxF,SAAO;AAAA,IAAC,GAAG;AAAA,IACP,iBAAiB,CAAC,OAAe,OAAO,IAAI,WAAW,GAAG,WAAW,MAAM,gBAAgB,SAAS,EAAE,GAAG,QAAQ,OAAO;AAAA,IACxH,eAAe,OAAO,OAAe;AAAC,YAAM,OAAO,MAAM,sBAAsB,SAAS,EAAE;AAAG,mBAAa,CAAC,KAAK,QAAQ,KAAK,CAAC,GAAG,QAAQ,2BAA2B;AAAA,IAAE;AAAA,IACtK,aAAa,CAAC,IAAY,YAAmC,OAAO,IAAI,QAAQ,aAAa,UAAU,MAAM,YAAY,SAAS,IAAI,OAAO,GAAG,QAAQ,OAAO;AAAA,EACnK;AACJ;AAEA,eAAe,YAAY,SAAkB,IAAY,SAA+C;AACpG,QAAM,EAAC,SAAS,QAAO,IAAI;AAC3B,eAAa,iBAAiB,KAAK,QAAQ,WAAW,KAAK,OAAO,QAAQ,YAAY,aAAa,iBAAiB,KAAK,QAAQ,OAAO,GAAG,sBAAsB;AACjK,QAAM,MAAM,oBAAoB,IAAI,UAAU,MAAM,QAAQ,IAAa,GAAG;AAC5E,MAAI,SAAS,QAAQ,gBAAgB,QAAQ,aAAa;AACtD,iBAAa,KAAK,UAAU,QAAQ,OAAO,MAAM,KAAK,UAAU,OAAO,GAAG,sBAAsB;AAChG,SAAK,MAAM,QAAQ,KAAK,EAAE,GAAG,cAAc,OAAW;AAAA,EAC1D;AACA,QAAM,UAAU,MAAM,gBAAgB,SAAS,EAAE;AACjD,eAAa,QAAQ,aAAa,QAAQ,oBAAoB,QAAQ,YAAY,QAAQ,SAAS,8BAA8B;AACjI,eAAa,CAAC,QAAQ,SAAS,QAAQ,QAAQ,SAAS,CAAC,GAAG,QAAQ,2BAA2B;AAC/F,QAAM,QAAQ,OAAO,KAAK,OAAO,EAAC,SAAS,SAAS,SAAS,OAAO,WAAU,EAAE;AAChF,MAAI,QAAQ,QAAS,OAAM,iBAAiB,SAAS,IAAI,SAAS,OAAO;AACzE,QAAM,QAAQ,MAAM,QAAQ,KAAK,EAAE;AACnC,eAAa,MAAM,aAAa,QAAQ,kBAAkB,8BAA8B;AACxF,QAAM,QAAQ,QAAQ,IAAI,EAAC,aAAa,QAAQ,aAAa,kBAAkB,MAAM,UAAU,SAAS,EAAC,MAAM,eAAc,EAAC,CAAC;AAC/H,QAAM,QAAQ,OAAgB,KAAK,UAAQ,EAAC,GAAG,KAAM,OAAO,UAAS,EAAE;AAC3E;AACA,eAAe,iBAAiB,EAAC,SAAS,QAAO,GAAY,IAAY,SAAgC,SAA+C;AACpJ,QAAM,SAAS,oBAAI,IAAgD;AACnE,aAAW,OAAO,QAAQ,WAAW;AACjC,UAAM,MAAM,KAAK,UAAU,CAAC,IAAI,SAAS,MAAM,IAAI,SAAS,IAAI,IAAI,SAAS,QAAQ,CAAC;AACtF,UAAM,QAAQ,OAAO,IAAI,GAAG,KAAK,CAAC;AAAG,UAAM,KAAK,GAAG;AAAG,WAAO,IAAI,KAAK,KAAK;AAAA,EAC/E;AACA,aAAW,SAAS,OAAO,OAAO,EAAG,KAAI,MAAM,MAAM,SAAO,IAAI,SAAS,cAAc,IAAI,SAAS,cAAc,WAAW,IAAI,SAAS,cAAc,SAAS,GAAG;AAChK,UAAM,EAAC,QAAQ,SAAQ,IAAI,MAAM,CAAC;AAClC,iBAAa,QAAQ,qBAAqB,mCAAmC;AAC7E,UAAM,OAAO,IAAI,QAAQ,aAAa,WAAW,MAAM,QAAQ,oBAAqB,IAAI;AAAA,MAAC;AAAA,MAAQ,YAAY,SAAS;AAAA,MAAI,SAAS,SAAS;AAAA,MACxI,aAAa,cAAc,KAAK,UAAU,CAAC,QAAQ,aAAa,SAAS,EAAE,CAAC,CAAC;AAAA,IAAC,CAAC,GAAG,OAAO;AAAA,EACjG;AACJ;AACA,eAAe,OAAU,SAAiB,aAAqB,OAAe,KAAuB,SAA8C;AAC/I,QAAM,MAAM,cAAc,OAAO;AACjC,QAAM,UAAU,KAAK,IAAI;AAAG,gBAAc,iBAAiB,KAAK,WAAW,IAAI,cAAc,WAAW;AACxG,MAAI;AAAC,UAAM,SAAS,MAAM,IAAI;AAAG,QAAI,KAAK,kBAAkB,EAAC,WAAW,uBAAuB,SAAS,aAAa,OAAO,QAAQ,WAAW,YAAY,KAAK,IAAI,IAAI,QAAO,CAAC;AAAG,WAAO;AAAA,EAAO,SAC1L,OAAO;AAAC,QAAI,KAAK,kBAAkB,EAAC,WAAW,uBAAuB,SAAS,aAAa,OAAO,QAAQ,WAAW,MAAM,SAAS,OAAO,qBAAqB,GAAG,YAAY,KAAK,IAAI,IAAI,QAAO,CAAC;AAAG,UAAM;AAAA,EAAM;AAC/N;AAGO,SAAS,kBAAmG,SAAY,UAAgH;AAC3O,MAAI,UAA4B,QAAQ,QAAQ,GAAG,WAAW;AAC9D,QAAME,WAAU,oBAAI,IAAsB;AAC1C,QAAM,QAAQ,oBAAI,IAA8B;AAChD,QAAM,eAAe,CAAI,OAAe,MAAc,KAAuB,eAAe,SAAqB;AAC7G,UAAM,MAAM,KAAK,UAAU,CAAC,OAAM,IAAI,CAAC;AACvC,UAAM,QAAQ,MAAM,IAAI,GAAG,KAAK,QAAQ,QAAQ,GAAG,MAAM,MAAM;AAAA,IAAC,CAAC,EAAE,KAAK,YAAY;AAChF,UAAI,aAAc,eAAc,MAAM,QAAQ,KAAK,OAAM,IAAI,GAAG,KAAK,cAAc,QAAW,cAAc;AAC5G,aAAO,IAAI;AAAA,IACf,CAAC;AACD,UAAM,IAAI,KAAI,IAAI;AAClB,SAAK,KAAK,QAAQ,MAAM;AAAC,UAAI,MAAM,IAAI,GAAG,MAAM,KAAM,OAAM,OAAO,GAAG;AAAA,IAAE,CAAC,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AACzF,WAAO;AAAA,EACX;AACA,MAAI,WAAsC;AAC1C,QAAM,UAAU,MAAM;AAClB,eAAW;AACX,QAAI,CAAC,WAAW;AAEZ,YAAM,mBAAmB,QAAQ,WAAW,CAAC,QAAQ,UAAU,KAAK,QAAQ,QAAQ,GAAG,GAAGA,QAAO,CAAC;AAClG,mBAAa,YAAY;AACrB,cAAM;AACN,cAAM,CAAC,GAAG,IAAI,MAAM;AACpB,YAAI,IAAI,WAAW,WAAY,OAAM,IAAI;AAAA,MAC7C,GAAG;AAAA,IACP;AACA,WAAO;AAAA,EACX;AACA,QAAM,QAAQ,CAAC,WAAkC,WAAW,YAAY,QAAQ,IAC1E,cAAc,QAAQ,EAAE,KAAK,MAAM,QAAQ,UAAU,CAAC;AAC5D,QAAMC,SAAQ,CAAI,QAAsC;AACpD,QAAI,SAAU,QAAO,QAAQ,OAAO,IAAI,YAAY,kBAAkB,CAAC;AACvE,UAAM,OAAO,QAAQ,KAAK,GAAG;AAAG,IAAAD,SAAQ,IAAI,IAAI;AAAG,SAAK,KAAK,QAAQ,MAAMA,SAAQ,OAAO,IAAI,CAAC,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAG,WAAO;AAAA,EAC7H;AACA,QAAM,YAAY,CAAI,QAAsC;AACxD,QAAI,SAAU,QAAO,QAAQ,OAAO,IAAI,YAAY,kBAAkB,CAAC;AACvE,UAAM,WAAW,CAAC,GAAGA,QAAO,GAAG,OAAO,QAAQ,KAAK,YAAY;AAAC,YAAM,QAAQ,WAAW,QAAQ;AAAG,aAAO,IAAI;AAAA,IAAE,CAAC;AAClH,cAAU,KAAK,MAAM,MAAM;AAAA,IAAC,CAAC;AAAG,WAAO;AAAA,EAC3C;AACA,QAAM,SAAS,OAAU,IAAY,QAA0B;AAAC,kBAAc,MAAM,QAAQ,KAAK,EAAE,GAAG,cAAc,QAAW,eAAe;AAAG,WAAO,IAAI;AAAA,EAAE;AAC9J,SAAO;AAAA,IAAC,GAAG;AAAA,IAAS,GAAI,QAAQ,UAAU,EAAC,SAAS,MAAM,MAAM,SAAS,EAAC,IAAI,CAAC;AAAA,IAAI,GAAI,QAAQ,UAAU,EAAC,SAAS,MAAM,MAAM,SAAS,EAAC,IAAI,CAAC;AAAA,IAAI,iBAAiB,SAAS;AAAA,IAAiB,aAAa,CAAC,IAAI,YAAY,UAAU,MAAM,SAAS,YAAY,IAAI,OAAO,CAAC;AAAA,IACxQ,SAAS,CAAC,IAAI,YAAYC,OAAM,MAAM,OAAO,IAAI,MAAM;AAAC,UAAI,QAAQ,QAAQ,SAAS,eAAgB,OAAM,IAAI,YAAY,oCAAoC;AAAG,aAAO,YAAY,QAAQ,WAAW,QAAQ,QAAQ,SAAS,aAAa,IAAG,QAAQ,QAAQ,QAAO,MAAM,QAAQ,QAAQ,IAAG,OAAO,GAAE,KAAK,IAAI,QAAQ,QAAQ,IAAI,OAAO;AAAA,IAAE,CAAC,CAAC;AAAA,IAClV,MAAM,YAAY;AAAC,YAAMA,OAAM,YAAY;AAAC,cAAM,SAAS,eAAe;AAAE,cAAM,QAAQ,KAAK;AAAA,MAAE,CAAC;AAAE,UAAI,CAAC,SAAU,OAAM,UAAU,MAAM,SAAS,cAAc,CAAC;AAAA,IAAE;AAAA,IACnK,aAAa,CAAC,IAAG,YAAYA,OAAM,MAAM,OAAO,IAAG,MAAI,SAAS,YAAY,IAAG,OAAO,CAAC,CAAC;AAAA,IACxF,sBAAsB,CAAC,IAAG,YAAYA,OAAM,MAAM,OAAO,IAAG,MAAI,SAAS,qBAAqB,IAAG,OAAO,CAAC,CAAC;AAAA,IAC1G,GAAI,QAAQ,YAAY,EAAC,WAAW,CAAC,IAAY,YAAwDA,OAAM,MAAM,OAAO,IAAI,MAAM,QAAQ,UAAW,IAAI,OAAO,CAAC,CAAC,EAAC,IAAI,CAAC;AAAA,IAC5K,GAAI,QAAQ,gBAAgB,EAAC,eAAe,CAAC,IAAY,YAA4DA,OAAM,MAAM,OAAO,IAAI,MAAM,QAAQ,cAAe,IAAI,OAAO,CAAC,CAAC,EAAC,IAAI,CAAC;AAAA,IAC5L,GAAI,QAAQ,UAAU,EAAC,SAAS,CAAC,IAAY,YAAsDA,OAAM,MAAM,OAAO,IAAI,MAAM,aAAa,IAAG,QAAQ,QAAO,MAAM,QAAQ,QAAS,IAAI,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC;AAAA,IAC1M,GAAI,QAAQ,YAAY,EAAC,WAAW,CAAC,IAAY,YAAwDA,OAAM,MAAM,OAAO,IAAI,MAAM,aAAa,IAAG,QAAQ,QAAO,MAAM,QAAQ,UAAW,IAAI,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC;AAAA,IAClN,GAAI,QAAQ,YAAY,EAAC,WAAW,CAAC,IAAY,YAAwDA,OAAM,MAAM,OAAO,IAAI,MAAM,QAAQ,UAAW,IAAI,OAAO,CAAC,CAAC,EAAC,IAAI,CAAC;AAAA,IAC5K,GAAI,QAAQ,mBAAmB,EAAC,kBAAkB,CAAC,IAAY,YAA+DA,OAAM,MAAM,OAAO,IAAI,MAAM,aAAa,IAAG,QAAQ,QAAO,MAAM,QAAQ,iBAAkB,IAAI,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC;AAAA,IAC9O,GAAI,QAAQ,oBAAoB,EAAC,mBAAmB,CAAC,IAAY,YAAgEA,OAAM,MAAM,OAAO,IAAI,MAAM,aAAa,IAAG,QAAQ,QAAO,MAAM,QAAQ,kBAAmB,IAAI,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC;AAAA,IAClP,GAAI,QAAQ,sBAAsB,EAAC,qBAAqB,CAAC,IAAY,YAAkEA,OAAM,MAAM,QAAQ,oBAAqB,IAAI,OAAO,CAAC,EAAC,IAAI,CAAC;AAAA,EACtM;AACJ;;;AC/GO,SAAS,iBAAiB,SAAiC,UAAiC,aAAmB,aAClH,QAAiC,YAAU,aAAY,aAAoB,SAAO,OAAmC;AACrH,SAAO,QAAQ,QAAQ,QAAQ,EAAC,aAAY,aAAY,QAAO,WAAU,aAAY,GAAI,SAAO,EAAC,oBAAmB,KAAI,IAAE,CAAC,EAAE,CAAC;AAClI;;;ACGA,eAAsB,sBAAsB,SAA2B,SAAkC,OAAe,MAAc,WAAkE;AACpM,QAAM,OAAO,MAAM,QAAQ,aAAwB,qBAAqB,OAAO,SAAO,IAAI,WAAW,QAAQ,IAAI,UAAU,SAAS;AACpI,aAAW,OAAO,MAAM;AACpB,UAAM,QAAQ,MAAM,QAAQ,OAAkB,IAAI,KAAK,SAAO,IAAK,UAAU,aAAa,EAAC,GAAG,KAAK,OAAM,WAAU,OAAM,UAAS,MAAK,iBAAgB,IAAI,GAAI;AAC/J,QAAI,MAAM,UAAU,UAAW;AAC/B,QAAI,MAAM,WAAW,SAAU,QAAO;AACtC,iBAAa,MAAM,WAAW,MAAM,OAAO,4BAA4B;AACvE,UAAM,KAAK,cAAc,KAAK,UAAU,CAAC,WAAU,MAAM,EAAE,CAAC,CAAC;AAC7D,UAAM,QAAQ,MAAM,QAAQ,QAAQ,QAAQ,EAAC,aAAY,MAAM,aAAW,MAAM,IAAG,aAAY,IAAG,QAAO,UAAS,WAAU,MAAM,IAAG,MAAK,MAAM,UAAQ,eAAa,QAAO,UAAS,MAAM,WAAS,MAAM,MAAK,CAAC;AAChN,QAAI,UAAU,YAAa,QAAO,UAAU,YAAY,YAAY;AACpE,UAAM,QAAQ,OAAkB,IAAI,KAAK,SAAO,IAAK,UAAU,YAAY,MAAO,EAAC,GAAG,KAAK,OAAM,WAAU,OAAM,UAAS,MAAK,iBAAgB,CAAC;AAAA,EACpJ;AACA,SAAO,gBAAgB,SAAQ,SAAQ,OAAM,MAAK,SAAS;AAC/D;AAEA,eAAe,gBAAgB,SAA2B,SAAkC,OAAe,MAAc,WAAkE;AACvL,QAAM,OAAO,MAAM,QAAQ,KAAe,QAAQ,mBAAmB,wBAAwB,SAAO,IAAI,YAAY,SAAS,IAAI,SAAS,WAAW,QAAQ,CAAC,IAAI,IAAI;AACtK,aAAW,OAAO,MAAM;AACpB,UAAM,MAAM,MAAM,QAAQ,OAAiB,IAAI,KAAK,SAAO,IAAK,UAAU,aAAa,EAAC,GAAG,KAAK,OAAM,WAAU,MAAK,MAAK,aAAY,EAAC,SAAQ,aAAY,MAAK,iBAAgB,EAAC,IAAI,GAAI;AACzL,QAAI,IAAI,KAAM;AACd,UAAM,QAAQ,MAAM,iBAAY,SAAQ,SAAQ,IAAI,SAAS,IAAG,cAAc,KAAK,UAAU,CAAC,WAAU,IAAI,SAAS,EAAE,CAAC,CAAC,GAAE,QAAQ;AACnI,QAAI,UAAU,YAAa,QAAO,UAAU,YAAY,YAAY;AACpE,UAAM,QAAQ,OAAiB,IAAI,KAAK,UAAQ,EAAC,GAAG,KAAK,OAAM,WAAU,MAAK,MAAK,aAAY,EAAC,SAAQ,aAAY,MAAK,iBAAgB,EAAC,EAAE;AAAA,EAChJ;AACA,SAAO;AACX;;;AC1BA,eAAsB,kBAAkB,SAA2B,SAAkC,OAAe,MAAc,WAAkE;AAChM,QAAM,UAAU,MAAM,QAAQ,aAA0B,eAAe,OAAO,WAAS,MAAM,QAAQ,WAAW,IAAI;AACpH,aAAW,OAAO,SAAS;AACvB,UAAM,KAAK,IAAI,MAAM,QAAQ;AAC7B,QAAI,MAAM,QAAQ,IAAI,0BAA0B,EAAE,EAAG;AACrD,UAAM,QAAQ,MAAM,QAAQ,OAAoB,IAAI,KAAK,UAAQ,EAAC,GAAG,KAAK,OAAM,IAAK,UAAU,aAAa,cAAc,IAAK,UAAU,cAAc,cAAc,aAAY,EAAE;AACnL,QAAI,MAAM,UAAU,aAAa;AAC7B,mBAAa,QAAQ,SAAS,0BAA0B;AACxD,YAAM,QAAQ,MAAM,QAAQ,QAAQ,QAAQ,EAAC,aAAY,MAAM,WAAU,WAAU,IAAG,aAAY,cAAc,KAAK,UAAU,CAAC,WAAU,EAAE,CAAC,CAAC,GAAE,QAAO,UAAS,MAAK,aAAY,CAAC;AAClL,UAAI,UAAU,YAAa,QAAO,UAAU,YAAY,YAAY;AAAA,IACxE;AACA,UAAM,QAAQ,OAAO,0BAA0B,IAAI,MAAM,IAAI;AAAA,EACjE;AACA,SAAO;AACX;;;ACTA,eAAsB,kBAAkB,SAA+B;AACnE,aAAW,SAAS,MAAM,QAAQ,QAAQ,KAAK,GAAG;AAC9C,QAAI,MAAM,WAAW,SAAS,YAAY,MAAM,UAAU,UAAU,QAAS;AAC7E,UAAM,UAAQ,MAAM,UAAU;AAC9B,QAAI,QAAQ,MAAO,YAAW,OAAO,MAAM,QAAQ,QAAQ,aAAyD,QAAO,MAAM,IAAG,SAAK,CAAC,IAAI,YAAU,IAAI,UAAQ,WAAW;AAC3K,YAAM,QAAQ,QAAQ,SAAQ,MAAM,IAAG,SAAQ,cAAa,MAAI,QAAQ,MAAO,UAAU,MAAM,IAAG,EAAC,OAAM,IAAI,MAAM,IAAG,aAAY,cAAc,KAAK,UAAU,CAAC,SAAQ,IAAI,MAAM,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC;AAC7L,QAAI,QAAQ,QAAS,YAAW,OAAQ,MAAM,QAAQ,QAAQ,IAA8B,iBAAe,MAAM,EAAE,KAAI,CAAC,GAAG;AACvH,YAAM,MAAI,oBAAkB,KAAK,UAAU,CAAC,MAAM,IAAG,IAAI,QAAQ,CAAC;AAClE,WAAK,MAAM,QAAQ,QAAQ,IAAqB,GAAG,IAAI,WAAW,SAAU,OAAM,QAAQ,QAAQ,SAAQ,MAAM,IAAG,SAAQ,iBAAgB,MAAI,QAAQ,QAAS,cAAc,MAAM,IAAG,EAAC,UAAS,IAAI,UAAS,aAAY,cAAc,KAAK,UAAU,CAAC,SAAQ,IAAI,QAAQ,CAAC,CAAC,GAAE,QAAO,SAAQ,CAAC,CAAC;AAAA,IACrS;AACA,eAAW,QAAQ,MAAM,MAAM,OAAO,CAAAC,UAAM,CAAC,aAAY,WAAW,EAAE,SAASA,MAAK,MAAM,CAAC,GAAG;AAC1F,YAAM,KAAG,cAAc,KAAK,UAAU,CAAC,SAAQ,KAAK,EAAE,CAAC,CAAC;AACxD,YAAM,QAAQ,QAAQ,SAAQ,MAAM,IAAG,SAAQ,gBAAe,MAAI,kBAAkB,QAAQ,OAAM,QAAQ,SAAQ,MAAM,IAAG,KAAK,IAAG,EAAE,CAAC;AACtI,YAAM,QAAQ,QAAQ,SAAQ,MAAM,IAAG,SAAQ,sBAAqB,MAAI,sBAAsB,QAAQ,OAAM,QAAQ,SAAQ,MAAM,IAAG,KAAK,IAAG,EAAE,CAAC;AAAA,IACpJ;AAAA,EACJ;AACJ;AAEA,eAAe,QAAQ,SAAgC,SAAe,aAAmB,OAAa,KAAwC;AAC1I,QAAM,UAAQ,KAAK,IAAI;AACvB,MAAI;AAAC,UAAM,IAAI;AAAA,EAAE,SAAQ,OAAO;AAAC,kBAAc,OAAO,EAAE,KAAK,iCAAgC,EAAC,WAAU,qBAAoB,aAAY,SAAQ,OAAM,QAAO,WAAU,MAAK,SAAS,OAAM,yBAAyB,GAAE,YAAW,KAAK,IAAI,IAAE,QAAO,CAAC;AAAA,EAAE;AAC1P;;;ACzBA,eAAsB,oBAAoB,SAA6B,SAAkC,OAAe,MAAmE;AACvL,QAAM,WAAW,MAAM,gBAAgB,SAAS,OAAO,KAAK,EAAE;AAC9D,eAAa,SAAS,UAAU,CAAC,CAAC,aAAY,SAAS,EAAE,SAAS,KAAK,UAAU,SAAS,EAAE,GAAG,4BAA4B;AAC3H,QAAM,QAAQ,MAAM,QAAQ,IAAsB,sBAAsB,KAAK,UAAU,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC;AACrH,QAAM,OAAO,IAAI,KAAK,MAAM,QAAQ,QAAa,IAAI,GAAG,QAAQ,CAAC,KAAK,UAAU,MAAM,CAAC,CAAC,IAAI,IAAI,KAAK,KAAK,CAAC,CAAU,IAAI,CAAC,CAAC,CAAC;AAC5H,aAAW,OAAO,UAAU;AACxB,QAAI,IAAI,UAAU,UAAW;AAC7B,UAAM,MAAM,KAAK,IAAI,IAAI,EAAE;AAAG,iBAAa,KAAK,4BAA4B;AAC5E,UAAM,QAAQ,MAAM,gBAAgB,SAAQ,SAAQ,KAAI,KAAI,KAAK,OAAQ;AACzE,QAAI,MAAO,QAAO;AAAA,EACtB;AACJ;AACA,eAAe,gBAAgB,SAA6B,SAAkC,KAAa,KAAU,SAA6E;AAC9L,MAAI,QAAQ,WAAW,UAAU;AAC7B,UAAM,UAAU,MAAM,QAAQ,OAAY,KAAK,SAAO,IAAK,UAAU,aAAa,UAAU,GAAI,IAAI,GAAI;AACxG,QAAI,QAAQ,UAAU,UAAW;AAAA,EACrC,WAAW,IAAI,UAAU,WAAY;AACrC,QAAM,QAAQ,MAAM,iBAAY,SAAQ,SAAQ,IAAI,IAAG,QAAQ,KAAK,eAAe,IAAI,IAAG,QAAQ,MAAM;AACxG,QAAM,SAAS,QAAQ,WAAW,UAAU,WAAW,QAAQ,WAAW,WAAW,YAAY;AACjG,MAAI,UAAU,OAAQ,QAAO;AAC7B,MAAI,QAAQ,WAAW,SAAU,OAAM,QAAQ,OAAY,KAAK,SAAO,UAAU,GAAI,CAAC;AAC1F;AACA,SAAS,UAAU,KAAe;AAC9B,SAAO,EAAC,GAAG,KAAI,OAAM,WAAU,iBAAgB,aAAY,QAAO,EAAC,GAAG,IAAI,QAAO,OAAM,UAAS,MAAK,iBAAgB,EAAC;AAC1H;;;ACfA,eAAsB,iBAAiB,SAA2B,SAAkC,OAAoB,SAAuC;AAC3J,QAAM,MAAM,cAAc,OAAO;AACjC,aAAW,QAAQ,MAAM,OAAO;AAC5B,UAAM,UAAU,KAAK;AAAS,QAAI,CAAC,WAAW,CAAC,UAAS,UAAS,WAAU,WAAW,EAAE,SAAS,QAAQ,KAAK,EAAG;AACjH,UAAM,UAAU,KAAK,IAAI;AACzB,QAAI;AACJ,QAAI;AACA,YAAM,QAAQ,MAAM,QAAQ,SAAS,SAAS,OAAO,MAAM,OAAO;AAClE,YAAM,SAAS,UAAU,cAAc,MAAM,QAAQ,KAAK,MAAM,EAAE,IAAI;AACtE,YAAM,kBAAkB,OAAO,MAAM,KAAK,WAAS,MAAM,UAAU,aAAa,KAAK,MAAM,CAAC,CAAC,aAAY,WAAW,EAAE,SAAS,MAAM,MAAM,CAAC;AAC5I,eAAS,EAAC,OAAO,UAAU,eAAe,kBAAkB,aAAa,MAAK;AAAA,IAClF,SAAS,OAAO;AAAC,eAAS,eAAe,KAAK;AAAA,IAAE;AAChD,QAAI,OAAO,UAAU,QAAQ,SAAS,OAAO,SAAS,QAAQ,KAAM;AACpE,UAAM,SAAS,EAAC,WAAU,uBAAuB,aAAY,QAAQ,IAAI,SAAQ,MAAM,IAAI,QAAO,KAAK,IAAI,OAAM,QAAQ,QAAQ,QAAO,CAAC,UAAS,SAAS,EAAE,SAAS,OAAO,KAAK,IAAE,YAAmB,WAAoB,MAAK,OAAO,MAAM,OAAM,OAAO,OAAO,YAAW,KAAK,IAAI,IAAE,QAAO;AAC9R,QAAI,OAAO,WAAW,UAAW,KAAI,KAAK,yBAAyB,MAAM;AAAA,QAAQ,KAAI,KAAK,yBAAyB,MAAM;AACzH,UAAM;AAAA,MAAe;AAAA,MAAS;AAAA,MAAS,MAAM;AAAA,MAAI,6BAA6B,KAAK,UAAU,CAAC,MAAM,IAAG,KAAK,IAAG,QAAQ,EAAE,CAAC,IAAI,MAAM,OAAO,QAAQ,OAAO,OAAO,QAAQ;AAAA,MACrK,EAAC,MAAM,mBAAmB,QAAQ,KAAK,IAAI,WAAW,QAAQ,IAAI,GAAG,OAAM;AAAA,IAAC;AAAA,EACpF;AACJ;AACA,eAAe,QAAQ,SAA2B,SAAkC,OAAoB,MAAkB,SAA6D;AACnL,QAAM,UAAU,KAAK;AACrB,MAAI,QAAQ,WAAW,UAAU;AAC7B,UAAM,QAAQ,MAAM,kBAAkB,SAAS,SAAS,MAAM,IAAI,KAAK,IAAI,QAAQ,EAAE;AACrF,QAAI,UAAU,YAAa,QAAO;AAClC,UAAM,cAAc,MAAM,sBAAsB,SAAQ,SAAQ,MAAM,IAAG,KAAK,IAAG,QAAQ,EAAE;AAC3F,QAAI,gBAAgB,YAAa,QAAO;AAAA,EAC5C;AACA,QAAM,WAAW,MAAM,oBAAoB,SAAQ,SAAQ,MAAM,IAAG,IAAI;AACxE,MAAI,SAAU,QAAO;AACrB,QAAM,WAAW,MAAM,QAAQ,SAAS,MAAM,EAAE;AAChD,QAAM,WAAW,OAAO,OAAO,SAAS,UAAU,EAAE,OAAO,OAAK,EAAE,WAAW,KAAK,EAAE,EAAE,KAAK,CAAC,GAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AAC5H,MAAI,UAAU;AACV,QAAI,QAAQ,WAAW,YAAY,CAAC,UAAS,aAAY,UAAU,EAAE,SAAS,SAAS,OAAO,EAAG,QAAO;AACxG,WAAO,iBAAY,SAAS,SAAS,SAAS,eAAe,SAAS,sBAAsB,SAAS,KAAK,SAAS,IAAI,QAAQ,IAAI,QAAQ,QAAQ,SAAS,IAAI,kBAAkB,MAAM,KAAK,MAAM,QAAQ,IAAI,CAAC,CAAC,SAAS,YAAY;AAAA,EAC1O;AACA,gBAAc,CAAC,KAAK,SAAS,KAAK,MAAM,SAAS,YAAY,CAAC,KAAK,cAAc,KAAK,SAAO,IAAI,YAAY,QAAQ,cAAc,mBAAmB,SAAS,GAAG,4BAA4B;AAC9L,SAAO,QAAQ,WAAW,WAAW,cAAc,QAAQ,WAAW,UAAU,WAAW;AAC/F;AACA,SAAS,eAAe,OAA6B;AACjD,QAAM,MAAO,OAA4B,MAAM,OAAO,OAAO,QAAQ,YAAY,yBAAyB,KAAK,GAAG,IAAI,MAAM;AAC5H,SAAO,EAAC,OAAO,CAAC,4BAA2B,kBAAiB,wBAAwB,EAAE,SAAS,IAAI,IAAI,WAAW,WAAW,KAAI;AACrI;;;ACpDA,eAAsB,uBAAuB,SAAsB,SAAgC,OAAkB,SAAuB;AACxI,MAAG,QAAQ,SAAO,eAAe;AAC7B,UAAM,WAAS,MAAM,sBAAsB,EAAC,SAAQ,QAAO,GAAE,MAAM,EAAE,GAAG,KAAK,SAAK,IAAI,WAAS,QAAQ,MAAM;AAC7G,QAAG,QAAQ,OAAM,IAAI,YAAY,QAAQ,IAAI;AAAA,EACjD;AACA,MAAG,QAAQ,SAAO,mBAAiB,QAAQ,SAAO,iBAAiB;AAC/D,UAAM,OAAK,MAAM,QAAQ,IAA2C,iBAAe,MAAM,EAAE;AAC3F,QAAG,MAAM,KAAK,SAAK,IAAI,aAAW,QAAQ,YAAU,CAAC,CAAC,aAAY,UAAS,WAAW,EAAE,SAAS,IAAI,KAAK,CAAC,EAAE,OAAM,IAAI,YAAY,4BAA4B;AAAA,EACnK;AACJ;AACO,SAAS,iBAAiB,SAA0E,SAAgC,YAAoC,YAA8B;AACzM,MAAI,WAAS,OAAMC,UAAgC,SAAgC;AACnF,QAAM,OAAK,MAAI,WAAS,QAAQ,QAAQ,IAAEA,cAAW,YAAS;AAAC,UAAM,QAAQ,KAAK;AAAE,UAAM,WAAW;AAAE,UAAM,IAAI,YAAW,QAAO,OAAO;AAAA,EAAE,GAAG,EAAE,QAAQ,MAAI;AAAC,IAAAA,WAAQ;AAAA,EAAU,CAAC;AACjL,QAAM,UAAQ,MAAI,aAAW,YAAS;AAClC,eAAS;AACT,UAAM,UAAQ,MAAM,QAAQ,WAAW,CAAC,IAAI,YAAW,WAAU,OAAO,GAAEA,QAAO,CAAC;AAClF,UAAM,QAAQ,QAAQ;AAAE,UAAM,QAAQ,MAAM;AAC5C,aAAS,SAAQ,uBAAuB;AAAA,EAC5C,GAAG;AACH,SAAO,EAAC,MAAK,SAAQ,SAAQ,MAAI,eAAa,YAAS;AAAC,UAAM,QAAQ;AAAE,UAAM,IAAI,YAAW,WAAU,OAAO;AAAE,UAAM,QAAQ,QAAQ;AAAA,EAAE,GAAG,EAAC;AAChJ;AACA,eAAe,IAAI,YAAoC,QAAkC,SAAiC;AACtH,QAAM,UAAQ,MAAM,QAAQ,WAAW,WAAW,IAAI,OAAM,WAAU,UAAQ;AAC1E,UAAM,UAAQ,KAAK,IAAI;AACvB,QAAG;AAAC,YAAM,UAAU,MAAM,IAAI;AAAA,IAAE,SAAO,OAAM;AAAC,cAAQ,WAAW,EAAC,aAAY,aAAW,SAAO,MAAI,OAAM,OAAM,aAAW,QAAO,QAAO,WAAU,MAAK,SAAS,OAAM,YAAU,OAAO,YAAY,IAAE,SAAS,GAAE,YAAW,KAAK,IAAI,IAAE,QAAO,CAAC;AAAE,YAAM;AAAA,IAAM;AAAA,EACjQ,CAAC,CAAC;AACF,WAAS,SAAQ,YAAU,OAAO,YAAY,IAAE,SAAS;AAC7D;AACA,SAAS,SAAS,SAAwC,MAAa;AACnE,QAAM,SAAO,QAAQ,QAAQ,YAAQ,OAAO,WAAS,aAAW,CAAC,OAAO,MAAM,IAAE,CAAC,CAAC;AAClF,MAAG,OAAO,OAAO,OAAM,IAAI,eAAe,QAAO,IAAI;AACzD;;;ACtBA,eAAsB,sBAAsB,SAA8B;AACtE,QAAM,YAAU,QAAQ,aAAW,WAAU,KAAG,QAAQ;AACxD,QAAM,QAAM,QAAQ,SAAO,MAAM,eAAe,KAAK,IAAG,SAAS;AACjE,QAAM,UAAQ,QAAQ,mBAAmB,0BAAwB,QAAQ,UAAQ,IAAI,wBAAwB,IAAG,EAAC,WAAU,YAAU,YAAW,YAAW,QAAQ,KAAI,GAAG,QAAQ,QAAO,CAAC;AAC1L,QAAM,UAAQ,IAAI,cAAc,IAAG,EAAC,WAAU,YAAU,YAAW,YAAW,QAAQ,KAAI,GAAG,QAAQ,QAAO,CAAC;AAC7G,QAAM,QAAQ,KAAK;AAAE,QAAM,QAAQ,KAAK;AACxC,MAAI,iBAA0C,YAAS;AAAA,EAAC;AACxD,QAAM,gBAAc,QAAQ,iBAAe;AAC3C,QAAM,aAAW,CAAC,UAAoB,cAAc;AAAA,IAAC,GAAG;AAAA,IAAQ;AAAA,IAAM;AAAA,IAClE,iBAAgB,QAAQ,mBAAiB,kBAAkB;AAAA,IAC3D,iBAAgB,OAAM,OAAM,YAAU;AAAC,YAAM,uBAAuB,SAAQ,SAAQ,OAAM,OAAO;AAAE,YAAM,QAAQ,kBAAkB,OAAM,OAAO;AAAA,IAAE;AAAA,IAClJ,gBAAe,OAAM,UAAO;AAAC,YAAM,eAAe,MAAM,EAAE;AAAE,YAAM,QAAQ,iBAAiB,KAAK;AAAA,IAAE;AAAA,IAClG,aAAY,OAAM,IAAG,QAAO,QAAM;AAAC,YAAM,QAAQ,YAAY,IAAG,MAAM;AAAE,YAAM,QAAQ,cAAc,IAAG,QAAO,GAAG;AAAA,IAAE;AAAA,EAAC,CAAC;AACzH,QAAM,UAAQ,WAAW,QAAQ,KAAK,GAAE,UAA6B,EAAC,IAAG,OAAM,SAAQ,SAAQ,SAAQ,WAAU;AACjH,QAAM,aAAW,QAAQ,aAAa,OAAO,KAAG,CAAC;AACjD,SAAO,gBAAgB,SAAQ,SAAQ,YAAW,YAAQ;AAAC,qBAAe;AAAA,EAAO,CAAC;AACtF;AACA,SAAS,gBAAgB,SAA6B,SAA6B,YAAoC,aAAuD;AAC1K,QAAM,EAAC,SAAQ,SAAQ,QAAO,IAAE,SAAQ,YAAU,QAAQ,aAAW;AACrE,QAAM,UAAQ,QAAQ,YAAU,sBAAsB,EAAC,SAAQ,SAAQ,WAAU,QAAQ,WAAU,sBAAqB,QAAQ,sBAAqB,KAAI,QAAQ,QAAM,MAAI;AAAA,EAAC,GAAE,CAAC,IAAE;AACjL,QAAM,aAAW,QAAQ,aAAW,uBAAuB;AAAA,IAAC,GAAG,QAAQ;AAAA,IAAW,GAAG;AAAA,IACjF,WAAU,YAAU;AAAA,IAAc,KAAI,QAAQ,QAAM,MAAI;AAAA,IAAC;AAAA,EAAE,CAAC,IAAE;AAClE,QAAM,eAA0D,OAAO,OAAO,CAAC,GAAE,GAAG,WAAW,IAAI,eAAW,UAAU,YAAY,CAAC;AACrI,QAAM,SAAO;AAAA,IAAC,GAAG;AAAA,IAAQ,GAAG;AAAA,IACxB,GAAI,UAAQ,EAAC,GAAG,SAAQ,kBAAiB,OAAM,OAAa,QAAa,MAAM,QAAQ,OAAO,SAAQ,OAAM,EAAE,GAAG,SAAO,aAAW,QAAQ,iBAAiB,OAAM,EAAE,IAAE,CAAC,EAAC,IAAE,CAAC;AAAA,IAC3K,GAAI,aAAW,EAAC,mBAAkB,WAAW,mBAAkB,gBAAe,WAAW,eAAc,IAAE,CAAC;AAAA,IAC1G,SAAQ,CAAC,OAAa,UAAkD,QAAQ,QAAQ,SAAQ,OAAM,KAAK;AAAA,IAC3G,QAAO,CAAC,OAAa,OAAY,QAAQ,OAAO,SAAQ,OAAM,EAAE;AAAA,EAAC;AACrE,QAAM,WAAS,oBAAoB,EAAC,SAAQ,QAAO,QAAO,CAAC;AAAE,cAAY,SAAS,aAAa;AAC/F,QAAM,eAAa,CAAC,GAAG,YAAW,GAAG,UAAQ,CAAC,OAAO,IAAE,CAAC,GAAE,GAAG,aAAW,CAAC,UAAU,IAAE,CAAC,CAAC;AACvF,QAAM,YAAU,iBAAiB,SAAQ,SAAQ,cAAa,YAAS;AACnE,UAAM,kBAAkB,EAAC,SAAQ,SAAQ,OAAM,QAAQ,WAAS,EAAC,SAAQ,EAAC,SAAQ,YAAU,UAAS,EAAC,GAAE,OAAM,aAAa,YAAU,EAAC,WAAU,aAAa,UAAS,IAAE,QAAU,QAAO,CAAC;AAC1L,QAAG,CAAC,cAAY,QAAQ,QAAQ,YAAU,SAAS,MAAM,QAAQ,KAAK,EAAE,OAAM,iBAAiB,QAAQ,SAAQ,SAAQ,OAAM,OAAO;AAAA,EACxI,CAAC;AACD,SAAO,EAAC,GAAG,SAAQ,SAAQ,kBAAkB,EAAC,GAAG,QAAO,GAAG,UAAS,GAAE,QAAQ,EAAC;AACnF;;;AC3CA,eAAsB,mBAAmB,OAA2B,SAAkC,OAAoB,SAAuC;AAC7J,MAAI,CAAC,MAAM,UAAW;AACtB,aAAW,QAAQ,MAAM,OAAO;AAC5B,UAAM,OAAO,MAAM,gBAAgB,SAAQ,MAAM,IAAG,KAAK,EAAE;AAC3D,UAAM,QAAQ,MAAM,QAAQ,IAAqB,sBAAsB,KAAK,UAAU,CAAC,MAAM,IAAG,KAAK,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC;AACtH,eAAW,OAAO,MAAM;AACpB,UAAI,IAAI,UAAU,UAAW;AAC7B,YAAM,MAAM,MAAM,MAAM,QAAQ,QAAqB,IAAI,GAAG,UAAU,SAAK,KAAK,OAAK,IAAI,EAAE,CAAC;AAC5F,UAAI,CAAC,IAAK;AACV,YAAMC,QAAO,IAAI,UAAU,eAAe,MAAM,MAAM,QAAQ,UAAU,IAAI,IAAG,IAAI,EAAE,IAAI;AACzF,UAAI,IAAI,UAAU,iBAAiB,CAACA,SAAQ,CAACA,MAAK,SAAU;AAC5D,YAAM,QAAQ,MAAM,QAAQ,OAAmB,KAAI,SAAK,IAAK,UAAU,IAAI,QAAQ,MAAO,EAAC,GAAG,KAAK,OAAM,WAAU,iBAAgBA,OAAM,YAAU,IAAI,UAAQ,aAAW,cAAY,SAAW,QAAO,EAAC,GAAG,IAAK,QAAO,OAAM,UAAS,MAAK,+BAA8B,EAAC,CAAC;AAC5Q,UAAI,MAAM,UAAU,aAAa,CAAC,CAAC,aAAY,WAAW,EAAE,SAAS,KAAK,MAAM,KAAK,KAAK,SAAS,WAAW,SAAU,OAAM;AAAA,QAAe;AAAA,QAAQ;AAAA,QAAQ,MAAM;AAAA,QAAG,4BAA0B,KAAK,UAAU,CAAC,MAAM,IAAG,IAAI,EAAE,CAAC;AAAA,QAC5N,EAAC,MAAK,mBAAkB,QAAO,KAAK,IAAG,aAAY,IAAI,IAAG,QAAO,MAAM,OAAM;AAAA,MAAC;AAAA,IACtF;AAAA,EACJ;AACJ;;;ACjBA,eAAsB,YAAY,SAAgC,OAAkB,MAAgB,aAAiC,mBAAmB;AACpJ,QAAM,QAAM,KAAK,cAAc,KAAK,SAAK,IAAI,WAAS,WAAW,QAAQ,GAAG;AAC5E,MAAI,WAAS,QAAM,MAAM,QAAQ,IAAqB,oBAAkB,KAAK,IAAE;AAC/E,MAAG,SAAO,CAAC,UAAU;AACjB,UAAM,OAAK,MAAM,QAAQ,IAAmF,iBAAe,MAAM,EAAE;AACnI,UAAM,MAAI,MAAM,KAAK,CAAAC,SAAKA,KAAI,OAAK,KAAK;AACxC,QAAG,IAAI,YAAS,EAAC,eAAc,IAAI,eAAc,UAAS,IAAI,UAAS,gBAAe,IAAI,gBAAe,MAAK;AAAA,EAClH;AACA,QAAM,WAAW,YAAY,MAAM,QAAQ,IAAuC,iBAAe,SAAS,aAAa,IAAI,KAAK,SAAK,IAAI,OAAK,SAAS,KAAK,GAAG,SAAS;AACxK,SAAO;AAAA,IAAC,OAAM,EAAC,IAAG,MAAM,IAAG,OAAM,MAAM,OAAM,UAAS,MAAM,SAAQ;AAAA,IAAE,UAAS,WAAW,EAAC,GAAG,UAAS,GAAI,WAAW,EAAC,SAAQ,IAAI,CAAC,EAAE,IAAI;AAAA,IACtI,MAAK;AAAA,MAAC,IAAG,KAAK;AAAA,MAAG,UAAS,KAAK;AAAA,MAAS,UAAS,KAAK,UAAU,YAAU;AAAA,MAAK,OAAM,KAAK;AAAA,MAAM,gBAAe,KAAK;AAAA,MAAe,YAAW,KAAK;AAAA,MAC/I,cAAa,KAAK,UAAU,gBAAc,CAAC;AAAA,IAAC;AAAA,IAChD,WAAU,KAAK,cAAc,OAAO,SAAK,IAAI,WAAS,WAAW,QAAQ,KAAG,CAAC;AAAA,EAAC;AACtF;","names":["prefix","pending","item","order","ref","item","snapshot","value","ref","item","pending","state","updated","pending","done","type","pending","dispatch","runs","pending","cancelled","settled","keyFor","admit","pending","admit","item","pending","view","run"]}