@sixb/sqlite 0.1.14 → 0.1.16

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 (40) hide show
  1. package/dist/index.js +739 -261
  2. package/dist/index.js.map +14 -14
  3. package/dist/latest-run-query.d.ts +2 -0
  4. package/dist/latest-run-query.d.ts.map +1 -1
  5. package/dist/migrations.d.ts.map +1 -1
  6. package/dist/objects/query-compiler.d.ts +3 -0
  7. package/dist/objects/query-compiler.d.ts.map +1 -1
  8. package/dist/objects/read-scope.d.ts +2 -0
  9. package/dist/objects/read-scope.d.ts.map +1 -1
  10. package/dist/objects/reader.d.ts +1 -0
  11. package/dist/objects/reader.d.ts.map +1 -1
  12. package/dist/objects/rows.d.ts +1 -0
  13. package/dist/objects/rows.d.ts.map +1 -1
  14. package/dist/ontology-storage/materialization-state.d.ts.map +1 -1
  15. package/dist/ontology-storage/shared.d.ts +11 -8
  16. package/dist/ontology-storage/shared.d.ts.map +1 -1
  17. package/dist/ontology-storage/source-cleanup.d.ts +7 -1
  18. package/dist/ontology-storage/source-cleanup.d.ts.map +1 -1
  19. package/dist/ontology-storage/source-roots.d.ts +14 -2
  20. package/dist/ontology-storage/source-roots.d.ts.map +1 -1
  21. package/dist/ontology-storage/sources.d.ts +8 -3
  22. package/dist/ontology-storage/sources.d.ts.map +1 -1
  23. package/dist/projection-run-storage.d.ts +3 -1
  24. package/dist/projection-run-storage.d.ts.map +1 -1
  25. package/package.json +3 -3
  26. package/src/latest-run-query.ts +8 -2
  27. package/src/migrations/051-projection-run-supersession.sql +126 -0
  28. package/src/migrations/052-compact-source-storage.sql +181 -0
  29. package/src/migrations.ts +38 -0
  30. package/src/objects/README.md +19 -0
  31. package/src/objects/query-compiler.ts +44 -7
  32. package/src/objects/read-scope.ts +10 -8
  33. package/src/objects/reader.ts +43 -8
  34. package/src/objects/rows.ts +1 -0
  35. package/src/ontology-storage/materialization-state.ts +34 -44
  36. package/src/ontology-storage/shared.ts +20 -11
  37. package/src/ontology-storage/source-cleanup.ts +61 -24
  38. package/src/ontology-storage/source-roots.ts +166 -110
  39. package/src/ontology-storage/sources.ts +169 -118
  40. package/src/projection-run-storage.ts +59 -1
package/dist/index.js.map CHANGED
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "// Keep SQL module declarations visible to downstream workspaces that typecheck this package from\n// source.\n/// <reference path=\"./sql.d.ts\" />\n\nimport { AsyncLocalStorage } from \"node:async_hooks\"\nimport type {\n MigrationCapableStorage,\n Storage,\n StorageMigrator,\n StorageTransactionOptions,\n} from \"@sixb/core\"\nimport { ProviderMaterializationTransactionLifecycle } from \"@sixb/core/internal/ontology-storage-provider\"\nimport {\n createTransactionStorageProxy,\n throwNestedStorageTransaction,\n} from \"@sixb/core/internal/storage\"\nimport {\n createAgentOperationScope,\n createAuthOperationScope,\n createObjectOperationScope,\n createOntologyOperationScope,\n createOperationScopedFacade,\n createStorageOperationScope,\n createWorkflowRunOperationScope,\n} from \"@sixb/core/internal/storage-operation-scope\"\nimport {\n type AiCostStorage,\n type AiLimitStorage,\n type AiUsageStorage,\n type ShareGrantStorage,\n type ShareSessionStorage,\n StorageTransactionError,\n} from \"@sixb/core/storage\"\nimport { SqliteActionRunStorage } from \"./action-run-storage\"\nimport { SqliteAgentStorage } from \"./agents\"\nimport { SqliteAiCostStorage } from \"./ai-cost-storage\"\nimport { SqliteAiLimitStorage } from \"./ai-limit-storage\"\nimport { SqliteAiUsageStorage } from \"./ai-usage-storage\"\nimport { SqliteAuthStorage } from \"./auth-storage\"\nimport { SqliteConnectorConnectionStorage } from \"./connector-connection-storage\"\nimport { SqliteExecutionStorage } from \"./execution-storage\"\nimport { SqliteFileUploadSessionStorage } from \"./file-upload-session-storage\"\nimport {\n createSqliteStorageMigrators,\n installFreshSqliteSchema,\n sqliteStoragePath,\n} from \"./migrations\"\nimport { SqliteObjectStorage } from \"./objects\"\nimport { SqliteOntologyStorage, type SqliteOntologyTransactionContext } from \"./ontology-storage\"\nimport { SqlitePipelineRunStorage } from \"./pipeline-run-storage\"\nimport { SqliteProjectionRunStorage } from \"./projection-run-storage\"\nimport { SqliteRulesStorage } from \"./rules-storage\"\nimport { SqliteShareGrantStorage } from \"./share-grant-storage\"\nimport { SqliteShareSessionStorage } from \"./share-session-storage\"\nimport { SqliteSyncRunStorage } from \"./sync-run-storage\"\nimport { registerSqliteStorageTestingAdapter } from \"./testing\"\nimport { SqliteTimeseriesStorage } from \"./timeseries-storage\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransactionAsync,\n type SqliteStoreConnection,\n} from \"./transactions\"\nimport { SqliteWebhookRunStorage } from \"./webhook-run-storage\"\nimport { SqliteWorkflowInterventionStorage } from \"./workflow-intervention-storage\"\nimport { SqliteWorkflowRunStorage } from \"./workflow-run-storage\"\n\nexport interface SqliteStorageOptions {\n /** Directory path for the SQLite storage database. */\n path?: string\n}\n\n/**\n * SQLite storage provider for Sixb.\n *\n * Bundles object, timeseries, auth, execution, AI accounting, sync run, pipeline run, projection\n * run, workflow run, webhook run, and connector connection storage backed by SQLite.\n *\n * Usage:\n * ```ts\n * const storage = new SqliteStorage({ path: \".sixb\" })\n *\n * export const sixb = createSixb({\n * broker: new InMemoryBroker(),\n * storage,\n * })\n * ```\n */\nexport class SqliteStorage implements MigrationCapableStorage {\n readonly objects: Storage[\"objects\"]\n readonly ontology: SqliteOntologyStorage\n readonly auth: SqliteAuthStorage\n readonly executions: SqliteExecutionStorage\n readonly agents: SqliteAgentStorage\n readonly aiUsage: AiUsageStorage\n readonly aiCosts: AiCostStorage\n readonly aiLimits: AiLimitStorage\n readonly actionRuns: SqliteActionRunStorage\n readonly pipelineRuns: SqlitePipelineRunStorage\n readonly syncRuns: SqliteSyncRunStorage\n readonly projectionRuns: SqliteProjectionRunStorage\n readonly workflowRuns: SqliteWorkflowRunStorage\n readonly workflowInterventions: SqliteWorkflowInterventionStorage\n readonly timeseries: Storage[\"timeseries\"]\n readonly webhookRuns: SqliteWebhookRunStorage\n readonly rules: SqliteRulesStorage\n readonly shareGrants: ShareGrantStorage\n readonly shareSessions: ShareSessionStorage\n readonly connectorConnections: SqliteConnectorConnectionStorage\n readonly fileUploadSessions: SqliteFileUploadSessionStorage\n readonly migrators: readonly StorageMigrator[]\n\n private readonly connection: SqliteStoreConnection\n private readonly readConnection: SqliteStoreConnection\n private readonly transactionScope = new AsyncLocalStorage<{ active: boolean }>()\n private transactionTail: Promise<void> = Promise.resolve()\n\n constructor(options: SqliteStorageOptions = {}) {\n const path = options.path ? sqliteStoragePath(options.path) : undefined\n this.connection = openSqliteStoreConnection({ path })\n if (path) {\n this.connection.db.run(\"PRAGMA journal_mode = WAL\")\n this.readConnection = openSqliteStoreConnection({ path, readonly: true })\n } else {\n this.readConnection = this.connection\n }\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.connection.db)\n }\n\n const stores = createSqliteStores(this.connection, {\n runOntologyOperation: async (run) => run(),\n transactionContext: null,\n })\n const assertRootOperationAvailable = () => this.assertRootOperationAvailable()\n const scope = createStorageOperationScope(\n (run) => this.runRootStorageOperation(run),\n assertRootOperationAvailable\n )\n const ontologyScope = createStorageOperationScope(\n (run) => this.runRootOntologyOperation(run),\n assertRootOperationAvailable\n )\n const readScope = path\n ? createStorageOperationScope(async (run) => {\n this.assertRootOperationAvailable()\n return run()\n }, assertRootOperationAvailable)\n : scope\n const readObjects = path\n ? new SqliteObjectStorage({ connection: this.readConnection })\n : stores.objects\n const readTimeseries = path\n ? new SqliteTimeseriesStorage({ connection: this.readConnection })\n : stores.timeseries\n this.objects = createObjectOperationScope(readObjects, readScope)\n this.ontology = createOntologyOperationScope(stores.ontology, ontologyScope)\n this.auth = createAuthOperationScope(stores.auth, scope)\n this.executions = createOperationScopedFacade(stores.executions, scope)\n this.agents = createAgentOperationScope(stores.agents, scope)\n this.aiUsage = createOperationScopedFacade(stores.aiUsage, scope)\n this.aiCosts = createOperationScopedFacade(stores.aiCosts, scope)\n this.aiLimits = createOperationScopedFacade(stores.aiLimits, scope)\n this.actionRuns = createOperationScopedFacade(stores.actionRuns, scope)\n this.pipelineRuns = createOperationScopedFacade(stores.pipelineRuns, scope)\n this.timeseries = createOperationScopedFacade(readTimeseries, readScope)\n this.syncRuns = createOperationScopedFacade(stores.syncRuns, scope)\n this.projectionRuns = createOperationScopedFacade(stores.projectionRuns, scope)\n this.workflowRuns = createWorkflowRunOperationScope(stores.workflowRuns, scope)\n this.workflowInterventions = createOperationScopedFacade(stores.workflowInterventions, scope)\n this.webhookRuns = createOperationScopedFacade(stores.webhookRuns, scope)\n this.rules = createOperationScopedFacade(stores.rules, scope)\n this.shareGrants = createOperationScopedFacade(stores.shareGrants, scope)\n this.shareSessions = createOperationScopedFacade(stores.shareSessions, scope)\n this.connectorConnections = createOperationScopedFacade(stores.connectorConnections, scope)\n this.fileUploadSessions = createOperationScopedFacade(stores.fileUploadSessions, scope)\n this.migrators = options.path ? createSqliteStorageMigrators(options.path) : []\n registerSqliteStorageTestingAdapter(this, (durationMs) =>\n stores.connectorConnections.advanceTimeForTesting(durationMs)\n )\n }\n\n async ping(): Promise<void> {\n this.assertRootOperationAvailable()\n if (this.readConnection !== this.connection) {\n this.readConnection.db.query(\"SELECT 1\").get()\n return\n }\n await this.runRootStorageOperation(() => {\n this.connection.db.query(\"SELECT 1\").get()\n })\n }\n\n /**\n * The `isolation` option is intentionally ignored. SQLite runs every write transaction through\n * one connection serialized by {@link withTransactionLock} and a `BEGIN IMMEDIATE`, so there is no\n * concurrent writer to isolate against. File-backed object and timeseries reads use a separate WAL\n * snapshot connection; Postgres is where `isolation: \"serializable\"` maps to a real isolation level.\n */\n async transaction<T>(\n run: (tx: Storage) => Promise<T> | T,\n _options: StorageTransactionOptions = {}\n ): Promise<T> {\n if (this.transactionScope.getStore()) {\n throwNestedStorageTransaction()\n }\n\n return this.withTransactionLock(async () => {\n let active = true\n const scope = { active: true }\n const transactionContext: SqliteOntologyTransactionContext = {\n id: {},\n materializations: new ProviderMaterializationTransactionLifecycle(),\n active: true,\n }\n const txStorage = this.createTransactionStorage(transactionContext)\n const tx = createTransactionStorageProxy(txStorage, () => active)\n\n try {\n return await runImmediateTransactionAsync(this.connection.db, () =>\n this.transactionScope.run(scope, async () => {\n try {\n const result = await run(tx)\n transactionContext.materializations.assertCommittable()\n return result\n } finally {\n scope.active = false\n transactionContext.active = false\n txStorage.ontology.deactivateSessions()\n transactionContext.materializations.deactivate()\n }\n })\n )\n } finally {\n active = false\n }\n })\n }\n\n close(): void {\n if (this.readConnection !== this.connection) closeSqliteStoreConnection(this.readConnection)\n closeSqliteStoreConnection(this.connection)\n }\n\n private createTransactionStorage(\n transactionContext: SqliteOntologyTransactionContext\n ): Storage & { readonly ontology: SqliteOntologyStorage } {\n return {\n ...createSqliteStores(\n {\n db: this.connection.db,\n ownsConnection: false,\n installFreshSchema: false,\n },\n {\n runOntologyOperation: async (run) => run(),\n transactionContext,\n }\n ),\n ping: async () => {\n this.connection.db.query(\"SELECT 1\").get()\n },\n transaction: async <T>(): Promise<T> => {\n throwNestedStorageTransaction()\n },\n }\n }\n\n private runRootStorageOperation<T>(run: () => Promise<T> | T): Promise<T> {\n this.assertRootOperationAvailable()\n return this.withTransactionLock(async () => run())\n }\n\n private runRootOntologyOperation<T>(run: () => Promise<T> | T): Promise<T> {\n this.assertRootOperationAvailable()\n return this.withTransactionLock(() => runImmediateTransactionAsync(this.connection.db, run))\n }\n\n private assertRootOperationAvailable(): void {\n if (!this.transactionScope.getStore()?.active) return\n throw new StorageTransactionError(\n \"[SixbSqlite] Root storage cannot be used inside a transaction callback; use the provided tx storage.\"\n )\n }\n\n private async withTransactionLock<T>(run: () => Promise<T>): Promise<T> {\n const previous = this.transactionTail\n let release!: () => void\n this.transactionTail = new Promise<void>((resolve) => {\n release = resolve\n })\n\n await previous\n try {\n return await run()\n } finally {\n release()\n }\n }\n}\n\nfunction createSqliteStores(\n connection: SqliteStoreConnection,\n options: {\n readonly runOntologyOperation: <T>(run: () => Promise<T> | T) => Promise<T>\n readonly transactionContext: SqliteOntologyTransactionContext | null\n }\n): SqliteStoreSet {\n const auth = new SqliteAuthStorage({ connection })\n const shareGrants = new SqliteShareGrantStorage({ connection })\n const shareSessions = new SqliteShareSessionStorage({ connection })\n const executions = new SqliteExecutionStorage(connection.db, auth, shareSessions)\n return {\n objects: new SqliteObjectStorage({ connection }),\n ontology: new SqliteOntologyStorage({\n db: connection.db,\n runRootOperation: options.runOntologyOperation,\n transactionContext: options.transactionContext,\n }),\n auth,\n executions,\n agents: new SqliteAgentStorage({ connection, executions }),\n aiUsage: new SqliteAiUsageStorage({ connection }),\n aiCosts: new SqliteAiCostStorage(connection),\n aiLimits: new SqliteAiLimitStorage({ connection }),\n actionRuns: new SqliteActionRunStorage({ connection, executions }),\n pipelineRuns: new SqlitePipelineRunStorage({ connection, executions }),\n timeseries: new SqliteTimeseriesStorage({ connection }),\n syncRuns: new SqliteSyncRunStorage({ connection, executions }),\n projectionRuns: new SqliteProjectionRunStorage({ connection, executions }),\n workflowRuns: new SqliteWorkflowRunStorage({ connection, executions }),\n workflowInterventions: new SqliteWorkflowInterventionStorage({ connection }),\n webhookRuns: new SqliteWebhookRunStorage({ connection, executions }),\n rules: new SqliteRulesStorage({ connection }),\n shareGrants,\n shareSessions,\n connectorConnections: new SqliteConnectorConnectionStorage(connection),\n fileUploadSessions: new SqliteFileUploadSessionStorage(connection),\n }\n}\n\ninterface SqliteStoreSet {\n readonly objects: SqliteObjectStorage\n readonly ontology: SqliteOntologyStorage\n readonly auth: SqliteAuthStorage\n readonly executions: SqliteExecutionStorage\n readonly agents: SqliteAgentStorage\n readonly aiUsage: SqliteAiUsageStorage\n readonly aiCosts: SqliteAiCostStorage\n readonly aiLimits: SqliteAiLimitStorage\n readonly actionRuns: SqliteActionRunStorage\n readonly pipelineRuns: SqlitePipelineRunStorage\n readonly syncRuns: SqliteSyncRunStorage\n readonly projectionRuns: SqliteProjectionRunStorage\n readonly workflowRuns: SqliteWorkflowRunStorage\n readonly workflowInterventions: SqliteWorkflowInterventionStorage\n readonly timeseries: SqliteTimeseriesStorage\n readonly webhookRuns: SqliteWebhookRunStorage\n readonly rules: SqliteRulesStorage\n readonly shareGrants: SqliteShareGrantStorage\n readonly shareSessions: SqliteShareSessionStorage\n readonly connectorConnections: SqliteConnectorConnectionStorage\n readonly fileUploadSessions: SqliteFileUploadSessionStorage\n}\n\nexport { migrateSqliteStorage } from \"./migrations\"\n",
6
6
  "import type { Database } from \"bun:sqlite\"\nimport type { ActionSubject, JsonValue } from \"@sixb/core\"\nimport {\n parseActionRunFailure,\n serializeActionRunFailure,\n} from \"@sixb/core/internal/action-run-storage\"\nimport { assertActionRunExecution } from \"@sixb/core/internal/action-run-storage-provider\"\nimport {\n actionRunPhaseRecordsEqual,\n canRequeueActionRunAfterEnqueueFailure,\n finishActionRunPhase,\n} from \"@sixb/core/internal/storage\"\nimport type {\n ActionRunEffectsRecord,\n ActionRunFailure,\n ActionRunParams,\n ActionRunPhase,\n ActionRunRecord,\n ActionRunStorage,\n ActionRunWritebackRecord,\n EnterActionRunPhaseInput,\n ExecutionStorage,\n FinishActionRunInput,\n ListActionRunsInput,\n ListActionRunsResult,\n LockActionMaterializationRunInput,\n QueueActionRunInput,\n RecordActionEffectsInput,\n RecordActionWritebackInput,\n StartActionRunInput,\n} from \"@sixb/core/storage\"\nimport { ActionRunError, isTerminalActionRun } from \"@sixb/core/storage\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteActionRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteActionRunStorage implements ActionRunStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n private readonly executions: ExecutionStorage\n\n constructor(options: SqliteActionRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n }\n\n async lockForMaterialization(input: LockActionMaterializationRunInput): Promise<ActionRunRecord> {\n const row = this.db\n .query(`SELECT action_id, status FROM action_runs WHERE project_id = ? AND id = ?`)\n .get(input.projectId, input.runId) as {\n readonly action_id: string\n readonly status: string\n } | null\n if (!row) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.runId}' not found for project '${input.projectId}'.`\n )\n }\n if (row.action_id !== input.actionId) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.runId}' does not belong to action '${input.actionId}'.`\n )\n }\n if (row.status !== \"running\") {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.runId}' cannot materialize from status '${row.status}'.`\n )\n }\n const record = await this.getById({ projectId: input.projectId, id: input.runId })\n if (!record) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.runId}' disappeared while locking materialization.`\n )\n }\n return record\n }\n\n async queue(input: QueueActionRunInput): Promise<ActionRunRecord> {\n const queuedAt = input.queuedAt ?? new Date()\n await assertActionRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n actionId: input.actionId,\n })\n\n try {\n this.db\n .query(\n `\n INSERT INTO action_runs (\n project_id,\n id,\n execution_id,\n action_id,\n subject_kind,\n object_type_id,\n primary_id,\n status,\n phase,\n queued_at,\n started_at,\n finished_at,\n params,\n idempotency_key,\n writeback_status,\n writeback_completed_at,\n writeback_result,\n writeback_error,\n effects_status,\n effects_completed_at,\n effects_error,\n error\n ) VALUES (\n ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NULL, NULL, ?, ?,\n NULL, NULL, NULL, NULL,\n NULL, NULL, NULL,\n NULL\n )\n `\n )\n .run(\n input.projectId,\n input.id,\n input.executionId,\n input.actionId,\n input.subject.kind,\n input.subject.kind === \"object\" ? input.subject.objectTypeId : null,\n input.subject.kind === \"object\" ? input.subject.primaryId : null,\n \"queued\",\n \"request\",\n queuedAt.toISOString(),\n JSON.stringify(input.params),\n input.idempotencyKey\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n return this.requeueAfterEnqueueFailure(input, queuedAt)\n }\n\n throw error\n }\n\n const record = await this.getById({ projectId: input.projectId, id: input.id })\n if (!record) {\n throw new ActionRunError(\n `[SixbSqlite] Failed to load action run '${input.id}' for project '${input.projectId}'.`\n )\n }\n\n return record\n }\n\n private async requeueAfterEnqueueFailure(\n input: QueueActionRunInput,\n queuedAt: Date\n ): Promise<ActionRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow | null\n\n if (\n !existing ||\n !canRequeueActionRunAfterEnqueueFailure(rowToActionRunRecord(existing), input)\n ) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE action_runs\n SET\n status = ?,\n phase = ?,\n queued_at = ?,\n started_at = NULL,\n finished_at = NULL,\n writeback_status = NULL,\n writeback_completed_at = NULL,\n writeback_result = NULL,\n writeback_error = NULL,\n effects_status = NULL,\n effects_completed_at = NULL,\n effects_error = NULL,\n error = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\"queued\", \"request\", queuedAt.toISOString(), input.projectId, input.id)\n\n const updated = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow\n\n return rowToActionRunRecord(updated)\n })()\n }\n\n async start(input: StartActionRunInput): Promise<ActionRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow | null\n\n if (!existing) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"queued\") {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.id}' cannot start from status '${existing.status}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE action_runs\n SET\n status = ?,\n phase = ?,\n started_at = ?,\n error = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"running\",\n input.phase ?? \"validation\",\n (input.startedAt ?? new Date()).toISOString(),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow\n\n return rowToActionRunRecord(updated)\n })()\n }\n\n async enterPhase(input: EnterActionRunPhaseInput): Promise<ActionRunRecord> {\n return this.db.transaction(() => {\n this.requireRunningRun(input.projectId, input.id, \"transition phase\")\n\n this.db\n .query(\n `\n UPDATE action_runs\n SET phase = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(input.phase, input.projectId, input.id)\n\n const updated = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow\n\n return rowToActionRunRecord(updated)\n })()\n }\n\n async recordWriteback(input: RecordActionWritebackInput): Promise<ActionRunRecord> {\n return this.db.transaction(() => {\n const existing = this.requireRunningRun(input.projectId, input.id, \"record writeback\")\n const nextWriteback = toWritebackRecord(input, new Date(input.completedAt ?? new Date()))\n const currentWriteback = toActionRunWritebackRecord(existing)\n\n if (currentWriteback) {\n if (actionRunPhaseRecordsEqual(currentWriteback, nextWriteback)) {\n return rowToActionRunRecord(existing)\n }\n\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.id}' already has a different writeback record.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE action_runs\n SET\n phase = ?,\n writeback_status = ?,\n writeback_completed_at = ?,\n writeback_result = ?,\n writeback_error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"writeback\",\n input.status,\n nextWriteback.completedAt.toISOString(),\n input.status === \"succeeded\" ? serializeJsonValue(input.result) : null,\n input.status === \"failed\" ? serializeActionRunFailure(input.error, \"writeback\") : null,\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow\n\n return rowToActionRunRecord(updated)\n })()\n }\n\n async recordEffects(input: RecordActionEffectsInput): Promise<ActionRunRecord> {\n return this.db.transaction(() => {\n const existing = this.requireRunningRun(input.projectId, input.id, \"record effects\")\n const nextEffects = toEffectsRecord(input, new Date(input.completedAt ?? new Date()))\n const currentEffects = toActionRunEffectsRecord(existing)\n\n if (currentEffects) {\n if (actionRunPhaseRecordsEqual(currentEffects, nextEffects)) {\n return rowToActionRunRecord(existing)\n }\n\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.id}' already has a different effects record.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE action_runs\n SET\n phase = ?,\n effects_status = ?,\n effects_completed_at = ?,\n effects_error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"effects\",\n input.status,\n nextEffects.completedAt.toISOString(),\n input.status === \"failed\" ? serializeActionRunFailure(input.error, \"effects\") : null,\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow\n\n return rowToActionRunRecord(updated)\n })()\n }\n\n async finish(input: FinishActionRunInput): Promise<ActionRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow | null\n\n if (!existing) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (isTerminalActionRun({ status: existing.status })) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.id}' cannot finish from terminal status '${existing.status}'.`\n )\n }\n\n const phase = finishActionRunPhase(input, existing.phase)\n\n this.db\n .query(\n `\n UPDATE action_runs\n SET\n status = ?,\n phase = ?,\n finished_at = ?,\n error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n phase,\n (input.finishedAt ?? new Date()).toISOString(),\n input.status === \"succeeded\" ? null : serializeActionRunFailure(input.error),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow\n\n return rowToActionRunRecord(updated)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<ActionRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as DatabaseRow | null\n\n return row ? rowToActionRunRecord(row) : null\n }\n\n async list(input: ListActionRunsInput): Promise<ListActionRunsResult> {\n if ((input.statuses && input.statuses.length === 0) || input.actionIds?.length === 0) {\n return {\n runs: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: (string | number)[] = [input.projectId]\n\n if (input.actionId) {\n whereClauses.push(\"action_id = ?\")\n args.push(input.actionId)\n }\n\n if (input.actionIds) {\n whereClauses.push(`action_id IN (${input.actionIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.actionIds)\n }\n\n if (input.objectTypeIds) {\n if (input.objectTypeIds.length === 0) {\n whereClauses.push(\"subject_kind <> ?\")\n args.push(\"object\")\n } else {\n whereClauses.push(\n `(subject_kind <> ? OR object_type_id IN (${input.objectTypeIds\n .map(() => \"?\")\n .join(\", \")}))`\n )\n args.push(\"object\", ...input.objectTypeIds)\n }\n }\n\n if (input.objectTypeId) {\n whereClauses.push(\"subject_kind = ?\")\n args.push(\"object\")\n whereClauses.push(\"object_type_id = ?\")\n args.push(input.objectTypeId)\n }\n\n if (input.primaryId) {\n whereClauses.push(\"subject_kind = ?\")\n args.push(\"object\")\n whereClauses.push(\"primary_id = ?\")\n args.push(input.primaryId)\n }\n\n if (input.subject) {\n whereClauses.push(\"subject_kind = ?\")\n args.push(input.subject.kind)\n if (input.subject.kind === \"object\") {\n whereClauses.push(\"object_type_id = ?\")\n args.push(input.subject.objectTypeId)\n whereClauses.push(\"primary_id = ?\")\n args.push(input.subject.primaryId)\n }\n }\n\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n\n if (input.startedAfter) {\n whereClauses.push(\"COALESCE(started_at, queued_at) >= ?\")\n args.push(input.startedAfter.toISOString())\n }\n\n if (input.startedBefore) {\n whereClauses.push(\"COALESCE(started_at, queued_at) <= ?\")\n args.push(input.startedBefore.toISOString())\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n const limit = input.limit\n\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM action_runs ${where}`)\n .get(...args) as { count: number }\n\n let query = `\n SELECT * FROM action_runs\n ${where}\n ORDER BY COALESCE(started_at, queued_at) ${order}, id ${order}\n `\n const queryArgs = [...args]\n\n if (limit !== undefined) {\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(limit, offset)\n } else if (offset > 0) {\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = this.db.query(query).all(...queryArgs) as DatabaseRow[]\n const runs = rows.map((row) => rowToActionRunRecord(row))\n\n return {\n runs,\n hasMore: offset + runs.length < totalRow.count,\n total: totalRow.count,\n }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private requireRunningRun(projectId: string, id: string, operation: string): DatabaseRow {\n const existing = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as DatabaseRow | null\n\n if (!existing) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (existing.status !== \"running\") {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${id}' cannot ${operation} from status '${existing.status}'.`\n )\n }\n\n return existing\n }\n}\n\nfunction serializeJsonValue(value: JsonValue): string {\n return JSON.stringify(value)\n}\n\nfunction toActionRunFailure(row: DatabaseRow): ActionRunFailure | undefined {\n return row.error === null ? undefined : parseActionRunFailure(row.error)\n}\n\nfunction parsePhaseFailure<TPhase extends Extract<ActionRunPhase, \"writeback\" | \"effects\">>(\n value: string | null,\n expectedPhase: TPhase\n): ActionRunFailure<TPhase> {\n return parseActionRunFailure(value, expectedPhase)\n}\n\nfunction toActionRunWritebackRecord(row: DatabaseRow): ActionRunWritebackRecord | undefined {\n if (!row.writeback_status) {\n return undefined\n }\n\n const completedAt = row.writeback_completed_at\n ? new Date(row.writeback_completed_at)\n : new Date(row.queued_at)\n\n if (row.writeback_status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n result:\n row.writeback_result === null ? null : (JSON.parse(row.writeback_result) as JsonValue),\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: parsePhaseFailure(row.writeback_error, \"writeback\"),\n }\n}\n\nfunction toActionRunEffectsRecord(row: DatabaseRow): ActionRunEffectsRecord | undefined {\n if (!row.effects_status) {\n return undefined\n }\n\n const completedAt = row.effects_completed_at\n ? new Date(row.effects_completed_at)\n : new Date(row.queued_at)\n\n if (row.effects_status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: parsePhaseFailure(row.effects_error, \"effects\"),\n }\n}\n\nfunction toWritebackRecord(\n input: RecordActionWritebackInput,\n completedAt: Date\n): ActionRunWritebackRecord {\n if (input.status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n result: input.result,\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: input.error,\n }\n}\n\nfunction toEffectsRecord(\n input: RecordActionEffectsInput,\n completedAt: Date\n): ActionRunEffectsRecord {\n if (input.status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: input.error,\n }\n}\n\nfunction rowToActionRunRecord(row: DatabaseRow): ActionRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n actionId: row.action_id,\n subject: rowToActionSubject(row),\n status: row.status,\n phase: row.phase ?? undefined,\n queuedAt: new Date(row.queued_at),\n startedAt: row.started_at ? new Date(row.started_at) : undefined,\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n params: JSON.parse(row.params) as ActionRunParams,\n idempotencyKey: row.idempotency_key,\n writeback: toActionRunWritebackRecord(row),\n effects: toActionRunEffectsRecord(row),\n error: toActionRunFailure(row),\n }\n}\n\nfunction rowToActionSubject(row: DatabaseRow): ActionSubject {\n if (row.subject_kind === \"none\") {\n return { kind: \"none\" }\n }\n\n if (!row.object_type_id || !row.primary_id) {\n throw new ActionRunError(`[SixbSqlite] Action run '${row.id}' has an invalid object subject.`)\n }\n\n return {\n kind: \"object\",\n objectTypeId: row.object_type_id,\n primaryId: row.primary_id,\n }\n}\n\nfunction isUniqueConstraintError(error: unknown): boolean {\n return error instanceof Error && error.message.includes(\"UNIQUE constraint failed\")\n}\n\ninterface DatabaseRow {\n project_id: string\n id: string\n execution_id: string\n action_id: string\n subject_kind: ActionSubject[\"kind\"]\n object_type_id: string | null\n primary_id: string | null\n status: ActionRunRecord[\"status\"]\n phase: ActionRunPhase | null\n queued_at: string\n started_at: string | null\n finished_at: string | null\n params: string\n idempotency_key: string\n writeback_status: ActionRunWritebackRecord[\"status\"] | null\n writeback_completed_at: string | null\n writeback_result: string | null\n writeback_error: string | null\n effects_status: ActionRunEffectsRecord[\"status\"] | null\n effects_completed_at: string | null\n effects_error: string | null\n error: string | null\n}\n",
7
- "import { Database } from \"bun:sqlite\"\nimport { createHash } from \"node:crypto\"\nimport { existsSync, mkdirSync } from \"node:fs\"\nimport { dirname } from \"node:path\"\nimport type { StorageMigrator } from \"@sixb/core\"\nimport type {\n MigrationHistoryStore,\n MigrationRecord,\n MigrationSet,\n MigrationStep,\n MigrationStepOptions,\n} from \"@sixb/core/storage\"\nimport {\n defineMigrations,\n describeMigrationHistory,\n runMigrationSet,\n step,\n} from \"@sixb/core/storage\"\nimport initialSchemaSql from \"./migrations/001-initial-schema.sql\" with { type: \"text\" }\nimport workflowRunOutputSql from \"./migrations/002-workflow-run-output.sql\" with { type: \"text\" }\nimport mergeSyncRunsSql from \"./migrations/003-merge-sync-runs.sql\" with { type: \"text\" }\nimport executionsSql from \"./migrations/004-executions.sql\" with { type: \"text\" }\nimport workflowExecutionsSql from \"./migrations/005-workflow-executions.sql\" with { type: \"text\" }\nimport narrowOntologySourceRootIndexSql from \"./migrations/006-narrow-ontology-source-root-index.sql\" with {\n type: \"text\",\n}\nimport splitOverridesSql from \"./migrations/007-split-overrides.sql\" with { type: \"text\" }\nimport actionExecutionsSql from \"./migrations/008-action-executions.sql\" with { type: \"text\" }\nimport agentExecutionsSql from \"./migrations/009-agent-executions.sql\" with { type: \"text\" }\nimport aiUsageAccountingFoundationSql from \"./migrations/010-ai-usage-accounting-foundation.sql\" with {\n type: \"text\",\n}\nimport syncFailureRecordSql from \"./migrations/011-sync-failure-record.sql\" with { type: \"text\" }\nimport pipelineFailureRecordSql from \"./migrations/012-pipeline-failure-record.sql\" with {\n type: \"text\",\n}\nimport workflowFailureRecordSql from \"./migrations/013-workflow-failure-record.sql\" with {\n type: \"text\",\n}\nimport agentFailureRecordSql from \"./migrations/014-agent-failure-record.sql\" with { type: \"text\" }\nimport projectionFailureRecordSql from \"./migrations/015-projection-failure-record.sql\" with {\n type: \"text\",\n}\nimport webhookRunFailureRecordSql from \"./migrations/016-webhook-run-failure-record.sql\" with {\n type: \"text\",\n}\nimport actionFailureRecordSql from \"./migrations/017-action-failure-record.sql\" with {\n type: \"text\",\n}\nimport ontologyOutboxFailureRecordSql from \"./migrations/018-ontology-outbox-failure-record.sql\" with {\n type: \"text\",\n}\nimport webhookDeliveryFailureRecordSql from \"./migrations/019-webhook-delivery-failure-record.sql\" with {\n type: \"text\",\n}\nimport dropRunUsageProjectionsSql from \"./migrations/020-drop-run-usage-projections.sql\" with {\n type: \"text\",\n}\nimport syncPipelineExecutionsSql from \"./migrations/021-sync-pipeline-executions.sql\" with {\n type: \"text\",\n}\nimport projectionExecutionsSql from \"./migrations/022-projection-executions.sql\" with {\n type: \"text\",\n}\nimport webhookExecutionsSql from \"./migrations/023-webhook-executions.sql\" with { type: \"text\" }\nimport ontologyCommitExecutionsSql from \"./migrations/024-ontology-commit-executions.sql\" with {\n type: \"text\",\n}\nimport connectorConnectionsSql from \"./migrations/025-connector-connections.sql\" with {\n type: \"text\",\n}\nimport aiCostAccountingSql from \"./migrations/026-ai-cost-accounting.sql\" with { type: \"text\" }\nimport agentContextCheckpointsSql from \"./migrations/027-agent-context-checkpoints.sql\" with {\n type: \"text\",\n}\nimport objectOverrideEditTimesSql from \"./migrations/028-object-override-edit-times.sql\" with {\n type: \"text\",\n}\nimport modelAccountingSql from \"./migrations/029-model-accounting.sql\" with { type: \"text\" }\nimport aiUsageLimitsSql from \"./migrations/030-ai-usage-limits.sql\" with { type: \"text\" }\nimport subagentRunsSql from \"./migrations/031-subagent-runs.sql\" with { type: \"text\" }\nimport conversationRunSpecSql from \"./migrations/032-conversation-run-spec.sql\" with {\n type: \"text\",\n}\nimport retireAgentDefinitionsSql from \"./migrations/033-retire-agent-definitions.sql\" with {\n type: \"text\",\n}\nimport deviceAuthorizationsSql from \"./migrations/034-device-authorizations.sql\" with {\n type: \"text\",\n}\nimport shareGrantsSql from \"./migrations/035-share-grants.sql\" with { type: \"text\" }\nimport shareSessionsSql from \"./migrations/036-share-sessions.sql\" with { type: \"text\" }\nimport projectionSourceRootsSql from \"./migrations/038-projection-source-roots.sql\" with {\n type: \"text\",\n}\nimport outboxPublicationOrderSql from \"./migrations/040-outbox-publication-order.sql\" with {\n type: \"text\",\n}\nimport agentThreadWorkspacesSql from \"./migrations/041-agent-thread-workspaces.sql\" with {\n type: \"text\",\n}\nimport vectorProfilesSql from \"./migrations/042-vector-profiles.sql\" with { type: \"text\" }\nimport vectorIndexingSql from \"./migrations/043-vector-indexing.sql\" with { type: \"text\" }\nimport vectorBatchingSql from \"./migrations/044-vector-batching.sql\" with { type: \"text\" }\nimport agentThreadSandboxStateSql from \"./migrations/045-agent-thread-sandbox-state.sql\" with {\n type: \"text\",\n}\nimport workflowInterventionPrincipalsSql from \"./migrations/046-workflow-intervention-principals.sql\" with {\n type: \"text\",\n}\nimport ontologyCommitAttributionSql from \"./migrations/047-ontology-commit-attribution.sql\" with {\n type: \"text\",\n}\nimport nativeSessionsSql from \"./migrations/049-native-sessions.sql\" with { type: \"text\" }\nimport directoryGroupMembershipsSql from \"./migrations/050-directory-group-memberships.sql\" with {\n type: \"text\",\n}\n\nconst MIGRATIONS_TABLE_SQL = `\n CREATE TABLE IF NOT EXISTS sixb_migrations (\n adapter_id TEXT NOT NULL,\n version INTEGER NOT NULL,\n id TEXT NOT NULL,\n checksum TEXT,\n status TEXT NOT NULL,\n started_at TEXT NOT NULL,\n finished_at TEXT,\n PRIMARY KEY (adapter_id, version)\n );\n`\n\nexport const SQLITE_STORAGE_ADAPTER_ID = \"SixbSqliteStorage\"\nexport const SQLITE_STORAGE_FILE = \"storage.sqlite\"\n\nexport const sqliteStorageMigrations = defineMigrations({\n adapterId: SQLITE_STORAGE_ADAPTER_ID,\n steps: [\n sqliteSql(\"001-initial-schema\", initialSchemaSql),\n sqliteSql(\"002-workflow-run-output\", workflowRunOutputSql),\n sqliteSql(\"003-merge-sync-runs\", mergeSyncRunsSql),\n sqliteSql(\"004-executions\", executionsSql),\n sqliteSql(\"005-workflow-executions\", workflowExecutionsSql),\n sqliteSql(\"006-narrow-ontology-source-root-index\", narrowOntologySourceRootIndexSql),\n sqliteSql(\"007-split-overrides\", splitOverridesSql),\n sqliteSql(\"008-action-executions\", actionExecutionsSql),\n sqliteSql(\"009-agent-executions\", agentExecutionsSql),\n sqliteSql(\"010-ai-usage-accounting-foundation\", aiUsageAccountingFoundationSql),\n sqliteSql(\"011-sync-failure-record\", syncFailureRecordSql),\n sqliteSql(\"012-pipeline-failure-record\", pipelineFailureRecordSql),\n sqliteSql(\"013-workflow-failure-record\", workflowFailureRecordSql),\n sqliteSql(\"014-agent-failure-record\", agentFailureRecordSql),\n sqliteSql(\"015-projection-failure-record\", projectionFailureRecordSql),\n sqliteSql(\"016-webhook-run-failure-record\", webhookRunFailureRecordSql),\n sqliteSql(\"017-action-failure-record\", actionFailureRecordSql),\n sqliteSql(\"018-ontology-outbox-failure-record\", ontologyOutboxFailureRecordSql),\n sqliteSql(\"019-webhook-delivery-failure-record\", webhookDeliveryFailureRecordSql),\n sqliteSql(\"020-drop-run-usage-projections\", dropRunUsageProjectionsSql),\n sqliteSql(\"021-sync-pipeline-executions\", syncPipelineExecutionsSql),\n sqliteStep(\n \"022-projection-executions\",\n (db) => {\n if (db.query(\"SELECT 1 FROM projection_runs LIMIT 1\").get()) {\n throw new Error(\n \"[SixbSqliteStorage] Projection execution migration cannot preserve legacy runs with unknown authority.\"\n )\n }\n db.run(projectionExecutionsSql)\n },\n { checksum: checksum(projectionExecutionsSql) }\n ),\n sqliteStep(\n \"023-webhook-executions\",\n (db) => {\n const hasRuns = db.query(\"SELECT 1 FROM webhook_runs LIMIT 1\").get()\n const hasDeliveries = db.query(\"SELECT 1 FROM webhook_deliveries LIMIT 1\").get()\n if (hasRuns || hasDeliveries) {\n throw new Error(\n \"[SixbSqliteStorage] Webhook execution migration cannot preserve legacy runs or deliveries with unknown authority.\"\n )\n }\n db.run(webhookExecutionsSql)\n },\n { checksum: checksum(webhookExecutionsSql) }\n ),\n sqliteStep(\n \"024-ontology-commit-executions\",\n (db) => {\n if (db.query(\"SELECT 1 FROM ontology_commits LIMIT 1\").get()) {\n throw new Error(\n \"[SixbSqliteStorage] Ontology commit execution migration cannot preserve commits with unknown authority.\"\n )\n }\n db.run(ontologyCommitExecutionsSql)\n },\n { checksum: checksum(ontologyCommitExecutionsSql) }\n ),\n sqliteSql(\"025-connector-connections\", connectorConnectionsSql),\n sqliteSql(\"026-ai-cost-accounting\", aiCostAccountingSql),\n sqliteSql(\"027-agent-context-checkpoints\", agentContextCheckpointsSql),\n sqliteSql(\"028-object-override-edit-times\", objectOverrideEditTimesSql),\n sqliteSql(\"029-model-accounting\", modelAccountingSql),\n sqliteSql(\"030-ai-usage-limits\", aiUsageLimitsSql),\n sqliteSql(\"031-subagent-runs\", subagentRunsSql),\n sqliteSql(\"032-conversation-run-spec\", conversationRunSpecSql),\n sqliteSql(\"033-retire-agent-definitions\", retireAgentDefinitionsSql),\n sqliteSql(\"034-device-authorizations\", deviceAuthorizationsSql),\n sqliteSql(\"035-share-grants\", shareGrantsSql),\n sqliteSql(\"036-share-sessions\", shareSessionsSql),\n sqliteSql(\"037-execution-requester-groups\", executionRequesterGroupsSql),\n sqliteSql(\"038-projection-source-roots\", projectionSourceRootsSql),\n sqliteSql(\"039-connector-optional-pkce\", connectorOptionalPkceSql),\n sqliteSql(\"040-outbox-publication-order\", outboxPublicationOrderSql),\n sqliteSql(\"041-agent-thread-workspaces\", agentThreadWorkspacesSql),\n sqliteSql(\"042-vector-profiles\", vectorProfilesSql),\n sqliteSql(\"043-vector-indexing\", vectorIndexingSql),\n sqliteSql(\"044-vector-batching\", vectorBatchingSql),\n sqliteSql(\"045-agent-thread-sandbox-state\", agentThreadSandboxStateSql),\n sqliteSql(\"046-workflow-intervention-principals\", workflowInterventionPrincipalsSql),\n sqliteSql(\"047-ontology-commit-attribution\", ontologyCommitAttributionSql),\n sqliteSql(\"048-file-upload-sessions\", fileUploadSessionsSql),\n sqliteSql(\"049-native-sessions\", nativeSessionsSql),\n sqliteSql(\"050-directory-group-memberships\", directoryGroupMembershipsSql),\n ],\n})\n\nexport function sqliteStoragePath(basePath: string): string {\n return `${basePath}/${SQLITE_STORAGE_FILE}`\n}\n\nexport function sqliteSql(id: string, sqlText: string): MigrationStep<Database> {\n return sqliteStep(\n id,\n (db) => {\n db.run(sqlText)\n },\n { checksum: checksum(sqlText) }\n )\n}\n\nexport function sqliteStep(\n id: string,\n up: (db: Database) => void | Promise<void>,\n options: MigrationStepOptions = {}\n): MigrationStep<Database> {\n return step<Database>(id, up, options)\n}\n\nexport function installFreshSqliteSchema(db: Database): void {\n for (const migration of sqliteStorageMigrations.steps) {\n const installed = migration.up(db)\n if (installed instanceof Promise) {\n throw new Error(\n `[${sqliteStorageMigrations.adapterId}] Fresh SQLite schema installation must be synchronous`\n )\n }\n }\n}\n\nexport function createSqliteStorageMigrators(basePath: string): readonly StorageMigrator[] {\n return [\n createSqliteMigrator({\n path: sqliteStoragePath(basePath),\n migrations: sqliteStorageMigrations,\n }),\n ]\n}\n\nexport function createSqliteMigrator(params: {\n readonly path: string\n readonly migrations: MigrationSet<Database>\n}): StorageMigrator {\n return {\n adapterId: params.migrations.adapterId,\n latestVersion: params.migrations.latestVersion,\n async status() {\n return describeMigrationHistory({\n migrations: params.migrations,\n rows: await readSqliteHistory(params.path, params.migrations.adapterId),\n })\n },\n async migrate() {\n return withSqliteDatabase(params.path, (db) =>\n runMigrationSet({\n context: db,\n migrations: params.migrations,\n state: sqliteMigrationHistoryStore(db),\n })\n )\n },\n }\n}\n\nexport async function migrateSqliteStorage(basePath: string): Promise<void> {\n mkdirSync(basePath, { recursive: true })\n\n for (const migrator of createSqliteStorageMigrators(basePath)) {\n await migrator.migrate()\n }\n}\n\nfunction sqliteMigrationHistoryStore(db: Database): MigrationHistoryStore {\n return {\n ensure() {\n db.run(MIGRATIONS_TABLE_SQL)\n },\n readHistory(adapterId) {\n return db\n .query(\"SELECT * FROM sixb_migrations WHERE adapter_id = ? ORDER BY version\")\n .all(adapterId)\n .map(rowToMigrationRecord)\n },\n markStarted(adapterId, migration, at) {\n db.query(`\n INSERT INTO sixb_migrations (\n adapter_id, version, id, checksum, status, started_at, finished_at\n ) VALUES (?, ?, ?, ?, 'started', ?, NULL)\n ON CONFLICT(adapter_id, version) DO UPDATE SET\n id = excluded.id,\n checksum = excluded.checksum,\n status = excluded.status,\n started_at = excluded.started_at,\n finished_at = NULL\n `).run(adapterId, migration.version, migration.id, migration.checksum ?? null, at)\n },\n markApplied(adapterId, migration, at) {\n db.query(`\n UPDATE sixb_migrations\n SET status = 'applied', finished_at = ?\n WHERE adapter_id = ? AND version = ?\n `).run(at, adapterId, migration.version)\n },\n async transaction(run) {\n // SQLite cannot rebuild a referenced parent table while foreign-key enforcement is active,\n // even when the replacement satisfies every deferred reference. Migrations therefore run\n // with enforcement paused, validate the complete schema before commit, then restore it.\n db.run(\"PRAGMA foreign_keys = OFF\")\n db.run(\"BEGIN\")\n\n try {\n const result = await run()\n const violations = db.query(\"PRAGMA foreign_key_check\").all()\n if (violations.length > 0) {\n throw new Error(\n `[${SQLITE_STORAGE_ADAPTER_ID}] Migration produced ${violations.length} foreign-key violation(s).`\n )\n }\n db.run(\"COMMIT\")\n return result\n } catch (error) {\n rollbackQuietly(db)\n throw error\n } finally {\n db.run(\"PRAGMA foreign_keys = ON\")\n }\n },\n }\n}\n\nfunction rowToMigrationRecord(row: unknown): MigrationRecord {\n const migration = row as {\n adapter_id: string\n version: number\n id: string\n checksum: string | null\n status: \"started\" | \"applied\"\n started_at: string\n finished_at: string | null\n }\n\n return {\n adapterId: migration.adapter_id,\n version: migration.version,\n id: migration.id,\n checksum: migration.checksum ?? undefined,\n status: migration.status,\n startedAt: migration.started_at,\n finishedAt: migration.finished_at ?? undefined,\n }\n}\n\nfunction checksum(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\")\n}\n\n/**\n * Reads migration history without creating anything. `null` means there is no history\n * to read, which is a state and not a failure.\n *\n * `new Database(path)` creates the file, and `withSqliteDatabase` additionally mkdirs\n * its parent — fine on the way to a migration, wrong for a probe. So: `existsSync`\n * first, then open `readonly` so even a mistake below cannot write. `:memory:` is\n * always empty on a fresh connection, so there is nothing to report.\n */\nasync function readSqliteHistory(\n path: string,\n adapterId: string\n): Promise<readonly MigrationRecord[] | null> {\n if (path === \":memory:\" || !existsSync(path)) {\n return null\n }\n\n const db = new Database(path, { readonly: true })\n try {\n const table = db\n .query(\"SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'sixb_migrations'\")\n .get()\n if (!table) {\n return null\n }\n\n return db\n .query(\"SELECT * FROM sixb_migrations WHERE adapter_id = ? ORDER BY version\")\n .all(adapterId)\n .map(rowToMigrationRecord)\n } finally {\n db.close()\n }\n}\n\nasync function withSqliteDatabase<T>(path: string, run: (db: Database) => Promise<T>): Promise<T> {\n if (path !== \":memory:\") mkdirSync(dirname(path), { recursive: true })\n const db = new Database(path)\n\n try {\n return await run(db)\n } finally {\n db.close()\n }\n}\n\nfunction rollbackQuietly(db: Database): void {\n try {\n db.run(\"ROLLBACK\")\n } catch {\n // Ignore rollback errors so the original migration failure is preserved.\n }\n}\n\nimport executionRequesterGroupsSql from \"./migrations/037-execution-requester-groups.sql\" with {\n type: \"text\",\n}\n\nimport connectorOptionalPkceSql from \"./migrations/039-connector-optional-pkce.sql\" with {\n type: \"text\",\n}\nimport fileUploadSessionsSql from \"./migrations/048-file-upload-sessions.sql\" with { type: \"text\" }\n",
7
+ "import { Database } from \"bun:sqlite\"\nimport { createHash } from \"node:crypto\"\nimport { existsSync, mkdirSync } from \"node:fs\"\nimport { dirname } from \"node:path\"\nimport type { StorageMigrator } from \"@sixb/core\"\nimport type {\n MigrationHistoryStore,\n MigrationRecord,\n MigrationSet,\n MigrationStep,\n MigrationStepOptions,\n} from \"@sixb/core/storage\"\nimport {\n defineMigrations,\n describeMigrationHistory,\n runMigrationSet,\n step,\n} from \"@sixb/core/storage\"\nimport initialSchemaSql from \"./migrations/001-initial-schema.sql\" with { type: \"text\" }\nimport workflowRunOutputSql from \"./migrations/002-workflow-run-output.sql\" with { type: \"text\" }\nimport mergeSyncRunsSql from \"./migrations/003-merge-sync-runs.sql\" with { type: \"text\" }\nimport executionsSql from \"./migrations/004-executions.sql\" with { type: \"text\" }\nimport workflowExecutionsSql from \"./migrations/005-workflow-executions.sql\" with { type: \"text\" }\nimport narrowOntologySourceRootIndexSql from \"./migrations/006-narrow-ontology-source-root-index.sql\" with {\n type: \"text\",\n}\nimport splitOverridesSql from \"./migrations/007-split-overrides.sql\" with { type: \"text\" }\nimport actionExecutionsSql from \"./migrations/008-action-executions.sql\" with { type: \"text\" }\nimport agentExecutionsSql from \"./migrations/009-agent-executions.sql\" with { type: \"text\" }\nimport aiUsageAccountingFoundationSql from \"./migrations/010-ai-usage-accounting-foundation.sql\" with {\n type: \"text\",\n}\nimport syncFailureRecordSql from \"./migrations/011-sync-failure-record.sql\" with { type: \"text\" }\nimport pipelineFailureRecordSql from \"./migrations/012-pipeline-failure-record.sql\" with {\n type: \"text\",\n}\nimport workflowFailureRecordSql from \"./migrations/013-workflow-failure-record.sql\" with {\n type: \"text\",\n}\nimport agentFailureRecordSql from \"./migrations/014-agent-failure-record.sql\" with { type: \"text\" }\nimport projectionFailureRecordSql from \"./migrations/015-projection-failure-record.sql\" with {\n type: \"text\",\n}\nimport webhookRunFailureRecordSql from \"./migrations/016-webhook-run-failure-record.sql\" with {\n type: \"text\",\n}\nimport actionFailureRecordSql from \"./migrations/017-action-failure-record.sql\" with {\n type: \"text\",\n}\nimport ontologyOutboxFailureRecordSql from \"./migrations/018-ontology-outbox-failure-record.sql\" with {\n type: \"text\",\n}\nimport webhookDeliveryFailureRecordSql from \"./migrations/019-webhook-delivery-failure-record.sql\" with {\n type: \"text\",\n}\nimport dropRunUsageProjectionsSql from \"./migrations/020-drop-run-usage-projections.sql\" with {\n type: \"text\",\n}\nimport syncPipelineExecutionsSql from \"./migrations/021-sync-pipeline-executions.sql\" with {\n type: \"text\",\n}\nimport projectionExecutionsSql from \"./migrations/022-projection-executions.sql\" with {\n type: \"text\",\n}\nimport webhookExecutionsSql from \"./migrations/023-webhook-executions.sql\" with { type: \"text\" }\nimport ontologyCommitExecutionsSql from \"./migrations/024-ontology-commit-executions.sql\" with {\n type: \"text\",\n}\nimport connectorConnectionsSql from \"./migrations/025-connector-connections.sql\" with {\n type: \"text\",\n}\nimport aiCostAccountingSql from \"./migrations/026-ai-cost-accounting.sql\" with { type: \"text\" }\nimport agentContextCheckpointsSql from \"./migrations/027-agent-context-checkpoints.sql\" with {\n type: \"text\",\n}\nimport objectOverrideEditTimesSql from \"./migrations/028-object-override-edit-times.sql\" with {\n type: \"text\",\n}\nimport modelAccountingSql from \"./migrations/029-model-accounting.sql\" with { type: \"text\" }\nimport aiUsageLimitsSql from \"./migrations/030-ai-usage-limits.sql\" with { type: \"text\" }\nimport subagentRunsSql from \"./migrations/031-subagent-runs.sql\" with { type: \"text\" }\nimport conversationRunSpecSql from \"./migrations/032-conversation-run-spec.sql\" with {\n type: \"text\",\n}\nimport retireAgentDefinitionsSql from \"./migrations/033-retire-agent-definitions.sql\" with {\n type: \"text\",\n}\nimport deviceAuthorizationsSql from \"./migrations/034-device-authorizations.sql\" with {\n type: \"text\",\n}\nimport shareGrantsSql from \"./migrations/035-share-grants.sql\" with { type: \"text\" }\nimport shareSessionsSql from \"./migrations/036-share-sessions.sql\" with { type: \"text\" }\nimport projectionSourceRootsSql from \"./migrations/038-projection-source-roots.sql\" with {\n type: \"text\",\n}\nimport outboxPublicationOrderSql from \"./migrations/040-outbox-publication-order.sql\" with {\n type: \"text\",\n}\nimport agentThreadWorkspacesSql from \"./migrations/041-agent-thread-workspaces.sql\" with {\n type: \"text\",\n}\nimport vectorProfilesSql from \"./migrations/042-vector-profiles.sql\" with { type: \"text\" }\nimport vectorIndexingSql from \"./migrations/043-vector-indexing.sql\" with { type: \"text\" }\nimport vectorBatchingSql from \"./migrations/044-vector-batching.sql\" with { type: \"text\" }\nimport agentThreadSandboxStateSql from \"./migrations/045-agent-thread-sandbox-state.sql\" with {\n type: \"text\",\n}\nimport workflowInterventionPrincipalsSql from \"./migrations/046-workflow-intervention-principals.sql\" with {\n type: \"text\",\n}\nimport ontologyCommitAttributionSql from \"./migrations/047-ontology-commit-attribution.sql\" with {\n type: \"text\",\n}\nimport nativeSessionsSql from \"./migrations/049-native-sessions.sql\" with { type: \"text\" }\nimport directoryGroupMembershipsSql from \"./migrations/050-directory-group-memberships.sql\" with {\n type: \"text\",\n}\nimport projectionRunSupersessionSql from \"./migrations/051-projection-run-supersession.sql\" with {\n type: \"text\",\n}\nimport compactSourceStorageSql from \"./migrations/052-compact-source-storage.sql\" with {\n type: \"text\",\n}\n\nconst MIGRATIONS_TABLE_SQL = `\n CREATE TABLE IF NOT EXISTS sixb_migrations (\n adapter_id TEXT NOT NULL,\n version INTEGER NOT NULL,\n id TEXT NOT NULL,\n checksum TEXT,\n status TEXT NOT NULL,\n started_at TEXT NOT NULL,\n finished_at TEXT,\n PRIMARY KEY (adapter_id, version)\n );\n`\n\nexport const SQLITE_STORAGE_ADAPTER_ID = \"SixbSqliteStorage\"\nexport const SQLITE_STORAGE_FILE = \"storage.sqlite\"\n\nexport const sqliteStorageMigrations = defineMigrations({\n adapterId: SQLITE_STORAGE_ADAPTER_ID,\n steps: [\n sqliteSql(\"001-initial-schema\", initialSchemaSql),\n sqliteSql(\"002-workflow-run-output\", workflowRunOutputSql),\n sqliteSql(\"003-merge-sync-runs\", mergeSyncRunsSql),\n sqliteSql(\"004-executions\", executionsSql),\n sqliteSql(\"005-workflow-executions\", workflowExecutionsSql),\n sqliteSql(\"006-narrow-ontology-source-root-index\", narrowOntologySourceRootIndexSql),\n sqliteSql(\"007-split-overrides\", splitOverridesSql),\n sqliteSql(\"008-action-executions\", actionExecutionsSql),\n sqliteSql(\"009-agent-executions\", agentExecutionsSql),\n sqliteSql(\"010-ai-usage-accounting-foundation\", aiUsageAccountingFoundationSql),\n sqliteSql(\"011-sync-failure-record\", syncFailureRecordSql),\n sqliteSql(\"012-pipeline-failure-record\", pipelineFailureRecordSql),\n sqliteSql(\"013-workflow-failure-record\", workflowFailureRecordSql),\n sqliteSql(\"014-agent-failure-record\", agentFailureRecordSql),\n sqliteSql(\"015-projection-failure-record\", projectionFailureRecordSql),\n sqliteSql(\"016-webhook-run-failure-record\", webhookRunFailureRecordSql),\n sqliteSql(\"017-action-failure-record\", actionFailureRecordSql),\n sqliteSql(\"018-ontology-outbox-failure-record\", ontologyOutboxFailureRecordSql),\n sqliteSql(\"019-webhook-delivery-failure-record\", webhookDeliveryFailureRecordSql),\n sqliteSql(\"020-drop-run-usage-projections\", dropRunUsageProjectionsSql),\n sqliteSql(\"021-sync-pipeline-executions\", syncPipelineExecutionsSql),\n sqliteStep(\n \"022-projection-executions\",\n (db) => {\n if (db.query(\"SELECT 1 FROM projection_runs LIMIT 1\").get()) {\n throw new Error(\n \"[SixbSqliteStorage] Projection execution migration cannot preserve legacy runs with unknown authority.\"\n )\n }\n db.run(projectionExecutionsSql)\n },\n { checksum: checksum(projectionExecutionsSql) }\n ),\n sqliteStep(\n \"023-webhook-executions\",\n (db) => {\n const hasRuns = db.query(\"SELECT 1 FROM webhook_runs LIMIT 1\").get()\n const hasDeliveries = db.query(\"SELECT 1 FROM webhook_deliveries LIMIT 1\").get()\n if (hasRuns || hasDeliveries) {\n throw new Error(\n \"[SixbSqliteStorage] Webhook execution migration cannot preserve legacy runs or deliveries with unknown authority.\"\n )\n }\n db.run(webhookExecutionsSql)\n },\n { checksum: checksum(webhookExecutionsSql) }\n ),\n sqliteStep(\n \"024-ontology-commit-executions\",\n (db) => {\n if (db.query(\"SELECT 1 FROM ontology_commits LIMIT 1\").get()) {\n throw new Error(\n \"[SixbSqliteStorage] Ontology commit execution migration cannot preserve commits with unknown authority.\"\n )\n }\n db.run(ontologyCommitExecutionsSql)\n },\n { checksum: checksum(ontologyCommitExecutionsSql) }\n ),\n sqliteSql(\"025-connector-connections\", connectorConnectionsSql),\n sqliteSql(\"026-ai-cost-accounting\", aiCostAccountingSql),\n sqliteSql(\"027-agent-context-checkpoints\", agentContextCheckpointsSql),\n sqliteSql(\"028-object-override-edit-times\", objectOverrideEditTimesSql),\n sqliteSql(\"029-model-accounting\", modelAccountingSql),\n sqliteSql(\"030-ai-usage-limits\", aiUsageLimitsSql),\n sqliteSql(\"031-subagent-runs\", subagentRunsSql),\n sqliteSql(\"032-conversation-run-spec\", conversationRunSpecSql),\n sqliteSql(\"033-retire-agent-definitions\", retireAgentDefinitionsSql),\n sqliteSql(\"034-device-authorizations\", deviceAuthorizationsSql),\n sqliteSql(\"035-share-grants\", shareGrantsSql),\n sqliteSql(\"036-share-sessions\", shareSessionsSql),\n sqliteSql(\"037-execution-requester-groups\", executionRequesterGroupsSql),\n sqliteSql(\"038-projection-source-roots\", projectionSourceRootsSql),\n sqliteSql(\"039-connector-optional-pkce\", connectorOptionalPkceSql),\n sqliteSql(\"040-outbox-publication-order\", outboxPublicationOrderSql),\n sqliteSql(\"041-agent-thread-workspaces\", agentThreadWorkspacesSql),\n sqliteSql(\"042-vector-profiles\", vectorProfilesSql),\n sqliteSql(\"043-vector-indexing\", vectorIndexingSql),\n sqliteSql(\"044-vector-batching\", vectorBatchingSql),\n sqliteSql(\"045-agent-thread-sandbox-state\", agentThreadSandboxStateSql),\n sqliteSql(\"046-workflow-intervention-principals\", workflowInterventionPrincipalsSql),\n sqliteSql(\"047-ontology-commit-attribution\", ontologyCommitAttributionSql),\n sqliteSql(\"048-file-upload-sessions\", fileUploadSessionsSql),\n sqliteSql(\"049-native-sessions\", nativeSessionsSql),\n sqliteSql(\"050-directory-group-memberships\", directoryGroupMembershipsSql),\n sqliteSql(\"051-projection-run-supersession\", projectionRunSupersessionSql),\n sqliteStep(\n \"052-compact-source-storage\",\n (db) => {\n // SQLite has no procedural block to check the copy in SQL: count around it instead.\n const before = sourceStorageCounts(db)\n db.run(compactSourceStorageSql)\n const after = sourceStorageCounts(db)\n if (\n after.versions !== before.versions ||\n after.roots !== before.roots ||\n after.rows !== before.rows\n ) {\n throw new Error(\n \"[SixbSqliteStorage] Source versions, roots or rows were lost while compacting source storage.\"\n )\n }\n },\n { checksum: checksum(compactSourceStorageSql) }\n ),\n ],\n})\n\nexport function sqliteStoragePath(basePath: string): string {\n return `${basePath}/${SQLITE_STORAGE_FILE}`\n}\n\nexport function sqliteSql(id: string, sqlText: string): MigrationStep<Database> {\n return sqliteStep(\n id,\n (db) => {\n db.run(sqlText)\n },\n { checksum: checksum(sqlText) }\n )\n}\n\nexport function sqliteStep(\n id: string,\n up: (db: Database) => void | Promise<void>,\n options: MigrationStepOptions = {}\n): MigrationStep<Database> {\n return step<Database>(id, up, options)\n}\n\nexport function installFreshSqliteSchema(db: Database): void {\n for (const migration of sqliteStorageMigrations.steps) {\n const installed = migration.up(db)\n if (installed instanceof Promise) {\n throw new Error(\n `[${sqliteStorageMigrations.adapterId}] Fresh SQLite schema installation must be synchronous`\n )\n }\n }\n}\n\nexport function createSqliteStorageMigrators(basePath: string): readonly StorageMigrator[] {\n return [\n createSqliteMigrator({\n path: sqliteStoragePath(basePath),\n migrations: sqliteStorageMigrations,\n }),\n ]\n}\n\nexport function createSqliteMigrator(params: {\n readonly path: string\n readonly migrations: MigrationSet<Database>\n}): StorageMigrator {\n return {\n adapterId: params.migrations.adapterId,\n latestVersion: params.migrations.latestVersion,\n async status() {\n return describeMigrationHistory({\n migrations: params.migrations,\n rows: await readSqliteHistory(params.path, params.migrations.adapterId),\n })\n },\n async migrate() {\n return withSqliteDatabase(params.path, (db) =>\n runMigrationSet({\n context: db,\n migrations: params.migrations,\n state: sqliteMigrationHistoryStore(db),\n })\n )\n },\n }\n}\n\nexport async function migrateSqliteStorage(basePath: string): Promise<void> {\n mkdirSync(basePath, { recursive: true })\n\n for (const migrator of createSqliteStorageMigrators(basePath)) {\n await migrator.migrate()\n }\n}\n\nfunction sqliteMigrationHistoryStore(db: Database): MigrationHistoryStore {\n return {\n ensure() {\n db.run(MIGRATIONS_TABLE_SQL)\n },\n readHistory(adapterId) {\n return db\n .query(\"SELECT * FROM sixb_migrations WHERE adapter_id = ? ORDER BY version\")\n .all(adapterId)\n .map(rowToMigrationRecord)\n },\n markStarted(adapterId, migration, at) {\n db.query(`\n INSERT INTO sixb_migrations (\n adapter_id, version, id, checksum, status, started_at, finished_at\n ) VALUES (?, ?, ?, ?, 'started', ?, NULL)\n ON CONFLICT(adapter_id, version) DO UPDATE SET\n id = excluded.id,\n checksum = excluded.checksum,\n status = excluded.status,\n started_at = excluded.started_at,\n finished_at = NULL\n `).run(adapterId, migration.version, migration.id, migration.checksum ?? null, at)\n },\n markApplied(adapterId, migration, at) {\n db.query(`\n UPDATE sixb_migrations\n SET status = 'applied', finished_at = ?\n WHERE adapter_id = ? AND version = ?\n `).run(at, adapterId, migration.version)\n },\n async transaction(run) {\n // SQLite cannot rebuild a referenced parent table while foreign-key enforcement is active,\n // even when the replacement satisfies every deferred reference. Migrations therefore run\n // with enforcement paused, validate the complete schema before commit, then restore it.\n db.run(\"PRAGMA foreign_keys = OFF\")\n db.run(\"BEGIN\")\n\n try {\n const result = await run()\n const violations = db.query(\"PRAGMA foreign_key_check\").all()\n if (violations.length > 0) {\n throw new Error(\n `[${SQLITE_STORAGE_ADAPTER_ID}] Migration produced ${violations.length} foreign-key violation(s).`\n )\n }\n db.run(\"COMMIT\")\n return result\n } catch (error) {\n rollbackQuietly(db)\n throw error\n } finally {\n db.run(\"PRAGMA foreign_keys = ON\")\n }\n },\n }\n}\n\nfunction rowToMigrationRecord(row: unknown): MigrationRecord {\n const migration = row as {\n adapter_id: string\n version: number\n id: string\n checksum: string | null\n status: \"started\" | \"applied\"\n started_at: string\n finished_at: string | null\n }\n\n return {\n adapterId: migration.adapter_id,\n version: migration.version,\n id: migration.id,\n checksum: migration.checksum ?? undefined,\n status: migration.status,\n startedAt: migration.started_at,\n finishedAt: migration.finished_at ?? undefined,\n }\n}\n\nfunction sourceStorageCounts(db: Database): {\n readonly versions: number\n readonly roots: number\n readonly rows: number\n} {\n return db\n .query(`SELECT (SELECT count(*) FROM ontology_sources) AS versions,\n (SELECT count(*) FROM ontology_source_roots) AS roots,\n (SELECT count(*) FROM ontology_source_rows) AS rows`)\n .get() as { readonly versions: number; readonly roots: number; readonly rows: number }\n}\n\nfunction checksum(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\")\n}\n\n/**\n * Reads migration history without creating anything. `null` means there is no history\n * to read, which is a state and not a failure.\n *\n * `new Database(path)` creates the file, and `withSqliteDatabase` additionally mkdirs\n * its parent — fine on the way to a migration, wrong for a probe. So: `existsSync`\n * first, then open `readonly` so even a mistake below cannot write. `:memory:` is\n * always empty on a fresh connection, so there is nothing to report.\n */\nasync function readSqliteHistory(\n path: string,\n adapterId: string\n): Promise<readonly MigrationRecord[] | null> {\n if (path === \":memory:\" || !existsSync(path)) {\n return null\n }\n\n const db = new Database(path, { readonly: true })\n try {\n const table = db\n .query(\"SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'sixb_migrations'\")\n .get()\n if (!table) {\n return null\n }\n\n return db\n .query(\"SELECT * FROM sixb_migrations WHERE adapter_id = ? ORDER BY version\")\n .all(adapterId)\n .map(rowToMigrationRecord)\n } finally {\n db.close()\n }\n}\n\nasync function withSqliteDatabase<T>(path: string, run: (db: Database) => Promise<T>): Promise<T> {\n if (path !== \":memory:\") mkdirSync(dirname(path), { recursive: true })\n const db = new Database(path)\n\n try {\n return await run(db)\n } finally {\n db.close()\n }\n}\n\nfunction rollbackQuietly(db: Database): void {\n try {\n db.run(\"ROLLBACK\")\n } catch {\n // Ignore rollback errors so the original migration failure is preserved.\n }\n}\n\nimport executionRequesterGroupsSql from \"./migrations/037-execution-requester-groups.sql\" with {\n type: \"text\",\n}\n\nimport connectorOptionalPkceSql from \"./migrations/039-connector-optional-pkce.sql\" with {\n type: \"text\",\n}\nimport fileUploadSessionsSql from \"./migrations/048-file-upload-sessions.sql\" with { type: \"text\" }\n",
8
8
  "import type { Database } from \"bun:sqlite\"\nimport { Database as SqliteDatabase } from \"bun:sqlite\"\nimport { mkdirSync } from \"node:fs\"\nimport { dirname } from \"node:path\"\n\nexport interface SqliteStoreConnection {\n readonly db: Database\n readonly ownsConnection: boolean\n readonly installFreshSchema: boolean\n}\n\nexport interface SqliteStoreConnectionOptions {\n readonly path?: string\n readonly connection?: SqliteStoreConnection\n readonly readonly?: boolean\n}\n\nexport function openSqliteStoreConnection(\n options: SqliteStoreConnectionOptions = {}\n): SqliteStoreConnection {\n if (options.connection) {\n return {\n db: options.connection.db,\n ownsConnection: false,\n installFreshSchema: false,\n }\n }\n\n const path = options.path ?? \":memory:\"\n if (path !== \":memory:\" && !options.readonly) mkdirSync(dirname(path), { recursive: true })\n const db = new SqliteDatabase(path, options.readonly ? { readonly: true } : undefined)\n db.run(\"PRAGMA foreign_keys = ON\")\n db.run(\"PRAGMA busy_timeout = 5000\")\n return {\n db,\n ownsConnection: true,\n installFreshSchema: path === \":memory:\" && !options.readonly,\n }\n}\n\nexport function closeSqliteStoreConnection(connection: SqliteStoreConnection): void {\n if (connection.ownsConnection) {\n connection.db.close()\n }\n}\n\nconst activeImmediateTransactions = new WeakSet<Database>()\nconst activeDeferredReadTransactions = new WeakSet<Database>()\n\nexport function runImmediateTransaction<T>(db: Database, run: () => T): T {\n if (activeImmediateTransactions.has(db)) {\n return run()\n }\n\n db.run(\"BEGIN IMMEDIATE\")\n activeImmediateTransactions.add(db)\n\n try {\n const result = run()\n db.run(\"COMMIT\")\n return result\n } catch (error) {\n rollbackQuietly(db)\n throw error\n } finally {\n activeImmediateTransactions.delete(db)\n }\n}\n\n/** Lets timers and request handlers run between bounded synchronous SQLite chunks. */\nexport function yieldSqliteEventLoop(): Promise<void> {\n return new Promise((resolve) => setImmediate(resolve))\n}\n\nexport async function runImmediateTransactionAsync<T>(\n db: Database,\n run: () => Promise<T> | T\n): Promise<T> {\n if (activeImmediateTransactions.has(db)) {\n return run()\n }\n\n db.run(\"BEGIN IMMEDIATE\")\n activeImmediateTransactions.add(db)\n\n try {\n const result = await run()\n db.run(\"COMMIT\")\n return result\n } catch (error) {\n rollbackQuietly(db)\n throw error\n } finally {\n activeImmediateTransactions.delete(db)\n }\n}\n\n/**\n * Run a multi-statement read against one proven SQLite snapshot.\n *\n * A provider-owned immediate transaction already has a stable snapshot and may be reused. Any\n * other pre-existing transaction is rejected because this provider cannot prove who owns it or\n * which lifecycle will close it.\n */\nexport function runDeferredReadTransaction<T>(db: Database, run: () => T): T {\n if (activeImmediateTransactions.has(db) || activeDeferredReadTransactions.has(db)) {\n return run()\n }\n if (db.inTransaction) {\n throw new Error(\n \"[SixbSqlite] Selected object reads cannot join an unverified SQLite transaction.\"\n )\n }\n\n db.run(\"BEGIN DEFERRED\")\n activeDeferredReadTransactions.add(db)\n try {\n const result = run()\n db.run(\"COMMIT\")\n return result\n } catch (error) {\n rollbackQuietly(db)\n throw error\n } finally {\n activeDeferredReadTransactions.delete(db)\n }\n}\n\nfunction rollbackQuietly(db: Database): void {\n try {\n db.run(\"ROLLBACK\")\n } catch {\n // Preserve the original SQLite storage failure.\n }\n}\n",
9
9
  "import type { Database } from \"bun:sqlite\"\nimport {\n agentContextCheckpointMatchesCreateInput,\n assertAgentContextCheckpointAnchors,\n assertAgentContextCheckpointAuthority,\n assertAgentContextCheckpointReplayState,\n assertCreateAgentContextCheckpointInput,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\nimport {\n type AgentContextCheckpointRecord,\n type AgentContextCheckpointStore,\n AgentStorageError,\n type CreateAgentContextCheckpointInput,\n} from \"@sixb/core/storage\"\nimport {\n type AgentContextCheckpointRow,\n type AgentMessageRow,\n type AgentRunRow,\n type AgentThreadRow,\n rowToContextCheckpointRecord,\n rowToMessageRecord,\n rowToRunRecord,\n rowToThreadRecord,\n} from \"./rows\"\n\nconst SQLITE_CHECKPOINT_RUN_ID_BATCH_SIZE = 500\n\nexport class SqliteAgentContextCheckpointStore implements AgentContextCheckpointStore {\n constructor(private readonly db: Database) {}\n\n async create(input: CreateAgentContextCheckpointInput): Promise<AgentContextCheckpointRecord> {\n assertCreateAgentContextCheckpointInput(input, \"SixbSqlite\")\n\n return this.db.transaction(() => {\n const runRow = this.db\n .query(\"SELECT * FROM agent_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.createdByRunId) as AgentRunRow | null\n const threadRow = this.db\n .query(\"SELECT * FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.threadId) as AgentThreadRow | null\n assertAgentContextCheckpointAuthority({\n create: input,\n run: runRow ? rowToRunRecord(runRow) : null,\n thread: threadRow ? rowToThreadRecord(threadRow) : null,\n prefix: \"SixbSqlite\",\n })\n\n const latest = this.findLatest(input.projectId, input.threadId)\n const headRow = this.db\n .query(\n \"SELECT COALESCE(MAX(seq), 0) AS seq FROM agent_messages WHERE project_id = ? AND thread_id = ?\"\n )\n .get(input.projectId, input.threadId) as { seq: number }\n\n const existingForRun = this.db\n .query(\n \"SELECT * FROM agent_context_checkpoints WHERE project_id = ? AND created_by_run_id = ?\"\n )\n .get(input.projectId, input.createdByRunId) as AgentContextCheckpointRow | null\n if (existingForRun) {\n const record = rowToContextCheckpointRecord(existingForRun)\n if (agentContextCheckpointMatchesCreateInput(record, input)) {\n assertAgentContextCheckpointReplayState({\n create: input,\n existing: record,\n latest,\n headSeq: headRow.seq,\n prefix: \"SixbSqlite\",\n })\n return record\n }\n throw new AgentStorageError(\n \"invalid_state\",\n `[SixbSqlite] Agent run '${input.createdByRunId}' already created a different context checkpoint.`\n )\n }\n\n const duplicateId = this.db\n .query(\"SELECT 1 FROM agent_context_checkpoints WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id)\n if (duplicateId) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbSqlite] Agent context checkpoint '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n const firstRetainedRow = this.db\n .query(\n \"SELECT * FROM agent_messages WHERE project_id = ? AND thread_id = ? AND seq > ? ORDER BY seq ASC LIMIT 1\"\n )\n .get(input.projectId, input.threadId, input.summarizedThroughSeq) as AgentMessageRow | null\n assertAgentContextCheckpointAnchors({\n create: input,\n latest,\n headSeq: headRow.seq,\n firstRetained: firstRetainedRow ? rowToMessageRecord(firstRetainedRow) : null,\n prefix: \"SixbSqlite\",\n })\n\n const createdAt = input.createdAt ?? new Date()\n this.db\n .query(\n `\n INSERT INTO agent_context_checkpoints (\n project_id,\n id,\n thread_id,\n created_by_run_id,\n previous_checkpoint_id,\n reason,\n summary,\n summary_format_version,\n summarized_through_seq,\n observed_head_seq,\n estimated_input_tokens_before,\n estimated_input_tokens_after,\n summary_model_id,\n created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.threadId,\n input.createdByRunId,\n input.expectedPreviousCheckpointId,\n input.reason,\n input.summary,\n input.summaryFormatVersion,\n input.summarizedThroughSeq,\n input.observedHeadSeq,\n input.estimatedInputTokensBefore,\n input.estimatedInputTokensAfter,\n input.summaryModelId,\n createdAt.toISOString()\n )\n\n return this.requireById(input.projectId, input.id)\n })()\n }\n\n async getLatest(input: {\n readonly projectId: string\n readonly threadId: string\n }): Promise<AgentContextCheckpointRecord | null> {\n return this.findLatest(input.projectId, input.threadId)\n }\n\n async getByRunIds(input: {\n readonly projectId: string\n readonly runIds: readonly string[]\n }): Promise<readonly AgentContextCheckpointRecord[]> {\n const runIds = [...new Set(input.runIds)]\n if (runIds.length === 0) return []\n\n const rows: AgentContextCheckpointRow[] = []\n for (let offset = 0; offset < runIds.length; offset += SQLITE_CHECKPOINT_RUN_ID_BATCH_SIZE) {\n const batch = runIds.slice(offset, offset + SQLITE_CHECKPOINT_RUN_ID_BATCH_SIZE)\n const placeholders = batch.map(() => \"?\").join(\", \")\n rows.push(\n ...(this.db\n .query(\n `SELECT * FROM agent_context_checkpoints WHERE project_id = ? AND created_by_run_id IN (${placeholders})`\n )\n .all(input.projectId, ...batch) as AgentContextCheckpointRow[])\n )\n }\n const byRunId = new Map(\n rows.map((row) => [row.created_by_run_id, rowToContextCheckpointRecord(row)] as const)\n )\n return runIds.flatMap((runId) => {\n const checkpoint = byRunId.get(runId)\n return checkpoint ? [checkpoint] : []\n })\n }\n\n private findLatest(projectId: string, threadId: string): AgentContextCheckpointRecord | null {\n const row = this.db\n .query(\n `\n SELECT * FROM agent_context_checkpoints\n WHERE project_id = ? AND thread_id = ?\n ORDER BY summarized_through_seq DESC, created_at DESC, id DESC\n LIMIT 1\n `\n )\n .get(projectId, threadId) as AgentContextCheckpointRow | null\n return row ? rowToContextCheckpointRecord(row) : null\n }\n\n private requireById(projectId: string, id: string): AgentContextCheckpointRecord {\n const row = this.db\n .query(\"SELECT * FROM agent_context_checkpoints WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as AgentContextCheckpointRow | null\n if (!row) {\n throw new AgentStorageError(\n \"invalid_state\",\n `[SixbSqlite] Failed to load agent context checkpoint '${id}' for project '${projectId}'.`\n )\n }\n return rowToContextCheckpointRecord(row)\n }\n}\n",
10
10
  "import type { Database } from \"bun:sqlite\"\nimport type { AgentMessagePart, Principal } from \"@sixb/core\"\nimport { snapshotAgentThreadSandboxParams } from \"@sixb/core/internal/agent-run-storage-provider\"\nimport { parseSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n AGENT_RUN_FAILURE_CODES,\n type AgentContextCheckpointRecord,\n type AgentMessageRecord,\n type AgentRunDiagnostic,\n type AgentRunRecord,\n type AgentThreadRecord,\n type AgentThreadSandboxState,\n type ConversationAgentRunSpec,\n coerceAgentRunFinishReason,\n type SubagentRunResult,\n type SubagentRunSpec,\n} from \"@sixb/core/storage\"\nimport type { SqliteValue } from \"../run-list-query\"\n\n// ── row shapes (snake_case, as stored) ──────────────────────────────────────────────────────────\n\nexport interface AgentThreadRow {\n project_id: string\n id: string\n owner_principal_type: Principal[\"type\"]\n owner_principal_id: string\n title: string | null\n sandbox_params: string | null\n sandbox_state: string | null\n status: AgentThreadRecord[\"status\"]\n active_run_id: string | null\n last_message_at: string | null\n message_count: number\n created_at: string\n updated_at: string\n}\n\nexport interface AgentRunRow {\n project_id: string\n id: string\n execution_id: string\n kind: AgentRunRecord[\"kind\"]\n thread_id: string | null\n trigger_message_id: string | null\n parent_run_id: string | null\n spawn_key: string | null\n spec: string | null\n result: string | null\n status: AgentRunRecord[\"status\"]\n model_id: string | null\n finish_reason: string | null\n error: string | null\n diagnostics: string | null\n attempt: number\n execution_token: string | null\n execution_queue_lease_expires_at: string | null\n created_at: string\n started_at: string | null\n completed_at: string | null\n}\n\nexport interface AgentMessageRow {\n project_id: string\n id: string\n thread_id: string\n run_id: string | null\n role: AgentMessageRecord[\"role\"]\n author_principal_type: Principal[\"type\"] | null\n author_principal_id: string | null\n seq: number\n parts: string\n metadata: string | null\n content_version: number\n created_at: string\n completed_at: string | null\n}\n\nexport interface AgentContextCheckpointRow {\n project_id: string\n id: string\n thread_id: string\n created_by_run_id: string\n previous_checkpoint_id: string | null\n reason: AgentContextCheckpointRecord[\"reason\"]\n summary: string\n summary_format_version: number\n summarized_through_seq: number\n observed_head_seq: number\n estimated_input_tokens_before: number\n estimated_input_tokens_after: number\n summary_model_id: string\n created_at: string\n}\n\n// ── row → record mappers ────────────────────────────────────────────────────────────────────────\n\nexport function rowToThreadRecord(row: AgentThreadRow): AgentThreadRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n ownerPrincipal: { type: row.owner_principal_type, id: row.owner_principal_id },\n title: row.title ?? undefined,\n ...(row.sandbox_state == null\n ? {}\n : {\n sandboxState: JSON.parse(row.sandbox_state) as AgentThreadSandboxState,\n }),\n ...(row.sandbox_params == null\n ? {}\n : { sandboxParams: snapshotAgentThreadSandboxParams(JSON.parse(row.sandbox_params)) }),\n status: row.status,\n activeRunId: row.active_run_id,\n lastMessageAt: row.last_message_at ? new Date(row.last_message_at) : undefined,\n messageCount: row.message_count,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nexport function rowToRunRecord(row: AgentRunRow): AgentRunRecord {\n const base = {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n status: row.status,\n modelId: row.model_id ?? undefined,\n finishReason: coerceAgentRunFinishReason(row.finish_reason),\n error: row.error === null ? undefined : parseSixbFailure(row.error, AGENT_RUN_FAILURE_CODES),\n diagnostics:\n row.diagnostics === null ? undefined : (JSON.parse(row.diagnostics) as AgentRunDiagnostic[]),\n attempt: row.attempt,\n execution:\n row.execution_token && row.execution_queue_lease_expires_at\n ? {\n token: row.execution_token,\n queueLeaseExpiresAt: new Date(row.execution_queue_lease_expires_at),\n }\n : undefined,\n createdAt: new Date(row.created_at),\n startedAt: row.started_at ? new Date(row.started_at) : undefined,\n completedAt: row.completed_at ? new Date(row.completed_at) : undefined,\n }\n if (row.kind === \"conversation\") {\n if (!row.thread_id || !row.trigger_message_id) {\n throw new Error(\n `[SixbSqlite] Conversational Agent run '${row.id}' has invalid persisted fields.`\n )\n }\n return {\n ...base,\n kind: \"conversation\",\n threadId: row.thread_id,\n triggerMessageId: row.trigger_message_id,\n ...(row.spec === null ? {} : { spec: JSON.parse(row.spec) as ConversationAgentRunSpec }),\n }\n }\n if (!row.parent_run_id || !row.spawn_key || row.spec === null) {\n throw new Error(`[SixbSqlite] Subagent run '${row.id}' has invalid persisted fields.`)\n }\n return {\n ...base,\n kind: \"subagent\",\n parentRunId: row.parent_run_id,\n spawnKey: row.spawn_key,\n spec: JSON.parse(row.spec) as SubagentRunSpec,\n ...(row.result === null ? {} : { result: JSON.parse(row.result) as SubagentRunResult }),\n }\n}\n\nexport function rowToMessageRecord(row: AgentMessageRow): AgentMessageRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n threadId: row.thread_id,\n runId: row.run_id,\n role: row.role,\n authorPrincipal: principalFromColumns(row.author_principal_type, row.author_principal_id),\n seq: row.seq,\n parts: JSON.parse(row.parts) as AgentMessagePart[],\n // A null/absent column and an explicit JSON `null` both mean \"no metadata\" (jsonb cannot tell\n // SQL NULL from a json null on read, so both backends normalise to `undefined` for parity).\n metadata: row.metadata === null ? undefined : (JSON.parse(row.metadata) ?? undefined),\n contentVersion: row.content_version,\n createdAt: new Date(row.created_at),\n completedAt: row.completed_at ? new Date(row.completed_at) : undefined,\n }\n}\n\nexport function rowToContextCheckpointRecord(\n row: AgentContextCheckpointRow\n): AgentContextCheckpointRecord {\n if (row.summary_format_version !== 1) {\n throw new Error(\n `[SixbSqlite] Unsupported agent context checkpoint summary format version '${row.summary_format_version}'.`\n )\n }\n return {\n id: row.id,\n projectId: row.project_id,\n threadId: row.thread_id,\n createdByRunId: row.created_by_run_id,\n previousCheckpointId: row.previous_checkpoint_id ?? undefined,\n reason: row.reason,\n summary: row.summary,\n summaryFormatVersion: 1,\n summarizedThroughSeq: row.summarized_through_seq,\n observedHeadSeq: row.observed_head_seq,\n estimatedInputTokensBefore: row.estimated_input_tokens_before,\n estimatedInputTokensAfter: row.estimated_input_tokens_after,\n summaryModelId: row.summary_model_id,\n createdAt: new Date(row.created_at),\n }\n}\n\nfunction principalFromColumns(\n type: Principal[\"type\"] | null | undefined,\n id: string | null | undefined\n): Principal | undefined {\n return type && id ? { type, id } : undefined\n}\n\n// ── offset pagination (threads / messages order by their own column, not started_at) ─────────────\n\nexport function queryAgentList<TRow>(input: {\n readonly db: Database\n readonly table: \"agent_threads\" | \"agent_messages\"\n readonly whereClauses: readonly string[]\n readonly args: readonly SqliteValue[]\n readonly orderBy: string\n readonly limit?: number\n readonly offset?: number\n}): { readonly rows: readonly TRow[]; readonly total: number; readonly hasMore: boolean } {\n const where = `WHERE ${input.whereClauses.join(\" AND \")}`\n const offset = input.offset ?? 0\n\n const totalRow = input.db\n .query(`SELECT COUNT(*) AS count FROM ${input.table} ${where}`)\n .get(...input.args) as { count: number }\n\n let query = `SELECT * FROM ${input.table} ${where} ORDER BY ${input.orderBy}`\n const queryArgs = [...input.args]\n\n if (input.limit !== undefined) {\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(input.limit, offset)\n } else if (offset > 0) {\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = input.db.query(query).all(...queryArgs) as TRow[]\n const total = totalRow.count\n return { rows, total, hasMore: offset + rows.length < total }\n}\n",
@@ -36,29 +36,29 @@
36
36
  "import type { Database } from \"bun:sqlite\"\nimport {\n type ExecutionStorageRow,\n executionRecordFromStorageRow,\n executionRecordToStorageRow,\n prepareExecutionRecord,\n} from \"@sixb/core/internal/execution-storage\"\nimport type {\n CreateExecutionInput,\n ExecutionRecord,\n ExecutionStorage,\n ShareSessionStorage,\n} from \"@sixb/core/storage\"\nimport { ExecutionStorageError } from \"@sixb/core/storage\"\nimport type { SqliteAuthStorage } from \"./auth-storage\"\n\nexport class SqliteExecutionStorage implements ExecutionStorage {\n constructor(\n private readonly db: Database,\n private readonly auth: SqliteAuthStorage,\n private readonly shareSessions: Pick<ShareSessionStorage, \"getById\">\n ) {}\n\n async create(input: CreateExecutionInput): Promise<ExecutionRecord> {\n const record = await prepareExecutionRecord(input, {\n auth: this.auth,\n getExecution: (params) => this.getById(params),\n getShareSession: (params) => this.shareSessions.getById(params),\n })\n const row = executionRecordToStorageRow(record)\n\n try {\n this.db\n .query(\n `\n INSERT INTO executions (\n project_id,\n id,\n executor_kind,\n executor_id,\n source_kind,\n source_id,\n requested_by_user_id,\n requested_by_service_account_id,\n requester_group_ids,\n correlation_id,\n parent_execution_id,\n authority_kind,\n authority_user_id,\n authority_service_account_id,\n authority_session_id,\n authority_access_token_id,\n authority_primitive_kind,\n authority_primitive_id,\n authority_kernel_operation,\n authority_delegation_kind,\n authority_delegation_id,\n authority_delegation_session_id,\n created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n row.projectId,\n row.id,\n row.executorKind,\n row.executorId,\n row.sourceKind,\n row.sourceId,\n row.requestedByUserId,\n row.requestedByServiceAccountId,\n JSON.stringify(row.requesterGroupIds),\n row.correlationId,\n row.parentExecutionId,\n row.authorityKind,\n row.authorityUserId,\n row.authorityServiceAccountId,\n row.authoritySessionId,\n row.authorityAccessTokenId,\n row.authorityPrimitiveKind,\n row.authorityPrimitiveId,\n row.authorityKernelOperation,\n row.authorityDelegationKind,\n row.authorityDelegationId,\n row.authorityDelegationSessionId,\n row.createdAt.toISOString()\n )\n } catch (error) {\n if (isDuplicateExecutionError(error)) {\n throw new ExecutionStorageError(\n \"duplicate_execution\",\n `[SixbSqlite] Execution '${record.id}' already exists in project '${record.projectId}'.`,\n { cause: error }\n )\n }\n throw error\n }\n\n return executionRecordFromStorageRow(row)\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<ExecutionRecord | null> {\n const row = this.db\n .query(\n `\n SELECT *\n FROM executions\n WHERE project_id = ? AND id = ?\n `\n )\n .get(params.projectId, params.id) as SqliteExecutionRow | null\n\n return row ? executionRecordFromStorageRow(toStorageRow(row)) : null\n }\n}\n\nfunction toStorageRow(row: SqliteExecutionRow): ExecutionStorageRow {\n return {\n projectId: row.project_id,\n id: row.id,\n executorKind: row.executor_kind,\n executorId: row.executor_id,\n sourceKind: row.source_kind,\n sourceId: row.source_id,\n requestedByUserId: row.requested_by_user_id,\n requestedByServiceAccountId: row.requested_by_service_account_id,\n requesterGroupIds: JSON.parse(row.requester_group_ids),\n correlationId: row.correlation_id,\n parentExecutionId: row.parent_execution_id,\n authorityKind: row.authority_kind,\n authorityUserId: row.authority_user_id,\n authorityServiceAccountId: row.authority_service_account_id,\n authoritySessionId: row.authority_session_id,\n authorityAccessTokenId: row.authority_access_token_id,\n authorityPrimitiveKind: row.authority_primitive_kind,\n authorityPrimitiveId: row.authority_primitive_id,\n authorityKernelOperation: row.authority_kernel_operation,\n authorityDelegationKind: row.authority_delegation_kind,\n authorityDelegationId: row.authority_delegation_id,\n authorityDelegationSessionId: row.authority_delegation_session_id,\n createdAt: new Date(row.created_at),\n }\n}\n\nfunction isDuplicateExecutionError(error: unknown): boolean {\n return (\n error instanceof Error &&\n error.message.includes(\"UNIQUE constraint failed: executions.project_id, executions.id\")\n )\n}\n\ninterface SqliteExecutionRow {\n readonly project_id: string\n readonly id: string\n readonly executor_kind: ExecutionStorageRow[\"executorKind\"]\n readonly executor_id: string\n readonly source_kind: ExecutionStorageRow[\"sourceKind\"]\n readonly source_id: string\n readonly requested_by_user_id: string | null\n readonly requested_by_service_account_id: string | null\n readonly requester_group_ids: string\n readonly correlation_id: string\n readonly parent_execution_id: string | null\n readonly authority_kind: ExecutionStorageRow[\"authorityKind\"]\n readonly authority_user_id: string | null\n readonly authority_service_account_id: string | null\n readonly authority_session_id: string | null\n readonly authority_access_token_id: string | null\n readonly authority_primitive_kind: ExecutionStorageRow[\"authorityPrimitiveKind\"]\n readonly authority_primitive_id: string | null\n readonly authority_kernel_operation: ExecutionStorageRow[\"authorityKernelOperation\"]\n readonly authority_delegation_kind: ExecutionStorageRow[\"authorityDelegationKind\"]\n readonly authority_delegation_id: string | null\n readonly authority_delegation_session_id: string | null\n readonly created_at: string\n}\n",
37
37
  "import type { Database } from \"bun:sqlite\"\nimport {\n DurableFileUploadSessions,\n type FileUploadSessionPersistence,\n type FileUploadSessionPersistenceBackend,\n fileUploadSessionReapAt,\n parseFileUploadSessionRow,\n} from \"@sixb/core/internal/file-upload-session-storage-provider\"\nimport type { FileUploadSession, ListAbandonedFileUploadSessionsInput } from \"@sixb/core/storage\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport { runImmediateTransactionAsync, type SqliteStoreConnection } from \"./transactions\"\n\nexport class SqliteFileUploadSessionStorage extends DurableFileUploadSessions {\n constructor(connection: SqliteStoreConnection) {\n super(new SqliteFileUploadSessionBackend(connection.db))\n }\n}\n\nclass SqliteFileUploadSessionBackend implements FileUploadSessionPersistenceBackend {\n private readonly persistence: FileUploadSessionPersistence\n\n constructor(private readonly db: Database) {\n this.persistence = new SqliteFileUploadSessionPersistence(db)\n }\n\n read<T>(run: (persistence: FileUploadSessionPersistence) => Promise<T>): Promise<T> {\n return run(this.persistence)\n }\n\n transaction<T>(run: (persistence: FileUploadSessionPersistence) => Promise<T>): Promise<T> {\n return runImmediateTransactionAsync(this.db, () => run(this.persistence))\n }\n}\n\nclass SqliteFileUploadSessionPersistence implements FileUploadSessionPersistence {\n constructor(private readonly db: Database) {}\n\n async now(): Promise<Date> {\n const row = this.db.query(\"SELECT strftime('%Y-%m-%dT%H:%M:%fZ', 'now') AS now\").get() as {\n readonly now: string\n }\n return new Date(row.now)\n }\n\n async insert(session: FileUploadSession): Promise<boolean> {\n try {\n this.db\n .query(\n `INSERT INTO file_upload_sessions (\n id, project_id, owner_principal_type, owner_principal_id, strategy, status, file_name,\n media_type, logical_path, expected_size_bytes, expected_digest, provider_upload, signed_parts, file_ref,\n created_at, expires_at, completed_at, aborted_at, reap_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`\n )\n .run(\n session.id,\n session.projectId,\n session.principal.type,\n session.principal.id,\n session.strategy,\n session.status,\n session.fileName ?? null,\n session.mediaType ?? null,\n session.logicalPath ?? null,\n session.expectedSizeBytes ?? null,\n session.expectedDigest ?? null,\n ...mutableColumns(session)\n )\n return true\n } catch (error) {\n if (isUniqueConstraintError(error)) return false\n throw error\n }\n }\n\n async get(uploadId: string): Promise<FileUploadSession | null> {\n const row = this.db.query(`${SELECT_SESSION} WHERE id = ?`).get(uploadId)\n return row ? parseFileUploadSessionRow(row as Record<string, unknown>) : null\n }\n\n async update(session: FileUploadSession): Promise<void> {\n this.db\n .query(\n `UPDATE file_upload_sessions\n SET status = ?, provider_upload = ?, signed_parts = ?, file_ref = ?, created_at = ?,\n expires_at = ?, completed_at = ?, aborted_at = ?, reap_at = ?\n WHERE id = ?`\n )\n .run(session.status, ...mutableColumns(session), session.id)\n }\n\n async listAbandoned(\n input: ListAbandonedFileUploadSessionsInput\n ): Promise<readonly FileUploadSession[]> {\n const rows = this.db\n .query(\n `${SELECT_SESSION}\n WHERE project_id = ? AND status = 'pending' AND provider_upload IS NOT NULL\n AND expires_at <= ?\n ORDER BY expires_at, id\n LIMIT ?`\n )\n .all(input.projectId, input.now.toISOString(), input.limit)\n return rows.map((row) => parseFileUploadSessionRow(row as Record<string, unknown>))\n }\n\n async deleteReapable(now: Date): Promise<number> {\n return this.db\n .query(\"DELETE FROM file_upload_sessions WHERE reap_at IS NOT NULL AND reap_at <= ?\")\n .run(now.toISOString()).changes\n }\n}\n\nconst SELECT_SESSION = `\n SELECT id, project_id AS projectId, owner_principal_type AS ownerPrincipalType,\n owner_principal_id AS ownerPrincipalId, strategy, status,\n file_name AS fileName, media_type AS mediaType, logical_path AS logicalPath,\n expected_size_bytes AS expectedSizeBytes, expected_digest AS expectedDigest,\n provider_upload AS providerUpload, signed_parts AS signedParts, file_ref AS fileRef,\n created_at AS createdAt, expires_at AS expiresAt, completed_at AS completedAt,\n aborted_at AS abortedAt\n FROM file_upload_sessions`\n\n/** Columns a transition may change, in insert/update order after `expected_digest`/`status`. */\nfunction mutableColumns(session: FileUploadSession) {\n return [\n session.providerUpload === undefined ? null : JSON.stringify(session.providerUpload),\n JSON.stringify(session.signedParts),\n session.fileRef === undefined ? null : JSON.stringify(session.fileRef),\n session.createdAt.toISOString(),\n session.expiresAt.toISOString(),\n session.completedAt?.toISOString() ?? null,\n session.abortedAt?.toISOString() ?? null,\n fileUploadSessionReapAt(session)?.toISOString() ?? null,\n ] as const\n}\n",
38
38
  "import type { Database } from \"bun:sqlite\"\nimport { hasVectorProfile } from \"@sixb/core/internal/query\"\nimport type {\n CompiledSelectedObjectReadScope,\n CountObjectsInput,\n CountObjectsResult,\n ExistsObjectsInput,\n ExistsObjectsResult,\n FacetObjectsInput,\n FacetObjectsResult,\n LinkBatchKey,\n LinkDirection,\n ObjectBatchKey,\n ObjectLinkRow,\n ObjectQueryCapabilities,\n ObjectReadExecutionLimits,\n ObjectReadStorage,\n ObjectRow,\n ObjectStorage,\n QueryObjectLinksInput,\n QueryObjectLinksResult,\n QueryObjectsInput,\n QueryObjectsResult,\n} from \"@sixb/core/storage\"\nimport { installFreshSqliteSchema } from \"../migrations\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runDeferredReadTransaction,\n type SqliteStoreConnection,\n} from \"../transactions\"\nimport { DEFAULT_OBJECT_QUERY_SOURCE } from \"./query-compiler\"\nimport { assertLinkQueryLimit, SqliteObjectReader } from \"./reader\"\nimport { type DatabaseRow, type LinkDatabaseRow, rowToLink, rowToObject } from \"./rows\"\nimport { createSqliteSelectedReader } from \"./selected-reader\"\n\nexport interface SqliteObjectStorageOptions {\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nconst SQLITE_OBJECT_QUERY_CAPABILITIES: ObjectQueryCapabilities = {\n queryObjects: true,\n countObjects: true,\n existsObjects: true,\n facetObjects: true,\n nodes: {\n start: true,\n refs: true,\n filter: true,\n text: true,\n vector: true,\n sort: true,\n limit: true,\n page: true,\n traverse: true,\n set: true,\n project: true,\n expand: true,\n },\n predicateOps: {\n and: true,\n or: true,\n not: true,\n eq: true,\n neq: true,\n lt: true,\n lte: true,\n gt: true,\n gte: true,\n in: true,\n exists: true,\n contains: true,\n },\n sortKinds: {\n property: true,\n },\n traversalDirections: {\n outgoing: true,\n incoming: true,\n },\n setOps: {\n union: true,\n intersect: true,\n subtract: true,\n },\n scalarOperations: {\n string: { equality: true, ordering: true },\n uuid: { equality: true, ordering: true },\n boolean: { equality: true },\n integer: { equality: true, ordering: true },\n double: { equality: true, ordering: true },\n decimal: { equality: true },\n date: { equality: true, ordering: true },\n timestamp: { equality: true, ordering: true },\n userRef: { equality: true },\n },\n limits: {\n totalCount: true,\n stablePageTokens: true,\n },\n notes: [\n \"SQLite object query pushdown supports start/refs/filter/text/sort/limit/page/traverse/set/project/expand over JSON properties and object links.\",\n \"expand hydrates linked objects in-database (top-N per parent via row_number() + json_group_array); core resolves each expansion's cardinality before pushdown, and a mixed/unresolved one stays on the fallback.\",\n \"Ordered decimal predicates and sorting use the bounded core fallback because SQLite has no native exact decimal type; canonical decimal equality remains pushdown-safe.\",\n \"Relevance sorting and unresolved start.includeSubtypes remain planner fallback or rejection cases.\",\n ],\n}\n\n/**\n * SQLite-based ObjectStorage implementation.\n *\n * Stores object projections and links. V1 object-query IR pushdown covers the\n * scalar JSON-property and link-traversal subset declared by queryCapabilities().\n */\nexport class SqliteObjectStorage implements ObjectStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly reader: SqliteObjectReader\n\n constructor(options: SqliteObjectStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.reader = new SqliteObjectReader(this.db, DEFAULT_OBJECT_QUERY_SOURCE)\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n }\n\n queryCapabilities(): ObjectQueryCapabilities {\n return SQLITE_OBJECT_QUERY_CAPABILITIES\n }\n\n createSelectedReadScope(params: {\n projectId: string\n scope: CompiledSelectedObjectReadScope\n limits: ObjectReadExecutionLimits\n }): ObjectReadStorage {\n return createSqliteSelectedReader(this.db, params, () => this.queryCapabilities())\n }\n\n async queryObjects(params: QueryObjectsInput): Promise<QueryObjectsResult> {\n if (hasVectorProfile(params.query))\n return runDeferredReadTransaction(this.db, () => this.reader.queryObjects(params))\n return this.reader.queryObjects(params)\n }\n\n async countObjects(params: CountObjectsInput): Promise<CountObjectsResult> {\n if (hasVectorProfile(params.query))\n return runDeferredReadTransaction(this.db, () => this.reader.countObjects(params))\n return this.reader.countObjects(params)\n }\n\n async existsObjects(params: ExistsObjectsInput): Promise<ExistsObjectsResult> {\n if (hasVectorProfile(params.query))\n return runDeferredReadTransaction(this.db, () => this.reader.existsObjects(params))\n return this.reader.existsObjects(params)\n }\n\n async facetObjects(params: FacetObjectsInput): Promise<FacetObjectsResult> {\n if (hasVectorProfile(params.query))\n return runDeferredReadTransaction(this.db, () => this.reader.facetObjects(params))\n return this.reader.facetObjects(params)\n }\n\n async getByPrimaryId(params: {\n projectId: string\n objectTypeId: string\n primaryId: string\n }): Promise<ObjectRow | null> {\n return this.reader.getByPrimaryId(params)\n }\n\n async selectsObjectProperties(\n params: Parameters<ObjectReadStorage[\"selectsObjectProperties\"]>[0]\n ): Promise<readonly boolean[]> {\n return this.reader.selectsObjectProperties(params)\n }\n\n async listLinks(params: {\n projectId: string\n objectTypeId: string\n objectId: string\n linkId?: string\n direction?: LinkDirection\n }): Promise<readonly ObjectLinkRow[]> {\n return this.reader.listLinks(params)\n }\n\n async getByPrimaryIdBatch(params: {\n projectId: string\n items: readonly { objectTypeId: string; primaryId: string }[]\n }): Promise<Map<ObjectBatchKey, ObjectRow>> {\n return this.reader.getByPrimaryIdBatch(params)\n }\n\n async listLinksBatch(params: {\n projectId: string\n direction?: LinkDirection\n items: readonly { objectTypeId: string; objectId: string; linkId: string }[]\n }): Promise<Map<LinkBatchKey, ObjectLinkRow[]>> {\n return this.reader.listLinksBatch(params)\n }\n\n async queryLinks(params: QueryObjectLinksInput): Promise<QueryObjectLinksResult> {\n assertLinkQueryLimit(params.limit)\n return this.reader.queryLinks(params)\n }\n\n async listIncidentLinksBatch(params: {\n projectId: string\n items: readonly { objectTypeId: string; objectId: string }[]\n }): Promise<readonly ObjectLinkRow[]> {\n if (params.items.length === 0) return []\n\n const rows = this.db\n .query(\n `\n WITH requested AS (\n SELECT\n json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.objectId') AS object_id\n FROM json_each(?)\n )\n SELECT link.*\n FROM links AS link\n JOIN requested\n ON requested.object_type_id = link.source_type_id\n AND requested.object_id = link.source_id\n WHERE link.project_id = ?\n UNION\n SELECT link.*\n FROM links AS link\n JOIN requested\n ON requested.object_type_id = link.target_type_id\n AND requested.object_id = link.target_id\n WHERE link.project_id = ?\n `\n )\n .all(JSON.stringify(params.items), params.projectId, params.projectId) as LinkDatabaseRow[]\n\n return rows.map((row) => rowToLink(row))\n }\n\n async listByPrimaryIdPage(params: {\n projectId: string\n objectTypeId: string\n afterPrimaryId?: string\n limit: number\n }): Promise<{ objects: readonly ObjectRow[]; nextPrimaryId?: string }> {\n assertReconciliationPageLimit(params.limit)\n const rows = this.db\n .query(\n `\n SELECT * FROM objects\n WHERE project_id = ? AND object_type_id = ?\n AND (? IS NULL OR primary_id > ?)\n ORDER BY primary_id ASC\n LIMIT ?\n `\n )\n .all(\n params.projectId,\n params.objectTypeId,\n params.afterPrimaryId ?? null,\n params.afterPrimaryId ?? null,\n params.limit + 1\n ) as DatabaseRow[]\n const hasMore = rows.length > params.limit\n const objects = rows.slice(0, params.limit).map((row) => rowToObject(row))\n const last = objects.at(-1)\n return {\n objects,\n ...(hasMore && last ? { nextPrimaryId: last.primaryId } : {}),\n }\n }\n\n async list(params: {\n projectId: string\n objectTypeId?: string | readonly string[]\n primaryIdPrefix?: string\n primaryIdSuffix?: string\n updatedAfter?: Date\n updatedBefore?: Date\n createdAfter?: Date\n createdBefore?: Date\n limit?: number\n offset?: number\n orderBy?: \"createdAt\" | \"updatedAt\" | \"primaryId\"\n order?: \"asc\" | \"desc\"\n }): Promise<{ objects: readonly ObjectRow[]; hasMore: boolean; total: number }> {\n return this.reader.list(params)\n }\n\n /** Close the connection only when this provider owns it. */\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n}\n\nfunction assertReconciliationPageLimit(limit: number): void {\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new Error(\"Object reconciliation page limit must be a positive safe integer.\")\n }\n}\n",
39
- "import {\n type ObjectExpansion,\n type ObjectQuery,\n ObjectQueryExecutionError,\n type ObjectQueryPredicate,\n type ObjectQuerySetOperation,\n type ObjectQuerySortField,\n} from \"@sixb/core\"\nimport {\n hasVectorProfile,\n isVectorProfileQuery,\n normalizeVector,\n vectorSearchCandidateLimit,\n} from \"@sixb/core/internal/query\"\nimport { encodeSqliteVector } from \"../vector-encoding\"\n\nexport type SqliteValue = string | number | bigint | boolean | null | Uint8Array\n\nexport interface SqliteObjectQueryPageRow {\n object_type_id: string\n primary_id: string\n properties: string\n _cursor_properties?: string\n}\n\nexport interface CompiledObjectQuery {\n vectorProbe?: { sql: string; args: SqliteValue[]; limit: number }\n sql: string\n args: SqliteValue[]\n totalSql: string\n totalArgs: SqliteValue[]\n order: CompiledOrder\n hasMoreProbe?: CompiledHasMoreProbe\n hasMore(rowCount: number, total?: number): boolean\n trimRows<T>(rows: readonly T[]): readonly T[]\n nextPageToken(rows: readonly SqliteObjectQueryPageRow[], rowCount: number): string | undefined\n}\n\ninterface CompiledHasMoreProbe {\n sql: string\n args: SqliteValue[]\n hasMore(rowCount: number): boolean\n}\n\ninterface CompileContext {\n probeLimit: boolean\n source: SqliteObjectQuerySource\n}\n\ninterface CompiledPredicate {\n sql: string\n args: SqliteValue[]\n}\n\ninterface CompiledOrder {\n sql: string\n args: SqliteValue[]\n fields: readonly CompiledOrderField[]\n propertyColumn: string\n}\n\ntype CompiledOrderField =\n | {\n kind: \"property\"\n propertyId: string\n direction: \"asc\" | \"desc\"\n }\n | {\n kind: \"column\"\n column: \"object_type_id\" | \"primary_id\" | \"_vector_score\"\n binary?: boolean\n direction: \"asc\" | \"desc\"\n }\n\ninterface EncodedPageToken {\n version: 1\n order: readonly string[]\n values: readonly EncodedCursorValue[]\n}\n\ninterface EncodedCursorValue {\n nullish: boolean\n value?: unknown\n}\n\nconst PAGE_TOKEN_PREFIX = \"keyset:\"\n\n// Fallback fanout cap for a \"many\" expansion that arrives without an explicit\n// limit. The core executor normally bakes a limit in before pushdown; this only\n// bounds the degenerate uncapped case. Mirrors the PostgreSQL compiler.\nconst DEFAULT_EXPANSION_FANOUT = 1_000\n\nexport function compileObjectQuery(\n projectId: string,\n query: ObjectQuery,\n options: { includeTotal?: boolean; source?: SqliteObjectQuerySource } = {}\n): CompiledObjectQuery {\n if (hasVectorProfile(query) && !isVectorProfileQuery(query)) {\n throw new ObjectQueryExecutionError(\n \"unsupported_vector_composition\",\n \"Vector search supports one profile with filters before ranking and limit/project after.\"\n )\n }\n const source = options.source ?? DEFAULT_OBJECT_QUERY_SOURCE\n const ctx: CompileContext = { probeLimit: options.includeTotal === false, source }\n return source.wrapQuery(compileObjectQueryInternal(projectId, query, ctx))\n}\n\n/** Physical relations used by the object-query compiler. */\nexport interface SqliteObjectQuerySource {\n readonly objectsTable: string\n readonly linksTable: string\n readonly objectPropertyPermissionsTable?: string\n /** Wrap a terminal SELECT without its own WITH clause; the selected source owns the only WITH. */\n wrapStatement(\n sql: string,\n args?: readonly SqliteValue[]\n ): {\n readonly sql: string\n readonly args: readonly SqliteValue[]\n }\n wrapQuery(query: CompiledObjectQuery): CompiledObjectQuery\n}\n\nexport const DEFAULT_OBJECT_QUERY_SOURCE: SqliteObjectQuerySource = {\n objectsTable: \"objects\",\n linksTable: \"links\",\n wrapStatement: (sql, args = []) => ({ sql, args: [...args] }),\n wrapQuery: (query) => query,\n}\n\nfunction exactContext(ctx: CompileContext): CompileContext {\n return ctx.probeLimit ? { ...ctx, probeLimit: false } : ctx\n}\n\nfunction compileObjectQueryInternal(\n projectId: string,\n query: ObjectQuery,\n ctx: CompileContext\n): CompiledObjectQuery {\n switch (query.kind) {\n case \"start\":\n return compileStart(projectId, query, ctx)\n case \"refs\":\n return compileRefs(projectId, query, ctx)\n case \"filter\":\n return compileFilter(projectId, query.input, query.predicate, ctx)\n case \"sort\":\n return compileSort(projectId, query.input, query.fields, ctx)\n case \"limit\":\n return compileLimit(projectId, query.input, query.limit, ctx)\n case \"page\":\n return compilePage(projectId, query.input, query.pageSize, query.pageToken, ctx)\n case \"traverse\":\n return compileTraversal(\n projectId,\n query.input,\n query.linkId,\n query.direction,\n query.sourceObjectTypeId,\n ctx\n )\n case \"set\":\n return compileSet(projectId, query.op, query.inputs, ctx)\n case \"project\":\n return compileProject(projectId, query.input, query.properties, ctx)\n case \"text\":\n return compileText(\n projectId,\n query.input,\n query.query,\n query.fields,\n query.fieldsByObjectType,\n ctx\n )\n case \"expand\":\n return compileExpand(projectId, query.input, query.expansions, ctx)\n case \"vector\":\n return compileVector(projectId, query, ctx)\n }\n}\n\nfunction compileVector(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"vector\" }>,\n ctx: CompileContext\n): CompiledObjectQuery {\n if (\n typeof query.vector === \"string\" ||\n !isVectorProfileQuery(query) ||\n !query.configuration ||\n !Number.isSafeInteger(query.k) ||\n query.k < 1 ||\n query.k > 1000 ||\n query.vector.length < 1 ||\n query.vector.length > 16000\n ) {\n throw new ObjectQueryExecutionError(\n \"invalid_vector_query\",\n \"A validated named vector profile is required.\"\n )\n }\n const input = compileObjectQueryInternal(projectId, query.input, exactContext(ctx))\n const permissions = ctx.source.objectPropertyPermissionsTable\n const permissionJoin = permissions\n ? `CROSS JOIN (\n SELECT project_id, object_type_id, primary_id, json_group_array(property_id) AS property_ids\n FROM ${permissions}\n GROUP BY project_id, object_type_id, primary_id\n ) AS vector_permissions ON vector_permissions.project_id = vectors.project_id\n AND vector_permissions.object_type_id = vectors.object_type_id\n AND vector_permissions.primary_id = vectors.primary_id`\n : \"\"\n const authorized = permissions\n ? `AND NOT EXISTS (\n SELECT 1 FROM json_each(vectors.source) AS required\n WHERE required.value NOT IN (SELECT value FROM json_each(vector_permissions.property_ids))\n )`\n : \"\"\n const candidates = `FROM (${input.sql}) AS input\n CROSS JOIN object_vectors AS vectors ON vectors.project_id = input.project_id\n AND vectors.object_type_id = input.object_type_id AND vectors.primary_id = input.primary_id\n ${permissionJoin}\n WHERE vectors.profile = ? AND vectors.configuration = ?\n AND length(vectors.embedding) / 4 = ? ${authorized}`\n const candidateArgs = [...input.args, query.profile!, query.configuration, query.vector.length]\n // Bound distance work, not just returned rows. Exceeding the envelope fails before ranking.\n const limit = vectorSearchCandidateLimit(query.vector.length)\n const values = normalizeVector(query.vector, query.vector.length)\n const order = compileOrder([\n { kind: \"column\", column: \"_vector_score\", direction: \"desc\" },\n ...identityOrderFields().map((field) => ({ ...field, binary: true })),\n ])\n const sql = `SELECT * FROM (SELECT input.*, max(-1, min(1, 1 - vec_distance_cosine(vectors.embedding, ?))) AS _vector_score\n ${candidates}) AS ranked ORDER BY ${order.sql} LIMIT ?`\n const args = [encodeSqliteVector(values), ...candidateArgs, query.k]\n return {\n sql,\n args,\n // Top-k cardinality depends on eligibility, not distances or ranking.\n totalSql: `SELECT COUNT(*) AS total FROM (SELECT 1 ${candidates} LIMIT ?) AS eligible`,\n totalArgs: [...candidateArgs, query.k],\n order,\n vectorProbe: {\n sql: `SELECT COUNT(*) AS total FROM (SELECT 1 ${candidates} LIMIT ?) AS candidates`,\n args: [...candidateArgs, limit + 1],\n limit,\n },\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileStart(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"start\" }>,\n ctx: CompileContext\n): CompiledObjectQuery {\n if (query.includeSubtypes === true) {\n throw new Error(\"[Sixb] SQLite object storage does not support start.includeSubtypes\")\n }\n\n const order = compileOrder(identityOrderFields())\n const sql = `\n SELECT *, properties AS _cursor_properties\n FROM ${ctx.source.objectsTable}\n WHERE project_id = ? AND object_type_id = ?\n ORDER BY ${order.sql}\n `\n const args = [projectId, query.objectTypeId, ...order.args]\n\n return {\n sql,\n args,\n totalSql: `SELECT COUNT(*) as total FROM ${ctx.source.objectsTable} WHERE project_id = ? AND object_type_id = ?`,\n totalArgs: [projectId, query.objectTypeId],\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileRefs(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"refs\" }>,\n ctx: CompileContext\n): CompiledObjectQuery {\n if (query.refs.length === 0) {\n throw new Error(\"[Sixb] SQLite object storage requires at least one ref\")\n }\n\n const order = compileOrder(identityOrderFields())\n const selectedOrder = compileOrder(identityOrderFields(), \"selected\")\n const refsJson = JSON.stringify(query.refs)\n const requested = `\n SELECT DISTINCT\n json_extract(ref.value, '$.objectTypeId') AS object_type_id,\n json_extract(ref.value, '$.primaryId') AS primary_id\n FROM json_each(?) AS ref\n `\n const sql = `\n SELECT selected.*, selected.properties AS _cursor_properties\n FROM (${requested}) AS requested\n JOIN ${ctx.source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = requested.object_type_id\n AND selected.primary_id = requested.primary_id\n ORDER BY ${selectedOrder.sql}\n `\n\n return {\n sql,\n args: [refsJson, projectId, ...selectedOrder.args],\n totalSql: `\n SELECT COUNT(*) AS total\n FROM (${requested}) AS requested\n JOIN ${ctx.source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = requested.object_type_id\n AND selected.primary_id = requested.primary_id\n `,\n totalArgs: [refsJson, projectId],\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileFilter(\n projectId: string,\n inputQuery: ObjectQuery,\n predicateNode: ObjectQueryPredicate,\n ctx: CompileContext\n): CompiledObjectQuery {\n const predicate = compilePredicate(predicateNode)\n return compileWhere(projectId, inputQuery, predicate, ctx)\n}\n\nfunction compileWhere(\n projectId: string,\n inputQuery: ObjectQuery,\n predicate: CompiledPredicate,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const sql = `\n SELECT *\n FROM (${input.sql}) AS input\n WHERE ${predicate.sql}\n ORDER BY ${input.order.sql}\n `\n\n return {\n sql,\n args: [...input.args, ...predicate.args, ...input.order.args],\n totalSql: `\n SELECT COUNT(*) as total\n FROM (${input.sql}) AS input\n WHERE ${predicate.sql}\n `,\n totalArgs: [...input.args, ...predicate.args],\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileText(\n projectId: string,\n inputQuery: ObjectQuery,\n query: string,\n fields: readonly string[] | undefined,\n fieldsByObjectType: Readonly<Record<string, readonly string[]>> | undefined,\n ctx: CompileContext\n): CompiledObjectQuery {\n const predicate =\n fields && fields.length > 0\n ? compileTextPredicate(query, fields)\n : compileScopedTextPredicate(query, fieldsByObjectType)\n\n if (!predicate) {\n throw new Error(\"[Sixb] SQLite object text search requires fields or resolved text defaults\")\n }\n return compileWhere(projectId, inputQuery, predicate, ctx)\n}\n\nfunction compileSort(\n projectId: string,\n inputQuery: ObjectQuery,\n fields: readonly ObjectQuerySortField[],\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const probeInput =\n ctx.probeLimit && needsLimitProbe(inputQuery)\n ? compileObjectQueryInternal(projectId, inputQuery, ctx)\n : undefined\n const order = compileOrder(sortOrderFields(fields))\n\n return {\n sql: `\n SELECT\n input.project_id,\n input.object_type_id,\n input.primary_id,\n input.properties,\n input.properties AS _cursor_properties,\n input.created_at,\n input.updated_at,\n input.version,\n input.last_commit_id${input.vectorProbe ? \", input._vector_score\" : \"\"}\n FROM (${input.sql}) AS input\n ORDER BY ${order.sql}\n `,\n args: [...input.args, ...order.args],\n totalSql: input.totalSql,\n totalArgs: input.totalArgs,\n order,\n hasMoreProbe: probeInput ? hasMoreProbeFor(probeInput) : input.hasMoreProbe,\n hasMore: input.hasMore,\n trimRows: input.trimRows,\n nextPageToken: input.nextPageToken,\n }\n}\n\nfunction compileLimit(\n projectId: string,\n inputQuery: ObjectQuery,\n rawLimit: number,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const limit = Math.max(0, rawLimit)\n const rowLimit = ctx.probeLimit ? limit + 1 : limit\n\n return {\n sql: `\n SELECT *\n FROM (${input.sql}) AS input\n ORDER BY ${input.order.sql}\n LIMIT ?\n `,\n args: [...input.args, ...input.order.args, rowLimit],\n totalSql: `\n SELECT COUNT(*) as total\n FROM (${input.sql}) AS input\n `,\n totalArgs: input.args,\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMore: (rowCount, total) =>\n total === undefined ? ctx.probeLimit && rowCount > limit : limit < total,\n trimRows: ctx.probeLimit ? (rows) => rows.slice(0, limit) : identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compilePage(\n projectId: string,\n inputQuery: ObjectQuery,\n rawPageSize: number,\n pageToken: string | undefined,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const pageSize = Math.max(0, rawPageSize)\n const cursor = pageToken ? decodePageToken(pageToken, input.order.fields) : undefined\n const cursorPredicate = cursor\n ? compileKeysetPredicate(input.order.fields, cursor, input.order.propertyColumn)\n : undefined\n const whereSql = cursorPredicate ? `WHERE ${cursorPredicate.sql}` : \"\"\n\n return {\n sql: `\n SELECT *\n FROM (${input.sql}) AS input\n ${whereSql}\n ORDER BY ${input.order.sql}\n LIMIT ?\n `,\n args: [...input.args, ...(cursorPredicate?.args ?? []), ...input.order.args, pageSize + 1],\n totalSql: `\n SELECT COUNT(*) as total\n FROM (${input.sql}) AS input\n `,\n totalArgs: input.args,\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMore: (rowCount) => rowCount > pageSize,\n trimRows: (rows) => rows.slice(0, pageSize),\n nextPageToken: (rows, rowCount) => {\n if (rowCount <= pageSize || rows.length === 0) return undefined\n return encodePageToken(rows[rows.length - 1], input.order.fields)\n },\n }\n}\n\nfunction compileTraversal(\n projectId: string,\n inputQuery: ObjectQuery,\n linkId: string,\n direction: \"outgoing\" | \"incoming\",\n sourceObjectTypeId: string | undefined,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const outputAlias = direction === \"outgoing\" ? \"target_object\" : \"source_object\"\n const joinSql =\n direction === \"outgoing\"\n ? `\n JOIN ${ctx.source.linksTable} AS edge\n ON edge.project_id = input.project_id\n AND edge.source_type_id = input.object_type_id\n AND edge.source_id = input.primary_id\n AND edge.link_id = ?\n JOIN ${ctx.source.objectsTable} AS target_object\n ON target_object.project_id = edge.project_id\n AND target_object.object_type_id = edge.target_type_id\n AND target_object.primary_id = edge.target_id\n `\n : `\n JOIN ${ctx.source.linksTable} AS edge\n ON edge.project_id = input.project_id\n AND edge.target_type_id = input.object_type_id\n AND edge.target_id = input.primary_id\n AND edge.link_id = ?${sourceObjectTypeId === undefined ? \"\" : \"\\n AND edge.source_type_id = ?\"}\n JOIN ${ctx.source.objectsTable} AS source_object\n ON source_object.project_id = edge.project_id\n AND source_object.object_type_id = edge.source_type_id\n AND source_object.primary_id = edge.source_id\n `\n const order = compileOrder(identityOrderFields())\n const qualifiedOrder = compileOrder(identityOrderFields(), outputAlias)\n const sql = `\n SELECT DISTINCT ${outputAlias}.*, ${outputAlias}.properties AS _cursor_properties\n FROM (${input.sql}) AS input\n ${joinSql}\n ORDER BY ${qualifiedOrder.sql}\n `\n const args = [\n ...input.args,\n linkId,\n ...(sourceObjectTypeId === undefined ? [] : [sourceObjectTypeId]),\n ...qualifiedOrder.args,\n ]\n\n return {\n sql,\n args,\n totalSql: `SELECT COUNT(*) as total FROM (${sql}) AS traversed`,\n totalArgs: args,\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\n/** Correlation handle for an expansion: the parent row's identity columns. */\ninterface ExpansionParent {\n project: string\n type: string\n id: string\n}\n\n// `expand` attaches linked objects to each result row without changing which\n// objects match (unlike `traverse`, which pivots to the targets). Each expansion\n// becomes a correlated subquery that hydrates its links into a JSON value, and\n// all expansions are folded into one `_expand` object column the row mapper reads\n// back. The input set is otherwise untouched, so pagination/order pass through.\nfunction compileExpand(\n projectId: string,\n inputQuery: ObjectQuery,\n expansions: readonly ObjectExpansion[],\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const expand = compileExpansionsObject(\n expansions,\n { project: \"input.project_id\", type: \"input.object_type_id\", id: \"input.primary_id\" },\n \"\",\n ctx\n )\n const inputOrder = compileOrder(input.order.fields, \"input\", \"input._cursor_properties\")\n const sql = `\n SELECT input.*, ${expand.sql} AS _expand\n FROM (${input.sql}) AS input\n ORDER BY ${inputOrder.sql}\n `\n\n return {\n sql,\n args: [...expand.args, ...input.args, ...inputOrder.args],\n totalSql: input.totalSql,\n totalArgs: input.totalArgs,\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMoreProbe: input.hasMoreProbe,\n hasMore: input.hasMore,\n trimRows: input.trimRows,\n nextPageToken: input.nextPageToken,\n }\n}\n\n// `json_object(linkId, value, ...)` over a set of expansions sharing one parent.\n// Link ids are user data, so they ride as parameters. Each value is a correlated\n// subquery whose JSON subtype is lost crossing the subquery boundary, so it is\n// re-parsed with `json(...)` to embed as nested JSON rather than a quoted string.\n// Used both for the outer `_expand` column and for each child's nested `links`.\nfunction compileExpansionsObject(\n expansions: readonly ObjectExpansion[],\n parent: ExpansionParent,\n pathPrefix: string,\n ctx: CompileContext\n): CompiledPredicate {\n const parts: string[] = []\n const args: SqliteValue[] = []\n expansions.forEach((expansion, index) => {\n const path = pathPrefix === \"\" ? `${index}` : `${pathPrefix}_${index}`\n const value = compileExpansionValue(expansion, parent, path, ctx)\n parts.push(\"?\", `json(${value.sql})`)\n args.push(expansion.linkId, ...value.args)\n })\n return { sql: `json_object(${parts.join(\", \")})`, args }\n}\n\n// One expansion's hydrated value. `row_number()` numbers a parent's links by the\n// order from `compileExpansionOrder` (the expansion's `orderBy` against the target\n// object's properties, then an identity tiebreak); `WHERE _ord <= N` keeps the\n// top-N per parent in-DB; each retained neighbour becomes a JSON object; and the\n// value is an ordered array (\"many\") or the first element or null (\"one\"). The\n// cardinality is core-resolved before pushdown.\nfunction compileExpansionValue(\n expansion: ObjectExpansion,\n parent: ExpansionParent,\n path: string,\n ctx: CompileContext\n): CompiledPredicate {\n const edge = `edge_${path}`\n const target = `tgt_${path}`\n const ranked = `ranked_${path}`\n const incoming = expansion.direction === \"incoming\"\n // The hydrated neighbour is the link target (outgoing) or source (incoming);\n // the parent sits on the opposite end, mirroring `compileTraversal`.\n const neighborType = incoming ? `${edge}.source_type_id` : `${edge}.target_type_id`\n const neighborId = incoming ? `${edge}.source_id` : `${edge}.target_id`\n const parentType = incoming ? `${edge}.target_type_id` : `${edge}.source_type_id`\n const parentId = incoming ? `${edge}.target_id` : `${edge}.source_id`\n\n const child = compileExpansionChildJson(expansion, edge, target, path, ctx)\n const order = compileExpansionOrder(expansion, target, neighborType, neighborId)\n\n const whereParts = [\n `${edge}.project_id = ${parent.project}`,\n `${parentType} = ${parent.type}`,\n `${parentId} = ${parent.id}`,\n `${edge}.link_id = ?`,\n ]\n const whereArgs: SqliteValue[] = [expansion.linkId]\n if (incoming && expansion.sourceObjectTypeId !== undefined) {\n whereParts.push(`${edge}.source_type_id = ?`)\n whereArgs.push(expansion.sourceObjectTypeId)\n }\n\n const inner = `\n SELECT ${child.sql} AS elem, row_number() OVER (ORDER BY ${order.sql}) AS _ord\n FROM ${ctx.source.linksTable} AS ${edge}\n JOIN ${ctx.source.objectsTable} AS ${target}\n ON ${target}.project_id = ${edge}.project_id\n AND ${target}.object_type_id = ${neighborType}\n AND ${target}.primary_id = ${neighborId}\n WHERE ${whereParts.join(\" AND \")}\n `\n const innerArgs = [...child.args, ...order.args, ...whereArgs]\n\n if (expansion.cardinality === \"one\") {\n return {\n sql: `(SELECT ${ranked}.elem FROM (${inner}) AS ${ranked} WHERE ${ranked}._ord = 1)`,\n args: innerArgs,\n }\n }\n\n // The fanout cap is baked into `limit` by the core executor before pushdown.\n // Each element is re-parsed with `json(...)` so the aggregate embeds objects\n // rather than the quoted JSON text the subquery column hands back.\n const limit = expansion.limit ?? DEFAULT_EXPANSION_FANOUT\n return {\n sql: `COALESCE((SELECT json_group_array(json(${ranked}.elem) ORDER BY ${ranked}._ord) FROM (${inner}) AS ${ranked} WHERE ${ranked}._ord <= ?), '[]')`,\n args: [...innerArgs, limit],\n }\n}\n\n// Build one hydrated neighbour as an `ExpandedObjectRow`-shaped JSON object. The\n// JSON-valued columns (`properties`, the edge's `linkProperties`) are re-parsed\n// with `json(...)` so they embed as JSON rather than strings; `linkProperties`\n// always rides along (the mapper drops it when null/empty), and nested expansions\n// recurse under `links`, correlated on this neighbour.\nfunction compileExpansionChildJson(\n expansion: ObjectExpansion,\n edge: string,\n target: string,\n path: string,\n ctx: CompileContext\n): CompiledPredicate {\n const fields = [\n `'projectId', ${target}.project_id`,\n `'objectTypeId', ${target}.object_type_id`,\n `'primaryId', ${target}.primary_id`,\n `'properties', json(${target}.properties)`,\n `'createdAt', ${target}.created_at`,\n `'updatedAt', ${target}.updated_at`,\n `'version', ${target}.version`,\n `'lastCommitId', ${target}.last_commit_id`,\n `'linkProperties', json(${edge}.properties)`,\n ]\n const args: SqliteValue[] = []\n\n if (expansion.expand && expansion.expand.length > 0) {\n const nested = compileExpansionsObject(\n expansion.expand,\n {\n project: `${target}.project_id`,\n type: `${target}.object_type_id`,\n id: `${target}.primary_id`,\n },\n path,\n ctx\n )\n fields.push(`'links', ${nested.sql}`)\n args.push(...nested.args)\n }\n\n return { sql: `json_object(${fields.join(\", \")})`, args }\n}\n\n// Order a parent's links the way the fallback's per-parent trim does: each\n// property sorts nulls last with the requested direction (against the neighbour's\n// JSON properties), then a deterministic identity tiebreak on the neighbour.\nfunction compileExpansionOrder(\n expansion: ObjectExpansion,\n target: string,\n neighborType: string,\n neighborId: string\n): CompiledPredicate {\n const propertyColumn = `${target}.properties`\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n for (const field of expansion.orderBy ?? []) {\n // Relevance is a no-op in the fallback comparator; mirror that by skipping it.\n if (field.kind !== \"property\") continue\n if (field.scalarKind === \"decimal\") {\n throw new ObjectQueryExecutionError(\n \"exact_decimal_not_supported\",\n \"SQLite object storage cannot push down exact decimal expansion sorting\",\n \"$.expand.orderBy\"\n )\n }\n const direction = field.direction === \"desc\" ? \"DESC\" : \"ASC\"\n const path = jsonPath(field.propertyId)\n clauses.push(\n `CASE WHEN ${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null' THEN 1 ELSE 0 END ASC`,\n `${jsonValueExpression(propertyColumn)} ${direction}`\n )\n args.push(path, path, path)\n }\n\n clauses.push(`${neighborType} ASC`, `${neighborId} ASC`)\n return { sql: clauses.join(\", \"), args }\n}\n\nfunction compileSet(\n projectId: string,\n op: ObjectQuerySetOperation,\n inputs: readonly ObjectQuery[],\n ctx: CompileContext\n): CompiledObjectQuery {\n if (inputs.length === 0) {\n const order = compileOrder(identityOrderFields())\n return {\n sql: `\n SELECT *\n FROM ${ctx.source.objectsTable}\n WHERE 1 = 0\n ORDER BY ${order.sql}\n `,\n args: order.args,\n totalSql: \"SELECT 0 as total\",\n totalArgs: [],\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n }\n\n const compiledInputs = inputs.map((input) =>\n compileObjectQueryInternal(projectId, input, exactContext(ctx))\n )\n const identities = compileSetIdentities(op, compiledInputs)\n const order = compileOrder(identityOrderFields())\n const selectedOrder = compileOrder(identityOrderFields(), \"selected\")\n const sql = `\n SELECT selected.*, selected.properties AS _cursor_properties\n FROM (${identities.sql}) AS ids\n JOIN ${ctx.source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = ids.object_type_id\n AND selected.primary_id = ids.primary_id\n ORDER BY ${selectedOrder.sql}\n `\n const args = [...identities.args, projectId, ...selectedOrder.args]\n\n return {\n sql,\n args,\n totalSql: `SELECT COUNT(*) as total FROM (${identities.sql}) AS ids`,\n totalArgs: identities.args,\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileProject(\n projectId: string,\n inputQuery: ObjectQuery,\n properties: readonly string[] | undefined,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, ctx)\n if (!properties) return input\n\n const projection = compileProjectionExpression(properties)\n const inputOrder = compileOrder(input.order.fields, \"input\", \"input._cursor_properties\")\n const outputOrder = compileOrder(input.order.fields, undefined, \"_cursor_properties\")\n\n return {\n sql: `\n SELECT\n input.project_id,\n input.object_type_id,\n input.primary_id,\n ${projection.sql} AS properties,\n input._cursor_properties AS _cursor_properties,\n input.created_at,\n input.updated_at,\n input.version,\n input.last_commit_id${input.vectorProbe ? \", input._vector_score\" : \"\"}\n FROM (${input.sql}) AS input\n ORDER BY ${inputOrder.sql}\n `,\n args: [...projection.args, ...input.args, ...inputOrder.args],\n totalSql: input.totalSql,\n totalArgs: input.totalArgs,\n vectorProbe: input.vectorProbe,\n order: outputOrder,\n hasMoreProbe: input.hasMoreProbe,\n hasMore: input.hasMore,\n trimRows: input.trimRows,\n nextPageToken: input.nextPageToken,\n }\n}\n\nfunction needsLimitProbe(query: ObjectQuery): boolean {\n switch (query.kind) {\n case \"limit\":\n return true\n case \"project\":\n case \"sort\":\n return needsLimitProbe(query.input)\n default:\n return false\n }\n}\n\nfunction hasMoreProbeFor(compiled: CompiledObjectQuery): CompiledHasMoreProbe {\n return (\n compiled.hasMoreProbe ?? {\n sql: compiled.sql,\n args: compiled.args,\n hasMore: (rowCount) => compiled.hasMore(rowCount, undefined),\n }\n )\n}\n\nfunction compileSetIdentities(\n op: ObjectQuerySetOperation,\n inputs: readonly CompiledObjectQuery[]\n): CompiledPredicate {\n const operator = op === \"union\" ? \"UNION\" : op === \"intersect\" ? \"INTERSECT\" : \"EXCEPT\"\n const identitySqls = inputs.map(\n (input) => `SELECT object_type_id, primary_id FROM (${input.sql}) AS input`\n )\n\n return {\n sql: identitySqls.join(` ${operator} `),\n args: inputs.flatMap((input) => input.args),\n }\n}\n\nfunction compileProjectionExpression(properties: readonly string[]): CompiledPredicate {\n if (properties.length === 0) return { sql: \"json('{}')\", args: [] }\n\n return {\n sql: `\n COALESCE(\n (\n SELECT json_group_object(projected.key, ${sqliteJsonEachValue(\"projected\")})\n FROM json_each(input.properties) AS projected\n WHERE projected.key IN (${properties.map(() => \"?\").join(\", \")})\n ),\n json('{}')\n )\n `,\n args: [...properties],\n }\n}\n\n/** json_each exposes JSON booleans as integer SQL values; restore their JSON representation. */\nexport function sqliteJsonEachValue(alias: string): string {\n return `CASE ${alias}.type\n WHEN 'true' THEN json('true')\n WHEN 'false' THEN json('false')\n ELSE ${alias}.value\n END`\n}\n\nfunction compilePredicate(predicate: ObjectQueryPredicate): CompiledPredicate {\n if (\n \"scalarKind\" in predicate &&\n predicate.scalarKind === \"decimal\" &&\n (predicate.op === \"lt\" ||\n predicate.op === \"lte\" ||\n predicate.op === \"gt\" ||\n predicate.op === \"gte\")\n ) {\n throw new ObjectQueryExecutionError(\n \"exact_decimal_not_supported\",\n \"SQLite object storage cannot push down exact decimal predicates\",\n \"$.predicate\"\n )\n }\n\n switch (predicate.op) {\n case \"and\":\n case \"or\": {\n const items = predicate.items.map(compilePredicate)\n const joiner = predicate.op === \"and\" ? \" AND \" : \" OR \"\n return {\n sql: `(${items.map((item) => item.sql).join(joiner)})`,\n args: items.flatMap((item) => item.args),\n }\n }\n case \"not\": {\n const item = compilePredicate(predicate.item)\n return negatePredicate(item)\n }\n case \"eq\":\n return predicate.scalarKind === \"userRef\"\n ? compileUserRefInPredicate(predicate.propertyId, [predicate.value])\n : compileEqualityPredicate(predicate.propertyId, \"eq\", predicate.value)\n case \"neq\":\n return predicate.scalarKind === \"userRef\"\n ? negatePredicate(compileUserRefInPredicate(predicate.propertyId, [predicate.value]))\n : compileEqualityPredicate(predicate.propertyId, \"neq\", predicate.value)\n case \"lt\":\n case \"lte\":\n case \"gt\":\n case \"gte\": {\n const op = sqlComparisonOperator(predicate.op)\n return {\n sql: `${jsonValueExpression()} ${op} ?`,\n args: [jsonPath(predicate.propertyId), sqlValue(predicate.value)],\n }\n }\n case \"in\":\n return predicate.scalarKind === \"userRef\"\n ? compileUserRefInPredicate(predicate.propertyId, predicate.values)\n : compileInPredicate(predicate.propertyId, predicate.values)\n case \"exists\": {\n const sql = `${jsonTypeExpression()} IS NOT NULL`\n const item: CompiledPredicate = { sql, args: [jsonPath(predicate.propertyId)] }\n return predicate.value ? item : negatePredicate(item)\n }\n case \"contains\":\n return predicate.scalarKind === \"userRef\"\n ? compileUserRefContainsPredicate(predicate.propertyId, predicate.value)\n : compileContainsPredicate(predicate.propertyId, predicate.value)\n }\n}\n\n/**\n * User references are JSON objects, so they match on both fields rather than on serialized text,\n * which would depend on key order.\n */\nfunction compileUserRefInPredicate(\n propertyId: string,\n values: readonly unknown[]\n): CompiledPredicate {\n const path = jsonPath(propertyId)\n const ids = values.flatMap((value) => {\n const id = userRefId(value)\n return id === undefined ? [] : [id]\n })\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n if (values.includes(null)) {\n clauses.push(`${jsonTypeExpression()} = 'null'`)\n args.push(path)\n }\n if (ids.length > 0) {\n clauses.push(\n `(${jsonValueExpression()} = 'user' AND ${jsonValueExpression()} IN (${ids.map(() => \"?\").join(\", \")}))`\n )\n args.push(`${path}.type`, `${path}.id`, ...ids)\n }\n if (clauses.length === 0) return { sql: \"0 = 1\", args: [] }\n\n return { sql: `(${clauses.join(\" OR \")})`, args }\n}\n\nfunction compileUserRefContainsPredicate(propertyId: string, value: unknown): CompiledPredicate {\n const id = userRefId(value)\n if (id === undefined) return { sql: \"0 = 1\", args: [] }\n const path = jsonPath(propertyId)\n return {\n sql: `(${jsonTypeExpression()} = 'array' AND EXISTS (SELECT 1 FROM json_each(properties, ?) AS item WHERE item.type = 'object' AND json_extract(item.value, '$.type') = 'user' AND json_extract(item.value, '$.id') = ?))`,\n args: [path, path, id],\n }\n}\n\nfunction userRefId(value: unknown): string | undefined {\n if (typeof value !== \"object\" || value === null) return undefined\n const { type, id } = value as { type?: unknown; id?: unknown }\n return type === \"user\" && typeof id === \"string\" ? id : undefined\n}\n\nfunction negatePredicate(predicate: CompiledPredicate): CompiledPredicate {\n return {\n sql: `(NOT COALESCE((${predicate.sql}), 0))`,\n args: predicate.args,\n }\n}\n\nfunction compileEqualityPredicate(\n propertyId: string,\n op: \"eq\" | \"neq\",\n value: unknown\n): CompiledPredicate {\n const path = jsonPath(propertyId)\n if (value === null) {\n const sql = `${jsonTypeExpression()} = 'null'`\n const item: CompiledPredicate = { sql, args: [path] }\n return op === \"eq\" ? item : negatePredicate(item)\n }\n\n if (op === \"eq\") {\n return {\n sql: `${jsonValueExpression()} = ?`,\n args: [path, sqlValue(value)],\n }\n }\n\n // JS predicate semantics treat missing/null properties as not equal to any\n // non-null scalar. SQL three-valued null logic needs those cases explicit.\n return {\n sql: `(${jsonTypeExpression()} IS NULL OR ${jsonTypeExpression()} = 'null' OR ${jsonValueExpression()} != ?)`,\n args: [path, path, path, sqlValue(value)],\n }\n}\n\nfunction compileInPredicate(propertyId: string, values: readonly unknown[]): CompiledPredicate {\n if (values.length === 0) return { sql: \"0 = 1\", args: [] }\n\n const path = jsonPath(propertyId)\n const nonNullValues = values.filter((value) => value !== null)\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n if (values.length !== nonNullValues.length) {\n clauses.push(`${jsonTypeExpression()} = 'null'`)\n args.push(path)\n }\n\n if (nonNullValues.length > 0) {\n clauses.push(`${jsonValueExpression()} IN (${nonNullValues.map(() => \"?\").join(\", \")})`)\n args.push(path, ...nonNullValues.map(sqlValue))\n }\n\n return {\n sql: `(${clauses.join(\" OR \")})`,\n args,\n }\n}\n\nfunction compileContainsPredicate(propertyId: string, value: unknown): CompiledPredicate {\n const path = jsonPath(propertyId)\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n if (typeof value === \"string\") {\n clauses.push(`(${jsonTypeExpression()} = 'text' AND instr(${jsonValueExpression()}, ?) > 0)`)\n args.push(path, path, value)\n }\n\n clauses.push(\n `(${jsonTypeExpression()} = 'array' AND EXISTS (SELECT 1 FROM json_each(properties, ?) AS item WHERE item.value IS ?))`\n )\n args.push(path, path, sqlValue(value))\n\n if (typeof value === \"string\") {\n clauses.push(\n `(${jsonTypeExpression()} = 'object' AND EXISTS (SELECT 1 FROM json_each(properties, ?) AS item WHERE item.key = ?))`\n )\n args.push(path, path, value)\n }\n\n return { sql: `(${clauses.join(\" OR \")})`, args }\n}\n\nfunction compileTextPredicate(query: string, fields: readonly string[]): CompiledPredicate {\n const terms = tokenize(query)\n if (terms.length === 0) return { sql: \"0 = 1\", args: [] }\n\n const clauses = terms.map(() => {\n const fieldClauses = fields.map(\n () => `instr(lower(COALESCE(CAST(${jsonValueExpression()} AS TEXT), '')), ?) > 0`\n )\n return `(${fieldClauses.join(\" OR \")})`\n })\n const args = terms.flatMap((term) => fields.flatMap((field) => [jsonPath(field), term]))\n\n return { sql: `(${clauses.join(\" AND \")})`, args }\n}\n\nfunction compileScopedTextPredicate(\n query: string,\n fieldsByObjectType: Readonly<Record<string, readonly string[]>> | undefined\n): CompiledPredicate | null {\n const scopedPredicates: CompiledPredicate[] = []\n\n for (const [objectTypeId, fields] of Object.entries(fieldsByObjectType ?? {})) {\n if (fields.length === 0) continue\n const predicate = compileTextPredicate(query, fields)\n scopedPredicates.push({\n sql: `(object_type_id = ? AND ${predicate.sql})`,\n args: [objectTypeId, ...predicate.args],\n })\n }\n\n if (scopedPredicates.length === 0) return null\n\n return {\n sql: `(${scopedPredicates.map((predicate) => predicate.sql).join(\" OR \")})`,\n args: scopedPredicates.flatMap((predicate) => predicate.args),\n }\n}\n\nfunction compileOrder(\n fields: readonly CompiledOrderField[],\n qualifier?: string,\n propertyColumn = \"properties\"\n): CompiledOrder {\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n for (const field of fields) {\n if (field.kind === \"column\") {\n clauses.push(\n `${columnExpression(field.column, qualifier)}${field.binary ? \" COLLATE BINARY\" : \"\"} ${field.direction.toUpperCase()}`\n )\n continue\n }\n\n const direction = field.direction === \"desc\" ? \"DESC\" : \"ASC\"\n const path = jsonPath(field.propertyId)\n clauses.push(\n `CASE WHEN ${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null' THEN 1 ELSE 0 END ASC`,\n `${jsonValueExpression(propertyColumn)} ${direction}`\n )\n args.push(path, path, path)\n }\n\n return { sql: clauses.join(\", \"), args, fields, propertyColumn }\n}\n\nfunction sortOrderFields(fields: readonly ObjectQuerySortField[]): readonly CompiledOrderField[] {\n const orderFields: CompiledOrderField[] = []\n for (const field of fields) {\n if (field.kind !== \"property\") {\n throw new Error(\"[Sixb] SQLite object storage does not support relevance sorting\")\n }\n if (field.scalarKind === \"decimal\") {\n throw new ObjectQueryExecutionError(\n \"exact_decimal_not_supported\",\n \"SQLite object storage cannot push down exact decimal sorting\",\n \"$.sort\"\n )\n }\n\n orderFields.push({\n kind: \"property\",\n propertyId: field.propertyId,\n direction: field.direction === \"desc\" ? \"desc\" : \"asc\",\n })\n }\n orderFields.push(...identityOrderFields())\n return orderFields\n}\n\nfunction identityOrderFields(): readonly CompiledOrderField[] {\n return [\n { kind: \"column\", column: \"object_type_id\", direction: \"asc\" },\n { kind: \"column\", column: \"primary_id\", direction: \"asc\" },\n ]\n}\n\nfunction compileKeysetPredicate(\n fields: readonly CompiledOrderField[],\n cursor: readonly EncodedCursorValue[],\n propertyColumn = \"properties\"\n): CompiledPredicate {\n const disjuncts: CompiledPredicate[] = []\n\n for (let index = 0; index < fields.length; index += 1) {\n const equalityPredicates = fields\n .slice(0, index)\n .map((field, equalityIndex) =>\n compileFieldEquality(field, cursor[equalityIndex], propertyColumn)\n )\n const advancePredicate = compileFieldAfter(fields[index], cursor[index], propertyColumn)\n if (!advancePredicate) continue\n\n const parts = [...equalityPredicates, advancePredicate]\n disjuncts.push({\n sql: `(${parts.map((part) => part.sql).join(\" AND \")})`,\n args: parts.flatMap((part) => part.args),\n })\n }\n\n if (disjuncts.length === 0) return { sql: \"0 = 1\", args: [] }\n\n return {\n sql: `(${disjuncts.map((part) => part.sql).join(\" OR \")})`,\n args: disjuncts.flatMap((part) => part.args),\n }\n}\n\nfunction compileFieldEquality(\n field: CompiledOrderField,\n cursor: EncodedCursorValue,\n propertyColumn = \"properties\"\n): CompiledPredicate {\n if (field.kind === \"column\") {\n return {\n sql: `${columnExpression(field.column)} = ?`,\n args: [sqlValue(cursor.value)],\n }\n }\n\n const path = jsonPath(field.propertyId)\n if (cursor.nullish) {\n return {\n sql: `(${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null')`,\n args: [path, path],\n }\n }\n\n return {\n sql: `(${jsonTypeExpression(propertyColumn)} IS NOT NULL AND ${jsonTypeExpression(propertyColumn)} != 'null' AND ${jsonValueExpression(propertyColumn)} = ?)`,\n args: [path, path, path, sqlValue(cursor.value)],\n }\n}\n\nfunction compileFieldAfter(\n field: CompiledOrderField,\n cursor: EncodedCursorValue,\n propertyColumn = \"properties\"\n): CompiledPredicate | null {\n if (field.kind === \"column\") {\n return {\n sql: `${columnExpression(field.column)} ${field.direction === \"desc\" ? \"<\" : \">\"} ?`,\n args: [sqlValue(cursor.value)],\n }\n }\n\n if (cursor.nullish) return null\n\n const path = jsonPath(field.propertyId)\n const rankSql = `CASE WHEN ${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null' THEN 1 ELSE 0 END`\n const valueOperator = field.direction === \"desc\" ? \"<\" : \">\"\n\n return {\n sql: `(${rankSql} > 0 OR (${rankSql} = 0 AND ${jsonValueExpression(propertyColumn)} ${valueOperator} ?))`,\n args: [path, path, path, path, path, sqlValue(cursor.value)],\n }\n}\n\nfunction encodePageToken(\n row: SqliteObjectQueryPageRow,\n fields: readonly CompiledOrderField[]\n): string {\n const properties = JSON.parse(row._cursor_properties ?? row.properties) as Record<string, unknown>\n const token: EncodedPageToken = {\n version: 1,\n order: fields.map(orderFieldKey),\n values: fields.map((field) => cursorValueForField(row, properties, field)),\n }\n return `${PAGE_TOKEN_PREFIX}${Buffer.from(JSON.stringify(token)).toString(\"base64url\")}`\n}\n\nfunction decodePageToken(\n token: string,\n fields: readonly CompiledOrderField[]\n): readonly EncodedCursorValue[] {\n if (!token.startsWith(PAGE_TOKEN_PREFIX)) {\n throwInvalidPageToken(\"Invalid SQLite object query page token\")\n }\n\n const raw = token.slice(PAGE_TOKEN_PREFIX.length)\n let decoded: unknown\n try {\n decoded = JSON.parse(Buffer.from(raw, \"base64url\").toString(\"utf8\"))\n } catch {\n throwInvalidPageToken(\"Invalid SQLite object query page token\")\n }\n\n if (!isEncodedPageToken(decoded)) {\n throwInvalidPageToken(\"Invalid SQLite object query page token\")\n }\n\n const expectedOrder = fields.map(orderFieldKey)\n if (\n decoded.order.length !== expectedOrder.length ||\n decoded.order.some((field, index) => field !== expectedOrder[index])\n ) {\n throwInvalidPageToken(\"SQLite object query page token does not match query order\")\n }\n\n return decoded.values\n}\n\nfunction throwInvalidPageToken(message: string): never {\n throw new ObjectQueryExecutionError(\"invalid_page_token\", message, \"$.pageToken\")\n}\n\nfunction isEncodedPageToken(value: unknown): value is EncodedPageToken {\n if (!isPlainObject(value)) return false\n if (value.version !== 1) return false\n if (!Array.isArray(value.order) || value.order.some((item) => typeof item !== \"string\")) {\n return false\n }\n if (!Array.isArray(value.values)) return false\n return value.values.every(\n (item) =>\n isPlainObject(item) &&\n typeof item.nullish === \"boolean\" &&\n (item.nullish || Object.hasOwn(item, \"value\"))\n )\n}\n\nfunction cursorValueForField(\n row: SqliteObjectQueryPageRow,\n properties: Record<string, unknown>,\n field: CompiledOrderField\n): EncodedCursorValue {\n const value =\n field.kind === \"column\"\n ? field.column === \"object_type_id\"\n ? row.object_type_id\n : row.primary_id\n : properties[field.propertyId]\n\n return value === null || value === undefined ? { nullish: true } : { nullish: false, value }\n}\n\nfunction orderFieldKey(field: CompiledOrderField): string {\n return field.kind === \"column\"\n ? `column:${field.column}:${field.direction}`\n : `property:${field.propertyId}:${field.direction}`\n}\n\nfunction columnExpression(\n column: \"object_type_id\" | \"primary_id\" | \"_vector_score\",\n qualifier?: string\n): string {\n return qualifier ? `${qualifier}.${column}` : column\n}\n\nfunction jsonValueExpression(column = \"properties\"): string {\n return `json_extract(${column}, ?)`\n}\n\nfunction jsonTypeExpression(column = \"properties\"): string {\n return `json_type(${column}, ?)`\n}\n\nfunction jsonPath(propertyId: string): string {\n return `$.\"${propertyId.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`\n}\n\nfunction sqlValue(value: unknown): SqliteValue {\n if (value instanceof Date) return value.toISOString()\n if (typeof value === \"boolean\") return value ? 1 : 0\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n value === null\n ) {\n return value\n }\n return JSON.stringify(value)\n}\n\nfunction tokenize(query: string): string[] {\n return query\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((term) => term.length > 0)\n}\n\nfunction sqlComparisonOperator(op: \"lt\" | \"lte\" | \"gt\" | \"gte\"): \"<\" | \"<=\" | \">\" | \">=\" {\n switch (op) {\n case \"lt\":\n return \"<\"\n case \"lte\":\n return \"<=\"\n case \"gt\":\n return \">\"\n case \"gte\":\n return \">=\"\n }\n}\n\nfunction identityRows<T>(rows: readonly T[]): readonly T[] {\n return rows\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n",
39
+ "import {\n type ObjectExpansion,\n type ObjectQuery,\n ObjectQueryExecutionError,\n type ObjectQueryPredicate,\n type ObjectQuerySetOperation,\n type ObjectQuerySortField,\n} from \"@sixb/core\"\nimport {\n hasVectorProfile,\n isVectorProfileQuery,\n normalizeVector,\n vectorSearchCandidateLimit,\n} from \"@sixb/core/internal/query\"\nimport { encodeSqliteVector } from \"../vector-encoding\"\n\nexport type SqliteValue = string | number | bigint | boolean | null | Uint8Array\n\nexport interface SqliteObjectQueryPageRow {\n object_type_id: string\n primary_id: string\n properties: string\n _cursor_properties?: string\n}\n\nexport interface CompiledObjectQuery {\n vectorProbe?: {\n sql: string\n args: SqliteValue[]\n limit: number\n /** Maximum returned rows and total before the outermost limit, respectively. */\n rowLimit: number\n totalLimit: number\n }\n sql: string\n args: SqliteValue[]\n totalSql: string\n totalArgs: SqliteValue[]\n order: CompiledOrder\n hasMoreProbe?: CompiledHasMoreProbe\n hasMore(rowCount: number, total?: number): boolean\n trimRows<T>(rows: readonly T[]): readonly T[]\n nextPageToken(rows: readonly SqliteObjectQueryPageRow[], rowCount: number): string | undefined\n}\n\ninterface CompiledHasMoreProbe {\n sql: string\n args: SqliteValue[]\n hasMore(rowCount: number): boolean\n}\n\ninterface CompileContext {\n probeLimit: boolean\n source: SqliteObjectQuerySource\n}\n\ninterface CompiledPredicate {\n sql: string\n args: SqliteValue[]\n}\n\ninterface CompiledOrder {\n sql: string\n args: SqliteValue[]\n fields: readonly CompiledOrderField[]\n propertyColumn: string\n}\n\ntype CompiledOrderField =\n | {\n kind: \"property\"\n propertyId: string\n direction: \"asc\" | \"desc\"\n }\n | {\n kind: \"column\"\n column: \"object_type_id\" | \"primary_id\" | \"_vector_score\"\n binary?: boolean\n direction: \"asc\" | \"desc\"\n }\n\ninterface EncodedPageToken {\n version: 1\n order: readonly string[]\n values: readonly EncodedCursorValue[]\n}\n\ninterface EncodedCursorValue {\n nullish: boolean\n value?: unknown\n}\n\nconst PAGE_TOKEN_PREFIX = \"keyset:\"\n\n// Fallback fanout cap for a \"many\" expansion that arrives without an explicit\n// limit. The core executor normally bakes a limit in before pushdown; this only\n// bounds the degenerate uncapped case. Mirrors the PostgreSQL compiler.\nconst DEFAULT_EXPANSION_FANOUT = 1_000\n\nexport function compileObjectQuery(\n projectId: string,\n query: ObjectQuery,\n options: { includeTotal?: boolean; source?: SqliteObjectQuerySource } = {}\n): CompiledObjectQuery {\n if (hasVectorProfile(query) && !isVectorProfileQuery(query)) {\n throw new ObjectQueryExecutionError(\n \"unsupported_vector_composition\",\n \"Vector search supports one profile with filters, traversals or sets before ranking and limit/project after.\"\n )\n }\n const source = options.source ?? DEFAULT_OBJECT_QUERY_SOURCE\n const ctx: CompileContext = { probeLimit: options.includeTotal === false, source }\n return source.wrapQuery(compileObjectQueryInternal(projectId, query, ctx))\n}\n\n/** Physical relations used by the object-query compiler. */\nexport interface SqliteObjectQuerySource {\n readonly objectsTable: string\n readonly linksTable: string\n readonly objectPropertyPermissionsTable?: string\n /** Wrap a terminal SELECT without its own WITH clause; the selected source owns the only WITH. */\n wrapStatement(\n sql: string,\n args?: readonly SqliteValue[]\n ): {\n readonly sql: string\n readonly args: readonly SqliteValue[]\n }\n wrapQuery(query: CompiledObjectQuery): CompiledObjectQuery\n}\n\nexport const DEFAULT_OBJECT_QUERY_SOURCE: SqliteObjectQuerySource = {\n objectsTable: \"objects\",\n linksTable: \"links\",\n wrapStatement: (sql, args = []) => ({ sql, args: [...args] }),\n wrapQuery: (query) => query,\n}\n\nfunction exactContext(ctx: CompileContext): CompileContext {\n return ctx.probeLimit ? { ...ctx, probeLimit: false } : ctx\n}\n\nfunction compileObjectQueryInternal(\n projectId: string,\n query: ObjectQuery,\n ctx: CompileContext\n): CompiledObjectQuery {\n switch (query.kind) {\n case \"start\":\n return compileStart(projectId, query, ctx)\n case \"refs\":\n return compileRefs(projectId, query, ctx)\n case \"filter\":\n return compileFilter(projectId, query.input, query.predicate, ctx)\n case \"sort\":\n return compileSort(projectId, query.input, query.fields, ctx)\n case \"limit\":\n return compileLimit(projectId, query.input, query.limit, ctx)\n case \"page\":\n return compilePage(projectId, query.input, query.pageSize, query.pageToken, ctx)\n case \"traverse\":\n return compileTraversal(\n projectId,\n query.input,\n query.linkId,\n query.direction,\n query.sourceObjectTypeId,\n ctx\n )\n case \"set\":\n return compileSet(projectId, query.op, query.inputs, ctx)\n case \"project\":\n return compileProject(projectId, query.input, query.properties, ctx)\n case \"text\":\n return compileText(\n projectId,\n query.input,\n query.query,\n query.fields,\n query.fieldsByObjectType,\n ctx\n )\n case \"expand\":\n return compileExpand(projectId, query.input, query.expansions, ctx)\n case \"vector\":\n return compileVector(projectId, query, ctx)\n }\n}\n\nfunction compileVector(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"vector\" }>,\n ctx: CompileContext\n): CompiledObjectQuery {\n if (\n typeof query.vector === \"string\" ||\n !isVectorProfileQuery(query) ||\n !query.configuration ||\n !Number.isSafeInteger(query.k) ||\n query.k < 1 ||\n query.k > 1000 ||\n query.vector.length < 1 ||\n query.vector.length > 16000\n ) {\n throw new ObjectQueryExecutionError(\n \"invalid_vector_query\",\n \"A validated named vector profile is required.\"\n )\n }\n const input = compileObjectQueryInternal(projectId, query.input, exactContext(ctx))\n const permissions = ctx.source.objectPropertyPermissionsTable\n const permissionJoin = permissions\n ? `CROSS JOIN (\n SELECT project_id, object_type_id, primary_id, json_group_array(property_id) AS property_ids\n FROM ${permissions}\n GROUP BY project_id, object_type_id, primary_id\n ) AS vector_permissions ON vector_permissions.project_id = vectors.project_id\n AND vector_permissions.object_type_id = vectors.object_type_id\n AND vector_permissions.primary_id = vectors.primary_id`\n : \"\"\n const authorized = permissions\n ? `AND NOT EXISTS (\n SELECT 1 FROM json_each(vectors.source) AS required\n WHERE required.value NOT IN (SELECT value FROM json_each(vector_permissions.property_ids))\n )`\n : \"\"\n const candidates = `FROM (${input.sql}) AS input\n CROSS JOIN object_vectors AS vectors ON vectors.project_id = input.project_id\n AND vectors.object_type_id = input.object_type_id AND vectors.primary_id = input.primary_id\n ${permissionJoin}\n WHERE vectors.profile = ? AND vectors.configuration = ?\n AND length(vectors.embedding) / 4 = ? ${authorized}`\n const candidateArgs = [...input.args, query.profile!, query.configuration, query.vector.length]\n // Bound distance work, not just returned rows. Exceeding the envelope fails before ranking.\n const limit = vectorSearchCandidateLimit(query.vector.length)\n const values = normalizeVector(query.vector, query.vector.length)\n const order = compileOrder([\n { kind: \"column\", column: \"_vector_score\", direction: \"desc\" },\n ...identityOrderFields().map((field) => ({ ...field, binary: true })),\n ])\n const rankedOrder = compileOrder(order.fields, \"ranked\")\n // Materialize only bounded, authorized candidates once. CASE prevents distance evaluation\n // above the envelope; the reader rejects the count before exposing any rows or scores.\n const sql = `SELECT stored.project_id, stored.object_type_id, stored.primary_id,\n stored.properties, stored.properties AS _cursor_properties,\n stored.created_at, stored.updated_at, stored.version, stored.last_commit_id,\n ranked._vector_candidate_count, ranked._vector_score\n FROM (\n WITH _sixb_vector_candidates AS MATERIALIZED (\n SELECT input.project_id, input.object_type_id, input.primary_id,\n vectors.embedding AS _vector_embedding ${candidates} LIMIT ?\n ), _sixb_vector_budget AS (\n SELECT COUNT(*) AS _vector_candidate_count FROM _sixb_vector_candidates\n )\n SELECT input.project_id, input.object_type_id, input.primary_id, budget._vector_candidate_count,\n CASE WHEN budget._vector_candidate_count <= ?\n THEN max(-1, min(1, 1 - vec_distance_cosine(input._vector_embedding, ?)))\n END AS _vector_score\n FROM _sixb_vector_candidates AS input CROSS JOIN _sixb_vector_budget AS budget\n ORDER BY ${order.sql} LIMIT ?\n ) AS ranked CROSS JOIN ${ctx.source.objectsTable} AS stored\n ON stored.project_id = ranked.project_id AND stored.object_type_id = ranked.object_type_id\n AND stored.primary_id = ranked.primary_id\n ORDER BY ${rankedOrder.sql}`\n const args = [...candidateArgs, limit + 1, limit, encodeSqliteVector(values), query.k]\n return {\n sql,\n args,\n // Top-k cardinality depends on eligibility, not distances or ranking.\n totalSql: `SELECT COUNT(*) AS total FROM (SELECT 1 ${candidates} LIMIT ?) AS eligible`,\n totalArgs: [...candidateArgs, query.k],\n order,\n vectorProbe: {\n sql: `SELECT COUNT(*) AS total FROM (SELECT 1 ${candidates} LIMIT ?) AS candidates`,\n args: [...candidateArgs, limit + 1],\n limit,\n rowLimit: query.k,\n totalLimit: query.k,\n },\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileStart(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"start\" }>,\n ctx: CompileContext\n): CompiledObjectQuery {\n if (query.includeSubtypes === true) {\n throw new Error(\"[Sixb] SQLite object storage does not support start.includeSubtypes\")\n }\n\n const order = compileOrder(identityOrderFields())\n const sql = `\n SELECT *, properties AS _cursor_properties\n FROM ${ctx.source.objectsTable}\n WHERE project_id = ? AND object_type_id = ?\n ORDER BY ${order.sql}\n `\n const args = [projectId, query.objectTypeId, ...order.args]\n\n return {\n sql,\n args,\n totalSql: `SELECT COUNT(*) as total FROM ${ctx.source.objectsTable} WHERE project_id = ? AND object_type_id = ?`,\n totalArgs: [projectId, query.objectTypeId],\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileRefs(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"refs\" }>,\n ctx: CompileContext\n): CompiledObjectQuery {\n if (query.refs.length === 0) {\n throw new Error(\"[Sixb] SQLite object storage requires at least one ref\")\n }\n\n const order = compileOrder(identityOrderFields())\n const selectedOrder = compileOrder(identityOrderFields(), \"selected\")\n const refsJson = JSON.stringify(query.refs)\n const requested = `\n SELECT DISTINCT\n json_extract(ref.value, '$.objectTypeId') AS object_type_id,\n json_extract(ref.value, '$.primaryId') AS primary_id\n FROM json_each(?) AS ref\n `\n const sql = `\n SELECT selected.*, selected.properties AS _cursor_properties\n FROM (${requested}) AS requested\n JOIN ${ctx.source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = requested.object_type_id\n AND selected.primary_id = requested.primary_id\n ORDER BY ${selectedOrder.sql}\n `\n\n return {\n sql,\n args: [refsJson, projectId, ...selectedOrder.args],\n totalSql: `\n SELECT COUNT(*) AS total\n FROM (${requested}) AS requested\n JOIN ${ctx.source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = requested.object_type_id\n AND selected.primary_id = requested.primary_id\n `,\n totalArgs: [refsJson, projectId],\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileFilter(\n projectId: string,\n inputQuery: ObjectQuery,\n predicateNode: ObjectQueryPredicate,\n ctx: CompileContext\n): CompiledObjectQuery {\n const predicate = compilePredicate(predicateNode)\n return compileWhere(projectId, inputQuery, predicate, ctx)\n}\n\nfunction compileWhere(\n projectId: string,\n inputQuery: ObjectQuery,\n predicate: CompiledPredicate,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const sql = `\n SELECT *\n FROM (${input.sql}) AS input\n WHERE ${predicate.sql}\n ORDER BY ${input.order.sql}\n `\n\n return {\n sql,\n args: [...input.args, ...predicate.args, ...input.order.args],\n totalSql: `\n SELECT COUNT(*) as total\n FROM (${input.sql}) AS input\n WHERE ${predicate.sql}\n `,\n totalArgs: [...input.args, ...predicate.args],\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileText(\n projectId: string,\n inputQuery: ObjectQuery,\n query: string,\n fields: readonly string[] | undefined,\n fieldsByObjectType: Readonly<Record<string, readonly string[]>> | undefined,\n ctx: CompileContext\n): CompiledObjectQuery {\n const predicate =\n fields && fields.length > 0\n ? compileTextPredicate(query, fields)\n : compileScopedTextPredicate(query, fieldsByObjectType)\n\n if (!predicate) {\n throw new Error(\"[Sixb] SQLite object text search requires fields or resolved text defaults\")\n }\n return compileWhere(projectId, inputQuery, predicate, ctx)\n}\n\nfunction compileSort(\n projectId: string,\n inputQuery: ObjectQuery,\n fields: readonly ObjectQuerySortField[],\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const probeInput =\n ctx.probeLimit && needsLimitProbe(inputQuery)\n ? compileObjectQueryInternal(projectId, inputQuery, ctx)\n : undefined\n const order = compileOrder(sortOrderFields(fields))\n\n return {\n sql: `\n SELECT\n input.project_id,\n input.object_type_id,\n input.primary_id,\n input.properties,\n input.properties AS _cursor_properties,\n input.created_at,\n input.updated_at,\n input.version,\n input.last_commit_id${input.vectorProbe ? \", input._vector_score\" : \"\"}\n FROM (${input.sql}) AS input\n ORDER BY ${order.sql}\n `,\n args: [...input.args, ...order.args],\n totalSql: input.totalSql,\n totalArgs: input.totalArgs,\n order,\n hasMoreProbe: probeInput ? hasMoreProbeFor(probeInput) : input.hasMoreProbe,\n hasMore: input.hasMore,\n trimRows: input.trimRows,\n nextPageToken: input.nextPageToken,\n }\n}\n\nfunction compileLimit(\n projectId: string,\n inputQuery: ObjectQuery,\n rawLimit: number,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const limit = Math.max(0, rawLimit)\n const rowLimit = ctx.probeLimit ? limit + 1 : limit\n\n return {\n sql: `\n SELECT *\n FROM (${input.sql}) AS input\n ORDER BY ${input.order.sql}\n LIMIT ?\n `,\n args: [...input.args, ...input.order.args, rowLimit],\n totalSql: `\n SELECT COUNT(*) as total\n FROM (${input.sql}) AS input\n `,\n totalArgs: input.args,\n vectorProbe: input.vectorProbe\n ? {\n ...input.vectorProbe,\n rowLimit: Math.min(input.vectorProbe.rowLimit, rowLimit),\n totalLimit: input.vectorProbe.rowLimit,\n }\n : undefined,\n order: input.order,\n hasMore: (rowCount, total) =>\n total === undefined ? ctx.probeLimit && rowCount > limit : limit < total,\n trimRows: ctx.probeLimit ? (rows) => rows.slice(0, limit) : identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compilePage(\n projectId: string,\n inputQuery: ObjectQuery,\n rawPageSize: number,\n pageToken: string | undefined,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const pageSize = Math.max(0, rawPageSize)\n const cursor = pageToken ? decodePageToken(pageToken, input.order.fields) : undefined\n const cursorPredicate = cursor\n ? compileKeysetPredicate(input.order.fields, cursor, input.order.propertyColumn)\n : undefined\n const whereSql = cursorPredicate ? `WHERE ${cursorPredicate.sql}` : \"\"\n\n return {\n sql: `\n SELECT *\n FROM (${input.sql}) AS input\n ${whereSql}\n ORDER BY ${input.order.sql}\n LIMIT ?\n `,\n args: [...input.args, ...(cursorPredicate?.args ?? []), ...input.order.args, pageSize + 1],\n totalSql: `\n SELECT COUNT(*) as total\n FROM (${input.sql}) AS input\n `,\n totalArgs: input.args,\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMore: (rowCount) => rowCount > pageSize,\n trimRows: (rows) => rows.slice(0, pageSize),\n nextPageToken: (rows, rowCount) => {\n if (rowCount <= pageSize || rows.length === 0) return undefined\n return encodePageToken(rows[rows.length - 1], input.order.fields)\n },\n }\n}\n\nfunction compileTraversal(\n projectId: string,\n inputQuery: ObjectQuery,\n linkId: string,\n direction: \"outgoing\" | \"incoming\",\n sourceObjectTypeId: string | undefined,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const outputAlias = direction === \"outgoing\" ? \"target_object\" : \"source_object\"\n const joinSql =\n direction === \"outgoing\"\n ? `\n JOIN ${ctx.source.linksTable} AS edge\n ON edge.project_id = input.project_id\n AND edge.source_type_id = input.object_type_id\n AND edge.source_id = input.primary_id\n AND edge.link_id = ?\n JOIN ${ctx.source.objectsTable} AS target_object\n ON target_object.project_id = edge.project_id\n AND target_object.object_type_id = edge.target_type_id\n AND target_object.primary_id = edge.target_id\n `\n : `\n JOIN ${ctx.source.linksTable} AS edge\n ON edge.project_id = input.project_id\n AND edge.target_type_id = input.object_type_id\n AND edge.target_id = input.primary_id\n AND edge.link_id = ?${sourceObjectTypeId === undefined ? \"\" : \"\\n AND edge.source_type_id = ?\"}\n JOIN ${ctx.source.objectsTable} AS source_object\n ON source_object.project_id = edge.project_id\n AND source_object.object_type_id = edge.source_type_id\n AND source_object.primary_id = edge.source_id\n `\n const order = compileOrder(identityOrderFields())\n const qualifiedOrder = compileOrder(identityOrderFields(), outputAlias)\n const sql = `\n SELECT DISTINCT ${outputAlias}.*, ${outputAlias}.properties AS _cursor_properties\n FROM (${input.sql}) AS input\n ${joinSql}\n ORDER BY ${qualifiedOrder.sql}\n `\n const args = [\n ...input.args,\n linkId,\n ...(sourceObjectTypeId === undefined ? [] : [sourceObjectTypeId]),\n ...qualifiedOrder.args,\n ]\n\n return {\n sql,\n args,\n totalSql: `SELECT COUNT(*) as total FROM (${sql}) AS traversed`,\n totalArgs: args,\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\n/** Correlation handle for an expansion: the parent row's identity columns. */\ninterface ExpansionParent {\n project: string\n type: string\n id: string\n}\n\n// `expand` attaches linked objects to each result row without changing which\n// objects match (unlike `traverse`, which pivots to the targets). Each expansion\n// becomes a correlated subquery that hydrates its links into a JSON value, and\n// all expansions are folded into one `_expand` object column the row mapper reads\n// back. The input set is otherwise untouched, so pagination/order pass through.\nfunction compileExpand(\n projectId: string,\n inputQuery: ObjectQuery,\n expansions: readonly ObjectExpansion[],\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const expand = compileExpansionsObject(\n expansions,\n { project: \"input.project_id\", type: \"input.object_type_id\", id: \"input.primary_id\" },\n \"\",\n ctx\n )\n const inputOrder = compileOrder(input.order.fields, \"input\", \"input._cursor_properties\")\n const sql = `\n SELECT input.*, ${expand.sql} AS _expand\n FROM (${input.sql}) AS input\n ORDER BY ${inputOrder.sql}\n `\n\n return {\n sql,\n args: [...expand.args, ...input.args, ...inputOrder.args],\n totalSql: input.totalSql,\n totalArgs: input.totalArgs,\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMoreProbe: input.hasMoreProbe,\n hasMore: input.hasMore,\n trimRows: input.trimRows,\n nextPageToken: input.nextPageToken,\n }\n}\n\n// `json_object(linkId, value, ...)` over a set of expansions sharing one parent.\n// Link ids are user data, so they ride as parameters. Each value is a correlated\n// subquery whose JSON subtype is lost crossing the subquery boundary, so it is\n// re-parsed with `json(...)` to embed as nested JSON rather than a quoted string.\n// Used both for the outer `_expand` column and for each child's nested `links`.\nfunction compileExpansionsObject(\n expansions: readonly ObjectExpansion[],\n parent: ExpansionParent,\n pathPrefix: string,\n ctx: CompileContext\n): CompiledPredicate {\n const parts: string[] = []\n const args: SqliteValue[] = []\n expansions.forEach((expansion, index) => {\n const path = pathPrefix === \"\" ? `${index}` : `${pathPrefix}_${index}`\n const value = compileExpansionValue(expansion, parent, path, ctx)\n parts.push(\"?\", `json(${value.sql})`)\n args.push(expansion.linkId, ...value.args)\n })\n return { sql: `json_object(${parts.join(\", \")})`, args }\n}\n\n// One expansion's hydrated value. `row_number()` numbers a parent's links by the\n// order from `compileExpansionOrder` (the expansion's `orderBy` against the target\n// object's properties, then an identity tiebreak); `WHERE _ord <= N` keeps the\n// top-N per parent in-DB; each retained neighbour becomes a JSON object; and the\n// value is an ordered array (\"many\") or the first element or null (\"one\"). The\n// cardinality is core-resolved before pushdown.\nfunction compileExpansionValue(\n expansion: ObjectExpansion,\n parent: ExpansionParent,\n path: string,\n ctx: CompileContext\n): CompiledPredicate {\n const edge = `edge_${path}`\n const target = `tgt_${path}`\n const ranked = `ranked_${path}`\n const incoming = expansion.direction === \"incoming\"\n // The hydrated neighbour is the link target (outgoing) or source (incoming);\n // the parent sits on the opposite end, mirroring `compileTraversal`.\n const neighborType = incoming ? `${edge}.source_type_id` : `${edge}.target_type_id`\n const neighborId = incoming ? `${edge}.source_id` : `${edge}.target_id`\n const parentType = incoming ? `${edge}.target_type_id` : `${edge}.source_type_id`\n const parentId = incoming ? `${edge}.target_id` : `${edge}.source_id`\n\n const child = compileExpansionChildJson(expansion, edge, target, path, ctx)\n const order = compileExpansionOrder(expansion, target, neighborType, neighborId)\n\n const whereParts = [\n `${edge}.project_id = ${parent.project}`,\n `${parentType} = ${parent.type}`,\n `${parentId} = ${parent.id}`,\n `${edge}.link_id = ?`,\n ]\n const whereArgs: SqliteValue[] = [expansion.linkId]\n if (incoming && expansion.sourceObjectTypeId !== undefined) {\n whereParts.push(`${edge}.source_type_id = ?`)\n whereArgs.push(expansion.sourceObjectTypeId)\n }\n\n const inner = `\n SELECT ${child.sql} AS elem, row_number() OVER (ORDER BY ${order.sql}) AS _ord\n FROM ${ctx.source.linksTable} AS ${edge}\n JOIN ${ctx.source.objectsTable} AS ${target}\n ON ${target}.project_id = ${edge}.project_id\n AND ${target}.object_type_id = ${neighborType}\n AND ${target}.primary_id = ${neighborId}\n WHERE ${whereParts.join(\" AND \")}\n `\n const innerArgs = [...child.args, ...order.args, ...whereArgs]\n\n if (expansion.cardinality === \"one\") {\n return {\n sql: `(SELECT ${ranked}.elem FROM (${inner}) AS ${ranked} WHERE ${ranked}._ord = 1)`,\n args: innerArgs,\n }\n }\n\n // The fanout cap is baked into `limit` by the core executor before pushdown.\n // Each element is re-parsed with `json(...)` so the aggregate embeds objects\n // rather than the quoted JSON text the subquery column hands back.\n const limit = expansion.limit ?? DEFAULT_EXPANSION_FANOUT\n return {\n sql: `COALESCE((SELECT json_group_array(json(${ranked}.elem) ORDER BY ${ranked}._ord) FROM (${inner}) AS ${ranked} WHERE ${ranked}._ord <= ?), '[]')`,\n args: [...innerArgs, limit],\n }\n}\n\n// Build one hydrated neighbour as an `ExpandedObjectRow`-shaped JSON object. The\n// JSON-valued columns (`properties`, the edge's `linkProperties`) are re-parsed\n// with `json(...)` so they embed as JSON rather than strings; `linkProperties`\n// always rides along (the mapper drops it when null/empty), and nested expansions\n// recurse under `links`, correlated on this neighbour.\nfunction compileExpansionChildJson(\n expansion: ObjectExpansion,\n edge: string,\n target: string,\n path: string,\n ctx: CompileContext\n): CompiledPredicate {\n const fields = [\n `'projectId', ${target}.project_id`,\n `'objectTypeId', ${target}.object_type_id`,\n `'primaryId', ${target}.primary_id`,\n `'properties', json(${target}.properties)`,\n `'createdAt', ${target}.created_at`,\n `'updatedAt', ${target}.updated_at`,\n `'version', ${target}.version`,\n `'lastCommitId', ${target}.last_commit_id`,\n `'linkProperties', json(${edge}.properties)`,\n ]\n const args: SqliteValue[] = []\n\n if (expansion.expand && expansion.expand.length > 0) {\n const nested = compileExpansionsObject(\n expansion.expand,\n {\n project: `${target}.project_id`,\n type: `${target}.object_type_id`,\n id: `${target}.primary_id`,\n },\n path,\n ctx\n )\n fields.push(`'links', ${nested.sql}`)\n args.push(...nested.args)\n }\n\n return { sql: `json_object(${fields.join(\", \")})`, args }\n}\n\n// Order a parent's links the way the fallback's per-parent trim does: each\n// property sorts nulls last with the requested direction (against the neighbour's\n// JSON properties), then a deterministic identity tiebreak on the neighbour.\nfunction compileExpansionOrder(\n expansion: ObjectExpansion,\n target: string,\n neighborType: string,\n neighborId: string\n): CompiledPredicate {\n const propertyColumn = `${target}.properties`\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n for (const field of expansion.orderBy ?? []) {\n // Relevance is a no-op in the fallback comparator; mirror that by skipping it.\n if (field.kind !== \"property\") continue\n if (field.scalarKind === \"decimal\") {\n throw new ObjectQueryExecutionError(\n \"exact_decimal_not_supported\",\n \"SQLite object storage cannot push down exact decimal expansion sorting\",\n \"$.expand.orderBy\"\n )\n }\n const direction = field.direction === \"desc\" ? \"DESC\" : \"ASC\"\n const path = jsonPath(field.propertyId)\n clauses.push(\n `CASE WHEN ${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null' THEN 1 ELSE 0 END ASC`,\n `${jsonValueExpression(propertyColumn)} ${direction}`\n )\n args.push(path, path, path)\n }\n\n clauses.push(`${neighborType} ASC`, `${neighborId} ASC`)\n return { sql: clauses.join(\", \"), args }\n}\n\nfunction compileSet(\n projectId: string,\n op: ObjectQuerySetOperation,\n inputs: readonly ObjectQuery[],\n ctx: CompileContext\n): CompiledObjectQuery {\n if (inputs.length === 0) {\n const order = compileOrder(identityOrderFields())\n return {\n sql: `\n SELECT *\n FROM ${ctx.source.objectsTable}\n WHERE 1 = 0\n ORDER BY ${order.sql}\n `,\n args: order.args,\n totalSql: \"SELECT 0 as total\",\n totalArgs: [],\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n }\n\n const compiledInputs = inputs.map((input) =>\n compileObjectQueryInternal(projectId, input, exactContext(ctx))\n )\n const identities = compileSetIdentities(op, compiledInputs)\n const order = compileOrder(identityOrderFields())\n const selectedOrder = compileOrder(identityOrderFields(), \"selected\")\n const sql = `\n SELECT selected.*, selected.properties AS _cursor_properties\n FROM (${identities.sql}) AS ids\n JOIN ${ctx.source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = ids.object_type_id\n AND selected.primary_id = ids.primary_id\n ORDER BY ${selectedOrder.sql}\n `\n const args = [...identities.args, projectId, ...selectedOrder.args]\n\n return {\n sql,\n args,\n totalSql: `SELECT COUNT(*) as total FROM (${identities.sql}) AS ids`,\n totalArgs: identities.args,\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileProject(\n projectId: string,\n inputQuery: ObjectQuery,\n properties: readonly string[] | undefined,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, ctx)\n if (!properties) return input\n\n const projection = compileProjectionExpression(properties)\n const inputOrder = compileOrder(input.order.fields, \"input\", \"input._cursor_properties\")\n const outputOrder = compileOrder(input.order.fields, undefined, \"_cursor_properties\")\n\n return {\n sql: `\n SELECT\n input.project_id,\n input.object_type_id,\n input.primary_id,\n ${projection.sql} AS properties,\n input._cursor_properties AS _cursor_properties,\n input.created_at,\n input.updated_at,\n input.version,\n input.last_commit_id${input.vectorProbe ? \", input._vector_score, input._vector_candidate_count\" : \"\"}\n FROM (${input.sql}) AS input\n ORDER BY ${inputOrder.sql}\n `,\n args: [...projection.args, ...input.args, ...inputOrder.args],\n totalSql: input.totalSql,\n totalArgs: input.totalArgs,\n vectorProbe: input.vectorProbe,\n order: outputOrder,\n hasMoreProbe: input.hasMoreProbe,\n hasMore: input.hasMore,\n trimRows: input.trimRows,\n nextPageToken: input.nextPageToken,\n }\n}\n\nfunction needsLimitProbe(query: ObjectQuery): boolean {\n switch (query.kind) {\n case \"limit\":\n return true\n case \"project\":\n case \"sort\":\n return needsLimitProbe(query.input)\n default:\n return false\n }\n}\n\nfunction hasMoreProbeFor(compiled: CompiledObjectQuery): CompiledHasMoreProbe {\n return (\n compiled.hasMoreProbe ?? {\n sql: compiled.sql,\n args: compiled.args,\n hasMore: (rowCount) => compiled.hasMore(rowCount, undefined),\n }\n )\n}\n\nfunction compileSetIdentities(\n op: ObjectQuerySetOperation,\n inputs: readonly CompiledObjectQuery[]\n): CompiledPredicate {\n const operator = op === \"union\" ? \"UNION\" : op === \"intersect\" ? \"INTERSECT\" : \"EXCEPT\"\n const identitySqls = inputs.map(\n (input) => `SELECT object_type_id, primary_id FROM (${input.sql}) AS input`\n )\n\n return {\n sql: identitySqls.join(` ${operator} `),\n args: inputs.flatMap((input) => input.args),\n }\n}\n\nfunction compileProjectionExpression(properties: readonly string[]): CompiledPredicate {\n if (properties.length === 0) return { sql: \"json('{}')\", args: [] }\n\n return {\n sql: `\n COALESCE(\n (\n SELECT json_group_object(projected.key, ${sqliteJsonEachValue(\"projected\")})\n FROM json_each(input.properties) AS projected\n WHERE projected.key IN (${properties.map(() => \"?\").join(\", \")})\n ),\n json('{}')\n )\n `,\n args: [...properties],\n }\n}\n\n/** json_each exposes JSON booleans as integer SQL values; restore their JSON representation. */\nexport function sqliteJsonEachValue(alias: string): string {\n return `CASE ${alias}.type\n WHEN 'true' THEN json('true')\n WHEN 'false' THEN json('false')\n ELSE ${alias}.value\n END`\n}\n\nfunction compilePredicate(predicate: ObjectQueryPredicate): CompiledPredicate {\n if (\n \"scalarKind\" in predicate &&\n predicate.scalarKind === \"decimal\" &&\n (predicate.op === \"lt\" ||\n predicate.op === \"lte\" ||\n predicate.op === \"gt\" ||\n predicate.op === \"gte\")\n ) {\n throw new ObjectQueryExecutionError(\n \"exact_decimal_not_supported\",\n \"SQLite object storage cannot push down exact decimal predicates\",\n \"$.predicate\"\n )\n }\n\n switch (predicate.op) {\n case \"and\":\n case \"or\": {\n const items = predicate.items.map(compilePredicate)\n const joiner = predicate.op === \"and\" ? \" AND \" : \" OR \"\n return {\n sql: `(${items.map((item) => item.sql).join(joiner)})`,\n args: items.flatMap((item) => item.args),\n }\n }\n case \"not\": {\n const item = compilePredicate(predicate.item)\n return negatePredicate(item)\n }\n case \"eq\":\n return predicate.scalarKind === \"userRef\"\n ? compileUserRefInPredicate(predicate.propertyId, [predicate.value])\n : compileEqualityPredicate(predicate.propertyId, \"eq\", predicate.value)\n case \"neq\":\n return predicate.scalarKind === \"userRef\"\n ? negatePredicate(compileUserRefInPredicate(predicate.propertyId, [predicate.value]))\n : compileEqualityPredicate(predicate.propertyId, \"neq\", predicate.value)\n case \"lt\":\n case \"lte\":\n case \"gt\":\n case \"gte\": {\n const op = sqlComparisonOperator(predicate.op)\n return {\n sql: `${jsonValueExpression()} ${op} ?`,\n args: [jsonPath(predicate.propertyId), sqlValue(predicate.value)],\n }\n }\n case \"in\":\n return predicate.scalarKind === \"userRef\"\n ? compileUserRefInPredicate(predicate.propertyId, predicate.values)\n : compileInPredicate(predicate.propertyId, predicate.values)\n case \"exists\": {\n const sql = `${jsonTypeExpression()} IS NOT NULL`\n const item: CompiledPredicate = { sql, args: [jsonPath(predicate.propertyId)] }\n return predicate.value ? item : negatePredicate(item)\n }\n case \"contains\":\n return predicate.scalarKind === \"userRef\"\n ? compileUserRefContainsPredicate(predicate.propertyId, predicate.value)\n : compileContainsPredicate(predicate.propertyId, predicate.value)\n }\n}\n\n/**\n * User references are JSON objects, so they match on both fields rather than on serialized text,\n * which would depend on key order.\n */\nfunction compileUserRefInPredicate(\n propertyId: string,\n values: readonly unknown[]\n): CompiledPredicate {\n const path = jsonPath(propertyId)\n const ids = values.flatMap((value) => {\n const id = userRefId(value)\n return id === undefined ? [] : [id]\n })\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n if (values.includes(null)) {\n clauses.push(`${jsonTypeExpression()} = 'null'`)\n args.push(path)\n }\n if (ids.length > 0) {\n clauses.push(\n `(${jsonValueExpression()} = 'user' AND ${jsonValueExpression()} IN (${ids.map(() => \"?\").join(\", \")}))`\n )\n args.push(`${path}.type`, `${path}.id`, ...ids)\n }\n if (clauses.length === 0) return { sql: \"0 = 1\", args: [] }\n\n return { sql: `(${clauses.join(\" OR \")})`, args }\n}\n\nfunction compileUserRefContainsPredicate(propertyId: string, value: unknown): CompiledPredicate {\n const id = userRefId(value)\n if (id === undefined) return { sql: \"0 = 1\", args: [] }\n const path = jsonPath(propertyId)\n return {\n sql: `(${jsonTypeExpression()} = 'array' AND EXISTS (SELECT 1 FROM json_each(properties, ?) AS item WHERE item.type = 'object' AND json_extract(item.value, '$.type') = 'user' AND json_extract(item.value, '$.id') = ?))`,\n args: [path, path, id],\n }\n}\n\nfunction userRefId(value: unknown): string | undefined {\n if (typeof value !== \"object\" || value === null) return undefined\n const { type, id } = value as { type?: unknown; id?: unknown }\n return type === \"user\" && typeof id === \"string\" ? id : undefined\n}\n\nfunction negatePredicate(predicate: CompiledPredicate): CompiledPredicate {\n return {\n sql: `(NOT COALESCE((${predicate.sql}), 0))`,\n args: predicate.args,\n }\n}\n\nfunction compileEqualityPredicate(\n propertyId: string,\n op: \"eq\" | \"neq\",\n value: unknown\n): CompiledPredicate {\n const path = jsonPath(propertyId)\n if (value === null) {\n const sql = `${jsonTypeExpression()} = 'null'`\n const item: CompiledPredicate = { sql, args: [path] }\n return op === \"eq\" ? item : negatePredicate(item)\n }\n\n if (op === \"eq\") {\n return {\n sql: `${jsonValueExpression()} = ?`,\n args: [path, sqlValue(value)],\n }\n }\n\n // JS predicate semantics treat missing/null properties as not equal to any\n // non-null scalar. SQL three-valued null logic needs those cases explicit.\n return {\n sql: `(${jsonTypeExpression()} IS NULL OR ${jsonTypeExpression()} = 'null' OR ${jsonValueExpression()} != ?)`,\n args: [path, path, path, sqlValue(value)],\n }\n}\n\nfunction compileInPredicate(propertyId: string, values: readonly unknown[]): CompiledPredicate {\n if (values.length === 0) return { sql: \"0 = 1\", args: [] }\n\n const path = jsonPath(propertyId)\n const nonNullValues = values.filter((value) => value !== null)\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n if (values.length !== nonNullValues.length) {\n clauses.push(`${jsonTypeExpression()} = 'null'`)\n args.push(path)\n }\n\n if (nonNullValues.length > 0) {\n clauses.push(`${jsonValueExpression()} IN (${nonNullValues.map(() => \"?\").join(\", \")})`)\n args.push(path, ...nonNullValues.map(sqlValue))\n }\n\n return {\n sql: `(${clauses.join(\" OR \")})`,\n args,\n }\n}\n\nfunction compileContainsPredicate(propertyId: string, value: unknown): CompiledPredicate {\n const path = jsonPath(propertyId)\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n if (typeof value === \"string\") {\n clauses.push(`(${jsonTypeExpression()} = 'text' AND instr(${jsonValueExpression()}, ?) > 0)`)\n args.push(path, path, value)\n }\n\n clauses.push(\n `(${jsonTypeExpression()} = 'array' AND EXISTS (SELECT 1 FROM json_each(properties, ?) AS item WHERE item.value IS ?))`\n )\n args.push(path, path, sqlValue(value))\n\n if (typeof value === \"string\") {\n clauses.push(\n `(${jsonTypeExpression()} = 'object' AND EXISTS (SELECT 1 FROM json_each(properties, ?) AS item WHERE item.key = ?))`\n )\n args.push(path, path, value)\n }\n\n return { sql: `(${clauses.join(\" OR \")})`, args }\n}\n\nfunction compileTextPredicate(query: string, fields: readonly string[]): CompiledPredicate {\n const terms = tokenize(query)\n if (terms.length === 0) return { sql: \"0 = 1\", args: [] }\n\n const clauses = terms.map(() => {\n const fieldClauses = fields.map(\n () => `instr(lower(COALESCE(CAST(${jsonValueExpression()} AS TEXT), '')), ?) > 0`\n )\n return `(${fieldClauses.join(\" OR \")})`\n })\n const args = terms.flatMap((term) => fields.flatMap((field) => [jsonPath(field), term]))\n\n return { sql: `(${clauses.join(\" AND \")})`, args }\n}\n\nfunction compileScopedTextPredicate(\n query: string,\n fieldsByObjectType: Readonly<Record<string, readonly string[]>> | undefined\n): CompiledPredicate | null {\n const scopedPredicates: CompiledPredicate[] = []\n\n for (const [objectTypeId, fields] of Object.entries(fieldsByObjectType ?? {})) {\n if (fields.length === 0) continue\n const predicate = compileTextPredicate(query, fields)\n scopedPredicates.push({\n sql: `(object_type_id = ? AND ${predicate.sql})`,\n args: [objectTypeId, ...predicate.args],\n })\n }\n\n if (scopedPredicates.length === 0) return null\n\n return {\n sql: `(${scopedPredicates.map((predicate) => predicate.sql).join(\" OR \")})`,\n args: scopedPredicates.flatMap((predicate) => predicate.args),\n }\n}\n\nfunction compileOrder(\n fields: readonly CompiledOrderField[],\n qualifier?: string,\n propertyColumn = \"properties\"\n): CompiledOrder {\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n for (const field of fields) {\n if (field.kind === \"column\") {\n clauses.push(\n `${columnExpression(field.column, qualifier)}${field.binary ? \" COLLATE BINARY\" : \"\"} ${field.direction.toUpperCase()}`\n )\n continue\n }\n\n const direction = field.direction === \"desc\" ? \"DESC\" : \"ASC\"\n const path = jsonPath(field.propertyId)\n clauses.push(\n `CASE WHEN ${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null' THEN 1 ELSE 0 END ASC`,\n `${jsonValueExpression(propertyColumn)} ${direction}`\n )\n args.push(path, path, path)\n }\n\n return { sql: clauses.join(\", \"), args, fields, propertyColumn }\n}\n\nfunction sortOrderFields(fields: readonly ObjectQuerySortField[]): readonly CompiledOrderField[] {\n const orderFields: CompiledOrderField[] = []\n for (const field of fields) {\n if (field.kind !== \"property\") {\n throw new Error(\"[Sixb] SQLite object storage does not support relevance sorting\")\n }\n if (field.scalarKind === \"decimal\") {\n throw new ObjectQueryExecutionError(\n \"exact_decimal_not_supported\",\n \"SQLite object storage cannot push down exact decimal sorting\",\n \"$.sort\"\n )\n }\n\n orderFields.push({\n kind: \"property\",\n propertyId: field.propertyId,\n direction: field.direction === \"desc\" ? \"desc\" : \"asc\",\n })\n }\n orderFields.push(...identityOrderFields())\n return orderFields\n}\n\nfunction identityOrderFields(): readonly CompiledOrderField[] {\n return [\n { kind: \"column\", column: \"object_type_id\", direction: \"asc\" },\n { kind: \"column\", column: \"primary_id\", direction: \"asc\" },\n ]\n}\n\nfunction compileKeysetPredicate(\n fields: readonly CompiledOrderField[],\n cursor: readonly EncodedCursorValue[],\n propertyColumn = \"properties\"\n): CompiledPredicate {\n const disjuncts: CompiledPredicate[] = []\n\n for (let index = 0; index < fields.length; index += 1) {\n const equalityPredicates = fields\n .slice(0, index)\n .map((field, equalityIndex) =>\n compileFieldEquality(field, cursor[equalityIndex], propertyColumn)\n )\n const advancePredicate = compileFieldAfter(fields[index], cursor[index], propertyColumn)\n if (!advancePredicate) continue\n\n const parts = [...equalityPredicates, advancePredicate]\n disjuncts.push({\n sql: `(${parts.map((part) => part.sql).join(\" AND \")})`,\n args: parts.flatMap((part) => part.args),\n })\n }\n\n if (disjuncts.length === 0) return { sql: \"0 = 1\", args: [] }\n\n return {\n sql: `(${disjuncts.map((part) => part.sql).join(\" OR \")})`,\n args: disjuncts.flatMap((part) => part.args),\n }\n}\n\nfunction compileFieldEquality(\n field: CompiledOrderField,\n cursor: EncodedCursorValue,\n propertyColumn = \"properties\"\n): CompiledPredicate {\n if (field.kind === \"column\") {\n return {\n sql: `${columnExpression(field.column)} = ?`,\n args: [sqlValue(cursor.value)],\n }\n }\n\n const path = jsonPath(field.propertyId)\n if (cursor.nullish) {\n return {\n sql: `(${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null')`,\n args: [path, path],\n }\n }\n\n return {\n sql: `(${jsonTypeExpression(propertyColumn)} IS NOT NULL AND ${jsonTypeExpression(propertyColumn)} != 'null' AND ${jsonValueExpression(propertyColumn)} = ?)`,\n args: [path, path, path, sqlValue(cursor.value)],\n }\n}\n\nfunction compileFieldAfter(\n field: CompiledOrderField,\n cursor: EncodedCursorValue,\n propertyColumn = \"properties\"\n): CompiledPredicate | null {\n if (field.kind === \"column\") {\n return {\n sql: `${columnExpression(field.column)} ${field.direction === \"desc\" ? \"<\" : \">\"} ?`,\n args: [sqlValue(cursor.value)],\n }\n }\n\n if (cursor.nullish) return null\n\n const path = jsonPath(field.propertyId)\n const rankSql = `CASE WHEN ${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null' THEN 1 ELSE 0 END`\n const valueOperator = field.direction === \"desc\" ? \"<\" : \">\"\n\n return {\n sql: `(${rankSql} > 0 OR (${rankSql} = 0 AND ${jsonValueExpression(propertyColumn)} ${valueOperator} ?))`,\n args: [path, path, path, path, path, sqlValue(cursor.value)],\n }\n}\n\nfunction encodePageToken(\n row: SqliteObjectQueryPageRow,\n fields: readonly CompiledOrderField[]\n): string {\n const properties = JSON.parse(row._cursor_properties ?? row.properties) as Record<string, unknown>\n const token: EncodedPageToken = {\n version: 1,\n order: fields.map(orderFieldKey),\n values: fields.map((field) => cursorValueForField(row, properties, field)),\n }\n return `${PAGE_TOKEN_PREFIX}${Buffer.from(JSON.stringify(token)).toString(\"base64url\")}`\n}\n\nfunction decodePageToken(\n token: string,\n fields: readonly CompiledOrderField[]\n): readonly EncodedCursorValue[] {\n if (!token.startsWith(PAGE_TOKEN_PREFIX)) {\n throwInvalidPageToken(\"Invalid SQLite object query page token\")\n }\n\n const raw = token.slice(PAGE_TOKEN_PREFIX.length)\n let decoded: unknown\n try {\n decoded = JSON.parse(Buffer.from(raw, \"base64url\").toString(\"utf8\"))\n } catch {\n throwInvalidPageToken(\"Invalid SQLite object query page token\")\n }\n\n if (!isEncodedPageToken(decoded)) {\n throwInvalidPageToken(\"Invalid SQLite object query page token\")\n }\n\n const expectedOrder = fields.map(orderFieldKey)\n if (\n decoded.order.length !== expectedOrder.length ||\n decoded.order.some((field, index) => field !== expectedOrder[index])\n ) {\n throwInvalidPageToken(\"SQLite object query page token does not match query order\")\n }\n\n return decoded.values\n}\n\nfunction throwInvalidPageToken(message: string): never {\n throw new ObjectQueryExecutionError(\"invalid_page_token\", message, \"$.pageToken\")\n}\n\nfunction isEncodedPageToken(value: unknown): value is EncodedPageToken {\n if (!isPlainObject(value)) return false\n if (value.version !== 1) return false\n if (!Array.isArray(value.order) || value.order.some((item) => typeof item !== \"string\")) {\n return false\n }\n if (!Array.isArray(value.values)) return false\n return value.values.every(\n (item) =>\n isPlainObject(item) &&\n typeof item.nullish === \"boolean\" &&\n (item.nullish || Object.hasOwn(item, \"value\"))\n )\n}\n\nfunction cursorValueForField(\n row: SqliteObjectQueryPageRow,\n properties: Record<string, unknown>,\n field: CompiledOrderField\n): EncodedCursorValue {\n const value =\n field.kind === \"column\"\n ? field.column === \"object_type_id\"\n ? row.object_type_id\n : row.primary_id\n : properties[field.propertyId]\n\n return value === null || value === undefined ? { nullish: true } : { nullish: false, value }\n}\n\nfunction orderFieldKey(field: CompiledOrderField): string {\n return field.kind === \"column\"\n ? `column:${field.column}:${field.direction}`\n : `property:${field.propertyId}:${field.direction}`\n}\n\nfunction columnExpression(\n column: \"object_type_id\" | \"primary_id\" | \"_vector_score\",\n qualifier?: string\n): string {\n return qualifier ? `${qualifier}.${column}` : column\n}\n\nfunction jsonValueExpression(column = \"properties\"): string {\n return `json_extract(${column}, ?)`\n}\n\nfunction jsonTypeExpression(column = \"properties\"): string {\n return `json_type(${column}, ?)`\n}\n\nfunction jsonPath(propertyId: string): string {\n return `$.\"${propertyId.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`\n}\n\nfunction sqlValue(value: unknown): SqliteValue {\n if (value instanceof Date) return value.toISOString()\n if (typeof value === \"boolean\") return value ? 1 : 0\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n value === null\n ) {\n return value\n }\n return JSON.stringify(value)\n}\n\nfunction tokenize(query: string): string[] {\n return query\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((term) => term.length > 0)\n}\n\nfunction sqlComparisonOperator(op: \"lt\" | \"lte\" | \"gt\" | \"gte\"): \"<\" | \"<=\" | \">\" | \">=\" {\n switch (op) {\n case \"lt\":\n return \"<\"\n case \"lte\":\n return \"<=\"\n case \"gt\":\n return \">\"\n case \"gte\":\n return \">=\"\n }\n}\n\nfunction identityRows<T>(rows: readonly T[]): readonly T[] {\n return rows\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n",
40
40
  "/** Shared little-endian float32 encoding for stored vectors and sqlite-vec query bindings. */\nexport function encodeSqliteVector(values: readonly number[]): Uint8Array {\n const bytes = new Uint8Array(values.length * 4)\n const view = new DataView(bytes.buffer)\n for (let index = 0; index < values.length; index++) {\n view.setFloat32(index * 4, values[index]!, true)\n }\n return bytes\n}\n",
41
- "import type { Database } from \"bun:sqlite\"\nimport { type ObjectQuery, ObjectQueryExecutionError } from \"@sixb/core\"\nimport { hasVectorProfile } from \"@sixb/core/internal/query\"\nimport type {\n CountObjectsInput,\n CountObjectsResult,\n ExistsObjectsInput,\n ExistsObjectsResult,\n FacetObjectsInput,\n FacetObjectsResult,\n LinkBatchKey,\n LinkDirection,\n ObjectBatchKey,\n ObjectFacetRequest,\n ObjectLinkRow,\n ObjectReadStorage,\n ObjectRow,\n QueryObjectLinksInput,\n QueryObjectLinksResult,\n QueryObjectsInput,\n QueryObjectsResult,\n} from \"@sixb/core/storage\"\nimport { linkBatchKey, objectBatchKey } from \"@sixb/core/storage\"\nimport {\n type CompiledObjectQuery,\n compileObjectQuery,\n type SqliteObjectQuerySource,\n type SqliteValue,\n} from \"./query-compiler\"\nimport type { SqliteSelectedObjectReadSource } from \"./read-scope\"\nimport {\n type DatabaseRow,\n type LinkDatabaseRow,\n type ObjectQueryDatabaseRow,\n queryRowToObject,\n rowToLink,\n rowToObject,\n} from \"./rows\"\nimport { ensureSqliteVectorSearch } from \"./vector-extension\"\n\n/** Synchronous SQL reads over one explicit source; transaction and budget ownership stay outside. */\nexport class SqliteObjectReader {\n constructor(\n private readonly db: Database,\n private readonly source: SqliteObjectQuerySource | SqliteSelectedObjectReadSource\n ) {}\n\n private assertVectorSearch(\n params: QueryObjectsInput | CountObjectsInput | ExistsObjectsInput | FacetObjectsInput\n ): void {\n if (!hasVectorProfile(params.query)) return\n const compiled = compileObjectQuery(params.projectId, params.query, { source: this.source })\n if (!compiled.vectorProbe) return\n ensureSqliteVectorSearch(this.db)\n const probe = compiled.vectorProbe\n const row = this.db.query<{ total: number }, SqliteValue[]>(probe.sql).get(...probe.args)\n if (Number(row?.total ?? 0) > probe.limit) {\n throw new ObjectQueryExecutionError(\n \"vector_work_limit_exceeded\",\n `Exact vector search supports at most ${probe.limit} eligible vectors at this dimension. Narrow the query filters.`\n )\n }\n }\n\n queryObjects(params: QueryObjectsInput): QueryObjectsResult {\n this.assertVectorSearch(params)\n const source = this.source\n const compiled = compileObjectQuery(params.projectId, params.query, {\n includeTotal: params.includeTotal,\n source,\n })\n const total = params.includeTotal === false ? undefined : readTotal(this.db, compiled)\n const rawRows = this.db.query(compiled.sql).all(...compiled.args) as ObjectQueryDatabaseRow[]\n const rows = compiled.trimRows(rawRows) as readonly ObjectQueryDatabaseRow[]\n const hasMore =\n total === undefined && compiled.hasMoreProbe\n ? compiled.hasMoreProbe.hasMore(\n this.db.query(compiled.hasMoreProbe.sql).all(...compiled.hasMoreProbe.args).length\n )\n : compiled.hasMore(rawRows.length, total)\n\n return {\n objects: rows.map((row) => queryRowToObject(row)),\n hasMore,\n nextPageToken: compiled.nextPageToken(rows, rawRows.length),\n ...(total === undefined ? {} : { total }),\n }\n }\n\n countObjects(params: CountObjectsInput): CountObjectsResult {\n this.assertVectorSearch(params)\n const source = this.source\n return {\n count: readTotal(\n this.db,\n compileObjectQuery(params.projectId, stripOuterRowShape(params.query), {\n source,\n })\n ),\n }\n }\n\n existsObjects(params: ExistsObjectsInput): ExistsObjectsResult {\n this.assertVectorSearch(params)\n const source = this.source\n const compiled = compileObjectQuery(params.projectId, existsProbeQuery(params.query), {\n source,\n })\n return { exists: this.db.query(compiled.sql).get(...compiled.args) !== null }\n }\n\n facetObjects(params: FacetObjectsInput): FacetObjectsResult {\n this.assertVectorSearch(params)\n const source = this.source\n const compiled = compileObjectQuery(params.projectId, stripOuterRowShape(params.query), {\n source,\n })\n return {\n facets: params.facets.map((facet) => ({\n propertyId: facet.propertyId,\n buckets: readFacetBuckets(this.db, compiled, facet),\n })),\n }\n }\n\n getByPrimaryId(params: {\n projectId: string\n objectTypeId: string\n primaryId: string\n }): ObjectRow | null {\n const source = this.source\n const objectsTable = source.objectsTable\n const statement = source.wrapStatement(\n `SELECT * FROM ${objectsTable} WHERE project_id = ? AND object_type_id = ? AND primary_id = ?`,\n [params.projectId, params.objectTypeId, params.primaryId]\n )\n const row = this.db.query(statement.sql).get(...statement.args) as DatabaseRow | null\n\n return row ? rowToObject(row) : null\n }\n\n selectsObjectProperties(\n params: Parameters<ObjectReadStorage[\"selectsObjectProperties\"]>[0]\n ): readonly boolean[] {\n const source = this.source\n const result = params.items.map(() => false)\n if (params.items.length === 0) return result\n\n const items = params.items.map((item, batchIndex) => ({ ...item, batchIndex }))\n const requestedType = \"CAST(json_extract(requested.value, '$.objectTypeId') AS TEXT)\"\n const requestedId = \"CAST(json_extract(requested.value, '$.primaryId') AS TEXT)\"\n const requestedProperty = \"CAST(json_extract(requested.value, '$.propertyId') AS TEXT)\"\n const selected = \"objectPropertyPermissionsTable\" in source\n const storedTable = selected ? source.objectPropertyPermissionsTable : source.objectsTable\n const propertyJoin = selected ? `AND stored.property_id = ${requestedProperty}` : \"\"\n const statement = source.wrapStatement(\n `SELECT DISTINCT\n CAST(json_extract(requested.value, '$.batchIndex') AS INTEGER) AS _batch_index\n FROM ${storedTable} AS stored\n JOIN json_each(?) AS requested\n ON stored.object_type_id = ${requestedType}\n AND stored.primary_id = ${requestedId}\n ${propertyJoin}\n WHERE stored.project_id = ?`,\n [JSON.stringify(items), params.projectId]\n )\n const rows = this.db\n .query(statement.sql)\n .all(...statement.args) as PropertyPermissionBatchDatabaseRow[]\n for (const row of rows) result[row._batch_index] = true\n return result\n }\n\n listLinks(params: {\n projectId: string\n objectTypeId: string\n objectId: string\n linkId?: string\n direction?: LinkDirection\n }): readonly ObjectLinkRow[] {\n const source = this.source\n const direction = params.direction ?? \"outgoing\"\n const directionWhere =\n direction === \"incoming\"\n ? \"target_type_id = ? AND target_id = ?\"\n : direction === \"both\"\n ? \"((source_type_id = ? AND source_id = ?) OR (target_type_id = ? AND target_id = ?))\"\n : \"source_type_id = ? AND source_id = ?\"\n let query = `SELECT * FROM ${source.linksTable} WHERE project_id = ? AND ${directionWhere}`\n const args: (string | number)[] =\n direction === \"both\"\n ? [\n params.projectId,\n params.objectTypeId,\n params.objectId,\n params.objectTypeId,\n params.objectId,\n ]\n : [params.projectId, params.objectTypeId, params.objectId]\n\n if (params.linkId) {\n query += \" AND link_id = ?\"\n args.push(params.linkId)\n }\n\n const statement = source.wrapStatement(query, args)\n const rows = this.db.query(statement.sql).all(...statement.args) as LinkDatabaseRow[]\n\n return rows.map((row) => rowToLink(row))\n }\n\n getByPrimaryIdBatch(params: {\n projectId: string\n items: readonly { objectTypeId: string; primaryId: string }[]\n }): Map<ObjectBatchKey, ObjectRow> {\n const source = this.source\n const result = new Map<ObjectBatchKey, ObjectRow>()\n if (params.items.length === 0) return result\n\n const items = params.items.map((item, batchIndex) => ({ ...item, batchIndex }))\n const statement = source.wrapStatement(\n `\n SELECT\n object.*,\n CAST(json_extract(requested.value, '$.batchIndex') AS INTEGER) AS _batch_index\n FROM json_each(?) AS requested\n JOIN ${source.objectsTable} AS object\n ON object.project_id = ?\n AND object.object_type_id = json_extract(requested.value, '$.objectTypeId')\n AND object.primary_id = json_extract(requested.value, '$.primaryId')\n `,\n [JSON.stringify(items), params.projectId]\n )\n const rows = this.db.query(statement.sql).all(...statement.args) as ObjectBatchDatabaseRow[]\n const rowsByIndex = new Map(rows.map((row) => [row._batch_index, row]))\n for (const [index, item] of params.items.entries()) {\n const row = rowsByIndex.get(index)\n if (row) result.set(objectBatchKey(item.objectTypeId, item.primaryId), rowToObject(row))\n }\n return result\n }\n\n listLinksBatch(params: {\n projectId: string\n direction?: LinkDirection\n items: readonly { objectTypeId: string; objectId: string; linkId: string }[]\n }): Map<LinkBatchKey, ObjectLinkRow[]> {\n const source = this.source\n const result = new Map<LinkBatchKey, ObjectLinkRow[]>()\n if (params.items.length === 0) return result\n\n const direction = params.direction ?? \"outgoing\"\n const requestedType = \"CAST(json_extract(requested.value, '$.objectTypeId') AS TEXT)\"\n const requestedId = \"CAST(json_extract(requested.value, '$.objectId') AS TEXT)\"\n const requestedLink = \"CAST(json_extract(requested.value, '$.linkId') AS TEXT)\"\n const outgoing = `stored.source_type_id = ${requestedType} AND stored.source_id = ${requestedId}`\n const incoming = `stored.target_type_id = ${requestedType} AND stored.target_id = ${requestedId}`\n const directionJoin =\n direction === \"both\"\n ? `((${outgoing}) OR (${incoming}))`\n : direction === \"incoming\"\n ? incoming\n : outgoing\n const items = params.items.map((item, batchIndex) => ({ ...item, batchIndex }))\n const statement = source.wrapStatement(\n `\n SELECT\n stored.*,\n CAST(json_extract(requested.value, '$.batchIndex') AS INTEGER) AS _batch_index\n FROM ${source.linksTable} AS stored\n JOIN json_each(?) AS requested\n ON ${directionJoin}\n AND stored.link_id = ${requestedLink}\n WHERE stored.project_id = ?\n ORDER BY _batch_index, source_type_id, source_id, link_id, target_type_id, target_id\n `,\n [JSON.stringify(items), params.projectId]\n )\n const rows = this.db.query(statement.sql).all(...statement.args) as LinkBatchDatabaseRow[]\n const rowsByIndex = params.items.map(() => new Map<string, ObjectLinkRow>())\n for (const row of rows) {\n const link = rowToLink(row)\n rowsByIndex[row._batch_index]?.set(fullLinkIdentity(link), link)\n }\n for (const [index, item] of params.items.entries()) {\n const links = [...(rowsByIndex[index]?.values() ?? [])]\n if (links.length > 0) {\n result.set(linkBatchKey(item.objectTypeId, item.objectId, item.linkId), links)\n }\n }\n return result\n }\n\n queryLinks(params: QueryObjectLinksInput): QueryObjectLinksResult {\n const source = this.source\n if (params.objectRefs.length === 0 || params.endpointObjectTypeIds?.length === 0) {\n return { links: [], hasMore: false }\n }\n\n const requested = `\n SELECT DISTINCT\n json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS object_id\n FROM json_each(?)\n `\n const linksTable = source.linksTable\n const sourceJoin = `\n SELECT link.*\n FROM ${linksTable} AS link\n JOIN (${requested}) AS requested\n ON requested.object_type_id = link.source_type_id\n AND requested.object_id = link.source_id\n WHERE link.project_id = ?\n `\n const targetJoin = `\n SELECT link.*\n FROM ${linksTable} AS link\n JOIN (${requested}) AS requested\n ON requested.object_type_id = link.target_type_id\n AND requested.object_id = link.target_id\n WHERE link.project_id = ?\n `\n const incidentSql =\n params.direction === \"outgoing\"\n ? sourceJoin\n : params.direction === \"incoming\"\n ? targetJoin\n : `${sourceJoin} UNION ${targetJoin}`\n const requestedJson = JSON.stringify(params.objectRefs)\n const args: (string | number)[] =\n params.direction === \"both\"\n ? [requestedJson, params.projectId, requestedJson, params.projectId]\n : [requestedJson, params.projectId]\n\n const predicates: string[] = []\n if (params.linkId !== undefined) {\n predicates.push(\"link_id = ?\")\n args.push(params.linkId)\n }\n if (params.endpointObjectTypeIds !== undefined) {\n const allowedTypes = JSON.stringify([...new Set(params.endpointObjectTypeIds)])\n predicates.push(\n \"source_type_id IN (SELECT value FROM json_each(?))\",\n \"target_type_id IN (SELECT value FROM json_each(?))\"\n )\n args.push(allowedTypes, allowedTypes)\n }\n if (params.after) {\n predicates.push(\n \"(source_type_id, source_id, link_id, target_type_id, target_id) > (?, ?, ?, ?, ?)\"\n )\n args.push(...params.after)\n }\n args.push(params.limit + 1)\n\n const whereSql = predicates.length > 0 ? `WHERE ${predicates.join(\" AND \")}` : \"\"\n const statement = source.wrapStatement(\n `\n SELECT *\n FROM (${incidentSql}) AS incident\n ${whereSql}\n ORDER BY source_type_id, source_id, link_id, target_type_id, target_id\n LIMIT ?\n `,\n args\n )\n const rows = this.db.query(statement.sql).all(...statement.args) as LinkDatabaseRow[]\n\n return {\n links: rows.slice(0, params.limit).map((row) => rowToLink(row)),\n hasMore: rows.length > params.limit,\n }\n }\n\n list(params: Parameters<ObjectReadStorage[\"list\"]>[0]): {\n objects: readonly ObjectRow[]\n hasMore: boolean\n total: number\n } {\n const source = this.source\n let query = `SELECT * FROM ${source.objectsTable} WHERE project_id = ?`\n const args: (string | number | null)[] = [params.projectId]\n\n if (params.objectTypeId) {\n if (typeof params.objectTypeId === \"string\") {\n query += \" AND object_type_id = ?\"\n args.push(params.objectTypeId)\n } else {\n query += ` AND object_type_id IN (${params.objectTypeId.map(() => \"?\").join(\", \")})`\n args.push(...params.objectTypeId)\n }\n }\n\n if (params.primaryIdPrefix) {\n query += \" AND primary_id LIKE ?\"\n args.push(`${params.primaryIdPrefix}%`)\n }\n\n if (params.primaryIdSuffix) {\n query += \" AND primary_id LIKE ?\"\n args.push(`%${params.primaryIdSuffix}`)\n }\n\n if (params.updatedAfter) {\n query += \" AND updated_at >= ?\"\n args.push(params.updatedAfter.toISOString())\n }\n\n if (params.updatedBefore) {\n query += \" AND updated_at <= ?\"\n args.push(params.updatedBefore.toISOString())\n }\n\n if (params.createdAfter) {\n query += \" AND created_at >= ?\"\n args.push(params.createdAfter.toISOString())\n }\n\n if (params.createdBefore) {\n query += \" AND created_at <= ?\"\n args.push(params.createdBefore.toISOString())\n }\n\n // Get total count\n const countStatement = source.wrapStatement(\n `SELECT COUNT(*) as total FROM (${query}) AS filtered_objects`,\n args\n )\n const countResult = this.db.query(countStatement.sql).get(...countStatement.args) as {\n total: number\n }\n const total = countResult.total\n\n const offset = params.offset ?? 0\n const limit = params.limit ?? 50\n if (limit === 0) return { objects: [], hasMore: offset < total, total }\n\n // Add ordering\n const orderBy = params.orderBy ?? \"updatedAt\"\n const order = params.order ?? \"desc\"\n const orderColumn =\n orderBy === \"primaryId\" ? \"primary_id\" : orderBy === \"createdAt\" ? \"created_at\" : \"updated_at\"\n query += ` ORDER BY ${orderColumn} ${order.toUpperCase()}`\n\n // Add pagination\n query += \" LIMIT ? OFFSET ?\"\n args.push(limit + 1, offset) // +1 to check for hasMore\n\n const rowsStatement = source.wrapStatement(query, args)\n const rows = this.db.query(rowsStatement.sql).all(...rowsStatement.args) as DatabaseRow[]\n const hasMore = rows.length > limit\n const objects = rows.slice(0, limit).map((row) => rowToObject(row))\n\n return { objects, hasMore, total }\n }\n}\n\nfunction fullLinkIdentity(link: ObjectLinkRow): string {\n return JSON.stringify([\n link.sourceTypeId,\n link.sourceId,\n link.linkId,\n link.targetTypeId,\n link.targetId,\n ])\n}\n\nexport function assertLinkQueryLimit(limit: number): void {\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new Error(\"Object link query limit must be a positive safe integer.\")\n }\n}\n\nfunction readTotal(db: Database, compiled: CompiledObjectQuery): number {\n const row = db.query(compiled.totalSql).get(...compiled.totalArgs) as { total: number }\n return row.total\n}\n\nfunction readFacetBuckets(\n db: Database,\n compiled: CompiledObjectQuery,\n facet: ObjectFacetRequest\n): { value: unknown; count: number }[] {\n const path = sqliteJsonPath(facet.propertyId)\n const rows = db\n .query(\n `\n SELECT\n json_type(input.properties, ?) AS value_type,\n json_extract(input.properties, ?) AS value,\n COUNT(*) AS count\n FROM (${compiled.sql}) AS input\n WHERE json_type(input.properties, ?) IS NOT NULL\n GROUP BY value_type, value\n ORDER BY count DESC, CAST(value AS TEXT) ASC\n LIMIT ?\n `\n )\n .all(path, path, ...compiled.args, path, facet.limit) as FacetDatabaseRow[]\n\n return rows.map((row) => ({\n value: sqliteFacetValue(row.value_type, row.value),\n count: Number(row.count),\n }))\n}\n\nfunction sqliteJsonPath(propertyId: string): string {\n return `$.\"${propertyId.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`\n}\n\nfunction sqliteFacetValue(valueType: string | null, value: unknown): unknown {\n if (valueType === \"true\") return true\n if (valueType === \"false\") return false\n if (valueType === \"null\") return null\n // json_extract returns structured values, such as user references, as JSON text.\n if ((valueType === \"object\" || valueType === \"array\") && typeof value === \"string\") {\n return JSON.parse(value)\n }\n return value\n}\n\nfunction existsProbeQuery(query: ObjectQuery): ObjectQuery {\n return { kind: \"limit\", limit: 1, input: stripOuterRowShape(query) }\n}\n\nfunction stripOuterRowShape(query: ObjectQuery): ObjectQuery {\n switch (query.kind) {\n case \"limit\":\n case \"page\":\n case \"project\":\n case \"sort\":\n return stripOuterRowShape(query.input)\n default:\n return query\n }\n}\n\ninterface ObjectBatchDatabaseRow extends DatabaseRow {\n _batch_index: number\n}\n\ninterface PropertyPermissionBatchDatabaseRow {\n _batch_index: number\n}\n\ninterface FacetDatabaseRow {\n value_type: string | null\n value: unknown\n count: number\n}\n\ninterface LinkBatchDatabaseRow extends LinkDatabaseRow {\n _batch_index: number\n}\n",
42
- "import type {\n ExpandedLinkValue,\n ExpandedObjectRow,\n ObjectLinkRow,\n ObjectRow,\n ObjectRowLinks,\n} from \"@sixb/core/storage\"\n\nexport function rowToObject(row: DatabaseRow): ObjectRow {\n return {\n projectId: row.project_id,\n objectTypeId: row.object_type_id,\n primaryId: row.primary_id,\n properties: JSON.parse(row.properties),\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n version: row.version,\n lastCommitId: row.last_commit_id,\n }\n}\n\n/** Decode an expanded query row with the same shape as Core link hydration. */\nexport function queryRowToObject(row: ObjectQueryDatabaseRow): ObjectRow {\n const base = {\n ...rowToObject(row),\n ...(row._vector_score === undefined ? {} : { score: row._vector_score }),\n }\n const links = reviveExpandedLinks(parseExpandColumn(row._expand))\n return links ? { ...base, links } : base\n}\n\nexport function rowToLink(row: LinkDatabaseRow): ObjectLinkRow {\n return {\n projectId: row.project_id,\n sourceTypeId: row.source_type_id,\n sourceId: row.source_id,\n linkId: row.link_id,\n targetTypeId: row.target_type_id,\n targetId: row.target_id,\n ...(row.properties === null ? {} : { properties: JSON.parse(row.properties) }),\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n lastCommitId: row.last_commit_id,\n }\n}\n\n// The `_expand` column comes back from SQLite as a JSON string (or null/absent\n// when the query carried no expansion); parse it before reviving.\nfunction parseExpandColumn(value: unknown): unknown {\n if (typeof value !== \"string\") return value ?? undefined\n return JSON.parse(value)\n}\n\nfunction reviveExpandedLinks(value: unknown): ObjectRowLinks | undefined {\n if (!isPlainObject(value)) return undefined\n const links: ObjectRowLinks = {}\n for (const [linkId, raw] of Object.entries(value)) {\n links[linkId] = reviveExpandedLinkValue(raw)\n }\n return links\n}\n\n// A \"one\" expansion arrives as a single object or null; a \"many\" expansion as an\n// array (already ordered and trimmed in the database).\nfunction reviveExpandedLinkValue(value: unknown): ExpandedLinkValue {\n if (value === null || value === undefined) return null\n if (Array.isArray(value)) return value.map(reviveExpandedRow)\n return reviveExpandedRow(value)\n}\n\n// Revive one hydrated neighbour from `compileExpansionChildJson`: timestamp\n// strings back to `Date`, null/empty link properties dropped (matching the\n// fallback), and nested links recursed.\nfunction reviveExpandedRow(value: unknown): ExpandedObjectRow {\n const row = isPlainObject(value) ? value : {}\n const expanded: ExpandedObjectRow = {\n projectId: String(row.projectId),\n objectTypeId: String(row.objectTypeId),\n primaryId: String(row.primaryId),\n properties: isPlainObject(row.properties) ? row.properties : {},\n createdAt: new Date(row.createdAt as string),\n updatedAt: new Date(row.updatedAt as string),\n version: Number(row.version),\n lastCommitId: String(row.lastCommitId),\n }\n if (isPlainObject(row.linkProperties) && Object.keys(row.linkProperties).length > 0) {\n expanded.linkProperties = row.linkProperties\n }\n const links = reviveExpandedLinks(row.links)\n if (links) expanded.links = links\n return expanded\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nexport interface DatabaseRow {\n project_id: string\n object_type_id: string\n primary_id: string\n properties: string\n created_at: string\n updated_at: string\n version: number\n last_commit_id: string\n}\n\nexport interface ObjectQueryDatabaseRow extends DatabaseRow {\n _vector_score?: number\n _cursor_properties?: string\n /** `json_object(linkId, value, ...)` serialized text from an `expand` pushdown; absent otherwise. */\n _expand?: string | null\n}\n\nexport interface LinkDatabaseRow {\n project_id: string\n source_type_id: string\n source_id: string\n link_id: string\n target_type_id: string\n target_id: string\n properties: string | null\n created_at: string\n updated_at: string\n last_commit_id: string\n}\n",
41
+ "import type { Database } from \"bun:sqlite\"\nimport { type ObjectQuery, ObjectQueryExecutionError } from \"@sixb/core\"\nimport { hasVectorProfile } from \"@sixb/core/internal/query\"\nimport type {\n CountObjectsInput,\n CountObjectsResult,\n ExistsObjectsInput,\n ExistsObjectsResult,\n FacetObjectsInput,\n FacetObjectsResult,\n LinkBatchKey,\n LinkDirection,\n ObjectBatchKey,\n ObjectFacetRequest,\n ObjectLinkRow,\n ObjectReadStorage,\n ObjectRow,\n QueryObjectLinksInput,\n QueryObjectLinksResult,\n QueryObjectsInput,\n QueryObjectsResult,\n} from \"@sixb/core/storage\"\nimport { linkBatchKey, objectBatchKey } from \"@sixb/core/storage\"\nimport {\n type CompiledObjectQuery,\n compileObjectQuery,\n type SqliteObjectQuerySource,\n type SqliteValue,\n} from \"./query-compiler\"\nimport type { SqliteSelectedObjectReadSource } from \"./read-scope\"\nimport {\n type DatabaseRow,\n type LinkDatabaseRow,\n type ObjectQueryDatabaseRow,\n queryRowToObject,\n rowToLink,\n rowToObject,\n} from \"./rows\"\nimport { ensureSqliteVectorSearch } from \"./vector-extension\"\n\n/** Synchronous SQL reads over one explicit source; transaction and budget ownership stay outside. */\nexport class SqliteObjectReader {\n constructor(\n private readonly db: Database,\n private readonly source: SqliteObjectQuerySource | SqliteSelectedObjectReadSource\n ) {}\n\n private assertVectorSearch(\n params: QueryObjectsInput | CountObjectsInput | ExistsObjectsInput | FacetObjectsInput\n ): void {\n if (!hasVectorProfile(params.query)) return\n const compiled = compileObjectQuery(params.projectId, params.query, { source: this.source })\n if (!compiled.vectorProbe) return\n ensureSqliteVectorSearch(this.db)\n const probe = compiled.vectorProbe\n const row = this.db.query<{ total: number }, SqliteValue[]>(probe.sql).get(...probe.args)\n assertVectorCandidateCount(row?.total, probe.limit)\n }\n\n queryObjects(params: QueryObjectsInput): QueryObjectsResult {\n const source = this.source\n const compiled = compileObjectQuery(params.projectId, params.query, {\n includeTotal: params.includeTotal,\n source,\n })\n if (compiled.vectorProbe) ensureSqliteVectorSearch(this.db)\n const ordinaryTotal =\n params.includeTotal === false || compiled.vectorProbe\n ? undefined\n : readTotal(this.db, compiled)\n const rawRows = this.db.query(compiled.sql).all(...compiled.args) as ObjectQueryDatabaseRow[]\n const vectorTotal = this.vectorResultTotal(compiled, rawRows)\n const total = params.includeTotal === false ? undefined : (vectorTotal ?? ordinaryTotal)\n const rows = compiled.trimRows(rawRows) as readonly ObjectQueryDatabaseRow[]\n const hasMore =\n total === undefined && compiled.hasMoreProbe\n ? compiled.hasMoreProbe.hasMore(\n this.db.query(compiled.hasMoreProbe.sql).all(...compiled.hasMoreProbe.args).length\n )\n : compiled.hasMore(rawRows.length, total)\n\n return {\n objects: rows.map((row) => queryRowToObject(row)),\n hasMore,\n nextPageToken: compiled.nextPageToken(rows, rawRows.length),\n ...(total === undefined ? {} : { total }),\n }\n }\n\n private vectorResultTotal(\n compiled: CompiledObjectQuery,\n rows: readonly ObjectQueryDatabaseRow[]\n ): number | undefined {\n const probe = compiled.vectorProbe\n if (!probe) return undefined\n\n // A zero outer limit can hide the count row. Keep admission and total semantics for that\n // uncommon case, without rescanning candidates for ordinary vector queries.\n let count = rows[0]?._vector_candidate_count\n if (rows.length === 0) {\n count =\n probe.rowLimit === 0\n ? this.db.query<{ total: number }, SqliteValue[]>(probe.sql).get(...probe.args)?.total\n : 0\n }\n assertVectorCandidateCount(count, probe.limit)\n return Math.min(count, probe.totalLimit)\n }\n\n countObjects(params: CountObjectsInput): CountObjectsResult {\n this.assertVectorSearch(params)\n const source = this.source\n return {\n count: readTotal(\n this.db,\n compileObjectQuery(params.projectId, stripOuterRowShape(params.query), {\n source,\n })\n ),\n }\n }\n\n existsObjects(params: ExistsObjectsInput): ExistsObjectsResult {\n this.assertVectorSearch(params)\n const source = this.source\n const compiled = compileObjectQuery(params.projectId, existsProbeQuery(params.query), {\n source,\n })\n return { exists: this.db.query(compiled.sql).get(...compiled.args) !== null }\n }\n\n facetObjects(params: FacetObjectsInput): FacetObjectsResult {\n this.assertVectorSearch(params)\n const source = this.source\n const compiled = compileObjectQuery(params.projectId, stripOuterRowShape(params.query), {\n source,\n })\n return {\n facets: params.facets.map((facet) => ({\n propertyId: facet.propertyId,\n buckets: readFacetBuckets(this.db, compiled, facet),\n })),\n }\n }\n\n getByPrimaryId(params: {\n projectId: string\n objectTypeId: string\n primaryId: string\n }): ObjectRow | null {\n const source = this.source\n const objectsTable = source.objectsTable\n const statement = source.wrapStatement(\n `SELECT * FROM ${objectsTable} WHERE project_id = ? AND object_type_id = ? AND primary_id = ?`,\n [params.projectId, params.objectTypeId, params.primaryId]\n )\n const row = this.db.query(statement.sql).get(...statement.args) as DatabaseRow | null\n\n return row ? rowToObject(row) : null\n }\n\n selectsObjectProperties(\n params: Parameters<ObjectReadStorage[\"selectsObjectProperties\"]>[0]\n ): readonly boolean[] {\n const source = this.source\n const result = params.items.map(() => false)\n if (params.items.length === 0) return result\n\n const items = params.items.map((item, batchIndex) => ({ ...item, batchIndex }))\n const requestedType = \"CAST(json_extract(requested.value, '$.objectTypeId') AS TEXT)\"\n const requestedId = \"CAST(json_extract(requested.value, '$.primaryId') AS TEXT)\"\n const requestedProperty = \"CAST(json_extract(requested.value, '$.propertyId') AS TEXT)\"\n const selected = \"objectPropertyPermissionsTable\" in source\n const storedTable = selected ? source.objectPropertyPermissionsTable : source.objectsTable\n const propertyJoin = selected ? `AND stored.property_id = ${requestedProperty}` : \"\"\n const statement = source.wrapStatement(\n `SELECT DISTINCT\n CAST(json_extract(requested.value, '$.batchIndex') AS INTEGER) AS _batch_index\n FROM ${storedTable} AS stored\n JOIN json_each(?) AS requested\n ON stored.object_type_id = ${requestedType}\n AND stored.primary_id = ${requestedId}\n ${propertyJoin}\n WHERE stored.project_id = ?`,\n [JSON.stringify(items), params.projectId]\n )\n const rows = this.db\n .query(statement.sql)\n .all(...statement.args) as PropertyPermissionBatchDatabaseRow[]\n for (const row of rows) result[row._batch_index] = true\n return result\n }\n\n listLinks(params: {\n projectId: string\n objectTypeId: string\n objectId: string\n linkId?: string\n direction?: LinkDirection\n }): readonly ObjectLinkRow[] {\n const source = this.source\n const direction = params.direction ?? \"outgoing\"\n const directionWhere =\n direction === \"incoming\"\n ? \"target_type_id = ? AND target_id = ?\"\n : direction === \"both\"\n ? \"((source_type_id = ? AND source_id = ?) OR (target_type_id = ? AND target_id = ?))\"\n : \"source_type_id = ? AND source_id = ?\"\n let query = `SELECT * FROM ${source.linksTable} WHERE project_id = ? AND ${directionWhere}`\n const args: (string | number)[] =\n direction === \"both\"\n ? [\n params.projectId,\n params.objectTypeId,\n params.objectId,\n params.objectTypeId,\n params.objectId,\n ]\n : [params.projectId, params.objectTypeId, params.objectId]\n\n if (params.linkId) {\n query += \" AND link_id = ?\"\n args.push(params.linkId)\n }\n\n const statement = source.wrapStatement(query, args)\n const rows = this.db.query(statement.sql).all(...statement.args) as LinkDatabaseRow[]\n\n return rows.map((row) => rowToLink(row))\n }\n\n getByPrimaryIdBatch(params: {\n projectId: string\n items: readonly { objectTypeId: string; primaryId: string }[]\n }): Map<ObjectBatchKey, ObjectRow> {\n const source = this.source\n const result = new Map<ObjectBatchKey, ObjectRow>()\n if (params.items.length === 0) return result\n\n const items = params.items.map((item, batchIndex) => ({ ...item, batchIndex }))\n const statement = source.wrapStatement(\n `\n SELECT\n object.*,\n CAST(json_extract(requested.value, '$.batchIndex') AS INTEGER) AS _batch_index\n FROM json_each(?) AS requested\n JOIN ${source.objectsTable} AS object\n ON object.project_id = ?\n AND object.object_type_id = json_extract(requested.value, '$.objectTypeId')\n AND object.primary_id = json_extract(requested.value, '$.primaryId')\n `,\n [JSON.stringify(items), params.projectId]\n )\n const rows = this.db.query(statement.sql).all(...statement.args) as ObjectBatchDatabaseRow[]\n const rowsByIndex = new Map(rows.map((row) => [row._batch_index, row]))\n for (const [index, item] of params.items.entries()) {\n const row = rowsByIndex.get(index)\n if (row) result.set(objectBatchKey(item.objectTypeId, item.primaryId), rowToObject(row))\n }\n return result\n }\n\n listLinksBatch(params: {\n projectId: string\n direction?: LinkDirection\n items: readonly { objectTypeId: string; objectId: string; linkId: string }[]\n }): Map<LinkBatchKey, ObjectLinkRow[]> {\n const source = this.source\n const result = new Map<LinkBatchKey, ObjectLinkRow[]>()\n if (params.items.length === 0) return result\n\n const direction = params.direction ?? \"outgoing\"\n const requestedType = \"CAST(json_extract(requested.value, '$.objectTypeId') AS TEXT)\"\n const requestedId = \"CAST(json_extract(requested.value, '$.objectId') AS TEXT)\"\n const requestedLink = \"CAST(json_extract(requested.value, '$.linkId') AS TEXT)\"\n const outgoing = `stored.source_type_id = ${requestedType} AND stored.source_id = ${requestedId}`\n const incoming = `stored.target_type_id = ${requestedType} AND stored.target_id = ${requestedId}`\n const directionJoin =\n direction === \"both\"\n ? `((${outgoing}) OR (${incoming}))`\n : direction === \"incoming\"\n ? incoming\n : outgoing\n const items = params.items.map((item, batchIndex) => ({ ...item, batchIndex }))\n const statement = source.wrapStatement(\n `\n SELECT\n stored.*,\n CAST(json_extract(requested.value, '$.batchIndex') AS INTEGER) AS _batch_index\n FROM ${source.linksTable} AS stored\n JOIN json_each(?) AS requested\n ON ${directionJoin}\n AND stored.link_id = ${requestedLink}\n WHERE stored.project_id = ?\n ORDER BY _batch_index, source_type_id, source_id, link_id, target_type_id, target_id\n `,\n [JSON.stringify(items), params.projectId]\n )\n const rows = this.db.query(statement.sql).all(...statement.args) as LinkBatchDatabaseRow[]\n const rowsByIndex = params.items.map(() => new Map<string, ObjectLinkRow>())\n for (const row of rows) {\n const link = rowToLink(row)\n rowsByIndex[row._batch_index]?.set(fullLinkIdentity(link), link)\n }\n for (const [index, item] of params.items.entries()) {\n const links = [...(rowsByIndex[index]?.values() ?? [])]\n if (links.length > 0) {\n result.set(linkBatchKey(item.objectTypeId, item.objectId, item.linkId), links)\n }\n }\n return result\n }\n\n queryLinks(params: QueryObjectLinksInput): QueryObjectLinksResult {\n const source = this.source\n if (params.objectRefs.length === 0 || params.endpointObjectTypeIds?.length === 0) {\n return { links: [], hasMore: false }\n }\n\n const requested = `\n SELECT DISTINCT\n json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS object_id\n FROM json_each(?)\n `\n const linksTable = source.linksTable\n const sourceJoin = `\n SELECT link.*\n FROM ${linksTable} AS link\n JOIN (${requested}) AS requested\n ON requested.object_type_id = link.source_type_id\n AND requested.object_id = link.source_id\n WHERE link.project_id = ?\n `\n const targetJoin = `\n SELECT link.*\n FROM ${linksTable} AS link\n JOIN (${requested}) AS requested\n ON requested.object_type_id = link.target_type_id\n AND requested.object_id = link.target_id\n WHERE link.project_id = ?\n `\n const incidentSql =\n params.direction === \"outgoing\"\n ? sourceJoin\n : params.direction === \"incoming\"\n ? targetJoin\n : `${sourceJoin} UNION ${targetJoin}`\n const requestedJson = JSON.stringify(params.objectRefs)\n const args: (string | number)[] =\n params.direction === \"both\"\n ? [requestedJson, params.projectId, requestedJson, params.projectId]\n : [requestedJson, params.projectId]\n\n const predicates: string[] = []\n if (params.linkId !== undefined) {\n predicates.push(\"link_id = ?\")\n args.push(params.linkId)\n }\n if (params.endpointObjectTypeIds !== undefined) {\n const allowedTypes = JSON.stringify([...new Set(params.endpointObjectTypeIds)])\n predicates.push(\n \"source_type_id IN (SELECT value FROM json_each(?))\",\n \"target_type_id IN (SELECT value FROM json_each(?))\"\n )\n args.push(allowedTypes, allowedTypes)\n }\n if (params.after) {\n predicates.push(\n \"(source_type_id, source_id, link_id, target_type_id, target_id) > (?, ?, ?, ?, ?)\"\n )\n args.push(...params.after)\n }\n args.push(params.limit + 1)\n\n const whereSql = predicates.length > 0 ? `WHERE ${predicates.join(\" AND \")}` : \"\"\n const statement = source.wrapStatement(\n `\n SELECT *\n FROM (${incidentSql}) AS incident\n ${whereSql}\n ORDER BY source_type_id, source_id, link_id, target_type_id, target_id\n LIMIT ?\n `,\n args\n )\n const rows = this.db.query(statement.sql).all(...statement.args) as LinkDatabaseRow[]\n\n return {\n links: rows.slice(0, params.limit).map((row) => rowToLink(row)),\n hasMore: rows.length > params.limit,\n }\n }\n\n list(params: Parameters<ObjectReadStorage[\"list\"]>[0]): {\n objects: readonly ObjectRow[]\n hasMore: boolean\n total: number\n } {\n const source = this.source\n let query = `SELECT * FROM ${source.objectsTable} WHERE project_id = ?`\n const args: (string | number | null)[] = [params.projectId]\n\n if (params.objectTypeId) {\n if (typeof params.objectTypeId === \"string\") {\n query += \" AND object_type_id = ?\"\n args.push(params.objectTypeId)\n } else {\n query += ` AND object_type_id IN (${params.objectTypeId.map(() => \"?\").join(\", \")})`\n args.push(...params.objectTypeId)\n }\n }\n\n if (params.primaryIdPrefix) {\n query += \" AND primary_id LIKE ?\"\n args.push(`${params.primaryIdPrefix}%`)\n }\n\n if (params.primaryIdSuffix) {\n query += \" AND primary_id LIKE ?\"\n args.push(`%${params.primaryIdSuffix}`)\n }\n\n if (params.updatedAfter) {\n query += \" AND updated_at >= ?\"\n args.push(params.updatedAfter.toISOString())\n }\n\n if (params.updatedBefore) {\n query += \" AND updated_at <= ?\"\n args.push(params.updatedBefore.toISOString())\n }\n\n if (params.createdAfter) {\n query += \" AND created_at >= ?\"\n args.push(params.createdAfter.toISOString())\n }\n\n if (params.createdBefore) {\n query += \" AND created_at <= ?\"\n args.push(params.createdBefore.toISOString())\n }\n\n // Get total count\n const countStatement = source.wrapStatement(\n `SELECT COUNT(*) as total FROM (${query}) AS filtered_objects`,\n args\n )\n const countResult = this.db.query(countStatement.sql).get(...countStatement.args) as {\n total: number\n }\n const total = countResult.total\n\n const offset = params.offset ?? 0\n const limit = params.limit ?? 50\n if (limit === 0) return { objects: [], hasMore: offset < total, total }\n\n // Add ordering\n const orderBy = params.orderBy ?? \"updatedAt\"\n const order = params.order ?? \"desc\"\n const orderColumn =\n orderBy === \"primaryId\" ? \"primary_id\" : orderBy === \"createdAt\" ? \"created_at\" : \"updated_at\"\n query += ` ORDER BY ${orderColumn} ${order.toUpperCase()}`\n\n // Add pagination\n query += \" LIMIT ? OFFSET ?\"\n args.push(limit + 1, offset) // +1 to check for hasMore\n\n const rowsStatement = source.wrapStatement(query, args)\n const rows = this.db.query(rowsStatement.sql).all(...rowsStatement.args) as DatabaseRow[]\n const hasMore = rows.length > limit\n const objects = rows.slice(0, limit).map((row) => rowToObject(row))\n\n return { objects, hasMore, total }\n }\n}\n\nfunction fullLinkIdentity(link: ObjectLinkRow): string {\n return JSON.stringify([\n link.sourceTypeId,\n link.sourceId,\n link.linkId,\n link.targetTypeId,\n link.targetId,\n ])\n}\n\nexport function assertLinkQueryLimit(limit: number): void {\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new Error(\"Object link query limit must be a positive safe integer.\")\n }\n}\n\nfunction readTotal(db: Database, compiled: CompiledObjectQuery): number {\n const row = db.query(compiled.totalSql).get(...compiled.totalArgs) as { total: number }\n return row.total\n}\n\nfunction readFacetBuckets(\n db: Database,\n compiled: CompiledObjectQuery,\n facet: ObjectFacetRequest\n): { value: unknown; count: number }[] {\n const path = sqliteJsonPath(facet.propertyId)\n const rows = db\n .query(\n `\n SELECT\n json_type(input.properties, ?) AS value_type,\n json_extract(input.properties, ?) AS value,\n COUNT(*) AS count\n FROM (${compiled.sql}) AS input\n WHERE json_type(input.properties, ?) IS NOT NULL\n GROUP BY value_type, value\n ORDER BY count DESC, CAST(value AS TEXT) ASC\n LIMIT ?\n `\n )\n .all(path, path, ...compiled.args, path, facet.limit) as FacetDatabaseRow[]\n\n return rows.map((row) => ({\n value: sqliteFacetValue(row.value_type, row.value),\n count: Number(row.count),\n }))\n}\n\nfunction sqliteJsonPath(propertyId: string): string {\n return `$.\"${propertyId.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`\n}\n\nfunction sqliteFacetValue(valueType: string | null, value: unknown): unknown {\n if (valueType === \"true\") return true\n if (valueType === \"false\") return false\n if (valueType === \"null\") return null\n // json_extract returns structured values, such as user references, as JSON text.\n if ((valueType === \"object\" || valueType === \"array\") && typeof value === \"string\") {\n return JSON.parse(value)\n }\n return value\n}\n\nfunction assertVectorCandidateCount(count: unknown, limit: number): asserts count is number {\n if (typeof count !== \"number\" || !Number.isSafeInteger(count) || count < 0) {\n throw new ObjectQueryExecutionError(\n \"invalid_vector_candidate_count\",\n \"Storage did not return a valid vector candidate count.\"\n )\n }\n if (count > limit) {\n throw new ObjectQueryExecutionError(\n \"vector_work_limit_exceeded\",\n `Exact vector search supports at most ${limit} eligible vectors at this dimension. Narrow the query filters.`\n )\n }\n}\n\nfunction existsProbeQuery(query: ObjectQuery): ObjectQuery {\n return { kind: \"limit\", limit: 1, input: stripOuterRowShape(query) }\n}\n\nfunction stripOuterRowShape(query: ObjectQuery): ObjectQuery {\n switch (query.kind) {\n case \"limit\":\n case \"page\":\n case \"project\":\n case \"sort\":\n return stripOuterRowShape(query.input)\n default:\n return query\n }\n}\n\ninterface ObjectBatchDatabaseRow extends DatabaseRow {\n _batch_index: number\n}\n\ninterface PropertyPermissionBatchDatabaseRow {\n _batch_index: number\n}\n\ninterface FacetDatabaseRow {\n value_type: string | null\n value: unknown\n count: number\n}\n\ninterface LinkBatchDatabaseRow extends LinkDatabaseRow {\n _batch_index: number\n}\n",
42
+ "import type {\n ExpandedLinkValue,\n ExpandedObjectRow,\n ObjectLinkRow,\n ObjectRow,\n ObjectRowLinks,\n} from \"@sixb/core/storage\"\n\nexport function rowToObject(row: DatabaseRow): ObjectRow {\n return {\n projectId: row.project_id,\n objectTypeId: row.object_type_id,\n primaryId: row.primary_id,\n properties: JSON.parse(row.properties),\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n version: row.version,\n lastCommitId: row.last_commit_id,\n }\n}\n\n/** Decode an expanded query row with the same shape as Core link hydration. */\nexport function queryRowToObject(row: ObjectQueryDatabaseRow): ObjectRow {\n const base = {\n ...rowToObject(row),\n ...(row._vector_score === undefined ? {} : { score: row._vector_score }),\n }\n const links = reviveExpandedLinks(parseExpandColumn(row._expand))\n return links ? { ...base, links } : base\n}\n\nexport function rowToLink(row: LinkDatabaseRow): ObjectLinkRow {\n return {\n projectId: row.project_id,\n sourceTypeId: row.source_type_id,\n sourceId: row.source_id,\n linkId: row.link_id,\n targetTypeId: row.target_type_id,\n targetId: row.target_id,\n ...(row.properties === null ? {} : { properties: JSON.parse(row.properties) }),\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n lastCommitId: row.last_commit_id,\n }\n}\n\n// The `_expand` column comes back from SQLite as a JSON string (or null/absent\n// when the query carried no expansion); parse it before reviving.\nfunction parseExpandColumn(value: unknown): unknown {\n if (typeof value !== \"string\") return value ?? undefined\n return JSON.parse(value)\n}\n\nfunction reviveExpandedLinks(value: unknown): ObjectRowLinks | undefined {\n if (!isPlainObject(value)) return undefined\n const links: ObjectRowLinks = {}\n for (const [linkId, raw] of Object.entries(value)) {\n links[linkId] = reviveExpandedLinkValue(raw)\n }\n return links\n}\n\n// A \"one\" expansion arrives as a single object or null; a \"many\" expansion as an\n// array (already ordered and trimmed in the database).\nfunction reviveExpandedLinkValue(value: unknown): ExpandedLinkValue {\n if (value === null || value === undefined) return null\n if (Array.isArray(value)) return value.map(reviveExpandedRow)\n return reviveExpandedRow(value)\n}\n\n// Revive one hydrated neighbour from `compileExpansionChildJson`: timestamp\n// strings back to `Date`, null/empty link properties dropped (matching the\n// fallback), and nested links recursed.\nfunction reviveExpandedRow(value: unknown): ExpandedObjectRow {\n const row = isPlainObject(value) ? value : {}\n const expanded: ExpandedObjectRow = {\n projectId: String(row.projectId),\n objectTypeId: String(row.objectTypeId),\n primaryId: String(row.primaryId),\n properties: isPlainObject(row.properties) ? row.properties : {},\n createdAt: new Date(row.createdAt as string),\n updatedAt: new Date(row.updatedAt as string),\n version: Number(row.version),\n lastCommitId: String(row.lastCommitId),\n }\n if (isPlainObject(row.linkProperties) && Object.keys(row.linkProperties).length > 0) {\n expanded.linkProperties = row.linkProperties\n }\n const links = reviveExpandedLinks(row.links)\n if (links) expanded.links = links\n return expanded\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nexport interface DatabaseRow {\n project_id: string\n object_type_id: string\n primary_id: string\n properties: string\n created_at: string\n updated_at: string\n version: number\n last_commit_id: string\n}\n\nexport interface ObjectQueryDatabaseRow extends DatabaseRow {\n _vector_candidate_count?: number\n _vector_score?: number\n _cursor_properties?: string\n /** `json_object(linkId, value, ...)` serialized text from an `expand` pushdown; absent otherwise. */\n _expand?: string | null\n}\n\nexport interface LinkDatabaseRow {\n project_id: string\n source_type_id: string\n source_id: string\n link_id: string\n target_type_id: string\n target_id: string\n properties: string | null\n created_at: string\n updated_at: string\n last_commit_id: string\n}\n",
43
43
  "import type { Database } from \"bun:sqlite\"\nimport { ObjectQueryExecutionError } from \"@sixb/core\"\nimport { load } from \"sqlite-vec\"\n\nconst loaded = new WeakSet<Database>()\n\n/** Load only for vector reads, leaving ordinary SQLite use independent of extension support. */\nexport function ensureSqliteVectorSearch(db: Database): void {\n if (loaded.has(db)) return\n const options = db.query<{ compile_options: string }, []>(\"PRAGMA compile_options\").all()\n if (options.some((option) => option.compile_options === \"OMIT_LOAD_EXTENSION\")) {\n throw new ObjectQueryExecutionError(\n \"vector_extension_missing\",\n \"SQLite vector search requires extension support. On macOS install SQLite (brew install sqlite), then call Database.setCustomSQLite with its library path before opening any database.\"\n )\n }\n try {\n load(db)\n loaded.add(db)\n } catch (cause) {\n throw new Error(\n \"[SixbSqlite] Could not load sqlite-vec for vector search. Check that its native package supports your platform.\",\n { cause }\n )\n }\n}\n",
44
44
  "import type { Database } from \"bun:sqlite\"\nimport type {\n CompiledSelectedObjectReadScope,\n ObjectQueryCapabilities,\n ObjectReadExecutionLimits,\n ObjectReadStorage,\n} from \"@sixb/core/storage\"\nimport {\n assertObjectReaderProject,\n assertObjectReadFacetCount,\n assertObjectReadOutputWithinLimit,\n ObjectReadLimitExceededError,\n snapshotObjectReadExecutionLimits,\n} from \"@sixb/core/storage\"\nimport { runDeferredReadTransaction } from \"../transactions\"\nimport {\n compileSqliteSelectedObjectReadSource,\n type SqliteSelectedObjectReadSource,\n} from \"./read-scope\"\nimport { assertLinkQueryLimit, SqliteObjectReader } from \"./reader\"\n\n/** Keep the traversal probe and every terminal statement in the same synchronous snapshot. */\nexport function createSqliteSelectedReader(\n db: Database,\n params: {\n projectId: string\n scope: CompiledSelectedObjectReadScope\n limits: ObjectReadExecutionLimits\n },\n queryCapabilities: () => ObjectQueryCapabilities\n): ObjectReadStorage {\n const projectId = params.projectId\n const limits = snapshotObjectReadExecutionLimits(params.limits)\n const source = compileSqliteSelectedObjectReadSource(\n projectId,\n params.scope,\n limits.maxTraversalFacts\n )\n const reader = new SqliteObjectReader(db, source)\n const assertProject = (actualProjectId: string): void =>\n assertObjectReaderProject(projectId, actualProjectId)\n const read = <T>(run: () => T): T =>\n runDeferredReadTransaction(db, () => {\n assertTraversalBudget(db, source, limits.maxTraversalFacts)\n const value = run()\n assertObjectReadOutputWithinLimit(value, limits)\n return value\n })\n const readMap = <TKey, TValue>(run: () => Map<TKey, TValue>): Map<TKey, TValue> =>\n runDeferredReadTransaction(db, () => {\n assertTraversalBudget(db, source, limits.maxTraversalFacts)\n const value = run()\n assertObjectReadOutputWithinLimit([...value.entries()], limits)\n return value\n })\n\n return Object.freeze({\n queryCapabilities,\n queryObjects: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.queryObjects(input))\n },\n countObjects: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.countObjects(input))\n },\n existsObjects: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.existsObjects(input))\n },\n facetObjects: async (input) => {\n assertProject(input.projectId)\n assertObjectReadFacetCount(input.facets.length)\n return read(() => reader.facetObjects(input))\n },\n getByPrimaryId: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.getByPrimaryId(input))\n },\n selectsObjectProperties: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.selectsObjectProperties(input))\n },\n listLinks: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.listLinks(input))\n },\n getByPrimaryIdBatch: async (input) => {\n assertProject(input.projectId)\n return readMap(() => reader.getByPrimaryIdBatch(input))\n },\n listLinksBatch: async (input) => {\n assertProject(input.projectId)\n return readMap(() => reader.listLinksBatch(input))\n },\n queryLinks: async (input) => {\n assertProject(input.projectId)\n assertLinkQueryLimit(input.limit)\n return read(() => reader.queryLinks(input))\n },\n list: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.list(input))\n },\n } satisfies ObjectReadStorage)\n}\n\nfunction assertTraversalBudget(\n db: Database,\n source: SqliteSelectedObjectReadSource,\n maxTraversalFacts: number\n): void {\n const row = db.query(source.traversalProbe.sql).get(...source.traversalProbe.args) as {\n total: number | bigint\n }\n if (BigInt(row.total) > BigInt(maxTraversalFacts)) {\n throw new ObjectReadLimitExceededError(\"traversalFacts\", maxTraversalFacts)\n }\n}\n",
45
- "import type { CompiledSelectedObjectReadScope } from \"@sixb/core/storage\"\nimport {\n type CompiledObjectQuery,\n type SqliteObjectQuerySource,\n type SqliteValue,\n sqliteJsonEachValue,\n} from \"./query-compiler\"\n\nexport interface SqliteSelectedObjectReadSource extends SqliteObjectQuerySource {\n readonly objectPropertyPermissionsTable: string\n readonly traversalProbe: {\n readonly sql: string\n readonly args: readonly SqliteValue[]\n }\n}\n\n/**\n * Prepare one immutable selected scope as live, path-sensitive SQLite relations.\n *\n * The complete compiled scope is serialized once. Every statement receives that one JSON document\n * and the bound project id, keeping the host-parameter count constant as selections grow.\n * CROSS JOIN keeps authorized parents/grants before indexed edge/object lookups, even when\n * statistics would otherwise make SQLite rescan all grants for every stored object.\n * Property grants are grouped only after path-sensitive reachability has been resolved.\n */\nexport function compileSqliteSelectedObjectReadSource(\n projectId: string,\n scope: CompiledSelectedObjectReadScope,\n maxTraversalFacts: number\n): SqliteSelectedObjectReadSource {\n const scopeJson = JSON.stringify({\n roots: scope.roots,\n objects: scope.objects,\n steps: scope.steps,\n })\n const compiled = compileSelectedReadScopeCte(scopeJson, projectId)\n const wrapStatement = (sql: string, args: readonly SqliteValue[] = []) => ({\n sql: `${compiled.sql}\\n${sql}`,\n args: [...compiled.args, ...args],\n })\n\n return Object.freeze({\n objectsTable: \"_sixb_scope_objects\",\n linksTable: \"_sixb_scope_links\",\n objectPropertyPermissionsTable: \"_sixb_scope_object_permissions\",\n wrapStatement,\n wrapQuery: (query: CompiledObjectQuery): CompiledObjectQuery => ({\n ...query,\n ...wrapStatement(query.sql, query.args),\n vectorProbe: query.vectorProbe\n ? { ...query.vectorProbe, ...wrapStatement(query.vectorProbe.sql, query.vectorProbe.args) }\n : undefined,\n totalSql: `${compiled.sql}\\n${query.totalSql}`,\n totalArgs: [...compiled.args, ...query.totalArgs],\n ...(query.hasMoreProbe\n ? {\n hasMoreProbe: {\n ...query.hasMoreProbe,\n ...wrapStatement(query.hasMoreProbe.sql, query.hasMoreProbe.args),\n },\n }\n : {}),\n }),\n traversalProbe: wrapStatement(\n `\n SELECT COUNT(*) AS total\n FROM (\n SELECT 1 AS traversal_fact\n FROM _sixb_scope_root_facts\n\n UNION ALL\n\n SELECT 1 AS traversal_fact\n FROM _sixb_scope_reached_links\n\n LIMIT ?\n ) AS bounded_traversal_facts\n `,\n [BigInt(maxTraversalFacts) + 1n]\n ),\n })\n}\n\ninterface CompiledReadScopeCte {\n readonly sql: string\n readonly args: readonly SqliteValue[]\n}\n\nfunction compileSelectedReadScopeCte(scopeJson: string, projectId: string): CompiledReadScopeCte {\n return {\n sql: `\n WITH RECURSIVE\n _sixb_scope_document(scope) AS (\n SELECT json(?)\n ),\n _sixb_scope_roots(root_id, node_id, object_type_id, primary_id) AS (\n SELECT\n CAST(root.key AS INTEGER),\n CAST(json_extract(root.value, '$.nodeId') AS INTEGER),\n CAST(json_extract(root.value, '$.objectTypeId') AS TEXT),\n CAST(json_extract(root.value, '$.primaryId') AS TEXT)\n FROM _sixb_scope_document AS document,\n json_each(json_extract(document.scope, '$.roots')) AS root\n ),\n _sixb_scope_root_facts(project_id, root_id, node_id, object_type_id, primary_id) AS (\n SELECT anchor.project_id, root.root_id, root.node_id, root.object_type_id, root.primary_id\n FROM _sixb_scope_roots AS root\n JOIN objects AS anchor\n ON anchor.project_id = ?\n AND anchor.object_type_id = root.object_type_id\n AND anchor.primary_id = root.primary_id\n ),\n _sixb_scope_object_selections(node_id, object_type_id, property_ids) AS (\n SELECT\n CAST(json_extract(selection.value, '$.nodeId') AS INTEGER),\n CAST(json_extract(selection.value, '$.objectTypeId') AS TEXT),\n json_extract(selection.value, '$.propertyIds')\n FROM _sixb_scope_document AS document,\n json_each(json_extract(document.scope, '$.objects')) AS selection\n ),\n _sixb_scope_link_selections(\n step_id,\n node_id,\n parent_node_id,\n source_object_type_id,\n link_id,\n target_object_type_id,\n property_ids\n ) AS (\n SELECT\n CAST(step.key AS INTEGER),\n CAST(json_extract(step.value, '$.nodeId') AS INTEGER),\n CAST(json_extract(step.value, '$.parentNodeId') AS INTEGER),\n CAST(json_extract(step.value, '$.sourceObjectTypeId') AS TEXT),\n CAST(json_extract(step.value, '$.linkId') AS TEXT),\n CAST(json_extract(step.value, '$.targetObjectTypeId') AS TEXT),\n json_extract(step.value, '$.propertyIds')\n FROM _sixb_scope_document AS document,\n json_each(json_extract(document.scope, '$.steps')) AS step\n ),\n _sixb_scope_reachable(project_id, node_id, object_type_id, primary_id) AS (\n SELECT root.project_id, root.node_id, root.object_type_id, root.primary_id\n FROM _sixb_scope_root_facts AS root\n\n UNION\n\n SELECT edge.project_id, selection.node_id, edge.target_type_id, edge.target_id\n FROM _sixb_scope_reachable AS parent\n CROSS JOIN _sixb_scope_link_selections AS selection\n ON selection.parent_node_id = parent.node_id\n AND selection.source_object_type_id = parent.object_type_id\n CROSS JOIN links AS edge\n ON edge.project_id = parent.project_id\n AND edge.source_type_id = parent.object_type_id\n AND edge.source_id = parent.primary_id\n AND edge.link_id = selection.link_id\n AND edge.target_type_id = selection.target_object_type_id\n CROSS JOIN objects AS target\n ON target.project_id = edge.project_id\n AND target.object_type_id = edge.target_type_id\n AND target.primary_id = edge.target_id\n ),\n _sixb_scope_object_permissions(project_id, object_type_id, primary_id, property_id) AS (\n SELECT DISTINCT\n reachable.project_id,\n reachable.object_type_id,\n reachable.primary_id,\n CAST(selected_property.value AS TEXT)\n FROM _sixb_scope_reachable AS reachable\n JOIN _sixb_scope_object_selections AS selection\n ON selection.node_id = reachable.node_id\n AND selection.object_type_id = reachable.object_type_id\n JOIN json_each(selection.property_ids) AS selected_property\n ),\n _sixb_scope_object_ids(project_id, object_type_id, primary_id) AS (\n SELECT DISTINCT project_id, object_type_id, primary_id\n FROM _sixb_scope_reachable\n ),\n _sixb_scope_object_grants AS (\n SELECT reachable.project_id, reachable.object_type_id, reachable.primary_id,\n json_group_array(DISTINCT selected_property.value) FILTER (WHERE selected_property.value IS NOT NULL) AS property_ids\n FROM _sixb_scope_reachable AS reachable\n LEFT JOIN _sixb_scope_object_selections AS selection\n ON selection.node_id = reachable.node_id\n AND selection.object_type_id = reachable.object_type_id\n LEFT JOIN json_each(selection.property_ids) AS selected_property ON true\n GROUP BY reachable.project_id, reachable.object_type_id, reachable.primary_id\n ),\n _sixb_scope_objects AS (\n SELECT stored.project_id, stored.object_type_id, stored.primary_id,\n COALESCE((\n SELECT json_group_object(property.key, ${sqliteJsonEachValue(\"property\")})\n FROM json_each(stored.properties) AS property\n WHERE property.key IN (SELECT value FROM json_each(grants.property_ids))\n ), json('{}')) AS properties,\n stored.created_at, stored.updated_at, stored.version, stored.last_commit_id\n FROM _sixb_scope_object_grants AS grants\n CROSS JOIN objects AS stored\n ON stored.project_id = grants.project_id\n AND stored.object_type_id = grants.object_type_id\n AND stored.primary_id = grants.primary_id\n ),\n _sixb_scope_reached_links(\n project_id,\n step_id,\n node_id,\n parent_node_id,\n source_type_id,\n source_id,\n link_id,\n target_type_id,\n target_id,\n property_ids\n ) AS (\n SELECT\n edge.project_id,\n selection.step_id,\n selection.node_id,\n selection.parent_node_id,\n edge.source_type_id,\n edge.source_id,\n edge.link_id,\n edge.target_type_id,\n edge.target_id,\n selection.property_ids\n FROM _sixb_scope_reachable AS parent\n CROSS JOIN _sixb_scope_link_selections AS selection\n ON selection.parent_node_id = parent.node_id\n AND selection.source_object_type_id = parent.object_type_id\n CROSS JOIN links AS edge\n ON edge.project_id = parent.project_id\n AND edge.source_type_id = parent.object_type_id\n AND edge.source_id = parent.primary_id\n AND edge.link_id = selection.link_id\n AND edge.target_type_id = selection.target_object_type_id\n CROSS JOIN objects AS target\n ON target.project_id = edge.project_id\n AND target.object_type_id = edge.target_type_id\n AND target.primary_id = edge.target_id\n ),\n _sixb_scope_link_permissions(\n project_id,\n source_type_id,\n source_id,\n link_id,\n target_type_id,\n target_id,\n property_id\n ) AS (\n SELECT DISTINCT\n reached.project_id,\n reached.source_type_id,\n reached.source_id,\n reached.link_id,\n reached.target_type_id,\n reached.target_id,\n CAST(selected_property.value AS TEXT)\n FROM _sixb_scope_reached_links AS reached\n JOIN json_each(reached.property_ids) AS selected_property\n ),\n _sixb_scope_link_ids(\n project_id,\n source_type_id,\n source_id,\n link_id,\n target_type_id,\n target_id\n ) AS (\n SELECT DISTINCT\n project_id,\n source_type_id,\n source_id,\n link_id,\n target_type_id,\n target_id\n FROM _sixb_scope_reached_links\n ),\n _sixb_scope_links AS (\n SELECT\n stored.project_id,\n stored.source_type_id,\n stored.source_id,\n stored.link_id,\n stored.target_type_id,\n stored.target_id,\n CASE\n WHEN stored.properties IS NULL THEN NULL\n ELSE NULLIF(\n (\n SELECT json_group_object(property.key, ${sqliteJsonEachValue(\"property\")})\n FROM json_each(stored.properties) AS property\n JOIN _sixb_scope_link_permissions AS permission\n ON permission.project_id = stored.project_id\n AND permission.source_type_id = stored.source_type_id\n AND permission.source_id = stored.source_id\n AND permission.link_id = stored.link_id\n AND permission.target_type_id = stored.target_type_id\n AND permission.target_id = stored.target_id\n AND permission.property_id = property.key\n ),\n json('{}')\n )\n END AS properties,\n stored.created_at,\n stored.updated_at,\n stored.last_commit_id\n FROM links AS stored\n JOIN _sixb_scope_link_ids AS visible\n ON visible.project_id = stored.project_id\n AND visible.source_type_id = stored.source_type_id\n AND visible.source_id = stored.source_id\n AND visible.link_id = stored.link_id\n AND visible.target_type_id = stored.target_type_id\n AND visible.target_id = stored.target_id\n )\n `,\n args: [scopeJson, projectId],\n }\n}\n",
46
- "import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure } from \"@sixb/core/internal/errors\"\nimport type { ProjectionEntityRef } from \"@sixb/core/internal/materialization\"\nimport { MaterializationConflictError } from \"@sixb/core/internal/materialization\"\nimport type {\n AssertSourceMaterializationExecutionInput,\n OntologyCommitRecord,\n OntologyCommitWrite,\n OntologyOutboxRecord,\n OntologySourceRecord,\n StageSourceAssertion,\n} from \"@sixb/core/storage\"\nimport { ONTOLOGY_OUTBOX_FAILURE_CODES } from \"@sixb/core/storage\"\n\nexport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertTimestamp,\n canonicalJson,\n linkRefFromColumns,\n objectRefFromColumns,\n originColumns,\n originWhere,\n sourceEntityKey,\n} from \"@sixb/core/internal/ontology-storage-provider\"\n\nexport type SqliteRootOperation = <T>(run: () => Promise<T> | T) => Promise<T>\n\nexport interface SqliteOntologyCommitRow {\n readonly project_id: string\n readonly id: string\n readonly idempotency_key: string\n readonly request_hash: string\n readonly execution_id: string\n readonly origin_kind: string\n readonly origin_run_id: string | null\n readonly origin_batch_ordinal: number | null\n readonly origin: string\n readonly requested_by: string | null\n readonly executor: string\n readonly ontology_revision: string\n readonly projection_revision: string | null\n readonly ownership_hash: string | null\n readonly intent: string\n readonly result: string\n readonly committed_at: string\n}\n\nexport interface SqliteOntologySourceRow {\n readonly project_id: string\n readonly source_id: string\n readonly materialization_id: string\n readonly projection_run_id: string\n readonly projection_kind: \"object\" | \"link\"\n readonly protocol: \"replacement\"\n readonly status: OntologySourceRecord[\"status\"]\n readonly execution_token: string | null\n readonly dataset_id: string\n readonly dataset_version_id: string\n readonly dataset_version_created_at: string\n readonly projection_revision: string\n readonly ownership_hash: string\n readonly ontology_revision: string\n readonly root_count: number | null\n readonly base_materialization_id: string | null\n readonly base_commit_id: string | null\n readonly assertion_count: number | null\n readonly created_at: string\n readonly ready_at: string | null\n readonly activated_at: string | null\n readonly terminal_at: string | null\n readonly last_commit_id: string | null\n readonly updated_at: string\n}\n\nexport interface SqliteOntologySourceAssertionRow {\n readonly project_id: string\n readonly source_id: string\n readonly materialization_id: string\n readonly entity_kind: \"object\" | \"link\"\n readonly entity_key: string\n readonly entity_sort_key: string\n readonly root_kind: \"object\" | \"link\"\n readonly root_key: string\n readonly root_sort_key: string\n readonly staging_ordinal: number\n readonly root: string\n readonly assertion: string\n}\n\nexport interface SqliteStoredOverrideRow {\n readonly value: string\n readonly last_commit_id: string\n readonly updated_at: string\n}\n\nexport interface SqliteOntologyOutboxRow {\n readonly envelope: string\n readonly available_at: string\n readonly attempts: number\n readonly lease_id: string | null\n readonly lease_expires_at: string | null\n readonly published_at: string | null\n readonly last_failure: string | null\n readonly created_at: string\n}\n\nexport function parseJson<T>(value: string): T {\n return JSON.parse(value) as T\n}\n\nexport function sourceRecord(row: SqliteOntologySourceRow): OntologySourceRecord {\n return {\n projectId: row.project_id,\n source: { projectionId: row.source_id },\n materializationId: row.materialization_id,\n projectionRunId: row.projection_run_id,\n projectionKind: row.projection_kind,\n protocol: row.protocol,\n status: row.status,\n executionToken: row.execution_token,\n datasetVersion: {\n datasetId: row.dataset_id,\n versionId: row.dataset_version_id,\n createdAt: row.dataset_version_created_at,\n },\n projectionRevision: row.projection_revision,\n ownershipHash: row.ownership_hash,\n ontologyRevision: row.ontology_revision,\n ...(row.base_materialization_id === null\n ? {}\n : {\n base: {\n materializationId: row.base_materialization_id,\n lastCommitId: row.base_commit_id!,\n },\n }),\n rootCount: row.root_count,\n assertionCount: row.assertion_count,\n createdAt: row.created_at,\n readyAt: row.ready_at,\n activatedAt: row.activated_at,\n terminalAt: row.terminal_at,\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nexport function sourceAssertion(row: SqliteOntologySourceAssertionRow): StageSourceAssertion {\n return {\n root: parseJson<ProjectionEntityRef>(row.root),\n assertion: parseJson<StageSourceAssertion[\"assertion\"]>(row.assertion),\n stagingOrdinal: row.staging_ordinal,\n }\n}\n\nexport function commitRecord(row: SqliteOntologyCommitRow): OntologyCommitRecord {\n const base = {\n projectId: row.project_id,\n id: row.id,\n idempotencyKey: row.idempotency_key,\n requestHash: row.request_hash,\n executionId: row.execution_id,\n origin: parseJson<OntologyCommitWrite[\"origin\"]>(row.origin),\n ...(row.requested_by === null\n ? {}\n : {\n requestedBy: parseJson<NonNullable<OntologyCommitWrite[\"requestedBy\"]>>(row.requested_by),\n }),\n executor: parseJson<OntologyCommitWrite[\"executor\"]>(row.executor),\n ontologyRevision: row.ontology_revision,\n ...(row.projection_revision === null ? {} : { projectionRevision: row.projection_revision }),\n ...(row.ownership_hash === null ? {} : { ownershipHash: row.ownership_hash }),\n committedAt: row.committed_at,\n }\n const intent = parseJson<OntologyCommitWrite[\"intent\"]>(row.intent)\n const result = parseJson<OntologyCommitRecord[\"result\"]>(row.result)\n return { ...base, intent, result } as OntologyCommitRecord\n}\n\nexport function outboxRecord(row: SqliteOntologyOutboxRow): OntologyOutboxRecord {\n return {\n envelope: parseJson<OntologyOutboxRecord[\"envelope\"]>(row.envelope),\n availableAt: row.available_at,\n attempts: row.attempts,\n leaseId: row.lease_id,\n leaseExpiresAt: row.lease_expires_at,\n publishedAt: row.published_at,\n lastFailure:\n row.last_failure === null\n ? null\n : parseSixbFailure(row.last_failure, ONTOLOGY_OUTBOX_FAILURE_CODES),\n createdAt: row.created_at,\n }\n}\n\nexport function assertProjectionExecution(\n db: Database,\n input: {\n readonly projectId: string\n readonly sourceId: string\n readonly projectionRunId: string\n readonly executionToken: string\n readonly identity?: AssertSourceMaterializationExecutionInput[\"identity\"]\n }\n): void {\n const run = db\n .query(\n `\n SELECT projection_id, projection_kind, status, materialization_protocol, execution_token,\n dataset_id, dataset_version_id, dataset_version_created_at,\n ontology_revision, projection_revision, ownership_hash\n FROM projection_runs\n WHERE project_id = ? AND id = ?\n `\n )\n .get(input.projectId, input.projectionRunId) as {\n projection_id: string\n projection_kind: string\n status: string\n materialization_protocol: string | null\n execution_token: string | null\n dataset_id: string\n dataset_version_id: string\n dataset_version_created_at: string | null\n ontology_revision: string | null\n projection_revision: string | null\n ownership_hash: string | null\n } | null\n if (!run || run.status !== \"running\") {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' is missing or is not running.`\n )\n }\n if (run.projection_id !== input.sourceId || run.materialization_protocol !== \"replacement\") {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' does not own replacement source '${input.sourceId}'.`\n )\n }\n if (run.execution_token !== input.executionToken) {\n throw new MaterializationConflictError(\n \"execution-lost\",\n `Projection run '${input.projectionRunId}' execution token is stale.`\n )\n }\n const identity = input.identity\n if (\n identity &&\n (run.projection_kind !== identity.projectionKind ||\n run.materialization_protocol !== identity.protocol ||\n run.dataset_id !== identity.datasetVersion.datasetId ||\n run.dataset_version_id !== identity.datasetVersion.versionId ||\n run.dataset_version_created_at !== identity.datasetVersion.createdAt ||\n run.ontology_revision !== identity.ontologyRevision ||\n run.projection_revision !== identity.projectionRevision ||\n run.ownership_hash !== identity.ownershipHash)\n ) {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' immutable source identity does not match.`\n )\n }\n}\n\nexport function requireChanges(\n changes: number,\n kind: ConstructorParameters<typeof MaterializationConflictError>[0],\n message: string\n): void {\n if (changes !== 1) throw new MaterializationConflictError(kind, message)\n}\n\nexport function isSqliteConstraintError(error: unknown): boolean {\n if (!(error instanceof Error)) return false\n const details = error as Error & { readonly code?: unknown; readonly errno?: unknown }\n if (typeof details.code === \"string\") {\n return [\n \"SQLITE_CONSTRAINT_CHECK\",\n \"SQLITE_CONSTRAINT_FOREIGNKEY\",\n \"SQLITE_CONSTRAINT_NOTNULL\",\n \"SQLITE_CONSTRAINT_PRIMARYKEY\",\n \"SQLITE_CONSTRAINT_UNIQUE\",\n ].includes(details.code)\n }\n return details.errno === 19\n}\n",
45
+ "import type { CompiledSelectedObjectReadScope } from \"@sixb/core/storage\"\nimport {\n type CompiledObjectQuery,\n type SqliteObjectQuerySource,\n type SqliteValue,\n sqliteJsonEachValue,\n} from \"./query-compiler\"\n\nexport interface SqliteSelectedObjectReadSource extends SqliteObjectQuerySource {\n readonly objectPropertyPermissionsTable: string\n readonly traversalProbe: {\n readonly sql: string\n readonly args: readonly SqliteValue[]\n }\n}\n\n/**\n * Prepare one immutable selected scope as live, path-sensitive SQLite relations.\n *\n * The complete compiled scope is serialized once. Every statement receives that one JSON document\n * and the bound project id, keeping the host-parameter count constant as selections grow.\n * CROSS JOIN keeps authorized parents/grants before indexed edge/object lookups, even when\n * statistics would otherwise make SQLite rescan all grants for every stored object.\n * Property grants are grouped only after path-sensitive reachability has been resolved.\n * Expose identities from grants/visible, so flattened joins can seek those relations by key\n * before loading stored values. Exposing stored identities makes traversal rescan grants per edge.\n */\nexport function compileSqliteSelectedObjectReadSource(\n projectId: string,\n scope: CompiledSelectedObjectReadScope,\n maxTraversalFacts: number\n): SqliteSelectedObjectReadSource {\n const scopeJson = JSON.stringify({\n roots: scope.roots,\n objects: scope.objects,\n steps: scope.steps,\n })\n const compiled = compileSelectedReadScopeCte(scopeJson, projectId)\n const wrapStatement = (sql: string, args: readonly SqliteValue[] = []) => ({\n sql: `${compiled.sql}\\n${sql}`,\n args: [...compiled.args, ...args],\n })\n\n return Object.freeze({\n objectsTable: \"_sixb_scope_objects\",\n linksTable: \"_sixb_scope_links\",\n objectPropertyPermissionsTable: \"_sixb_scope_object_permissions\",\n wrapStatement,\n wrapQuery: (query: CompiledObjectQuery): CompiledObjectQuery => ({\n ...query,\n ...wrapStatement(query.sql, query.args),\n vectorProbe: query.vectorProbe\n ? { ...query.vectorProbe, ...wrapStatement(query.vectorProbe.sql, query.vectorProbe.args) }\n : undefined,\n totalSql: `${compiled.sql}\\n${query.totalSql}`,\n totalArgs: [...compiled.args, ...query.totalArgs],\n ...(query.hasMoreProbe\n ? {\n hasMoreProbe: {\n ...query.hasMoreProbe,\n ...wrapStatement(query.hasMoreProbe.sql, query.hasMoreProbe.args),\n },\n }\n : {}),\n }),\n traversalProbe: wrapStatement(\n `\n SELECT COUNT(*) AS total\n FROM (\n SELECT 1 AS traversal_fact\n FROM _sixb_scope_root_facts\n\n UNION ALL\n\n SELECT 1 AS traversal_fact\n FROM _sixb_scope_reached_links\n\n LIMIT ?\n ) AS bounded_traversal_facts\n `,\n [BigInt(maxTraversalFacts) + 1n]\n ),\n })\n}\n\ninterface CompiledReadScopeCte {\n readonly sql: string\n readonly args: readonly SqliteValue[]\n}\n\nfunction compileSelectedReadScopeCte(scopeJson: string, projectId: string): CompiledReadScopeCte {\n return {\n sql: `\n WITH RECURSIVE\n _sixb_scope_document(scope) AS (\n SELECT json(?)\n ),\n _sixb_scope_roots(root_id, node_id, object_type_id, primary_id) AS (\n SELECT\n CAST(root.key AS INTEGER),\n CAST(json_extract(root.value, '$.nodeId') AS INTEGER),\n CAST(json_extract(root.value, '$.objectTypeId') AS TEXT),\n CAST(json_extract(root.value, '$.primaryId') AS TEXT)\n FROM _sixb_scope_document AS document,\n json_each(json_extract(document.scope, '$.roots')) AS root\n ),\n _sixb_scope_root_facts(project_id, root_id, node_id, object_type_id, primary_id) AS (\n SELECT anchor.project_id, root.root_id, root.node_id, root.object_type_id, root.primary_id\n FROM _sixb_scope_roots AS root\n CROSS JOIN objects AS anchor\n ON anchor.project_id = ?\n AND anchor.object_type_id = root.object_type_id\n AND anchor.primary_id = root.primary_id\n ),\n _sixb_scope_object_selections(node_id, object_type_id, property_ids) AS (\n SELECT\n CAST(json_extract(selection.value, '$.nodeId') AS INTEGER),\n CAST(json_extract(selection.value, '$.objectTypeId') AS TEXT),\n json_extract(selection.value, '$.propertyIds')\n FROM _sixb_scope_document AS document,\n json_each(json_extract(document.scope, '$.objects')) AS selection\n ),\n _sixb_scope_link_selections(\n step_id,\n node_id,\n parent_node_id,\n source_object_type_id,\n link_id,\n target_object_type_id,\n property_ids\n ) AS (\n SELECT\n CAST(step.key AS INTEGER),\n CAST(json_extract(step.value, '$.nodeId') AS INTEGER),\n CAST(json_extract(step.value, '$.parentNodeId') AS INTEGER),\n CAST(json_extract(step.value, '$.sourceObjectTypeId') AS TEXT),\n CAST(json_extract(step.value, '$.linkId') AS TEXT),\n CAST(json_extract(step.value, '$.targetObjectTypeId') AS TEXT),\n json_extract(step.value, '$.propertyIds')\n FROM _sixb_scope_document AS document,\n json_each(json_extract(document.scope, '$.steps')) AS step\n ),\n _sixb_scope_reachable(project_id, node_id, object_type_id, primary_id) AS (\n SELECT root.project_id, root.node_id, root.object_type_id, root.primary_id\n FROM _sixb_scope_root_facts AS root\n\n UNION\n\n SELECT edge.project_id, selection.node_id, edge.target_type_id, edge.target_id\n FROM _sixb_scope_reachable AS parent\n CROSS JOIN _sixb_scope_link_selections AS selection\n ON selection.parent_node_id = parent.node_id\n AND selection.source_object_type_id = parent.object_type_id\n CROSS JOIN links AS edge\n ON edge.project_id = parent.project_id\n AND edge.source_type_id = parent.object_type_id\n AND edge.source_id = parent.primary_id\n AND edge.link_id = selection.link_id\n AND edge.target_type_id = selection.target_object_type_id\n CROSS JOIN objects AS target\n ON target.project_id = edge.project_id\n AND target.object_type_id = edge.target_type_id\n AND target.primary_id = edge.target_id\n ),\n _sixb_scope_object_permissions(project_id, object_type_id, primary_id, property_id) AS (\n SELECT DISTINCT\n reachable.project_id,\n reachable.object_type_id,\n reachable.primary_id,\n CAST(selected_property.value AS TEXT)\n FROM _sixb_scope_reachable AS reachable\n JOIN _sixb_scope_object_selections AS selection\n ON selection.node_id = reachable.node_id\n AND selection.object_type_id = reachable.object_type_id\n JOIN json_each(selection.property_ids) AS selected_property\n ),\n _sixb_scope_object_ids(project_id, object_type_id, primary_id) AS (\n SELECT DISTINCT project_id, object_type_id, primary_id\n FROM _sixb_scope_reachable\n ),\n _sixb_scope_object_grants AS (\n SELECT reachable.project_id, reachable.object_type_id, reachable.primary_id,\n json_group_array(DISTINCT selected_property.value) FILTER (WHERE selected_property.value IS NOT NULL) AS property_ids\n FROM _sixb_scope_reachable AS reachable\n LEFT JOIN _sixb_scope_object_selections AS selection\n ON selection.node_id = reachable.node_id\n AND selection.object_type_id = reachable.object_type_id\n LEFT JOIN json_each(selection.property_ids) AS selected_property ON true\n GROUP BY reachable.project_id, reachable.object_type_id, reachable.primary_id\n ),\n _sixb_scope_objects AS (\n SELECT grants.project_id, grants.object_type_id, grants.primary_id,\n COALESCE((\n SELECT json_group_object(property.key, ${sqliteJsonEachValue(\"property\")})\n FROM json_each(stored.properties) AS property\n WHERE property.key IN (SELECT value FROM json_each(grants.property_ids))\n ), json('{}')) AS properties,\n stored.created_at, stored.updated_at, stored.version, stored.last_commit_id\n FROM _sixb_scope_object_grants AS grants\n CROSS JOIN objects AS stored\n ON stored.project_id = grants.project_id\n AND stored.object_type_id = grants.object_type_id\n AND stored.primary_id = grants.primary_id\n ),\n _sixb_scope_reached_links(\n project_id,\n step_id,\n node_id,\n parent_node_id,\n source_type_id,\n source_id,\n link_id,\n target_type_id,\n target_id,\n property_ids\n ) AS (\n SELECT\n edge.project_id,\n selection.step_id,\n selection.node_id,\n selection.parent_node_id,\n edge.source_type_id,\n edge.source_id,\n edge.link_id,\n edge.target_type_id,\n edge.target_id,\n selection.property_ids\n FROM _sixb_scope_reachable AS parent\n CROSS JOIN _sixb_scope_link_selections AS selection\n ON selection.parent_node_id = parent.node_id\n AND selection.source_object_type_id = parent.object_type_id\n CROSS JOIN links AS edge\n ON edge.project_id = parent.project_id\n AND edge.source_type_id = parent.object_type_id\n AND edge.source_id = parent.primary_id\n AND edge.link_id = selection.link_id\n AND edge.target_type_id = selection.target_object_type_id\n CROSS JOIN objects AS target\n ON target.project_id = edge.project_id\n AND target.object_type_id = edge.target_type_id\n AND target.primary_id = edge.target_id\n ),\n _sixb_scope_link_permissions(\n project_id,\n source_type_id,\n source_id,\n link_id,\n target_type_id,\n target_id,\n property_id\n ) AS (\n SELECT DISTINCT\n reached.project_id,\n reached.source_type_id,\n reached.source_id,\n reached.link_id,\n reached.target_type_id,\n reached.target_id,\n CAST(selected_property.value AS TEXT)\n FROM _sixb_scope_reached_links AS reached\n JOIN json_each(reached.property_ids) AS selected_property\n ),\n _sixb_scope_link_ids(\n project_id,\n source_type_id,\n source_id,\n link_id,\n target_type_id,\n target_id\n ) AS (\n SELECT DISTINCT\n project_id,\n source_type_id,\n source_id,\n link_id,\n target_type_id,\n target_id\n FROM _sixb_scope_reached_links\n ),\n _sixb_scope_links AS (\n SELECT\n visible.project_id,\n visible.source_type_id,\n visible.source_id,\n visible.link_id,\n visible.target_type_id,\n visible.target_id,\n CASE\n WHEN stored.properties IS NULL THEN NULL\n ELSE NULLIF(\n (\n SELECT json_group_object(property.key, ${sqliteJsonEachValue(\"property\")})\n FROM json_each(stored.properties) AS property\n JOIN _sixb_scope_link_permissions AS permission\n ON permission.project_id = stored.project_id\n AND permission.source_type_id = stored.source_type_id\n AND permission.source_id = stored.source_id\n AND permission.link_id = stored.link_id\n AND permission.target_type_id = stored.target_type_id\n AND permission.target_id = stored.target_id\n AND permission.property_id = property.key\n ),\n json('{}')\n )\n END AS properties,\n stored.created_at,\n stored.updated_at,\n stored.last_commit_id\n FROM links AS stored\n JOIN _sixb_scope_link_ids AS visible\n ON visible.project_id = stored.project_id\n AND visible.source_type_id = stored.source_type_id\n AND visible.source_id = stored.source_id\n AND visible.link_id = stored.link_id\n AND visible.target_type_id = stored.target_type_id\n AND visible.target_id = stored.target_id\n )\n `,\n args: [scopeJson, projectId],\n }\n}\n",
46
+ "import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure } from \"@sixb/core/internal/errors\"\nimport { MaterializationConflictError } from \"@sixb/core/internal/materialization\"\nimport {\n sourceAssertionFromColumns,\n sourceEntityFromKey,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n AssertSourceMaterializationExecutionInput,\n OntologyCommitRecord,\n OntologyCommitWrite,\n OntologyOutboxRecord,\n OntologySourceRecord,\n StageSourceAssertion,\n} from \"@sixb/core/storage\"\nimport { ONTOLOGY_OUTBOX_FAILURE_CODES } from \"@sixb/core/storage\"\n\nexport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertTimestamp,\n canonicalJson,\n linkRefFromColumns,\n objectRefFromColumns,\n originColumns,\n originWhere,\n sourceEntityKey,\n} from \"@sixb/core/internal/ontology-storage-provider\"\n\nexport type SqliteRootOperation = <T>(run: () => Promise<T> | T) => Promise<T>\n\nexport interface SqliteOntologyCommitRow {\n readonly project_id: string\n readonly id: string\n readonly idempotency_key: string\n readonly request_hash: string\n readonly execution_id: string\n readonly origin_kind: string\n readonly origin_run_id: string | null\n readonly origin_batch_ordinal: number | null\n readonly origin: string\n readonly requested_by: string | null\n readonly executor: string\n readonly ontology_revision: string\n readonly projection_revision: string | null\n readonly ownership_hash: string | null\n readonly intent: string\n readonly result: string\n readonly committed_at: string\n}\n\nexport interface SqliteOntologySourceRow {\n readonly version_id: number\n readonly project_id: string\n readonly source_id: string\n readonly materialization_id: string\n readonly projection_run_id: string\n readonly projection_kind: \"object\" | \"link\"\n readonly protocol: \"replacement\"\n readonly status: OntologySourceRecord[\"status\"]\n readonly execution_token: string | null\n readonly dataset_id: string\n readonly dataset_version_id: string\n readonly dataset_version_created_at: string\n readonly projection_revision: string\n readonly ownership_hash: string\n readonly ontology_revision: string\n readonly root_count: number | null\n readonly base_materialization_id: string | null\n readonly base_commit_id: string | null\n readonly assertion_count: number | null\n readonly created_at: string\n readonly ready_at: string | null\n readonly activated_at: string | null\n readonly terminal_at: string | null\n readonly last_commit_id: string | null\n readonly updated_at: string\n}\n\n/** An assertion with its root and version, as `SOURCE_ASSERTION_COLUMNS` selects it. */\nexport interface SqliteOntologySourceAssertionRow {\n readonly source_id: string\n readonly materialization_id: string\n readonly root_key: string\n readonly staging_ordinal: number\n readonly entity_kind: \"object\" | \"link\"\n readonly object_type_id: string | null\n readonly primary_id: string | null\n readonly source_type_id: string | null\n readonly source_primary_id: string | null\n readonly link_id: string | null\n readonly target_type_id: string | null\n readonly target_primary_id: string | null\n readonly payload: string | null\n}\n\nexport interface SqliteStoredOverrideRow {\n readonly value: string\n readonly last_commit_id: string\n readonly updated_at: string\n}\n\nexport interface SqliteOntologyOutboxRow {\n readonly envelope: string\n readonly available_at: string\n readonly attempts: number\n readonly lease_id: string | null\n readonly lease_expires_at: string | null\n readonly published_at: string | null\n readonly last_failure: string | null\n readonly created_at: string\n}\n\nexport function parseJson<T>(value: string): T {\n return JSON.parse(value) as T\n}\n\nexport function sourceRecord(row: SqliteOntologySourceRow): OntologySourceRecord {\n return {\n projectId: row.project_id,\n source: { projectionId: row.source_id },\n materializationId: row.materialization_id,\n projectionRunId: row.projection_run_id,\n projectionKind: row.projection_kind,\n protocol: row.protocol,\n status: row.status,\n executionToken: row.execution_token,\n datasetVersion: {\n datasetId: row.dataset_id,\n versionId: row.dataset_version_id,\n createdAt: row.dataset_version_created_at,\n },\n projectionRevision: row.projection_revision,\n ownershipHash: row.ownership_hash,\n ontologyRevision: row.ontology_revision,\n ...(row.base_materialization_id === null\n ? {}\n : {\n base: {\n materializationId: row.base_materialization_id,\n lastCommitId: row.base_commit_id!,\n },\n }),\n rootCount: row.root_count,\n assertionCount: row.assertion_count,\n createdAt: row.created_at,\n readyAt: row.ready_at,\n activatedAt: row.activated_at,\n terminalAt: row.terminal_at,\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nexport function sourceAssertion(row: SqliteOntologySourceAssertionRow): StageSourceAssertion {\n return {\n root: sourceEntityFromKey(row.root_key),\n assertion: sourceAssertionFromColumns(\n row,\n row.payload === null ? null : parseJson<unknown>(row.payload)\n ),\n stagingOrdinal: row.staging_ordinal,\n }\n}\n\nexport function commitRecord(row: SqliteOntologyCommitRow): OntologyCommitRecord {\n const base = {\n projectId: row.project_id,\n id: row.id,\n idempotencyKey: row.idempotency_key,\n requestHash: row.request_hash,\n executionId: row.execution_id,\n origin: parseJson<OntologyCommitWrite[\"origin\"]>(row.origin),\n ...(row.requested_by === null\n ? {}\n : {\n requestedBy: parseJson<NonNullable<OntologyCommitWrite[\"requestedBy\"]>>(row.requested_by),\n }),\n executor: parseJson<OntologyCommitWrite[\"executor\"]>(row.executor),\n ontologyRevision: row.ontology_revision,\n ...(row.projection_revision === null ? {} : { projectionRevision: row.projection_revision }),\n ...(row.ownership_hash === null ? {} : { ownershipHash: row.ownership_hash }),\n committedAt: row.committed_at,\n }\n const intent = parseJson<OntologyCommitWrite[\"intent\"]>(row.intent)\n const result = parseJson<OntologyCommitRecord[\"result\"]>(row.result)\n return { ...base, intent, result } as OntologyCommitRecord\n}\n\nexport function outboxRecord(row: SqliteOntologyOutboxRow): OntologyOutboxRecord {\n return {\n envelope: parseJson<OntologyOutboxRecord[\"envelope\"]>(row.envelope),\n availableAt: row.available_at,\n attempts: row.attempts,\n leaseId: row.lease_id,\n leaseExpiresAt: row.lease_expires_at,\n publishedAt: row.published_at,\n lastFailure:\n row.last_failure === null\n ? null\n : parseSixbFailure(row.last_failure, ONTOLOGY_OUTBOX_FAILURE_CODES),\n createdAt: row.created_at,\n }\n}\n\nexport function assertProjectionExecution(\n db: Database,\n input: {\n readonly projectId: string\n readonly sourceId: string\n readonly projectionRunId: string\n readonly executionToken: string\n readonly identity?: AssertSourceMaterializationExecutionInput[\"identity\"]\n }\n): void {\n const run = db\n .query(\n `\n SELECT projection_id, projection_kind, status, materialization_protocol, execution_token,\n dataset_id, dataset_version_id, dataset_version_created_at,\n ontology_revision, projection_revision, ownership_hash\n FROM projection_runs\n WHERE project_id = ? AND id = ?\n `\n )\n .get(input.projectId, input.projectionRunId) as {\n projection_id: string\n projection_kind: string\n status: string\n materialization_protocol: string | null\n execution_token: string | null\n dataset_id: string\n dataset_version_id: string\n dataset_version_created_at: string | null\n ontology_revision: string | null\n projection_revision: string | null\n ownership_hash: string | null\n } | null\n if (!run || run.status !== \"running\") {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' is missing or is not running.`\n )\n }\n if (run.projection_id !== input.sourceId || run.materialization_protocol !== \"replacement\") {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' does not own replacement source '${input.sourceId}'.`\n )\n }\n if (run.execution_token !== input.executionToken) {\n throw new MaterializationConflictError(\n \"execution-lost\",\n `Projection run '${input.projectionRunId}' execution token is stale.`\n )\n }\n const identity = input.identity\n if (\n identity &&\n (run.projection_kind !== identity.projectionKind ||\n run.materialization_protocol !== identity.protocol ||\n run.dataset_id !== identity.datasetVersion.datasetId ||\n run.dataset_version_id !== identity.datasetVersion.versionId ||\n run.dataset_version_created_at !== identity.datasetVersion.createdAt ||\n run.ontology_revision !== identity.ontologyRevision ||\n run.projection_revision !== identity.projectionRevision ||\n run.ownership_hash !== identity.ownershipHash)\n ) {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' immutable source identity does not match.`\n )\n }\n}\n\nexport function requireChanges(\n changes: number,\n kind: ConstructorParameters<typeof MaterializationConflictError>[0],\n message: string\n): void {\n if (changes !== 1) throw new MaterializationConflictError(kind, message)\n}\n\nexport function isSqliteConstraintError(error: unknown): boolean {\n if (!(error instanceof Error)) return false\n const details = error as Error & { readonly code?: unknown; readonly errno?: unknown }\n if (typeof details.code === \"string\") {\n return [\n \"SQLITE_CONSTRAINT_CHECK\",\n \"SQLITE_CONSTRAINT_FOREIGNKEY\",\n \"SQLITE_CONSTRAINT_NOTNULL\",\n \"SQLITE_CONSTRAINT_PRIMARYKEY\",\n \"SQLITE_CONSTRAINT_UNIQUE\",\n ].includes(details.code)\n }\n return details.errno === 19\n}\n",
47
47
  "import type { Database } from \"bun:sqlite\"\nimport type {\n GetOntologyCommitByIdempotencyKeyInput,\n GetOntologyCommitByIdInput,\n GetOntologyCommitByOriginInput,\n ListOntologyCommitsInput,\n ListOntologyCommitsResult,\n OntologyCommitRecord,\n OntologyCommitStorage,\n} from \"@sixb/core/storage\"\nimport {\n assertNonblank,\n assertNonnegativeInteger,\n commitRecord,\n originWhere,\n type SqliteOntologyCommitRow,\n type SqliteRootOperation,\n} from \"./shared\"\n\nexport class SqliteOntologyCommitStorage implements OntologyCommitStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation\n ) {}\n\n async getByIdempotencyKey(\n input: GetOntologyCommitByIdempotencyKeyInput\n ): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n assertNonblank(input.idempotencyKey, \"Ontology commit idempotency key\")\n return this.readOne(\n \"project_id = ? AND idempotency_key = ?\",\n input.projectId,\n input.idempotencyKey\n )\n })\n }\n\n async getById(input: GetOntologyCommitByIdInput): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n assertNonblank(input.id, \"Ontology commit id\")\n return this.readOne(\"project_id = ? AND id = ?\", input.projectId, input.id)\n })\n }\n\n async getByOrigin(input: GetOntologyCommitByOriginInput): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n const origin = originWhere(input.origin)\n assertNonblank(origin.runId, \"Ontology commit origin run id\")\n if (origin.batchOrdinal !== null) {\n assertNonnegativeInteger(origin.batchOrdinal, \"Ontology telemetry commit batch ordinal\")\n }\n return origin.batchOrdinal === null\n ? this.readOne(\n \"project_id = ? AND origin_kind = ? AND origin_run_id = ? AND origin_batch_ordinal IS NULL\",\n input.projectId,\n origin.kind,\n origin.runId\n )\n : this.readOne(\n \"project_id = ? AND origin_kind = ? AND origin_run_id = ? AND origin_batch_ordinal = ?\",\n input.projectId,\n origin.kind,\n origin.runId,\n origin.batchOrdinal\n )\n })\n }\n\n async list(input: ListOntologyCommitsInput): Promise<ListOntologyCommitsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n if (input.run) assertNonblank(input.run.id, \"Ontology commit run id\")\n const offset = input.offset ?? 0\n const limit = input.limit ?? -1\n assertNonnegativeInteger(offset, \"Ontology commit list offset\")\n if (limit !== -1) assertNonnegativeInteger(limit, \"Ontology commit list limit\")\n const filters = [\"project_id = ?\"]\n const values: (string | number)[] = [input.projectId]\n if (input.run?.kind === \"action\") {\n filters.push(\"origin_kind = 'action' AND origin_run_id = ?\")\n values.push(input.run.id)\n } else if (input.run?.kind === \"projection\") {\n filters.push(\"origin_run_id = ? AND origin_kind IN ('projection', 'telemetry')\")\n values.push(input.run.id)\n }\n const where = filters.join(\" AND \")\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS total FROM ontology_commits WHERE ${where}`)\n .get(...values) as { readonly total: number }\n const direction = input.order === \"desc\" ? \"DESC\" : \"ASC\"\n const order =\n input.run?.kind === \"projection\"\n ? `CASE WHEN origin_kind = 'telemetry' THEN origin_batch_ordinal ELSE -1 END ${direction}, committed_at ${direction}, id ${direction}`\n : `committed_at ${direction}, id ${direction}`\n const rows = this.db\n .query(\n `\n SELECT * FROM ontology_commits\n WHERE ${where}\n ORDER BY ${order}\n LIMIT ? OFFSET ?\n `\n )\n .all(...values, limit, offset) as SqliteOntologyCommitRow[]\n const commits = rows.map(commitRecord)\n return {\n commits,\n total: totalRow.total,\n hasMore: offset + commits.length < totalRow.total,\n }\n })\n }\n\n private readOne(\n where: string,\n ...values: readonly (string | number)[]\n ): OntologyCommitRecord | null {\n const row = this.db\n .query(`SELECT * FROM ontology_commits WHERE ${where}`)\n .get(...values) as SqliteOntologyCommitRow | null\n return row ? commitRecord(row) : null\n }\n}\n",
48
48
  "import type { Database } from \"bun:sqlite\"\nimport {\n assertPinnedDatasetWatermark,\n linkRefKey,\n linkRefSortKey,\n linkScopeSortKey,\n MaterializationConflictError,\n MaterializationValidationError,\n objectRefKey,\n objectRefSortKey,\n telemetryPointKey,\n telemetryPointSortKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n assertExpectedLinkRevision,\n assertExpectedLinkScopeRevision,\n assertExpectedObjectRevision,\n assertMaterializationFinalizationCorrelation,\n assertMaterializationHeader,\n assertMaterializationLaneCompletion,\n assertPageRows,\n assertPlanChunkCorrelations,\n assertSourceActivationCorrelation,\n invalidCorrelation,\n sameNonnegativeCounts as sameCounts,\n uniqueSorted,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n ApplyMaterializationChunkInput,\n ApplyMaterializationResult,\n FinalizeMaterializationInput,\n MaterializationObjectExistence,\n MaterializationPlanHeader,\n MaterializationSession,\n MaterializationStatePage,\n MaterializationWorkPage,\n OntologyCommitRecord,\n OntologyMaterializationStorage,\n ReadMaterializationObjectExistenceInput,\n SourceActivationWrite,\n SourceReplacementStatePage,\n StageMaterializationWorkInput,\n StreamMaterializationStateInput,\n StreamMaterializationWorkInput,\n StreamSourceReplacementStateInput,\n} from \"@sixb/core/storage\"\nimport { yieldSqliteEventLoop } from \"../transactions\"\nimport {\n type SqliteMaterializationSessionState,\n SqliteMaterializationSessions,\n type SqliteOntologyTransactionContext,\n} from \"./materialization-session\"\nimport {\n SQLITE_MATERIALIZATION_WORK_TABLE,\n SqliteMaterializationStateReader,\n} from \"./materialization-state\"\nimport { SqliteMaterializationWriter } from \"./materialization-writer\"\nimport {\n assertProjectionExecution,\n canonicalJson,\n commitRecord,\n isSqliteConstraintError,\n originColumns,\n requireChanges,\n type SqliteOntologyCommitRow,\n type SqliteOntologySourceRow,\n} from \"./shared\"\nimport { activateSourceRoots } from \"./source-roots\"\n\nexport class SqliteOntologyMaterializationStorage implements OntologyMaterializationStorage {\n private readonly sessions: SqliteMaterializationSessions\n private readonly writer: SqliteMaterializationWriter\n\n constructor(\n private readonly db: Database,\n context: SqliteOntologyTransactionContext | null\n ) {\n this.sessions = new SqliteMaterializationSessions(db, context)\n this.writer = new SqliteMaterializationWriter(db)\n }\n\n assertVectorSession(session: MaterializationSession, projectId: string, commitId?: string): void {\n const active = this.sessions.require(session)\n if (\n active.header.commit.projectId !== projectId ||\n (commitId !== undefined && active.header.commit.id !== commitId)\n ) {\n throw new MaterializationValidationError(\n \"Vector mutation does not belong to this materialization session.\"\n )\n }\n }\n\n async begin(input: MaterializationPlanHeader): Promise<MaterializationSession> {\n assertMaterializationHeader(input)\n const session = this.sessions.create(input)\n try {\n this.assertCommitAbsent(input)\n const reader = new SqliteMaterializationStateReader(this.db, input.commit.projectId)\n for (const expected of input.expected.sources)\n this.assertSource(expected, input.commit.projectId)\n for (const expected of input.expected.objects) {\n assertExpectedObjectRevision(reader.effectiveObjectRevision(expected.ref), expected)\n }\n for (const expected of input.expected.links) {\n assertExpectedLinkRevision(reader.effectiveLinkLastCommit(expected.ref), expected)\n }\n const linkScopeRevisions = reader.linkScopeRevisions(input.expected.linkScopes)\n for (const [index, expected] of input.expected.linkScopes.entries()) {\n assertExpectedLinkScopeRevision(linkScopeRevisions[index]?.fingerprint, expected)\n }\n for (const expected of input.expected.points) {\n const point = reader.exactPoint(expected.series, expected.at)\n if ((point?.lastCommitId ?? null) !== expected.lastCommitId) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(expected.series, expected.at)} changed.`\n )\n }\n }\n return session.publicSession()\n } catch (error) {\n this.sessions.release(session)\n throw error\n }\n }\n\n async *streamState(\n input: StreamMaterializationStateInput\n ): AsyncIterable<MaterializationStatePage> {\n const session = this.sessions.require(input.session)\n assertPageRows(input.pageRows)\n const reader = new SqliteMaterializationStateReader(this.db, session.header.commit.projectId)\n for await (const request of input.requests) {\n this.sessions.require(input.session)\n const objects = uniqueSorted(request.objects, objectRefKey, objectRefSortKey)\n for (let offset = 0; offset < objects.length; offset += input.pageRows) {\n const page = reader.objectStates(objects.slice(offset, offset + input.pageRows))\n yield { objects: page, links: [], linkScopes: [], points: [] }\n }\n const links = uniqueSorted(request.links, linkRefKey, linkRefSortKey)\n for (let offset = 0; offset < links.length; offset += input.pageRows) {\n const page = reader.linkStates(links.slice(offset, offset + input.pageRows))\n yield { objects: [], links: page, linkScopes: [], points: [] }\n }\n for (const refs of reader.incidentLinks(request.incidentObjects, input.pageRows)) {\n this.sessions.require(input.session)\n yield {\n objects: [],\n links: reader.linkStates(refs),\n linkScopes: [],\n points: [],\n }\n }\n const scopes = uniqueSorted(\n request.linkScopes,\n (scope) =>\n JSON.stringify([scope.source.objectTypeId, scope.source.primaryId, scope.linkId]),\n (scope) => linkScopeSortKey(scope.source, scope.linkId)\n )\n for (let offset = 0; offset < scopes.length; offset += input.pageRows) {\n yield {\n objects: [],\n links: [],\n linkScopes: reader.linkSlotStates(scopes.slice(offset, offset + input.pageRows)),\n points: [],\n }\n }\n const points = uniqueSorted(\n request.points,\n (point) => telemetryPointKey(point.series, point.at),\n (point) => telemetryPointSortKey(point.series, point.at)\n )\n for (let offset = 0; offset < points.length; offset += input.pageRows) {\n const page = reader.exactPoints(points.slice(offset, offset + input.pageRows))\n if (page.length > 0) yield { objects: [], links: [], linkScopes: [], points: page }\n }\n }\n }\n\n async *streamSourceReplacementState(\n input: StreamSourceReplacementStateInput\n ): AsyncIterable<SourceReplacementStatePage> {\n const session = this.sessions.require(input.session)\n assertPageRows(input.pageRows)\n const replacement = this.requireReplacement(session, input)\n const reader = new SqliteMaterializationStateReader(this.db, session.header.commit.projectId)\n if (input.entityKind === \"object\") {\n if (replacement.projectionKind !== \"object\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Link projection replacement cannot stream object state.\"\n )\n }\n if (replacement.objectStreamStarted) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Replacement object state may only be streamed once per session.\"\n )\n }\n replacement.objectStreamStarted = true\n for (const identities of reader.replacementIdentities({\n sessionId: session.id,\n sourceId: replacement.sourceId,\n candidateMaterializationId: replacement.candidateMaterializationId,\n previousMaterializationId: replacement.previousMaterializationId,\n incremental: replacement.incremental,\n kind: \"object\",\n pageRows: input.pageRows,\n })) {\n this.sessions.require(input.session)\n const refs = identities.map((identity) => {\n if (identity.kind !== \"object\") {\n invalidCorrelation(\"Object replacement returned a link identity.\")\n }\n return identity.ref\n })\n const objects = reader.replacementObjectStates(\n replacement.sourceId,\n replacement.candidateMaterializationId,\n refs\n )\n yield { objects, links: [] }\n }\n this.sessions.require(input.session)\n replacement.objectStreamCompleted = true\n return\n }\n\n if (replacement.projectionKind === \"object\" && !replacement.objectStreamCompleted) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Object projection replacement must fully stream object state before link state.\"\n )\n }\n if (replacement.linkStreamStarted) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Replacement link state may only be streamed once per session.\"\n )\n }\n replacement.linkStreamStarted = true\n const materializationIds = [\n replacement.candidateMaterializationId,\n ...(replacement.previousMaterializationId ? [replacement.previousMaterializationId] : []),\n ]\n for (const identities of reader.replacementIdentities({\n sessionId: session.id,\n sourceId: replacement.sourceId,\n candidateMaterializationId: replacement.candidateMaterializationId,\n previousMaterializationId: replacement.previousMaterializationId,\n incremental: replacement.incremental,\n kind: \"link\",\n pageRows: input.pageRows,\n })) {\n this.sessions.require(input.session)\n const linkIdentities = identities.map((identity) => {\n if (identity.kind !== \"link\") {\n invalidCorrelation(\"Link replacement returned an object identity.\")\n }\n return identity\n })\n const links = reader.replacementLinkStates(\n replacement.sourceId,\n replacement.candidateMaterializationId,\n materializationIds,\n linkIdentities,\n replacement.incremental\n )\n yield { objects: [], links }\n }\n this.sessions.require(input.session)\n replacement.linkStreamCompleted = true\n }\n\n async stageWork(input: StageMaterializationWorkInput): Promise<void> {\n this.sessions.stage(input)\n await yieldSqliteEventLoop()\n }\n\n streamWork(input: StreamMaterializationWorkInput): AsyncIterable<MaterializationWorkPage> {\n assertPageRows(input.pageRows)\n return this.sessions.stream(input)\n }\n\n async readObjectExistence(\n input: ReadMaterializationObjectExistenceInput\n ): Promise<readonly MaterializationObjectExistence[]> {\n const session = this.sessions.require(input.session)\n return this.sessions.readObjectExistence(session, input.refs)\n }\n\n async applyChunk(input: ApplyMaterializationChunkInput): Promise<void> {\n const session = this.sessions.require(input.session)\n const { commit } = session.header\n assertPlanChunkCorrelations(input.chunk, commit)\n const sequence = this.sessions.prepareChunkSequence(session, input.chunk)\n this.db.run(\"SAVEPOINT sixb_ontology_apply_chunk\")\n try {\n this.writer.apply(commit.projectId, commit.id, input.chunk)\n this.db.run(\"RELEASE SAVEPOINT sixb_ontology_apply_chunk\")\n this.sessions.commitChunkSequence(session, sequence)\n } catch (error) {\n this.db.run(\"ROLLBACK TO SAVEPOINT sixb_ontology_apply_chunk\")\n this.db.run(\"RELEASE SAVEPOINT sixb_ontology_apply_chunk\")\n throw error\n }\n await yieldSqliteEventLoop()\n }\n\n async finalize(input: FinalizeMaterializationInput): Promise<ApplyMaterializationResult> {\n const session = this.sessions.require(input.session)\n this.assertCommitAbsent(session.header)\n await this.assertFinalization(session, input)\n for (const activation of input.finalization.sourceActivations) {\n this.activateSource(session, activation)\n }\n const record = this.insertCommit(session.header, input)\n this.sessions.release(session)\n return { commit: record }\n }\n\n deactivateSessions(): void {\n this.sessions.deactivateAll()\n }\n\n private requireReplacement(\n session: SqliteMaterializationSessionState,\n input: StreamSourceReplacementStateInput\n ): NonNullable<SqliteMaterializationSessionState[\"replacement\"]> {\n if (session.replacement) {\n if (\n session.replacement.sourceId !== input.source.projectionId ||\n session.replacement.candidateMaterializationId !== input.candidateMaterializationId\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Materialization session already owns another replacement union.\"\n )\n }\n return session.replacement\n }\n const projectId = session.header.commit.projectId\n const candidate = this.getSource(\n projectId,\n input.source.projectionId,\n input.candidateMaterializationId\n )\n if (!candidate || candidate.status !== \"ready\" || candidate.execution_token === null) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Candidate source materialization '${input.candidateMaterializationId}' is missing or is not ready.`\n )\n }\n assertProjectionExecution(this.db, {\n projectId,\n sourceId: input.source.projectionId,\n projectionRunId: candidate.projection_run_id,\n executionToken: candidate.execution_token,\n })\n const previous = this.getActiveSource(projectId, input.source.projectionId)\n if (\n candidate.protocol !== \"replacement\" ||\n (previous &&\n (previous.protocol !== candidate.protocol ||\n previous.projection_kind !== candidate.projection_kind))\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source replacement kind or protocol does not match its active materialization.\"\n )\n }\n session.replacement = {\n sourceId: input.source.projectionId,\n candidateMaterializationId: input.candidateMaterializationId,\n previousMaterializationId: previous?.materialization_id ?? null,\n incremental: candidate.base_materialization_id !== null,\n projectionKind: candidate.projection_kind,\n objectStreamStarted: false,\n objectStreamCompleted: false,\n linkStreamStarted: false,\n linkStreamCompleted: false,\n }\n return session.replacement\n }\n\n private assertCommitAbsent(header: MaterializationPlanHeader): void {\n const origin = originColumns(header.commit.origin)\n const duplicate = this.db\n .query(\n `\n SELECT CASE\n WHEN id = ? THEN 'id'\n WHEN idempotency_key = ? THEN 'idempotency'\n ELSE 'origin'\n END AS duplicate\n FROM ontology_commits\n WHERE project_id = ? AND (\n id = ? OR idempotency_key = ? OR (\n ? IS NOT NULL AND origin_kind = ? AND origin_run_id = ?\n AND (origin_batch_ordinal IS ? OR origin_batch_ordinal = ?)\n )\n )\n LIMIT 1\n `\n )\n .get(\n header.commit.id,\n header.commit.idempotencyKey,\n header.commit.projectId,\n header.commit.id,\n header.commit.idempotencyKey,\n origin.runId,\n origin.kind,\n origin.runId,\n origin.batchOrdinal,\n origin.batchOrdinal\n ) as { readonly duplicate: \"id\" | \"idempotency\" | \"origin\" } | null\n if (!duplicate) return\n if (duplicate.duplicate === \"origin\") {\n throw new MaterializationConflictError(\n \"run-correlation\",\n \"Ontology commit origin already has an authoritative commit.\"\n )\n }\n throw new MaterializationConflictError(\n \"idempotency\",\n duplicate.duplicate === \"id\"\n ? `Ontology commit '${header.commit.id}' already exists.`\n : \"Ontology idempotency key already exists.\"\n )\n }\n\n private assertSource(\n expected: MaterializationPlanHeader[\"expected\"][\"sources\"][number],\n projectId: string\n ): void {\n const active = this.getActiveSource(projectId, expected.source.projectionId)\n if (\n (active?.materialization_id ?? null) !== expected.activeMaterializationId ||\n (active?.last_commit_id ?? null) !== expected.lastCommitId\n ) {\n throw new MaterializationConflictError(\n \"projection-fence\",\n `Source '${expected.source.projectionId}' changed.`\n )\n }\n }\n\n private async assertFinalization(\n session: SqliteMaterializationSessionState,\n input: FinalizeMaterializationInput\n ): Promise<void> {\n const { commit } = session.header\n const { result } = input.finalization\n assertMaterializationFinalizationCorrelation(session, input)\n const laneCounts = this.sessions.laneCounts(session)\n assertMaterializationLaneCompletion(session, laneCounts)\n this.assertFinalCardinality(session)\n await yieldSqliteEventLoop()\n const eventCount = laneCounts.event\n const outbox = this.db\n .query(\n `\n SELECT COUNT(*) AS count, MIN(commit_ordinal) AS minimum, MAX(commit_ordinal) AS maximum\n FROM ontology_outbox WHERE project_id = ? AND commit_id = ?\n `\n )\n .get(commit.projectId, commit.id) as {\n readonly count: number\n readonly minimum: number | null\n readonly maximum: number | null\n }\n if (\n outbox.count !== eventCount ||\n (eventCount > 0 && (outbox.minimum !== 0 || outbox.maximum !== eventCount - 1))\n ) {\n invalidCorrelation(\"Outbox event ordinals must be contiguous from zero.\")\n }\n await yieldSqliteEventLoop()\n\n if (commit.intent.kind === \"telemetry\") {\n const summary = this.sessions.telemetrySummary(session, commit.intent.pointCount)\n await yieldSqliteEventLoop()\n if (summary.classifiedPoints !== commit.intent.pointCount) {\n invalidCorrelation(\n \"Telemetry point classification coverage does not match the commit intent.\"\n )\n }\n if (result.kind !== \"telemetry\" || !sameCounts(result, summary.counts)) {\n invalidCorrelation(\"Telemetry result counts do not correlate with finalized work.\")\n }\n }\n if (commit.intent.kind === \"projection\") {\n if (result.kind !== \"projection\") return\n this.sessions.assertClassificationCoverage(session)\n await yieldSqliteEventLoop()\n const counts = this.sessions.projectionCounts(session)\n await yieldSqliteEventLoop()\n if (!sameCounts(result.counts, counts)) {\n invalidCorrelation(\"Projection result counts do not correlate with finalized work.\")\n }\n }\n }\n\n private assertFinalCardinality(session: SqliteMaterializationSessionState): void {\n const violation = this.db\n .query(\n `\n WITH scopes AS (\n SELECT sort_one AS scope_sort_key,\n cardinality_source_type_id AS source_type_id,\n cardinality_source_primary_id AS source_id,\n cardinality_link_id AS link_id,\n SUM(cardinality_occupied) AS expected_count,\n MAX(CASE WHEN cardinality_occupied = 1\n THEN cardinality_target_type_id END) AS expected_target_type_id,\n MAX(CASE WHEN cardinality_occupied = 1\n THEN cardinality_target_primary_id END) AS expected_target_id\n FROM ${SQLITE_MATERIALIZATION_WORK_TABLE}\n WHERE session_id = ? AND kind = 'cardinality'\n AND cardinality_view = 'effective'\n GROUP BY sort_one, cardinality_source_type_id,\n cardinality_source_primary_id, cardinality_link_id\n ), validated AS (\n SELECT scopes.scope_sort_key, scopes.expected_count,\n COUNT(links.source_id) AS actual_count,\n COUNT(links.source_id) FILTER (\n WHERE links.target_type_id = scopes.expected_target_type_id\n AND links.target_id = scopes.expected_target_id\n ) AS matching_count\n FROM scopes\n LEFT JOIN links\n ON links.project_id = ?\n AND links.source_type_id = scopes.source_type_id\n AND links.source_id = scopes.source_id\n AND links.link_id = scopes.link_id\n GROUP BY scopes.scope_sort_key, scopes.expected_count,\n scopes.expected_target_type_id, scopes.expected_target_id\n )\n SELECT CASE WHEN expected_count > 1 THEN 'duplicate' ELSE 'mismatch' END AS reason\n FROM validated\n WHERE expected_count > 1\n OR actual_count <> expected_count\n OR matching_count <> expected_count\n LIMIT 1\n `\n )\n .get(session.id, session.header.commit.projectId) as {\n readonly reason: \"duplicate\" | \"mismatch\"\n } | null\n if (violation?.reason === \"duplicate\") {\n invalidCorrelation(\"Materialization cardinality work violates cardinality-one.\")\n }\n if (violation) {\n invalidCorrelation(\n \"Materialization cardinality work does not match the final effective link scope.\"\n )\n }\n }\n\n private activateSource(\n session: SqliteMaterializationSessionState,\n activation: SourceActivationWrite\n ): void {\n const { commit } = session.header\n assertSourceActivationCorrelation(session, activation)\n const candidate = this.getSource(\n commit.projectId,\n activation.source.projectionId,\n activation.materializationId\n )\n if (!candidate || candidate.status !== \"ready\" || candidate.execution_token === null) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source activation candidate is missing or is not ready.\"\n )\n }\n assertProjectionExecution(this.db, {\n projectId: commit.projectId,\n sourceId: activation.source.projectionId,\n projectionRunId: activation.execution.projectionRunId,\n executionToken: activation.execution.executionToken,\n })\n if (\n candidate.projection_run_id !== activation.execution.projectionRunId ||\n candidate.execution_token !== activation.execution.executionToken ||\n candidate.projection_kind !== activation.projectionKind ||\n candidate.protocol !== activation.protocol ||\n candidate.dataset_id !== activation.datasetVersion.datasetId ||\n candidate.dataset_version_id !== activation.datasetVersion.versionId ||\n candidate.dataset_version_created_at !== activation.datasetVersion.createdAt ||\n candidate.projection_revision !== activation.projectionRevision ||\n candidate.ownership_hash !== activation.ownershipHash ||\n candidate.ontology_revision !== activation.ontologyRevision ||\n candidate.ready_at === null ||\n activation.updatedAt < candidate.ready_at\n ) {\n invalidCorrelation(\"Source activation does not match its ready candidate identity.\")\n }\n this.assertSource(activation.expected, commit.projectId)\n activateSourceRoots(this.db, commit.projectId, candidate, activation)\n const previous = this.getActiveSource(commit.projectId, activation.source.projectionId)\n if (previous) {\n assertPinnedDatasetWatermark(\n {\n datasetId: previous.dataset_id,\n versionId: previous.dataset_version_id,\n createdAt: previous.dataset_version_created_at,\n },\n activation.datasetVersion,\n \"Source activation\"\n )\n if (activation.updatedAt < previous.updated_at) {\n invalidCorrelation(\"Source activation cannot precede the active materialization update.\")\n }\n requireChanges(\n this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'superseded', execution_token = NULL, terminal_at = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status = 'active' AND last_commit_id = ?\n `\n )\n .run(\n activation.updatedAt,\n activation.updatedAt,\n commit.projectId,\n activation.source.projectionId,\n previous.materialization_id,\n activation.expected.lastCommitId\n ).changes,\n \"projection-fence\",\n `Source '${activation.source.projectionId}' changed.`\n )\n }\n requireChanges(\n this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'active', execution_token = NULL, activated_at = ?,\n last_commit_id = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status = 'ready' AND execution_token = ?\n `\n )\n .run(\n activation.updatedAt,\n activation.lastCommitId,\n activation.updatedAt,\n commit.projectId,\n activation.source.projectionId,\n activation.materializationId,\n activation.execution.executionToken\n ).changes,\n \"source-materialization\",\n \"Source activation candidate changed.\"\n )\n }\n\n private insertCommit(\n header: MaterializationPlanHeader,\n input: FinalizeMaterializationInput\n ): OntologyCommitRecord {\n const { commit } = header\n const origin = originColumns(commit.origin)\n try {\n this.db\n .query(\n `\n INSERT INTO ontology_commits (\n project_id, id, idempotency_key, request_hash, execution_id,\n origin_kind, origin_run_id, origin_batch_ordinal, origin, requested_by, executor,\n ontology_revision, projection_revision, ownership_hash,\n intent, result, committed_at\n ) VALUES (\n ?, ?, ?, ?, ?, ?, ?, ?, json(?), json(?), json(?), ?, ?, ?, json(?), json(?), ?\n )\n `\n )\n .run(\n commit.projectId,\n commit.id,\n commit.idempotencyKey,\n commit.requestHash,\n commit.executionId,\n origin.kind,\n origin.runId,\n origin.batchOrdinal,\n canonicalJson(commit.origin),\n commit.requestedBy === undefined ? null : canonicalJson(commit.requestedBy),\n canonicalJson(commit.executor),\n commit.ontologyRevision,\n commit.projectionRevision ?? null,\n commit.ownershipHash ?? null,\n canonicalJson(commit.intent),\n canonicalJson(input.finalization.result),\n commit.committedAt\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw new MaterializationConflictError(\n \"idempotency\",\n \"Ontology commit identity already exists.\"\n )\n }\n throw error\n }\n const row = this.db\n .query(\"SELECT * FROM ontology_commits WHERE project_id = ? AND id = ?\")\n .get(commit.projectId, commit.id) as SqliteOntologyCommitRow\n return commitRecord(row)\n }\n\n private getActiveSource(projectId: string, sourceId: string): SqliteOntologySourceRow | null {\n return this.db\n .query(\n `SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND status = 'active'`\n )\n .get(projectId, sourceId) as SqliteOntologySourceRow | null\n }\n\n private getSource(\n projectId: string,\n sourceId: string,\n materializationId: string\n ): SqliteOntologySourceRow | null {\n return this.db\n .query(\n `SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?`\n )\n .get(projectId, sourceId, materializationId) as SqliteOntologySourceRow | null\n }\n}\n",
49
49
  "import type { Database } from \"bun:sqlite\"\nimport {\n type EffectiveChangeCounts,\n MaterializationConflictError,\n} from \"@sixb/core/internal/materialization\"\nimport {\n correlateMaterializationChunk,\n duplicateMaterializationWork as duplicateWork,\n invalidCorrelation,\n materializationPlanItems,\n ProviderMaterializationSessionState,\n type ProviderMaterializationTransactionLifecycle,\n prepareMaterializationWork,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n MaterializationEventWorkRecord,\n MaterializationPlanChunk,\n MaterializationPlanHeader,\n MaterializationSession,\n MaterializationWorkPage,\n MaterializationWorkRecord,\n StageMaterializationWorkInput,\n StreamMaterializationWorkInput,\n} from \"@sixb/core/storage\"\nimport {\n SQLITE_MATERIALIZATION_WORK_TABLE,\n SQLITE_REPLACEMENT_WORK_TABLE,\n} from \"./materialization-state\"\nimport { canonicalJson, isSqliteConstraintError, parseJson } from \"./shared\"\n\nexport interface SqliteOntologyTransactionContext {\n readonly id: object\n readonly materializations: ProviderMaterializationTransactionLifecycle\n active: boolean\n}\n\ninterface WorkCursor {\n readonly majorOrder: number\n readonly minorOrder: number\n readonly sortOne: string\n readonly sortTwo: string\n readonly recordKey: string\n}\n\ninterface WorkDatabaseRow {\n readonly record_key: string\n readonly major_order: number\n readonly minor_order: number\n readonly sort_one: string\n readonly sort_two: string\n readonly payload: string\n}\n\ninterface WorkSummary {\n apply: number\n cardinality: number\n event: number\n objectClassifications: number\n linkClassifications: number\n pointClassifications: number\n objectsCreated: number\n objectsUpdated: number\n objectsDeleted: number\n linksCreated: number\n linksUpdated: number\n linksDeleted: number\n pointsCreated: number\n pointsUpdated: number\n latestObjectsChanged: number\n}\n\nexport interface SqliteChunkSequenceProgress {\n readonly appliedPlanCount: number\n readonly appliedOutboxCount: number\n readonly appliedPlanCursor: WorkCursor | null\n readonly appliedEventCursor: WorkCursor | null\n}\n\nexport class SqliteMaterializationSessionState extends ProviderMaterializationSessionState {\n appliedPlanCursor: WorkCursor | null = null\n appliedEventCursor: WorkCursor | null = null\n readonly summary: WorkSummary = emptyWorkSummary()\n}\n\nexport class SqliteMaterializationSessions {\n private readonly sessions = new WeakMap<object, SqliteMaterializationSessionState>()\n private readonly live = new Set<SqliteMaterializationSessionState>()\n\n constructor(\n private readonly db: Database,\n private readonly context: SqliteOntologyTransactionContext | null\n ) {}\n\n create(header: MaterializationPlanHeader): SqliteMaterializationSessionState {\n if (!this.context?.active) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization sessions require an active storage transaction.\"\n )\n }\n this.ensureTables()\n const session = new SqliteMaterializationSessionState(structuredClone(header), this.context.id)\n this.sessions.set(session.providerToken, session)\n this.live.add(session)\n this.context.materializations.register(session.providerToken)\n return session\n }\n\n require(session: MaterializationSession): SqliteMaterializationSessionState {\n const value = this.sessions.get(session.providerToken)\n if (\n !value ||\n !value.active ||\n !this.context?.active ||\n value.transactionId !== this.context.id\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization session is inactive.\"\n )\n }\n return value\n }\n\n release(session: SqliteMaterializationSessionState): void {\n if (!session.active) return\n session.active = false\n session.replacement = null\n this.live.delete(session)\n // The normal transaction has one session. Dropping its transaction-local spool avoids an\n // indexed DELETE over hundreds of thousands of rows and releases temp pages immediately.\n // Preserve per-session deletion only when another live session still shares the tables.\n if (this.live.size === 0) this.dropWorkTables()\n else this.deleteWork(session.id)\n this.context?.materializations.complete(session.providerToken)\n }\n\n deactivateAll(): void {\n for (const session of this.live) this.release(session)\n }\n\n stage(input: StageMaterializationWorkInput): void {\n const session = this.require(input.session)\n const records = prepareMaterializationWork(session, input)\n if (records.length === 0) return\n const insert = this.db.query(\n `\n INSERT INTO ${SQLITE_MATERIALIZATION_WORK_TABLE} (\n session_id, record_key, unique_key, kind, lane,\n major_order, minor_order, sort_one, sort_two,\n classification_entity_kind, classification_identity_key,\n cardinality_view, cardinality_occupied, cardinality_source_type_id,\n cardinality_source_primary_id, cardinality_link_id,\n cardinality_target_type_id, cardinality_target_primary_id, payload\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, json(?))\n `\n )\n this.db.run(\"SAVEPOINT sixb_ontology_stage_work\")\n let currentRecordKey: string | undefined\n try {\n for (const { record, uniqueKey, columns } of records) {\n currentRecordKey = record.recordKey\n const classification = record.kind === \"classification\" ? record : null\n const cardinality = record.kind === \"cardinality\" ? record : null\n insert.run(\n session.id,\n record.recordKey,\n uniqueKey,\n record.kind,\n columns.lane,\n columns.majorOrder,\n columns.minorOrder,\n columns.sortOne,\n columns.sortTwo,\n classification?.entityKind ?? null,\n classification?.identityKey ?? null,\n cardinality?.view ?? null,\n cardinality ? Number(cardinality.occupied) : null,\n cardinality?.ref.source.objectTypeId ?? null,\n cardinality?.ref.source.primaryId ?? null,\n cardinality?.ref.linkId ?? null,\n cardinality?.ref.target.objectTypeId ?? null,\n cardinality?.ref.target.primaryId ?? null,\n canonicalJson(record)\n )\n }\n this.db.run(\"RELEASE SAVEPOINT sixb_ontology_stage_work\")\n } catch (error) {\n this.db.run(\"ROLLBACK TO SAVEPOINT sixb_ontology_stage_work\")\n this.db.run(\"RELEASE SAVEPOINT sixb_ontology_stage_work\")\n if (isSqliteConstraintError(error)) {\n throw duplicateWork(currentRecordKey)\n }\n throw error\n }\n for (const prepared of records)\n recordSummary(session.summary, prepared.record, prepared.columns)\n }\n\n async *stream(input: StreamMaterializationWorkInput): AsyncIterable<MaterializationWorkPage> {\n const session = this.require(input.session)\n const stream = session.workStreams[input.order]\n if (stream.started) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Materialization ${input.order} work may only be streamed once per session.`\n )\n }\n stream.started = true\n session.workSealed = true\n let cursor: WorkCursor | null = null\n while (true) {\n this.require(input.session)\n const rows = this.readLane(input.order, session.id, cursor, input.pageRows)\n if (rows.length === 0) break\n const records = rows.map((row) =>\n parseJson<MaterializationWorkRecord>(row.payload)\n ) as MaterializationWorkPage[\"records\"]\n cursor = workCursor(rows[rows.length - 1]!)\n stream.emittedCount += records.length\n yield { records }\n }\n this.require(input.session)\n stream.completed = true\n }\n\n readObjectExistence(\n session: SqliteMaterializationSessionState,\n refs: readonly { readonly objectTypeId: string; readonly primaryId: string }[]\n ): readonly {\n readonly ref: { readonly objectTypeId: string; readonly primaryId: string }\n readonly exists: boolean\n }[] {\n const lookup = this.db.query(\n `\n SELECT payload FROM ${SQLITE_MATERIALIZATION_WORK_TABLE}\n WHERE session_id = ? AND unique_key = ? AND kind = 'object-existence'\n `\n )\n return refs.flatMap((ref) => {\n const key = `object-existence:${JSON.stringify([ref.objectTypeId, ref.primaryId])}`\n const row = lookup.get(session.id, key) as { readonly payload: string } | null\n if (!row) return []\n const record = parseJson<\n Extract<MaterializationWorkRecord, { readonly kind: \"object-existence\" }>\n >(row.payload)\n return [{ ref: record.ref, exists: record.exists }]\n })\n }\n\n prepareChunkSequence(\n session: SqliteMaterializationSessionState,\n chunk: MaterializationPlanChunk\n ): SqliteChunkSequenceProgress {\n const items = materializationPlanItems(chunk)\n const planRows = this.readLane(\"apply\", session.id, session.appliedPlanCursor, items.length)\n const expectedItems = planRows.map((row) => {\n const record = parseJson<Extract<MaterializationWorkRecord, { readonly kind: \"plan\" }>>(\n row.payload\n )\n return record.item\n })\n const eventRows = this.readLane(\n \"event\",\n session.id,\n session.appliedEventCursor,\n chunk.outbox.length\n )\n const expectedEvents = eventRows.map((row) =>\n parseJson<MaterializationEventWorkRecord>(row.payload)\n )\n const progress = correlateMaterializationChunk(\n session,\n chunk,\n items,\n expectedItems,\n expectedEvents\n )\n return {\n ...progress,\n appliedPlanCursor:\n planRows.length === 0\n ? session.appliedPlanCursor\n : workCursor(planRows[planRows.length - 1]!),\n appliedEventCursor:\n eventRows.length === 0\n ? session.appliedEventCursor\n : workCursor(eventRows[eventRows.length - 1]!),\n }\n }\n\n commitChunkSequence(\n session: SqliteMaterializationSessionState,\n progress: SqliteChunkSequenceProgress\n ): void {\n session.appliedPlanCount = progress.appliedPlanCount\n session.appliedOutboxCount = progress.appliedOutboxCount\n session.appliedPlanCursor = progress.appliedPlanCursor\n session.appliedEventCursor = progress.appliedEventCursor\n }\n\n laneCounts(session: SqliteMaterializationSessionState): {\n readonly apply: number\n readonly cardinality: number\n readonly event: number\n } {\n return {\n apply: session.summary.apply,\n cardinality: session.summary.cardinality,\n event: session.summary.event,\n }\n }\n\n projectionCounts(session: SqliteMaterializationSessionState): EffectiveChangeCounts {\n const summary = session.summary\n return {\n objectsCreated: summary.objectsCreated,\n objectsUpdated: summary.objectsUpdated,\n objectsDeleted: summary.objectsDeleted,\n objectsUnchanged:\n summary.objectClassifications -\n summary.objectsCreated -\n summary.objectsUpdated -\n summary.objectsDeleted,\n linksCreated: summary.linksCreated,\n linksUpdated: summary.linksUpdated,\n linksDeleted: summary.linksDeleted,\n linksUnchanged:\n summary.linkClassifications -\n summary.linksCreated -\n summary.linksUpdated -\n summary.linksDeleted,\n }\n }\n\n telemetrySummary(session: SqliteMaterializationSessionState, pointCount: number) {\n const summary = session.summary\n return {\n classifiedPoints: summary.pointClassifications,\n counts: {\n pointsCreated: summary.pointsCreated,\n pointsUpdated: summary.pointsUpdated,\n pointsUnchanged: pointCount - summary.pointsCreated - summary.pointsUpdated,\n latestObjectsChanged: summary.latestObjectsChanged,\n },\n }\n }\n\n assertClassificationCoverage(session: SqliteMaterializationSessionState): void {\n if (!session.replacement) return\n const expectedObject = session.replacement.projectionKind === \"object\" ? 1 : 0\n const mismatch = this.db\n .query(\n `\n WITH invalid AS (\n SELECT 1\n FROM ${SQLITE_REPLACEMENT_WORK_TABLE} AS expected\n WHERE expected.session_id = ? AND expected.diff_required = 1\n AND (expected.entity_kind = 'link' OR ? = 1)\n AND NOT EXISTS (\n SELECT 1 FROM ${SQLITE_MATERIALIZATION_WORK_TABLE} AS actual\n WHERE actual.session_id = expected.session_id\n AND actual.unique_key = 'classification:' || expected.entity_kind || ':'\n || expected.identity_key\n )\n UNION ALL\n SELECT 1\n FROM ${SQLITE_MATERIALIZATION_WORK_TABLE} AS actual\n WHERE actual.session_id = ?\n -- A bounded range uses the existing (session_id, unique_key) unique index and scans\n -- classification entries only, instead of sorting the complete JSON work spool.\n AND actual.unique_key >= 'classification:'\n AND actual.unique_key < 'classification;'\n AND (\n actual.classification_entity_kind = 'point'\n OR NOT EXISTS (\n SELECT 1 FROM ${SQLITE_REPLACEMENT_WORK_TABLE} AS expected\n WHERE expected.session_id = actual.session_id\n AND expected.entity_kind = actual.classification_entity_kind\n AND expected.identity_key = actual.classification_identity_key\n AND expected.diff_required = 1\n AND (expected.entity_kind = 'link' OR ? = 1)\n )\n )\n )\n SELECT 1 FROM invalid LIMIT 1\n `\n )\n .get(session.id, expectedObject, session.id, expectedObject)\n if (mismatch) {\n invalidCorrelation(\n \"Projection replacement classification coverage does not match its streamed state.\"\n )\n }\n }\n\n private readLane(\n lane: StreamMaterializationWorkInput[\"order\"],\n sessionId: string,\n cursor: WorkCursor | null,\n limit: number\n ): WorkDatabaseRow[] {\n if (limit === 0) return []\n const selected = `record_key, major_order, minor_order, sort_one, sort_two, payload`\n if (!cursor) {\n return this.db\n .query(\n `SELECT ${selected} FROM ${SQLITE_MATERIALIZATION_WORK_TABLE}\n WHERE session_id = ? AND lane = ?\n ORDER BY major_order, minor_order, sort_one, sort_two, record_key\n LIMIT ?`\n )\n .all(sessionId, lane, limit) as WorkDatabaseRow[]\n }\n return this.db\n .query(\n `SELECT ${selected} FROM ${SQLITE_MATERIALIZATION_WORK_TABLE}\n WHERE session_id = ? AND lane = ?\n AND (major_order, minor_order, sort_one, sort_two, record_key) > (?, ?, ?, ?, ?)\n ORDER BY major_order, minor_order, sort_one, sort_two, record_key\n LIMIT ?`\n )\n .all(\n sessionId,\n lane,\n cursor.majorOrder,\n cursor.minorOrder,\n cursor.sortOne,\n cursor.sortTwo,\n cursor.recordKey,\n limit\n ) as WorkDatabaseRow[]\n }\n\n private ensureTables(): void {\n this.db.run(`\n CREATE TEMP TABLE IF NOT EXISTS ${SQLITE_MATERIALIZATION_WORK_TABLE} (\n session_id TEXT NOT NULL,\n record_key TEXT NOT NULL,\n unique_key TEXT NOT NULL,\n kind TEXT NOT NULL,\n lane TEXT NOT NULL,\n major_order INTEGER NOT NULL,\n minor_order INTEGER NOT NULL,\n sort_one TEXT NOT NULL,\n sort_two TEXT NOT NULL,\n classification_entity_kind TEXT,\n classification_identity_key TEXT,\n cardinality_view TEXT,\n cardinality_occupied INTEGER,\n cardinality_source_type_id TEXT,\n cardinality_source_primary_id TEXT,\n cardinality_link_id TEXT,\n cardinality_target_type_id TEXT,\n cardinality_target_primary_id TEXT,\n payload TEXT NOT NULL CHECK (json_valid(payload)),\n PRIMARY KEY (session_id, record_key),\n UNIQUE (session_id, unique_key)\n );\n CREATE INDEX IF NOT EXISTS idx_ontology_materialization_work_lane\n ON ${SQLITE_MATERIALIZATION_WORK_TABLE}(\n session_id, lane, major_order, minor_order, sort_one, sort_two, record_key\n );\n CREATE TEMP TABLE IF NOT EXISTS ${SQLITE_REPLACEMENT_WORK_TABLE} (\n session_id TEXT NOT NULL,\n entity_kind TEXT NOT NULL,\n identity_key TEXT NOT NULL,\n sort_key TEXT NOT NULL,\n diff_required INTEGER NOT NULL CHECK (diff_required IN (0, 1)),\n PRIMARY KEY (session_id, entity_kind, identity_key)\n );\n CREATE INDEX IF NOT EXISTS idx_ontology_replacement_work_order\n ON ${SQLITE_REPLACEMENT_WORK_TABLE}(\n session_id, entity_kind, sort_key, identity_key\n );\n `)\n }\n\n private deleteWork(sessionId: string): void {\n this.db\n .query(`DELETE FROM ${SQLITE_MATERIALIZATION_WORK_TABLE} WHERE session_id = ?`)\n .run(sessionId)\n this.db\n .query(`DELETE FROM ${SQLITE_REPLACEMENT_WORK_TABLE} WHERE session_id = ?`)\n .run(sessionId)\n }\n\n private dropWorkTables(): void {\n this.db.run(`\n DROP TABLE IF EXISTS ${SQLITE_MATERIALIZATION_WORK_TABLE};\n DROP TABLE IF EXISTS ${SQLITE_REPLACEMENT_WORK_TABLE};\n `)\n }\n}\n\nfunction workCursor(row: WorkDatabaseRow): WorkCursor {\n return {\n majorOrder: row.major_order,\n minorOrder: row.minor_order,\n sortOne: row.sort_one,\n sortTwo: row.sort_two,\n recordKey: row.record_key,\n }\n}\n\nfunction emptyWorkSummary(): WorkSummary {\n return {\n apply: 0,\n cardinality: 0,\n event: 0,\n objectClassifications: 0,\n linkClassifications: 0,\n pointClassifications: 0,\n objectsCreated: 0,\n objectsUpdated: 0,\n objectsDeleted: 0,\n linksCreated: 0,\n linksUpdated: 0,\n linksDeleted: 0,\n pointsCreated: 0,\n pointsUpdated: 0,\n latestObjectsChanged: 0,\n }\n}\n\nfunction recordSummary(\n summary: WorkSummary,\n record: MaterializationWorkRecord,\n columns: { readonly lane: \"none\" | \"apply\" | \"cardinality\" | \"event\" }\n): void {\n if (columns.lane !== \"none\") summary[columns.lane] += 1\n\n if (record.kind === \"classification\") {\n if (record.entityKind === \"object\") summary.objectClassifications += 1\n if (record.entityKind === \"link\") summary.linkClassifications += 1\n if (record.entityKind === \"point\") summary.pointClassifications += 1\n return\n }\n if (record.kind !== \"plan\") return\n\n switch (record.item.kind) {\n case \"object-upsert\":\n summary.latestObjectsChanged += 1\n if (record.item.value.expected.exists) summary.objectsUpdated += 1\n else summary.objectsCreated += 1\n return\n case \"object-delete\":\n summary.objectsDeleted += 1\n return\n case \"link-upsert\":\n if (record.item.value.expected.exists) summary.linksUpdated += 1\n else summary.linksCreated += 1\n return\n case \"link-delete\":\n summary.linksDeleted += 1\n return\n case \"point-upsert\":\n if (record.item.value.expected.lastCommitId === null) summary.pointsCreated += 1\n else summary.pointsUpdated += 1\n return\n case \"object-override-upsert\":\n case \"object-override-delete\":\n case \"link-override-upsert\":\n case \"link-override-delete\":\n return\n }\n}\n",
50
- "import type { Database } from \"bun:sqlite\"\nimport type {\n EffectiveLinkSnapshot,\n EffectiveObjectSnapshot,\n OntologyLinkRef,\n OntologyObjectRef,\n ProjectionEntityRef,\n TelemetrySeriesRef,\n} from \"@sixb/core/internal/materialization\"\nimport {\n linkRefKey,\n linkScopeSortKey,\n MaterializationConflictError,\n objectRefKey,\n projectionEntityKey,\n telemetryPointSortKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n appendScopeSnapshot,\n finishScopeAccumulator,\n linkSlotOverrideValue,\n startScopeAccumulator,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n MaterializationLinkScopeRevision,\n MaterializationLinkScopeState,\n MaterializationLinkState,\n MaterializationObjectState,\n SourceReplacementLinkState,\n SourceReplacementObjectState,\n StoredLinkOverride,\n StoredLinkSlotOverride,\n StoredObjectOverride,\n StoredSourceAssertion,\n StoredSourceLinkAssertion,\n StoredSourceObjectAssertion,\n StoredTelemetryPoint,\n} from \"@sixb/core/storage\"\nimport {\n canonicalJson,\n linkRefFromColumns,\n objectRefFromColumns,\n parseJson,\n type SqliteOntologySourceAssertionRow,\n type SqliteStoredOverrideRow,\n} from \"./shared\"\nimport { activeSourceRows, replacementAssertionRows, replacementSourceRows } from \"./source-roots\"\n\nexport const SQLITE_MATERIALIZATION_WORK_TABLE = \"ontology_materialization_work\"\nexport const SQLITE_REPLACEMENT_WORK_TABLE = \"ontology_replacement_work\"\n\ninterface EffectiveObjectRow {\n readonly object_type_id: string\n readonly primary_id: string\n readonly properties: string\n readonly created_at: string\n readonly updated_at: string\n readonly version: number\n readonly last_commit_id: string | null\n}\n\ninterface EffectiveLinkRow {\n readonly source_type_id: string\n readonly source_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_id: string\n readonly properties: string | null\n readonly created_at: string\n readonly updated_at: string\n readonly last_commit_id: string | null\n}\n\ninterface TelemetryRow {\n readonly object_type_id: string\n readonly object_id: string\n readonly property_id: string\n readonly value: string\n readonly unit: string | null\n readonly at: string\n readonly last_commit_id: string | null\n}\n\ninterface LinkScopeRow extends EffectiveLinkRow {\n readonly scope_sort_key: string\n}\n\nfunction linkScopeRequestJson(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n): string {\n return canonicalJson(\n scopes.map(({ source, linkId }) => ({\n scopeSortKey: linkScopeSortKey(source, linkId),\n sourceTypeId: source.objectTypeId,\n sourceId: source.primaryId,\n linkId,\n }))\n )\n}\n\ninterface ObjectOverrideRow extends SqliteStoredOverrideRow {\n readonly object_type_id: string\n readonly primary_id: string\n readonly edited_at: string\n}\n\ninterface LinkOverrideRow extends SqliteStoredOverrideRow {\n readonly source_type_id: string\n readonly source_primary_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_primary_id: string\n}\n\ninterface LinkSlotOverrideRow {\n readonly source_type_id: string\n readonly source_primary_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_primary_id: string\n readonly value: string\n readonly last_commit_id: string\n readonly updated_at: string\n}\n\ninterface ReplacementSources {\n readonly owned: ReadonlySet<string>\n readonly byMaterialization: ReadonlyMap<string, ReadonlyMap<string, StoredSourceAssertion>>\n}\n\nexport type ReplacementIdentity =\n | {\n readonly kind: \"object\"\n readonly ref: OntologyObjectRef\n readonly sortKey: string\n readonly diffRequired: true\n }\n | {\n readonly kind: \"link\"\n readonly ref: OntologyLinkRef\n readonly sortKey: string\n readonly diffRequired: boolean\n }\n\ninterface ReplacementIdentityInput {\n readonly incremental?: boolean\n readonly sessionId: string\n readonly sourceId: string\n readonly candidateMaterializationId: string\n readonly previousMaterializationId: string | null\n readonly kind: \"object\" | \"link\"\n readonly pageRows: number\n}\n\ninterface ReplacementWorkRow {\n readonly entity_kind: \"object\" | \"link\"\n readonly identity_key: string\n readonly sort_key: string\n readonly diff_required: number\n}\n\ninterface ReplacementCursor {\n readonly sortKey: string\n readonly identityKey: string\n}\n\nexport class SqliteMaterializationStateReader {\n constructor(\n private readonly db: Database,\n readonly projectId: string\n ) {}\n\n objectState(ref: OntologyObjectRef): MaterializationObjectState {\n return this.objectStates([ref])[0]!\n }\n\n objectStates(refs: readonly OntologyObjectRef[]): readonly MaterializationObjectState[] {\n if (refs.length === 0) return []\n const requested = canonicalJson(\n refs.map((ref) => ({ objectTypeId: ref.objectTypeId, primaryId: ref.primaryId }))\n )\n const requestedObjects = `\n SELECT DISTINCT json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id\n FROM json_each(?)\n `\n // Keep the JSON request set on the outer side of each lookup. SQLite cannot estimate the\n // cardinality of json_each() and otherwise scans every project row once per requested key.\n // CROSS JOIN deliberately fixes the loop order so the existing composite indexes are used.\n const effectiveRows = this.db\n .query(\n `WITH requested AS (${requestedObjects})\n SELECT objects.* FROM requested\n CROSS JOIN objects\n ON objects.project_id = ?\n AND objects.object_type_id = requested.object_type_id\n AND objects.primary_id = requested.primary_id`\n )\n .all(requested, this.projectId) as EffectiveObjectRow[]\n const sourceRows = activeSourceRows(\n this.db,\n this.projectId,\n refs.map((ref) => ({ kind: \"object\", ref }))\n )\n const overrideRows = this.db\n .query(\n `WITH requested AS (${requestedObjects})\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_object_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.object_type_id = requested.object_type_id\n AND overrides.primary_id = requested.primary_id`\n )\n .all(requested, this.projectId) as ObjectOverrideRow[]\n const telemetryRows = this.db\n .query(\n `WITH requested AS (${requestedObjects}), ranked AS (\n SELECT timeseries.*,\n ROW_NUMBER() OVER (\n PARTITION BY timeseries.object_type_id, timeseries.object_id,\n timeseries.property_id\n ORDER BY timeseries.at DESC\n ) AS rank\n FROM requested\n CROSS JOIN timeseries\n ON timeseries.project_id = ?\n AND timeseries.object_type_id = requested.object_type_id\n AND timeseries.object_id = requested.primary_id\n )\n SELECT * FROM ranked WHERE rank = 1`\n )\n .all(requested, this.projectId) as TelemetryRow[]\n\n const effective = new Map(\n effectiveRows.map((row) => [objectRefKey(objectRefFromColumns(row)), row] as const)\n )\n const sources = activeSourceMap(sourceRows)\n const overrides = new Map(\n overrideRows.map(\n (row) => [objectRefKey(objectRefFromColumns(row)), storedObjectOverride(row)] as const\n )\n )\n const telemetry = new Map<string, StoredTelemetryPoint[]>()\n for (const row of telemetryRows) {\n const key = objectRefKey({ objectTypeId: row.object_type_id, primaryId: row.object_id })\n const points = telemetry.get(key) ?? []\n points.push(storedPoint(row))\n telemetry.set(key, points)\n }\n for (const points of telemetry.values()) {\n points.sort((left, right) =>\n telemetryPointSortKey(left.series, left.at).localeCompare(\n telemetryPointSortKey(right.series, right.at)\n )\n )\n }\n\n return refs.map((ref) => {\n const key = objectRefKey(ref)\n const effectiveRow = effective.get(key)\n return {\n ref: structuredClone(ref),\n source: sourceObject(sources.get(projectionEntityKey({ kind: \"object\", ref }))),\n override: overrides.get(key) ?? null,\n effective: effectiveRow ? effectiveObjectSnapshot(effectiveRow) : null,\n latestTelemetry: telemetry.get(key) ?? [],\n }\n })\n }\n\n linkState(ref: OntologyLinkRef): MaterializationLinkState {\n return this.linkStates([ref])[0]!\n }\n\n linkStates(refs: readonly OntologyLinkRef[]): readonly MaterializationLinkState[] {\n if (refs.length === 0) return []\n const requested = canonicalJson(\n refs.map((ref) => ({\n sourceTypeId: ref.source.objectTypeId,\n sourceId: ref.source.primaryId,\n linkId: ref.linkId,\n targetTypeId: ref.target.objectTypeId,\n targetId: ref.target.primaryId,\n }))\n )\n const effectiveRequest = `\n SELECT DISTINCT json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_id,\n json_extract(value, '$.linkId') AS link_id,\n json_extract(value, '$.targetTypeId') AS target_type_id,\n json_extract(value, '$.targetId') AS target_id\n FROM json_each(?)\n `\n const sourceRequest = `\n SELECT DISTINCT json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id,\n json_extract(value, '$.targetTypeId') AS target_type_id,\n json_extract(value, '$.targetId') AS target_primary_id\n FROM json_each(?)\n `\n const effectiveRows = this.db\n .query(\n `WITH requested AS (${effectiveRequest})\n SELECT links.* FROM requested\n CROSS JOIN links\n ON links.project_id = ?\n AND links.source_type_id = requested.source_type_id\n AND links.source_id = requested.source_id\n AND links.link_id = requested.link_id\n AND links.target_type_id = requested.target_type_id\n AND links.target_id = requested.target_id`\n )\n .all(requested, this.projectId) as EffectiveLinkRow[]\n const sourceRows = activeSourceRows(\n this.db,\n this.projectId,\n refs.map((ref) => ({ kind: \"link\", ref }))\n )\n const overrideRows = this.db\n .query(\n `WITH requested AS (${sourceRequest})\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.identity_kind = 'edge'\n AND overrides.source_type_id = requested.source_type_id\n AND overrides.source_primary_id = requested.source_primary_id\n AND overrides.link_id = requested.link_id\n AND overrides.target_type_id = requested.target_type_id\n AND overrides.target_primary_id = requested.target_primary_id`\n )\n .all(requested, this.projectId) as LinkOverrideRow[]\n const slotOverrideRows = this.db\n .query(\n `WITH requested AS (${sourceRequest})\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.identity_kind = 'slot'\n AND overrides.source_type_id = requested.source_type_id\n AND overrides.source_primary_id = requested.source_primary_id\n AND overrides.link_id = requested.link_id`\n )\n .all(requested, this.projectId) as LinkSlotOverrideRow[]\n const effective = new Map(\n effectiveRows.map((row) => [linkRefKey(linkRefFromColumns(row)), row] as const)\n )\n const sources = activeSourceMap(sourceRows)\n const overrides = new Map(\n overrideRows.map(\n (row) => [linkRefKey(linkRefFromOverrideColumns(row)), storedLinkOverride(row)] as const\n )\n )\n const slotOverrides = new Map(\n slotOverrideRows.map((row) => {\n const stored = storedLinkSlotOverride(row)\n return [linkScopeSortKey(stored.ref.source, stored.ref.linkId), stored] as const\n })\n )\n return refs.map((ref) => {\n const key = linkRefKey(ref)\n const effectiveRow = effective.get(key)\n return {\n ref: structuredClone(ref),\n source: sourceLink(sources.get(projectionEntityKey({ kind: \"link\", ref }))),\n override: overrides.get(key) ?? null,\n slotOverride: slotOverrides.get(linkScopeSortKey(ref.source, ref.linkId)) ?? null,\n effective: effectiveRow ? effectiveLinkSnapshot(effectiveRow) : null,\n }\n })\n }\n\n exactPoint(series: TelemetrySeriesRef, at: string): StoredTelemetryPoint | null {\n return this.exactPoints([{ series, at }])[0] ?? null\n }\n\n exactPoints(\n points: readonly { readonly series: TelemetrySeriesRef; readonly at: string }[]\n ): readonly StoredTelemetryPoint[] {\n if (points.length === 0) return []\n const requested = canonicalJson(\n points.map(({ series, at }) => ({\n objectTypeId: series.object.objectTypeId,\n objectId: series.object.primaryId,\n propertyId: series.propertyId,\n at,\n }))\n )\n const rows = this.db\n .query(\n `WITH requested AS (\n SELECT DISTINCT json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.objectId') AS object_id,\n json_extract(value, '$.propertyId') AS property_id,\n json_extract(value, '$.at') AS at\n FROM json_each(?)\n )\n SELECT timeseries.* FROM requested\n CROSS JOIN timeseries\n ON timeseries.project_id = ?\n AND timeseries.object_type_id = requested.object_type_id\n AND timeseries.object_id = requested.object_id\n AND timeseries.property_id = requested.property_id\n AND timeseries.at = requested.at`\n )\n .all(requested, this.projectId) as TelemetryRow[]\n const found = new Map(\n rows.map((row) => {\n const point = storedPoint(row)\n return [telemetryPointSortKey(point.series, point.at), point] as const\n })\n )\n return points.flatMap((point) => {\n const stored = found.get(telemetryPointSortKey(point.series, point.at))\n return stored ? [stored] : []\n })\n }\n\n linkScopeRevisions(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n ): readonly MaterializationLinkScopeRevision[] {\n if (scopes.length === 0) return []\n return this.readEffectiveLinkScopes(scopes, linkScopeRequestJson(scopes)).revisions\n }\n\n linkSlotStates(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n ): readonly MaterializationLinkScopeState[] {\n if (scopes.length === 0) return []\n const requestedJson = linkScopeRequestJson(scopes)\n const sourceRows = this.db\n .query(\n `WITH requested AS (\n SELECT DISTINCT\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id\n FROM json_each(?)\n )\n SELECT rows.* FROM requested\n CROSS JOIN ontology_source_rows AS rows\n ON rows.project_id = ?\n AND rows.entity_kind = 'link'\n AND rows.source_type_id = requested.source_type_id\n AND rows.source_primary_id = requested.source_primary_id\n AND rows.link_id = requested.link_id\n JOIN ontology_source_roots AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n AND sources.root_sort_key = rows.root_sort_key\n WHERE sources.active = 1`\n )\n .all(requestedJson, this.projectId) as SqliteOntologySourceAssertionRow[]\n const slotOverrideRows = this.db\n .query(\n `WITH requested AS (\n SELECT DISTINCT\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id\n FROM json_each(?)\n )\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.identity_kind = 'slot'\n AND overrides.source_type_id = requested.source_type_id\n AND overrides.source_primary_id = requested.source_primary_id\n AND overrides.link_id = requested.link_id`\n )\n .all(requestedJson, this.projectId) as LinkSlotOverrideRow[]\n const sources = activeScopeSourceMap(sourceRows)\n const overrides = new Map(\n slotOverrideRows.map((row) => {\n const stored = storedLinkSlotOverride(row)\n return [linkScopeSortKey(stored.ref.source, stored.ref.linkId), stored] as const\n })\n )\n const { revisions, effective } = this.readEffectiveLinkScopes(scopes, requestedJson)\n return scopes.map(({ source, linkId }, index) => {\n const key = linkScopeSortKey(source, linkId)\n return {\n ...revisions[index]!,\n sourceAssertion: sources.get(key) ?? null,\n override: overrides.get(key) ?? null,\n effective: effective.get(key) ?? null,\n }\n })\n }\n\n private readEffectiveLinkScopes(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[],\n requestedJson: string\n ): {\n readonly revisions: readonly MaterializationLinkScopeRevision[]\n readonly effective: ReadonlyMap<string, EffectiveLinkSnapshot | null>\n } {\n const accumulators = new Map(\n scopes.map(({ source, linkId }) => {\n const key = linkScopeSortKey(source, linkId)\n return [key, startScopeAccumulator(source, linkId)] as const\n })\n )\n const effective = new Map<string, EffectiveLinkSnapshot | null>()\n const rows = this.db\n .query(\n `\n WITH requested AS (\n SELECT DISTINCT\n json_extract(value, '$.scopeSortKey') AS scope_sort_key,\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_id,\n json_extract(value, '$.linkId') AS link_id\n FROM json_each(?)\n )\n SELECT requested.scope_sort_key, links.*\n FROM requested\n CROSS JOIN links\n ON links.project_id = ?\n AND links.source_type_id = requested.source_type_id\n AND links.source_id = requested.source_id\n AND links.link_id = requested.link_id\n ORDER BY requested.scope_sort_key, ${linkSortExpression(\"links\")}\n `\n )\n .iterate(requestedJson, this.projectId) as Iterable<LinkScopeRow>\n for (const row of rows) {\n const accumulator = accumulators.get(row.scope_sort_key)\n if (!accumulator) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Unexpected link scope '${row.scope_sort_key}' returned by storage.`\n )\n }\n const snapshot = effectiveLinkSnapshot(row)\n appendScopeSnapshot(accumulator, snapshot)\n effective.set(row.scope_sort_key, accumulator.effectiveCount === 1 ? snapshot : null)\n }\n return {\n revisions: scopes.map(({ source, linkId }) =>\n finishScopeAccumulator(accumulators.get(linkScopeSortKey(source, linkId))!)\n ),\n effective,\n }\n }\n\n *incidentLinks(\n objects: readonly OntologyObjectRef[],\n pageRows: number\n ): Iterable<OntologyLinkRef[]> {\n if (objects.length === 0) return\n const values = objects.map(() => \"(?, ?)\").join(\", \")\n const args = objects.flatMap((ref) => [ref.objectTypeId, ref.primaryId])\n let cursor: string | null = null\n while (true) {\n const rows = this.db\n .query(\n `\n WITH requested(object_type_id, primary_id) AS (VALUES ${values}),\n authority_links AS (\n SELECT source_type_id, source_id, link_id, target_type_id, target_id\n FROM links WHERE project_id = ?\n UNION\n SELECT source_type_id, source_primary_id, link_id, target_type_id, target_primary_id\n FROM ontology_link_overrides\n WHERE project_id = ?\n UNION\n SELECT rows.source_type_id, rows.source_primary_id, rows.link_id,\n rows.target_type_id, rows.target_primary_id\n FROM ontology_source_rows AS rows\n JOIN ontology_source_roots AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n AND sources.root_sort_key = rows.root_sort_key\n WHERE rows.project_id = ? AND rows.entity_kind = 'link' AND sources.active = 1\n ), selected AS (\n SELECT DISTINCT links.*,\n ${linkSortExpression(\"links\")} AS sort_key\n FROM authority_links AS links\n WHERE EXISTS (\n SELECT 1 FROM requested\n WHERE (requested.object_type_id = links.source_type_id\n AND requested.primary_id = links.source_id)\n OR (requested.object_type_id = links.target_type_id\n AND requested.primary_id = links.target_id)\n )\n )\n SELECT * FROM selected\n WHERE (? IS NULL OR sort_key > ?)\n ORDER BY sort_key\n LIMIT ?\n `\n )\n .all(\n ...args,\n this.projectId,\n this.projectId,\n this.projectId,\n cursor,\n cursor,\n pageRows\n ) as (EffectiveLinkRow & { readonly sort_key: string })[]\n if (rows.length === 0) break\n yield rows.map(linkRefFromColumns)\n cursor = rows[rows.length - 1]?.sort_key ?? null\n }\n }\n\n *replacementIdentities(input: ReplacementIdentityInput): Iterable<ReplacementIdentity[]> {\n this.prepareReplacementIdentities(input)\n let cursor: ReplacementCursor | null = null\n while (true) {\n const rows = this.replacementRows(input, cursor)\n if (rows.length === 0) break\n yield rows.map(replacementIdentity)\n if (rows.length < input.pageRows) break\n const last = rows[rows.length - 1]!\n cursor = { sortKey: last.sort_key, identityKey: last.identity_key }\n }\n }\n\n replacementObjectStates(\n sourceId: string,\n candidateMaterializationId: string,\n refs: readonly OntologyObjectRef[]\n ): readonly SourceReplacementObjectState[] {\n const base = this.objectStates(refs)\n const candidates = this.replacementSources(\n sourceId,\n [candidateMaterializationId],\n refs.map((ref) => ({ kind: \"object\" as const, ref }))\n )\n return base.map((state) => ({\n ref: state.ref,\n candidateSource: sourceObject(\n candidates.byMaterialization\n .get(candidateMaterializationId)\n ?.get(projectionEntityKey({ kind: \"object\", ref: state.ref }))\n ),\n override: state.override,\n effective: state.effective,\n latestTelemetry: state.latestTelemetry,\n }))\n }\n\n replacementLinkStates(\n sourceId: string,\n candidateMaterializationId: string,\n materializationIds: readonly string[],\n identities: readonly Extract<ReplacementIdentity, { readonly kind: \"link\" }>[],\n incremental = false\n ): readonly SourceReplacementLinkState[] {\n const refs = identities.map((identity) => identity.ref)\n const base = this.linkStates(refs)\n const replacements = this.replacementSources(\n sourceId,\n materializationIds,\n refs.map((ref) => ({ kind: \"link\" as const, ref })),\n incremental\n )\n const candidate = replacements.byMaterialization.get(candidateMaterializationId)\n return base.map((state, index) => {\n const key = projectionEntityKey({ kind: \"link\", ref: state.ref })\n return {\n ref: state.ref,\n candidateSource: replacements.owned.has(key)\n ? sourceLink(candidate?.get(key))\n : state.source,\n override: state.override,\n slotOverride: state.slotOverride,\n effective: state.effective,\n diffRequired: identities[index]!.diffRequired,\n }\n })\n }\n\n effectiveObjectRevision(ref: OntologyObjectRef): {\n readonly version: number\n readonly lastCommitId: string | null\n } | null {\n const row = this.db\n .query(\n `SELECT version, last_commit_id FROM objects\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?`\n )\n .get(this.projectId, ref.objectTypeId, ref.primaryId) as {\n readonly version: number\n readonly last_commit_id: string | null\n } | null\n return row ? { version: row.version, lastCommitId: row.last_commit_id } : null\n }\n\n effectiveLinkLastCommit(ref: OntologyLinkRef): string | null | undefined {\n const row = this.db\n .query(\n `\n SELECT last_commit_id FROM links\n WHERE project_id = ? AND source_type_id = ? AND source_id = ? AND link_id = ?\n AND target_type_id = ? AND target_id = ?\n `\n )\n .get(\n this.projectId,\n ref.source.objectTypeId,\n ref.source.primaryId,\n ref.linkId,\n ref.target.objectTypeId,\n ref.target.primaryId\n ) as { readonly last_commit_id: string | null } | null\n return row ? row.last_commit_id : undefined\n }\n\n private replacementSources(\n sourceId: string,\n materializationIds: readonly string[],\n refs: readonly ProjectionEntityRef[],\n incremental = false\n ): ReplacementSources {\n if (materializationIds.length === 0 || refs.length === 0) {\n return { owned: new Set(), byMaterialization: new Map() }\n }\n const rows = replacementAssertionRows(this.db, {\n projectId: this.projectId,\n sourceId,\n materializationId: materializationIds[0]!,\n incremental,\n includePrevious: materializationIds.length > 1,\n refs,\n })\n const owned = new Set<string>()\n const byMaterialization = new Map<string, Map<string, StoredSourceAssertion>>()\n for (const row of rows) {\n const source = storedSource(row)\n const key = projectionEntityKey(source.assertion)\n owned.add(key)\n const materialization = byMaterialization.get(row.materialization_id) ?? new Map()\n materialization.set(key, source)\n byMaterialization.set(row.materialization_id, materialization)\n }\n return { owned, byMaterialization }\n }\n\n private prepareReplacementIdentities(input: ReplacementIdentityInput): void {\n if (input.kind === \"object\") {\n this.prepareReplacementObjects(input)\n return\n }\n this.prepareReplacementLinks(input)\n }\n\n private prepareReplacementObjects(input: ReplacementIdentityInput): void {\n const rows = replacementSourceRows({\n projectId: this.projectId,\n sourceId: input.sourceId,\n materializationId: input.candidateMaterializationId,\n incremental: input.incremental ?? false,\n })\n this.db\n .query(\n `\n INSERT INTO ${SQLITE_REPLACEMENT_WORK_TABLE} (\n session_id, entity_kind, identity_key, sort_key, diff_required\n )\n SELECT ?, 'object', json_array(object_type_id, primary_id),\n MIN(entity_sort_key), 1\n FROM (${rows.sql}) AS rows\n WHERE entity_kind = 'object'\n GROUP BY object_type_id, primary_id\n `\n )\n .run(input.sessionId, ...rows.values)\n }\n\n private prepareReplacementLinks(input: ReplacementIdentityInput): void {\n const rows = replacementSourceRows({\n projectId: this.projectId,\n sourceId: input.sourceId,\n materializationId: input.candidateMaterializationId,\n incremental: input.incremental ?? false,\n })\n this.db\n .query(\n `\n WITH incident_objects AS (\n SELECT DISTINCT\n json_extract(payload, '$.ref.objectTypeId') AS object_type_id,\n json_extract(payload, '$.ref.primaryId') AS primary_id\n FROM ${SQLITE_MATERIALIZATION_WORK_TABLE}\n WHERE session_id = ? AND kind = 'incident-object'\n ), replacement_links AS (\n SELECT source_type_id, source_primary_id AS source_id, link_id,\n target_type_id, target_primary_id AS target_id\n FROM (${rows.sql}) AS rows\n WHERE entity_kind = 'link'\n ), incident_links AS (\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links\n JOIN incident_objects\n ON incident_objects.object_type_id = links.source_type_id\n AND incident_objects.primary_id = links.source_id\n WHERE links.project_id = ?\n UNION\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links\n JOIN incident_objects\n ON incident_objects.object_type_id = links.target_type_id\n AND incident_objects.primary_id = links.target_id\n WHERE links.project_id = ?\n UNION\n SELECT overrides.source_type_id,\n overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id\n FROM ontology_link_overrides AS overrides\n JOIN incident_objects\n ON incident_objects.object_type_id = overrides.source_type_id\n AND incident_objects.primary_id = overrides.source_primary_id\n WHERE overrides.project_id = ?\n UNION\n SELECT overrides.source_type_id,\n overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id\n FROM ontology_link_overrides AS overrides\n JOIN incident_objects\n ON incident_objects.object_type_id = overrides.target_type_id\n AND incident_objects.primary_id = overrides.target_primary_id\n WHERE overrides.project_id = ?\n UNION\n SELECT rows.source_type_id, rows.source_primary_id AS source_id,\n rows.link_id, rows.target_type_id, rows.target_primary_id AS target_id\n FROM ontology_source_rows AS rows\n JOIN ontology_source_roots AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n AND sources.root_sort_key = rows.root_sort_key\n JOIN incident_objects\n ON incident_objects.object_type_id = rows.source_type_id\n AND incident_objects.primary_id = rows.source_primary_id\n WHERE rows.project_id = ? AND rows.entity_kind = 'link'\n AND sources.active = 1\n UNION\n SELECT rows.source_type_id, rows.source_primary_id AS source_id,\n rows.link_id, rows.target_type_id, rows.target_primary_id AS target_id\n FROM ontology_source_rows AS rows\n JOIN ontology_source_roots AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n AND sources.root_sort_key = rows.root_sort_key\n JOIN incident_objects\n ON incident_objects.object_type_id = rows.target_type_id\n AND incident_objects.primary_id = rows.target_primary_id\n WHERE rows.project_id = ? AND rows.entity_kind = 'link'\n AND sources.active = 1\n ), diff_links AS (\n SELECT * FROM replacement_links\n UNION SELECT * FROM incident_links\n ), affected_scopes AS (\n SELECT DISTINCT source_type_id, source_id, link_id FROM diff_links\n ), all_links AS (\n SELECT *, 1 AS diff_required FROM diff_links\n UNION ALL\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id, 0 AS diff_required\n FROM links\n JOIN affected_scopes USING (source_type_id, source_id, link_id)\n WHERE links.project_id = ?\n UNION ALL\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id, 0 AS diff_required\n FROM ontology_link_overrides AS overrides\n JOIN affected_scopes\n ON affected_scopes.source_type_id = overrides.source_type_id\n AND affected_scopes.source_id = overrides.source_primary_id\n AND affected_scopes.link_id = overrides.link_id\n WHERE overrides.project_id = ? AND overrides.identity_kind = 'slot'\n ), selected AS (\n SELECT source_type_id, source_id, link_id, target_type_id, target_id,\n ${linkSortExpression(\"all_links\")} AS sort_key,\n MAX(diff_required) AS diff_required\n FROM all_links\n GROUP BY source_type_id, source_id, link_id, target_type_id, target_id\n )\n INSERT INTO ${SQLITE_REPLACEMENT_WORK_TABLE} (\n session_id, entity_kind, identity_key, sort_key, diff_required\n )\n SELECT ?, 'link',\n json_array(source_type_id, source_id, link_id, target_type_id, target_id),\n sort_key, diff_required\n FROM selected\n `\n )\n .run(\n input.sessionId,\n ...rows.values,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n input.sessionId\n )\n }\n\n private replacementRows(\n input: ReplacementIdentityInput,\n cursor: ReplacementCursor | null\n ): ReplacementWorkRow[] {\n return this.db\n .query(\n `\n SELECT entity_kind, identity_key, sort_key, diff_required\n FROM ${SQLITE_REPLACEMENT_WORK_TABLE}\n WHERE session_id = ? AND entity_kind = ?\n AND (? IS NULL OR (sort_key, identity_key) > (?, ?))\n ORDER BY sort_key, identity_key\n LIMIT ?\n `\n )\n .all(\n input.sessionId,\n input.kind,\n cursor?.sortKey ?? null,\n cursor?.sortKey ?? null,\n cursor?.identityKey ?? null,\n input.pageRows\n ) as ReplacementWorkRow[]\n }\n}\n\nfunction replacementIdentity(row: ReplacementWorkRow): ReplacementIdentity {\n const parts = parseJson<string[]>(row.identity_key)\n if (row.entity_kind === \"object\") {\n return {\n kind: \"object\",\n ref: { objectTypeId: parts[0]!, primaryId: parts[1]! },\n sortKey: row.sort_key,\n diffRequired: true,\n }\n }\n return {\n kind: \"link\",\n ref: {\n source: { objectTypeId: parts[0]!, primaryId: parts[1]! },\n linkId: parts[2]!,\n target: { objectTypeId: parts[3]!, primaryId: parts[4]! },\n },\n sortKey: row.sort_key,\n diffRequired: row.diff_required === 1,\n }\n}\n\nfunction activeSourceMap(\n rows: readonly SqliteOntologySourceAssertionRow[]\n): ReadonlyMap<string, StoredSourceAssertion> {\n const result = new Map<string, StoredSourceAssertion>()\n for (const row of rows) {\n const source = storedSource(row)\n const key = projectionEntityKey(source.assertion)\n if (result.has(key)) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert ${key}.`\n )\n }\n result.set(key, source)\n }\n return result\n}\n\nfunction activeScopeSourceMap(\n rows: readonly SqliteOntologySourceAssertionRow[]\n): ReadonlyMap<string, StoredSourceLinkAssertion> {\n const result = new Map<string, StoredSourceLinkAssertion>()\n for (const row of rows) {\n const source = sourceLink(storedSource(row))\n if (!source) continue\n const ref = source.assertion.ref\n const key = linkScopeSortKey(ref.source, ref.linkId)\n if (result.has(key)) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert cardinality-one link slot ${key}.`\n )\n }\n result.set(key, source)\n }\n return result\n}\n\nfunction sourceObject(\n source: StoredSourceAssertion | undefined\n): StoredSourceObjectAssertion | null {\n return source?.assertion.kind === \"object\" ? (source as StoredSourceObjectAssertion) : null\n}\n\nfunction sourceLink(source: StoredSourceAssertion | undefined): StoredSourceLinkAssertion | null {\n return source?.assertion.kind === \"link\" ? (source as StoredSourceLinkAssertion) : null\n}\n\nfunction storedObjectOverride(row: ObjectOverrideRow): StoredObjectOverride {\n const ref = objectRefFromColumns(row)\n return {\n ref,\n value: parseJson<StoredObjectOverride[\"value\"]>(row.value),\n editedAt: parseJson<Readonly<Record<string, string>>>(row.edited_at),\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nfunction storedLinkOverride(row: LinkOverrideRow): StoredLinkOverride {\n const ref = linkRefFromOverrideColumns(row)\n return {\n ref,\n value: parseJson<StoredLinkOverride[\"value\"]>(row.value),\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nfunction storedLinkSlotOverride(row: LinkSlotOverrideRow): StoredLinkSlotOverride {\n const ref = {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_primary_id },\n linkId: row.link_id,\n }\n return {\n ref,\n value: linkSlotOverrideValue(parseJson<unknown>(row.value), linkScopeLabel(ref)),\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nfunction linkRefFromOverrideColumns(row: LinkOverrideRow): OntologyLinkRef {\n return {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_primary_id },\n linkId: row.link_id,\n target: { objectTypeId: row.target_type_id, primaryId: row.target_primary_id },\n }\n}\n\nfunction linkScopeLabel(scope: {\n readonly source: OntologyObjectRef\n readonly linkId: string\n}): string {\n return JSON.stringify([scope.source.objectTypeId, scope.source.primaryId, scope.linkId])\n}\n\nfunction storedSource(row: SqliteOntologySourceAssertionRow): StoredSourceAssertion {\n return {\n source: { projectionId: row.source_id },\n materializationId: row.materialization_id,\n root: parseJson<StoredSourceAssertion[\"root\"]>(row.root),\n assertion: parseJson<StoredSourceAssertion[\"assertion\"]>(row.assertion),\n stagingOrdinal: row.staging_ordinal,\n } as StoredSourceAssertion\n}\n\nfunction effectiveObjectSnapshot(row: EffectiveObjectRow): EffectiveObjectSnapshot {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective object ${row.object_type_id}:${row.primary_id} lacks materializer provenance.`\n )\n }\n return {\n ref: objectRefFromColumns(row),\n properties: parseJson<EffectiveObjectSnapshot[\"properties\"]>(row.properties),\n version: row.version,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nfunction effectiveLinkSnapshot(row: EffectiveLinkRow): EffectiveLinkSnapshot {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective link ${linkRefKey(linkRefFromColumns(row))} lacks materializer provenance.`\n )\n }\n return {\n ref: linkRefFromColumns(row),\n ...(row.properties === null\n ? {}\n : {\n properties: parseJson<NonNullable<EffectiveLinkSnapshot[\"properties\"]>>(row.properties),\n }),\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nfunction storedPoint(row: TelemetryRow): StoredTelemetryPoint {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointSortKey(\n {\n object: { objectTypeId: row.object_type_id, primaryId: row.object_id },\n propertyId: row.property_id,\n },\n row.at\n )} lacks materializer provenance.`\n )\n }\n return {\n series: {\n object: { objectTypeId: row.object_type_id, primaryId: row.object_id },\n propertyId: row.property_id,\n },\n value: parseJson<StoredTelemetryPoint[\"value\"]>(row.value),\n ...(row.unit === null ? {} : { unit: row.unit }),\n at: row.at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nexport function linkSortExpression(alias?: string): string {\n const prefix = alias ? `${alias}.` : \"\"\n return `LOWER(HEX(CAST(json_array(${prefix}source_type_id, ${prefix}source_id, ${prefix}link_id, ${prefix}target_type_id, ${prefix}target_id) AS BLOB)))`\n}\n",
51
- "import type { Database } from \"bun:sqlite\"\nimport type { ProjectionEntityRef } from \"@sixb/core/internal/materialization\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n projectionEntityKey,\n} from \"@sixb/core/internal/materialization\"\nimport { sourceStageRoots, utf8SortKey } from \"@sixb/core/internal/ontology-storage-provider\"\nimport type { SourceActivationWrite, StageSourceRowsInput } from \"@sixb/core/storage\"\nimport type { SqliteOntologySourceAssertionRow } from \"./shared\"\nimport { canonicalJson, type SqliteOntologySourceRow } from \"./shared\"\n\nexport function replacementSourceRows(input: {\n readonly projectId: string\n readonly sourceId: string\n readonly materializationId: string\n readonly incremental: boolean\n}): { readonly sql: string; readonly values: readonly string[] } {\n const roots = input.incremental\n ? `ontology_source_roots AS changed\n CROSS JOIN ontology_source_roots AS roots ON roots.project_id = changed.project_id\n AND roots.source_id = changed.source_id AND roots.root_sort_key = changed.root_sort_key AND roots.active = 1`\n : \"ontology_source_roots AS roots\"\n const selected = input.incremental ? \"changed\" : \"roots\"\n return {\n sql: `SELECT * FROM ontology_source_rows WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n UNION ALL\n SELECT rows.* FROM ${roots}\n CROSS JOIN ontology_source_rows AS rows ON rows.project_id = roots.project_id\n AND rows.source_id = roots.source_id AND rows.materialization_id = roots.materialization_id\n AND rows.root_sort_key = roots.root_sort_key\n WHERE ${selected}.project_id = ? AND ${selected}.source_id = ?\n AND ${input.incremental ? \"changed.materialization_id = ?\" : \"roots.active = 1\"}`,\n values: [\n input.projectId,\n input.sourceId,\n input.materializationId,\n input.projectId,\n input.sourceId,\n ...(input.incremental ? [input.materializationId] : []),\n ],\n }\n}\n\nexport function stageSourceRoots(\n db: Database,\n manifest: SqliteOntologySourceRow,\n input: StageSourceRowsInput\n): void {\n const roots = sourceStageRoots(manifest.projection_kind, input)\n if (!manifest.base_materialization_id && roots.some((root) => root.deleted)) {\n throw new MaterializationValidationError(\"Root deletions require a source delta base.\")\n }\n const existing = db.query(`SELECT staging_ordinal, deleted FROM ontology_source_roots\n WHERE project_id = ? AND source_id = ? AND materialization_id = ? AND root_sort_key = ?`)\n const insert = db.query(`INSERT INTO ontology_source_roots (\n project_id, source_id, materialization_id, root_sort_key, root_kind, root_key, root, staging_ordinal, deleted\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT DO NOTHING RETURNING root_sort_key`)\n for (const root of roots) {\n const inserted = insert.get(\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n root.sortKey,\n root.root.kind,\n root.rootKey,\n canonicalJson(root.root),\n root.stagingOrdinal,\n Number(root.deleted)\n )\n if (inserted) continue\n const previous = existing.get(\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n root.sortKey\n ) as { staging_ordinal: number; deleted: number } | null\n if (\n !previous ||\n previous.staging_ordinal !== root.stagingOrdinal ||\n Boolean(previous.deleted) !== root.deleted\n ) {\n throw new MaterializationValidationError(\n \"Source materialization repeats root or stream ordinal with different content.\"\n )\n }\n }\n}\n\nexport function activateSourceRoots(\n db: Database,\n projectId: string,\n candidate: SqliteOntologySourceRow,\n activation: SourceActivationWrite\n): void {\n if (\n candidate.base_materialization_id !== null &&\n (candidate.base_materialization_id !== activation.expected.activeMaterializationId ||\n candidate.base_commit_id !== activation.expected.lastCommitId)\n )\n throw new MaterializationConflictError(\n \"projection-fence\",\n \"Source delta base changed before activation.\"\n )\n\n if (candidate.base_materialization_id !== null && candidate.root_count === 0) return\n const scope = [projectId, activation.source.projectionId, activation.materializationId] as const\n db.query(`UPDATE ontology_source_roots AS roots SET active = 0, retired_at = ?\n WHERE project_id = ? AND source_id = ? AND active = 1\n ${\n candidate.base_materialization_id === null\n ? \"\"\n : `AND root_sort_key IN (\n SELECT root_sort_key FROM ontology_source_roots\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?)`\n }`).run(\n activation.updatedAt,\n projectId,\n activation.source.projectionId,\n ...(candidate.base_materialization_id === null ? [] : [...scope])\n )\n db.query(`UPDATE ontology_source_roots SET active = CASE WHEN deleted = 1 THEN 0 ELSE 1 END,\n retired_at = CASE WHEN deleted = 1 THEN ? ELSE NULL END\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?`).run(\n activation.updatedAt,\n ...scope\n )\n}\n\nexport function assertSourceRootCoverage(db: Database, manifest: SqliteOntologySourceRow): void {\n const invalid = db\n .query(`SELECT 1 FROM ontology_source_roots AS roots\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND roots.deleted = EXISTS (\n SELECT 1 FROM ontology_source_rows AS rows\n WHERE rows.project_id = roots.project_id AND rows.source_id = roots.source_id\n AND rows.materialization_id = roots.materialization_id AND rows.root_sort_key = roots.root_sort_key\n ) LIMIT 1`)\n .get(manifest.project_id, manifest.source_id, manifest.materialization_id)\n if (invalid)\n throw new MaterializationValidationError(\n \"Source roots must have complete assertions or an explicit deletion, never both.\"\n )\n}\n\nexport function activeSourceRows(\n db: Database,\n projectId: string,\n refs: readonly ProjectionEntityRef[]\n): SqliteOntologySourceAssertionRow[] {\n const keys = refs.flatMap((entity) => {\n const entitySortKey = utf8SortKey(projectionEntityKey(entity))\n const roots =\n entity.kind === \"object\"\n ? [entitySortKey]\n : [\n entitySortKey,\n utf8SortKey(projectionEntityKey({ kind: \"object\", ref: entity.ref.source })),\n ]\n return roots.map((rootSortKey) => ({ rootSortKey, entitySortKey }))\n })\n return db\n .query(`WITH requested AS (\n SELECT DISTINCT json_extract(value, '$.rootSortKey') AS root_sort_key,\n json_extract(value, '$.entitySortKey') AS entity_sort_key FROM json_each(?)\n ) SELECT rows.* FROM requested\n CROSS JOIN ontology_source_roots AS roots ON roots.project_id = ?\n AND roots.active = 1 AND roots.root_sort_key = requested.root_sort_key\n CROSS JOIN ontology_source_rows AS rows ON rows.project_id = roots.project_id AND rows.source_id = roots.source_id\n AND rows.materialization_id = roots.materialization_id AND rows.entity_sort_key = requested.entity_sort_key\n AND rows.root_sort_key = roots.root_sort_key`)\n .all(canonicalJson(keys), projectId) as SqliteOntologySourceAssertionRow[]\n}\n\nexport function replacementAssertionRows(\n db: Database,\n input: {\n projectId: string\n sourceId: string\n materializationId: string\n incremental: boolean\n includePrevious: boolean\n refs: readonly ProjectionEntityRef[]\n }\n): SqliteOntologySourceAssertionRow[] {\n const keys = input.refs.map((ref) => ({\n entityKind: ref.kind,\n entityKey: projectionEntityKey(ref),\n rootKeys:\n ref.kind === \"object\"\n ? [utf8SortKey(projectionEntityKey(ref))]\n : [\n utf8SortKey(projectionEntityKey(ref)),\n utf8SortKey(projectionEntityKey({ kind: \"object\", ref: ref.ref.source })),\n ],\n }))\n const previous = !input.includePrevious\n ? \"\"\n : `UNION ALL\n SELECT rows.* FROM requested_entities AS requested\n CROSS JOIN ontology_source_roots AS roots ON roots.project_id = ? AND roots.source_id = ?\n AND roots.active = 1 AND roots.root_sort_key IN (SELECT value FROM json_each(requested.root_keys))\n CROSS JOIN ontology_source_rows AS rows ON rows.project_id = roots.project_id AND rows.source_id = roots.source_id\n AND rows.materialization_id = roots.materialization_id AND rows.root_sort_key = roots.root_sort_key\n AND rows.entity_kind = requested.entity_kind AND rows.entity_key = requested.entity_key\n ${\n !input.incremental\n ? \"\"\n : `WHERE EXISTS (SELECT 1 FROM ontology_source_roots AS changed\n WHERE changed.project_id = roots.project_id AND changed.source_id = roots.source_id\n AND changed.materialization_id = ? AND changed.root_sort_key = roots.root_sort_key)`\n }`\n return db\n .query(`WITH requested_entities AS (\n SELECT DISTINCT json_extract(value, '$.entityKind') AS entity_kind,\n json_extract(value, '$.entityKey') AS entity_key, json_extract(value, '$.rootKeys') AS root_keys FROM json_each(?)\n ) SELECT rows.* FROM requested_entities AS requested\n CROSS JOIN ontology_source_rows AS rows ON rows.project_id = ? AND rows.source_id = ?\n AND rows.materialization_id = ? AND rows.entity_kind = requested.entity_kind AND rows.entity_key = requested.entity_key\n ${previous}`)\n .all(\n canonicalJson(keys),\n input.projectId,\n input.sourceId,\n input.materializationId,\n ...(input.includePrevious\n ? [input.projectId, input.sourceId, ...(input.incremental ? [input.materializationId] : [])]\n : [])\n ) as SqliteOntologySourceAssertionRow[]\n}\n",
50
+ "import type { Database } from \"bun:sqlite\"\nimport type {\n EffectiveLinkSnapshot,\n EffectiveObjectSnapshot,\n OntologyLinkRef,\n OntologyObjectRef,\n ProjectionEntityRef,\n TelemetrySeriesRef,\n} from \"@sixb/core/internal/materialization\"\nimport {\n linkRefKey,\n linkScopeSortKey,\n MaterializationConflictError,\n objectRefKey,\n projectionEntityKey,\n telemetryPointSortKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n appendScopeSnapshot,\n finishScopeAccumulator,\n linkSlotOverrideValue,\n startScopeAccumulator,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n MaterializationLinkScopeRevision,\n MaterializationLinkScopeState,\n MaterializationLinkState,\n MaterializationObjectState,\n SourceReplacementLinkState,\n SourceReplacementObjectState,\n StoredLinkOverride,\n StoredLinkSlotOverride,\n StoredObjectOverride,\n StoredSourceAssertion,\n StoredSourceLinkAssertion,\n StoredSourceObjectAssertion,\n StoredTelemetryPoint,\n} from \"@sixb/core/storage\"\nimport {\n canonicalJson,\n linkRefFromColumns,\n objectRefFromColumns,\n parseJson,\n type SqliteOntologySourceAssertionRow,\n type SqliteStoredOverrideRow,\n sourceAssertion,\n} from \"./shared\"\nimport {\n activeSourceRows,\n LIVE_SOURCE_ROWS_JOIN,\n replacementAssertionRows,\n replacementSourceRows,\n SOURCE_ASSERTION_COLUMNS,\n} from \"./source-roots\"\n\nexport const SQLITE_MATERIALIZATION_WORK_TABLE = \"ontology_materialization_work\"\nexport const SQLITE_REPLACEMENT_WORK_TABLE = \"ontology_replacement_work\"\n\ninterface EffectiveObjectRow {\n readonly object_type_id: string\n readonly primary_id: string\n readonly properties: string\n readonly created_at: string\n readonly updated_at: string\n readonly version: number\n readonly last_commit_id: string | null\n}\n\ninterface EffectiveLinkRow {\n readonly source_type_id: string\n readonly source_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_id: string\n readonly properties: string | null\n readonly created_at: string\n readonly updated_at: string\n readonly last_commit_id: string | null\n}\n\ninterface TelemetryRow {\n readonly object_type_id: string\n readonly object_id: string\n readonly property_id: string\n readonly value: string\n readonly unit: string | null\n readonly at: string\n readonly last_commit_id: string | null\n}\n\ninterface LinkScopeRow extends EffectiveLinkRow {\n readonly scope_sort_key: string\n}\n\nfunction linkScopeRequestJson(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n): string {\n return canonicalJson(\n scopes.map(({ source, linkId }) => ({\n scopeSortKey: linkScopeSortKey(source, linkId),\n sourceTypeId: source.objectTypeId,\n sourceId: source.primaryId,\n linkId,\n }))\n )\n}\n\ninterface ObjectOverrideRow extends SqliteStoredOverrideRow {\n readonly object_type_id: string\n readonly primary_id: string\n readonly edited_at: string\n}\n\ninterface LinkOverrideRow extends SqliteStoredOverrideRow {\n readonly source_type_id: string\n readonly source_primary_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_primary_id: string\n}\n\ninterface LinkSlotOverrideRow {\n readonly source_type_id: string\n readonly source_primary_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_primary_id: string\n readonly value: string\n readonly last_commit_id: string\n readonly updated_at: string\n}\n\ninterface ReplacementSources {\n readonly owned: ReadonlySet<string>\n readonly byMaterialization: ReadonlyMap<string, ReadonlyMap<string, StoredSourceAssertion>>\n}\n\nexport type ReplacementIdentity =\n | {\n readonly kind: \"object\"\n readonly ref: OntologyObjectRef\n readonly sortKey: string\n readonly diffRequired: true\n }\n | {\n readonly kind: \"link\"\n readonly ref: OntologyLinkRef\n readonly sortKey: string\n readonly diffRequired: boolean\n }\n\ninterface ReplacementIdentityInput {\n readonly incremental?: boolean\n readonly sessionId: string\n readonly sourceId: string\n readonly candidateMaterializationId: string\n readonly previousMaterializationId: string | null\n readonly kind: \"object\" | \"link\"\n readonly pageRows: number\n}\n\ninterface ReplacementWorkRow {\n readonly entity_kind: \"object\" | \"link\"\n readonly identity_key: string\n readonly sort_key: string\n readonly diff_required: number\n}\n\ninterface ReplacementCursor {\n readonly sortKey: string\n readonly identityKey: string\n}\n\nexport class SqliteMaterializationStateReader {\n constructor(\n private readonly db: Database,\n readonly projectId: string\n ) {}\n\n objectState(ref: OntologyObjectRef): MaterializationObjectState {\n return this.objectStates([ref])[0]!\n }\n\n objectStates(refs: readonly OntologyObjectRef[]): readonly MaterializationObjectState[] {\n if (refs.length === 0) return []\n const requested = canonicalJson(\n refs.map((ref) => ({ objectTypeId: ref.objectTypeId, primaryId: ref.primaryId }))\n )\n const requestedObjects = `\n SELECT DISTINCT json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id\n FROM json_each(?)\n `\n // Keep the JSON request set on the outer side of each lookup. SQLite cannot estimate the\n // cardinality of json_each() and otherwise scans every project row once per requested key.\n // CROSS JOIN deliberately fixes the loop order so the existing composite indexes are used.\n const effectiveRows = this.db\n .query(\n `WITH requested AS (${requestedObjects})\n SELECT objects.* FROM requested\n CROSS JOIN objects\n ON objects.project_id = ?\n AND objects.object_type_id = requested.object_type_id\n AND objects.primary_id = requested.primary_id`\n )\n .all(requested, this.projectId) as EffectiveObjectRow[]\n const sourceRows = activeSourceRows(\n this.db,\n this.projectId,\n refs.map((ref) => ({ kind: \"object\", ref }))\n )\n const overrideRows = this.db\n .query(\n `WITH requested AS (${requestedObjects})\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_object_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.object_type_id = requested.object_type_id\n AND overrides.primary_id = requested.primary_id`\n )\n .all(requested, this.projectId) as ObjectOverrideRow[]\n const telemetryRows = this.db\n .query(\n `WITH requested AS (${requestedObjects}), ranked AS (\n SELECT timeseries.*,\n ROW_NUMBER() OVER (\n PARTITION BY timeseries.object_type_id, timeseries.object_id,\n timeseries.property_id\n ORDER BY timeseries.at DESC\n ) AS rank\n FROM requested\n CROSS JOIN timeseries\n ON timeseries.project_id = ?\n AND timeseries.object_type_id = requested.object_type_id\n AND timeseries.object_id = requested.primary_id\n )\n SELECT * FROM ranked WHERE rank = 1`\n )\n .all(requested, this.projectId) as TelemetryRow[]\n\n const effective = new Map(\n effectiveRows.map((row) => [objectRefKey(objectRefFromColumns(row)), row] as const)\n )\n const sources = activeSourceMap(sourceRows)\n const overrides = new Map(\n overrideRows.map(\n (row) => [objectRefKey(objectRefFromColumns(row)), storedObjectOverride(row)] as const\n )\n )\n const telemetry = new Map<string, StoredTelemetryPoint[]>()\n for (const row of telemetryRows) {\n const key = objectRefKey({ objectTypeId: row.object_type_id, primaryId: row.object_id })\n const points = telemetry.get(key) ?? []\n points.push(storedPoint(row))\n telemetry.set(key, points)\n }\n for (const points of telemetry.values()) {\n points.sort((left, right) =>\n telemetryPointSortKey(left.series, left.at).localeCompare(\n telemetryPointSortKey(right.series, right.at)\n )\n )\n }\n\n return refs.map((ref) => {\n const key = objectRefKey(ref)\n const effectiveRow = effective.get(key)\n return {\n ref: structuredClone(ref),\n source: sourceObject(sources.get(projectionEntityKey({ kind: \"object\", ref }))),\n override: overrides.get(key) ?? null,\n effective: effectiveRow ? effectiveObjectSnapshot(effectiveRow) : null,\n latestTelemetry: telemetry.get(key) ?? [],\n }\n })\n }\n\n linkState(ref: OntologyLinkRef): MaterializationLinkState {\n return this.linkStates([ref])[0]!\n }\n\n linkStates(refs: readonly OntologyLinkRef[]): readonly MaterializationLinkState[] {\n if (refs.length === 0) return []\n const requested = canonicalJson(\n refs.map((ref) => ({\n sourceTypeId: ref.source.objectTypeId,\n sourceId: ref.source.primaryId,\n linkId: ref.linkId,\n targetTypeId: ref.target.objectTypeId,\n targetId: ref.target.primaryId,\n }))\n )\n const effectiveRequest = `\n SELECT DISTINCT json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_id,\n json_extract(value, '$.linkId') AS link_id,\n json_extract(value, '$.targetTypeId') AS target_type_id,\n json_extract(value, '$.targetId') AS target_id\n FROM json_each(?)\n `\n const sourceRequest = `\n SELECT DISTINCT json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id,\n json_extract(value, '$.targetTypeId') AS target_type_id,\n json_extract(value, '$.targetId') AS target_primary_id\n FROM json_each(?)\n `\n const effectiveRows = this.db\n .query(\n `WITH requested AS (${effectiveRequest})\n SELECT links.* FROM requested\n CROSS JOIN links\n ON links.project_id = ?\n AND links.source_type_id = requested.source_type_id\n AND links.source_id = requested.source_id\n AND links.link_id = requested.link_id\n AND links.target_type_id = requested.target_type_id\n AND links.target_id = requested.target_id`\n )\n .all(requested, this.projectId) as EffectiveLinkRow[]\n const sourceRows = activeSourceRows(\n this.db,\n this.projectId,\n refs.map((ref) => ({ kind: \"link\", ref }))\n )\n const overrideRows = this.db\n .query(\n `WITH requested AS (${sourceRequest})\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.identity_kind = 'edge'\n AND overrides.source_type_id = requested.source_type_id\n AND overrides.source_primary_id = requested.source_primary_id\n AND overrides.link_id = requested.link_id\n AND overrides.target_type_id = requested.target_type_id\n AND overrides.target_primary_id = requested.target_primary_id`\n )\n .all(requested, this.projectId) as LinkOverrideRow[]\n const slotOverrideRows = this.db\n .query(\n `WITH requested AS (${sourceRequest})\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.identity_kind = 'slot'\n AND overrides.source_type_id = requested.source_type_id\n AND overrides.source_primary_id = requested.source_primary_id\n AND overrides.link_id = requested.link_id`\n )\n .all(requested, this.projectId) as LinkSlotOverrideRow[]\n const effective = new Map(\n effectiveRows.map((row) => [linkRefKey(linkRefFromColumns(row)), row] as const)\n )\n const sources = activeSourceMap(sourceRows)\n const overrides = new Map(\n overrideRows.map(\n (row) => [linkRefKey(linkRefFromOverrideColumns(row)), storedLinkOverride(row)] as const\n )\n )\n const slotOverrides = new Map(\n slotOverrideRows.map((row) => {\n const stored = storedLinkSlotOverride(row)\n return [linkScopeSortKey(stored.ref.source, stored.ref.linkId), stored] as const\n })\n )\n return refs.map((ref) => {\n const key = linkRefKey(ref)\n const effectiveRow = effective.get(key)\n return {\n ref: structuredClone(ref),\n source: sourceLink(sources.get(projectionEntityKey({ kind: \"link\", ref }))),\n override: overrides.get(key) ?? null,\n slotOverride: slotOverrides.get(linkScopeSortKey(ref.source, ref.linkId)) ?? null,\n effective: effectiveRow ? effectiveLinkSnapshot(effectiveRow) : null,\n }\n })\n }\n\n exactPoint(series: TelemetrySeriesRef, at: string): StoredTelemetryPoint | null {\n return this.exactPoints([{ series, at }])[0] ?? null\n }\n\n exactPoints(\n points: readonly { readonly series: TelemetrySeriesRef; readonly at: string }[]\n ): readonly StoredTelemetryPoint[] {\n if (points.length === 0) return []\n const requested = canonicalJson(\n points.map(({ series, at }) => ({\n objectTypeId: series.object.objectTypeId,\n objectId: series.object.primaryId,\n propertyId: series.propertyId,\n at,\n }))\n )\n const rows = this.db\n .query(\n `WITH requested AS (\n SELECT DISTINCT json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.objectId') AS object_id,\n json_extract(value, '$.propertyId') AS property_id,\n json_extract(value, '$.at') AS at\n FROM json_each(?)\n )\n SELECT timeseries.* FROM requested\n CROSS JOIN timeseries\n ON timeseries.project_id = ?\n AND timeseries.object_type_id = requested.object_type_id\n AND timeseries.object_id = requested.object_id\n AND timeseries.property_id = requested.property_id\n AND timeseries.at = requested.at`\n )\n .all(requested, this.projectId) as TelemetryRow[]\n const found = new Map(\n rows.map((row) => {\n const point = storedPoint(row)\n return [telemetryPointSortKey(point.series, point.at), point] as const\n })\n )\n return points.flatMap((point) => {\n const stored = found.get(telemetryPointSortKey(point.series, point.at))\n return stored ? [stored] : []\n })\n }\n\n linkScopeRevisions(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n ): readonly MaterializationLinkScopeRevision[] {\n if (scopes.length === 0) return []\n return this.readEffectiveLinkScopes(scopes, linkScopeRequestJson(scopes)).revisions\n }\n\n linkSlotStates(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n ): readonly MaterializationLinkScopeState[] {\n if (scopes.length === 0) return []\n const requestedJson = linkScopeRequestJson(scopes)\n const sourceRows = this.db\n .query(\n `WITH requested AS (\n SELECT DISTINCT\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id\n FROM json_each(?)\n )\n SELECT ${SOURCE_ASSERTION_COLUMNS} FROM requested\n CROSS JOIN ontology_source_rows AS rows\n ON rows.entity_kind = 'link'\n AND rows.source_type_id = requested.source_type_id\n AND rows.source_primary_id = requested.source_primary_id\n AND rows.link_id = requested.link_id\n ${LIVE_SOURCE_ROWS_JOIN}`\n )\n .all(requestedJson, this.projectId) as SqliteOntologySourceAssertionRow[]\n const slotOverrideRows = this.db\n .query(\n `WITH requested AS (\n SELECT DISTINCT\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id\n FROM json_each(?)\n )\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.identity_kind = 'slot'\n AND overrides.source_type_id = requested.source_type_id\n AND overrides.source_primary_id = requested.source_primary_id\n AND overrides.link_id = requested.link_id`\n )\n .all(requestedJson, this.projectId) as LinkSlotOverrideRow[]\n const sources = activeScopeSourceMap(sourceRows)\n const overrides = new Map(\n slotOverrideRows.map((row) => {\n const stored = storedLinkSlotOverride(row)\n return [linkScopeSortKey(stored.ref.source, stored.ref.linkId), stored] as const\n })\n )\n const { revisions, effective } = this.readEffectiveLinkScopes(scopes, requestedJson)\n return scopes.map(({ source, linkId }, index) => {\n const key = linkScopeSortKey(source, linkId)\n return {\n ...revisions[index]!,\n sourceAssertion: sources.get(key) ?? null,\n override: overrides.get(key) ?? null,\n effective: effective.get(key) ?? null,\n }\n })\n }\n\n private readEffectiveLinkScopes(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[],\n requestedJson: string\n ): {\n readonly revisions: readonly MaterializationLinkScopeRevision[]\n readonly effective: ReadonlyMap<string, EffectiveLinkSnapshot | null>\n } {\n const accumulators = new Map(\n scopes.map(({ source, linkId }) => {\n const key = linkScopeSortKey(source, linkId)\n return [key, startScopeAccumulator(source, linkId)] as const\n })\n )\n const effective = new Map<string, EffectiveLinkSnapshot | null>()\n const rows = this.db\n .query(\n `\n WITH requested AS (\n SELECT DISTINCT\n json_extract(value, '$.scopeSortKey') AS scope_sort_key,\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_id,\n json_extract(value, '$.linkId') AS link_id\n FROM json_each(?)\n )\n SELECT requested.scope_sort_key, links.*\n FROM requested\n CROSS JOIN links\n ON links.project_id = ?\n AND links.source_type_id = requested.source_type_id\n AND links.source_id = requested.source_id\n AND links.link_id = requested.link_id\n ORDER BY requested.scope_sort_key, ${linkSortExpression(\"links\")}\n `\n )\n .iterate(requestedJson, this.projectId) as Iterable<LinkScopeRow>\n for (const row of rows) {\n const accumulator = accumulators.get(row.scope_sort_key)\n if (!accumulator) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Unexpected link scope '${row.scope_sort_key}' returned by storage.`\n )\n }\n const snapshot = effectiveLinkSnapshot(row)\n appendScopeSnapshot(accumulator, snapshot)\n effective.set(row.scope_sort_key, accumulator.effectiveCount === 1 ? snapshot : null)\n }\n return {\n revisions: scopes.map(({ source, linkId }) =>\n finishScopeAccumulator(accumulators.get(linkScopeSortKey(source, linkId))!)\n ),\n effective,\n }\n }\n\n *incidentLinks(\n objects: readonly OntologyObjectRef[],\n pageRows: number\n ): Iterable<OntologyLinkRef[]> {\n if (objects.length === 0) return\n const values = objects.map(() => \"(?, ?)\").join(\", \")\n const args = objects.flatMap((ref) => [ref.objectTypeId, ref.primaryId])\n let cursor: string | null = null\n while (true) {\n const rows = this.db\n .query(\n `\n WITH requested(object_type_id, primary_id) AS (VALUES ${values}),\n authority_links AS (\n SELECT source_type_id, source_id, link_id, target_type_id, target_id\n FROM links WHERE project_id = ?\n UNION\n SELECT source_type_id, source_primary_id, link_id, target_type_id, target_primary_id\n FROM ontology_link_overrides\n WHERE project_id = ?\n UNION\n SELECT rows.source_type_id, rows.source_primary_id, rows.link_id,\n rows.target_type_id, rows.target_primary_id\n FROM ontology_source_rows AS rows\n ${LIVE_SOURCE_ROWS_JOIN}\n WHERE rows.entity_kind = 'link'\n ), selected AS (\n SELECT DISTINCT links.*,\n ${linkSortExpression(\"links\")} AS sort_key\n FROM authority_links AS links\n WHERE EXISTS (\n SELECT 1 FROM requested\n WHERE (requested.object_type_id = links.source_type_id\n AND requested.primary_id = links.source_id)\n OR (requested.object_type_id = links.target_type_id\n AND requested.primary_id = links.target_id)\n )\n )\n SELECT * FROM selected\n WHERE (? IS NULL OR sort_key > ?)\n ORDER BY sort_key\n LIMIT ?\n `\n )\n .all(\n ...args,\n this.projectId,\n this.projectId,\n this.projectId,\n cursor,\n cursor,\n pageRows\n ) as (EffectiveLinkRow & { readonly sort_key: string })[]\n if (rows.length === 0) break\n yield rows.map(linkRefFromColumns)\n cursor = rows[rows.length - 1]?.sort_key ?? null\n }\n }\n\n *replacementIdentities(input: ReplacementIdentityInput): Iterable<ReplacementIdentity[]> {\n this.prepareReplacementIdentities(input)\n let cursor: ReplacementCursor | null = null\n while (true) {\n const rows = this.replacementRows(input, cursor)\n if (rows.length === 0) break\n yield rows.map(replacementIdentity)\n if (rows.length < input.pageRows) break\n const last = rows[rows.length - 1]!\n cursor = { sortKey: last.sort_key, identityKey: last.identity_key }\n }\n }\n\n replacementObjectStates(\n sourceId: string,\n candidateMaterializationId: string,\n refs: readonly OntologyObjectRef[]\n ): readonly SourceReplacementObjectState[] {\n const base = this.objectStates(refs)\n const candidates = this.replacementSources(\n sourceId,\n [candidateMaterializationId],\n refs.map((ref) => ({ kind: \"object\" as const, ref }))\n )\n return base.map((state) => ({\n ref: state.ref,\n candidateSource: sourceObject(\n candidates.byMaterialization\n .get(candidateMaterializationId)\n ?.get(projectionEntityKey({ kind: \"object\", ref: state.ref }))\n ),\n override: state.override,\n effective: state.effective,\n latestTelemetry: state.latestTelemetry,\n }))\n }\n\n replacementLinkStates(\n sourceId: string,\n candidateMaterializationId: string,\n materializationIds: readonly string[],\n identities: readonly Extract<ReplacementIdentity, { readonly kind: \"link\" }>[],\n incremental = false\n ): readonly SourceReplacementLinkState[] {\n const refs = identities.map((identity) => identity.ref)\n const base = this.linkStates(refs)\n const replacements = this.replacementSources(\n sourceId,\n materializationIds,\n refs.map((ref) => ({ kind: \"link\" as const, ref })),\n incremental\n )\n const candidate = replacements.byMaterialization.get(candidateMaterializationId)\n return base.map((state, index) => {\n const key = projectionEntityKey({ kind: \"link\", ref: state.ref })\n return {\n ref: state.ref,\n candidateSource: replacements.owned.has(key)\n ? sourceLink(candidate?.get(key))\n : state.source,\n override: state.override,\n slotOverride: state.slotOverride,\n effective: state.effective,\n diffRequired: identities[index]!.diffRequired,\n }\n })\n }\n\n effectiveObjectRevision(ref: OntologyObjectRef): {\n readonly version: number\n readonly lastCommitId: string | null\n } | null {\n const row = this.db\n .query(\n `SELECT version, last_commit_id FROM objects\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?`\n )\n .get(this.projectId, ref.objectTypeId, ref.primaryId) as {\n readonly version: number\n readonly last_commit_id: string | null\n } | null\n return row ? { version: row.version, lastCommitId: row.last_commit_id } : null\n }\n\n effectiveLinkLastCommit(ref: OntologyLinkRef): string | null | undefined {\n const row = this.db\n .query(\n `\n SELECT last_commit_id FROM links\n WHERE project_id = ? AND source_type_id = ? AND source_id = ? AND link_id = ?\n AND target_type_id = ? AND target_id = ?\n `\n )\n .get(\n this.projectId,\n ref.source.objectTypeId,\n ref.source.primaryId,\n ref.linkId,\n ref.target.objectTypeId,\n ref.target.primaryId\n ) as { readonly last_commit_id: string | null } | null\n return row ? row.last_commit_id : undefined\n }\n\n private replacementSources(\n sourceId: string,\n materializationIds: readonly string[],\n refs: readonly ProjectionEntityRef[],\n incremental = false\n ): ReplacementSources {\n if (materializationIds.length === 0 || refs.length === 0) {\n return { owned: new Set(), byMaterialization: new Map() }\n }\n const rows = replacementAssertionRows(this.db, {\n projectId: this.projectId,\n sourceId,\n materializationId: materializationIds[0]!,\n incremental,\n includePrevious: materializationIds.length > 1,\n refs,\n })\n const owned = new Set<string>()\n const byMaterialization = new Map<string, Map<string, StoredSourceAssertion>>()\n for (const row of rows) {\n const source = storedSource(row)\n const key = projectionEntityKey(source.assertion)\n owned.add(key)\n const materialization = byMaterialization.get(row.materialization_id) ?? new Map()\n materialization.set(key, source)\n byMaterialization.set(row.materialization_id, materialization)\n }\n return { owned, byMaterialization }\n }\n\n private prepareReplacementIdentities(input: ReplacementIdentityInput): void {\n if (input.kind === \"object\") {\n this.prepareReplacementObjects(input)\n return\n }\n this.prepareReplacementLinks(input)\n }\n\n private prepareReplacementObjects(input: ReplacementIdentityInput): void {\n const rows = replacementSourceRows(this.db, {\n projectId: this.projectId,\n sourceId: input.sourceId,\n materializationId: input.candidateMaterializationId,\n incremental: input.incremental ?? false,\n })\n this.db\n .query(\n `\n INSERT INTO ${SQLITE_REPLACEMENT_WORK_TABLE} (\n session_id, entity_kind, identity_key, sort_key, diff_required\n )\n SELECT ?, 'object', json_array(object_type_id, primary_id),\n ${objectSortExpression()}, 1\n FROM (${rows.sql}) AS rows\n WHERE entity_kind = 'object'\n GROUP BY object_type_id, primary_id\n `\n )\n .run(input.sessionId, ...rows.values)\n }\n\n private prepareReplacementLinks(input: ReplacementIdentityInput): void {\n const rows = replacementSourceRows(this.db, {\n projectId: this.projectId,\n sourceId: input.sourceId,\n materializationId: input.candidateMaterializationId,\n incremental: input.incremental ?? false,\n })\n this.db\n .query(\n `\n WITH incident_objects AS (\n SELECT DISTINCT\n json_extract(payload, '$.ref.objectTypeId') AS object_type_id,\n json_extract(payload, '$.ref.primaryId') AS primary_id\n FROM ${SQLITE_MATERIALIZATION_WORK_TABLE}\n WHERE session_id = ? AND kind = 'incident-object'\n ), replacement_links AS (\n SELECT source_type_id, source_primary_id AS source_id, link_id,\n target_type_id, target_primary_id AS target_id\n FROM (${rows.sql}) AS rows\n WHERE entity_kind = 'link'\n ), incident_links AS (\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links\n JOIN incident_objects\n ON incident_objects.object_type_id = links.source_type_id\n AND incident_objects.primary_id = links.source_id\n WHERE links.project_id = ?\n UNION\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links\n JOIN incident_objects\n ON incident_objects.object_type_id = links.target_type_id\n AND incident_objects.primary_id = links.target_id\n WHERE links.project_id = ?\n UNION\n SELECT overrides.source_type_id,\n overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id\n FROM ontology_link_overrides AS overrides\n JOIN incident_objects\n ON incident_objects.object_type_id = overrides.source_type_id\n AND incident_objects.primary_id = overrides.source_primary_id\n WHERE overrides.project_id = ?\n UNION\n SELECT overrides.source_type_id,\n overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id\n FROM ontology_link_overrides AS overrides\n JOIN incident_objects\n ON incident_objects.object_type_id = overrides.target_type_id\n AND incident_objects.primary_id = overrides.target_primary_id\n WHERE overrides.project_id = ?\n UNION\n SELECT rows.source_type_id, rows.source_primary_id AS source_id,\n rows.link_id, rows.target_type_id, rows.target_primary_id AS target_id\n FROM incident_objects\n CROSS JOIN ontology_source_rows AS rows\n ON rows.entity_kind = 'link'\n AND rows.source_type_id = incident_objects.object_type_id\n AND rows.source_primary_id = incident_objects.primary_id\n ${LIVE_SOURCE_ROWS_JOIN}\n UNION\n SELECT rows.source_type_id, rows.source_primary_id AS source_id,\n rows.link_id, rows.target_type_id, rows.target_primary_id AS target_id\n FROM incident_objects\n CROSS JOIN ontology_source_rows AS rows\n ON rows.entity_kind = 'link'\n AND rows.target_type_id = incident_objects.object_type_id\n AND rows.target_primary_id = incident_objects.primary_id\n ${LIVE_SOURCE_ROWS_JOIN}\n ), diff_links AS (\n SELECT * FROM replacement_links\n UNION SELECT * FROM incident_links\n ), affected_scopes AS (\n SELECT DISTINCT source_type_id, source_id, link_id FROM diff_links\n ), all_links AS (\n SELECT *, 1 AS diff_required FROM diff_links\n UNION ALL\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id, 0 AS diff_required\n FROM links\n JOIN affected_scopes USING (source_type_id, source_id, link_id)\n WHERE links.project_id = ?\n UNION ALL\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id, 0 AS diff_required\n FROM ontology_link_overrides AS overrides\n JOIN affected_scopes\n ON affected_scopes.source_type_id = overrides.source_type_id\n AND affected_scopes.source_id = overrides.source_primary_id\n AND affected_scopes.link_id = overrides.link_id\n WHERE overrides.project_id = ? AND overrides.identity_kind = 'slot'\n ), selected AS (\n SELECT source_type_id, source_id, link_id, target_type_id, target_id,\n ${linkSortExpression(\"all_links\")} AS sort_key,\n MAX(diff_required) AS diff_required\n FROM all_links\n GROUP BY source_type_id, source_id, link_id, target_type_id, target_id\n )\n INSERT INTO ${SQLITE_REPLACEMENT_WORK_TABLE} (\n session_id, entity_kind, identity_key, sort_key, diff_required\n )\n SELECT ?, 'link',\n json_array(source_type_id, source_id, link_id, target_type_id, target_id),\n sort_key, diff_required\n FROM selected\n `\n )\n .run(\n input.sessionId,\n ...rows.values,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n input.sessionId\n )\n }\n\n private replacementRows(\n input: ReplacementIdentityInput,\n cursor: ReplacementCursor | null\n ): ReplacementWorkRow[] {\n return this.db\n .query(\n `\n SELECT entity_kind, identity_key, sort_key, diff_required\n FROM ${SQLITE_REPLACEMENT_WORK_TABLE}\n WHERE session_id = ? AND entity_kind = ?\n AND (? IS NULL OR (sort_key, identity_key) > (?, ?))\n ORDER BY sort_key, identity_key\n LIMIT ?\n `\n )\n .all(\n input.sessionId,\n input.kind,\n cursor?.sortKey ?? null,\n cursor?.sortKey ?? null,\n cursor?.identityKey ?? null,\n input.pageRows\n ) as ReplacementWorkRow[]\n }\n}\n\nfunction replacementIdentity(row: ReplacementWorkRow): ReplacementIdentity {\n const parts = parseJson<string[]>(row.identity_key)\n if (row.entity_kind === \"object\") {\n return {\n kind: \"object\",\n ref: { objectTypeId: parts[0]!, primaryId: parts[1]! },\n sortKey: row.sort_key,\n diffRequired: true,\n }\n }\n return {\n kind: \"link\",\n ref: {\n source: { objectTypeId: parts[0]!, primaryId: parts[1]! },\n linkId: parts[2]!,\n target: { objectTypeId: parts[3]!, primaryId: parts[4]! },\n },\n sortKey: row.sort_key,\n diffRequired: row.diff_required === 1,\n }\n}\n\nfunction activeSourceMap(\n rows: readonly SqliteOntologySourceAssertionRow[]\n): ReadonlyMap<string, StoredSourceAssertion> {\n const result = new Map<string, StoredSourceAssertion>()\n for (const row of rows) {\n const source = storedSource(row)\n const key = projectionEntityKey(source.assertion)\n if (result.has(key)) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert ${key}.`\n )\n }\n result.set(key, source)\n }\n return result\n}\n\nfunction activeScopeSourceMap(\n rows: readonly SqliteOntologySourceAssertionRow[]\n): ReadonlyMap<string, StoredSourceLinkAssertion> {\n const result = new Map<string, StoredSourceLinkAssertion>()\n for (const row of rows) {\n const source = sourceLink(storedSource(row))\n if (!source) continue\n const ref = source.assertion.ref\n const key = linkScopeSortKey(ref.source, ref.linkId)\n if (result.has(key)) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert cardinality-one link slot ${key}.`\n )\n }\n result.set(key, source)\n }\n return result\n}\n\nfunction sourceObject(\n source: StoredSourceAssertion | undefined\n): StoredSourceObjectAssertion | null {\n return source?.assertion.kind === \"object\" ? (source as StoredSourceObjectAssertion) : null\n}\n\nfunction sourceLink(source: StoredSourceAssertion | undefined): StoredSourceLinkAssertion | null {\n return source?.assertion.kind === \"link\" ? (source as StoredSourceLinkAssertion) : null\n}\n\nfunction storedObjectOverride(row: ObjectOverrideRow): StoredObjectOverride {\n const ref = objectRefFromColumns(row)\n return {\n ref,\n value: parseJson<StoredObjectOverride[\"value\"]>(row.value),\n editedAt: parseJson<Readonly<Record<string, string>>>(row.edited_at),\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nfunction storedLinkOverride(row: LinkOverrideRow): StoredLinkOverride {\n const ref = linkRefFromOverrideColumns(row)\n return {\n ref,\n value: parseJson<StoredLinkOverride[\"value\"]>(row.value),\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nfunction storedLinkSlotOverride(row: LinkSlotOverrideRow): StoredLinkSlotOverride {\n const ref = {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_primary_id },\n linkId: row.link_id,\n }\n return {\n ref,\n value: linkSlotOverrideValue(parseJson<unknown>(row.value), linkScopeLabel(ref)),\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nfunction linkRefFromOverrideColumns(row: LinkOverrideRow): OntologyLinkRef {\n return {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_primary_id },\n linkId: row.link_id,\n target: { objectTypeId: row.target_type_id, primaryId: row.target_primary_id },\n }\n}\n\nfunction linkScopeLabel(scope: {\n readonly source: OntologyObjectRef\n readonly linkId: string\n}): string {\n return JSON.stringify([scope.source.objectTypeId, scope.source.primaryId, scope.linkId])\n}\n\nfunction storedSource(row: SqliteOntologySourceAssertionRow): StoredSourceAssertion {\n return {\n source: { projectionId: row.source_id },\n materializationId: row.materialization_id,\n ...sourceAssertion(row),\n } as StoredSourceAssertion\n}\n\nfunction effectiveObjectSnapshot(row: EffectiveObjectRow): EffectiveObjectSnapshot {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective object ${row.object_type_id}:${row.primary_id} lacks materializer provenance.`\n )\n }\n return {\n ref: objectRefFromColumns(row),\n properties: parseJson<EffectiveObjectSnapshot[\"properties\"]>(row.properties),\n version: row.version,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nfunction effectiveLinkSnapshot(row: EffectiveLinkRow): EffectiveLinkSnapshot {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective link ${linkRefKey(linkRefFromColumns(row))} lacks materializer provenance.`\n )\n }\n return {\n ref: linkRefFromColumns(row),\n ...(row.properties === null\n ? {}\n : {\n properties: parseJson<NonNullable<EffectiveLinkSnapshot[\"properties\"]>>(row.properties),\n }),\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nfunction storedPoint(row: TelemetryRow): StoredTelemetryPoint {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointSortKey(\n {\n object: { objectTypeId: row.object_type_id, primaryId: row.object_id },\n propertyId: row.property_id,\n },\n row.at\n )} lacks materializer provenance.`\n )\n }\n return {\n series: {\n object: { objectTypeId: row.object_type_id, primaryId: row.object_id },\n propertyId: row.property_id,\n },\n value: parseJson<StoredTelemetryPoint[\"value\"]>(row.value),\n ...(row.unit === null ? {} : { unit: row.unit }),\n at: row.at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nfunction objectSortExpression(alias?: string): string {\n const prefix = alias ? `${alias}.` : \"\"\n return `LOWER(HEX(CAST(json_array(${prefix}object_type_id, ${prefix}primary_id) AS BLOB)))`\n}\n\nexport function linkSortExpression(alias?: string): string {\n const prefix = alias ? `${alias}.` : \"\"\n return `LOWER(HEX(CAST(json_array(${prefix}source_type_id, ${prefix}source_id, ${prefix}link_id, ${prefix}target_type_id, ${prefix}target_id) AS BLOB)))`\n}\n",
51
+ "import type { Database } from \"bun:sqlite\"\nimport type { ProjectionEntityRef } from \"@sixb/core/internal/materialization\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n projectionEntityKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n sourceEntityColumns,\n sourceStageRoots,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type { SourceActivationWrite, StageSourceRowsInput } from \"@sixb/core/storage\"\nimport type { SqliteOntologySourceAssertionRow } from \"./shared\"\nimport { canonicalJson, type SqliteOntologySourceRow } from \"./shared\"\n\n/**\n * Source storage in three levels: a version (`ontology_sources`, one per run), its roots (one per\n * logical dataset row, keyed by the canonical entity key) and their rows (what each root asserts).\n *\n * A root is live while its version is published (active or superseded), it is not retired and it\n * is not a deletion. Activation retires the live roots its candidate replaces and flips the\n * version; the candidate's own roots are never rewritten. One live root per source and key holds\n * because activation, under the source fence, retires every root the candidate replaces.\n */\nconst PUBLISHED = \"('active', 'superseded')\"\n\n/** The columns `sourceAssertion` reads, over `versions`, `roots` and `rows`. */\nexport const SOURCE_ASSERTION_COLUMNS = `versions.source_id, versions.materialization_id,\n roots.root_key, roots.staging_ordinal, rows.entity_kind, rows.object_type_id, rows.primary_id,\n rows.source_type_id, rows.source_primary_id, rows.link_id, rows.target_type_id,\n rows.target_primary_id, rows.payload`\n\n/**\n * Keeps `rows` to those of live roots, joined as `roots` and `versions`; binds the project id.\n * CROSS JOIN keeps it a filter on the rows already selected: as a plain JOIN, SQLite may start\n * from every live root of the project instead.\n */\nexport const LIVE_SOURCE_ROWS_JOIN = `\n CROSS JOIN ontology_source_roots AS roots ON roots.id = rows.root_id\n AND roots.project_id = ? AND roots.retired_at IS NULL AND roots.deleted = 0\n CROSS JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n AND versions.status IN ${PUBLISHED}`\n\n/** The typed identity of `rows` equals the one requested (`IS` matches NULLs). */\nconst ENTITY_MATCH = `rows.entity_kind = requested.entity_kind\n AND rows.object_type_id IS requested.object_type_id\n AND rows.primary_id IS requested.primary_id\n AND rows.source_type_id IS requested.source_type_id\n AND rows.source_primary_id IS requested.source_primary_id\n AND rows.link_id IS requested.link_id\n AND rows.target_type_id IS requested.target_type_id\n AND rows.target_primary_id IS requested.target_primary_id`\n\nconst REQUESTED_ENTITY = `json_extract(value, '$.entityKind') AS entity_kind,\n json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id,\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourcePrimaryId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id,\n json_extract(value, '$.targetTypeId') AS target_type_id,\n json_extract(value, '$.targetPrimaryId') AS target_primary_id`\n\n/** An entity's own key, and for a link the key of the object root that may assert it. */\nfunction requestedEntity(ref: ProjectionEntityRef) {\n const key = projectionEntityKey(ref)\n return {\n entityKind: ref.kind,\n ...sourceEntityColumns(ref),\n rootKeys:\n ref.kind === \"object\"\n ? [key]\n : [key, projectionEntityKey({ kind: \"object\", ref: ref.ref.source })],\n }\n}\n\nfunction sourceVersionId(\n db: Database,\n input: {\n readonly projectId: string\n readonly sourceId: string\n readonly materializationId: string\n }\n): number | null {\n const version = db\n .query(`SELECT version_id FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?`)\n .get(input.projectId, input.sourceId, input.materializationId) as {\n readonly version_id: number\n } | null\n return version?.version_id ?? null\n}\n\n/** The candidate's rows, plus the rows of the live roots it may replace. */\nexport function replacementSourceRows(\n db: Database,\n input: {\n readonly projectId: string\n readonly sourceId: string\n readonly materializationId: string\n readonly incremental: boolean\n }\n): { readonly sql: string; readonly values: readonly (string | number | null)[] } {\n const version = sourceVersionId(db, input)\n const live = `live.retired_at IS NULL AND live.deleted = 0\n AND versions.source_id = ? AND versions.status IN ${PUBLISHED}`\n const replaced = input.incremental\n ? `SELECT live.id FROM ontology_source_roots AS changed\n CROSS JOIN ontology_source_roots AS live\n ON live.project_id = ? AND live.root_key = changed.root_key\n CROSS JOIN ontology_sources AS versions ON versions.version_id = live.version_id\n WHERE changed.version_id = ? AND ${live}`\n : `SELECT live.id FROM ontology_sources AS versions\n CROSS JOIN ontology_source_roots AS live ON live.version_id = versions.version_id\n WHERE versions.project_id = ? AND ${live}`\n return {\n sql: `SELECT rows.* FROM ontology_source_roots AS roots\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ?\n UNION ALL\n SELECT rows.* FROM (${replaced}) AS roots\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id`,\n values: [version, input.projectId, ...(input.incremental ? [version] : []), input.sourceId],\n }\n}\n\nexport function stageSourceRoots(\n db: Database,\n manifest: SqliteOntologySourceRow,\n input: StageSourceRowsInput\n): void {\n const roots = sourceStageRoots(manifest.projection_kind, input)\n if (!manifest.base_materialization_id && roots.some((root) => root.deleted)) {\n throw new MaterializationValidationError(\"Root deletions require a source delta base.\")\n }\n const existing = db.query(`SELECT staging_ordinal, deleted FROM ontology_source_roots\n WHERE version_id = ? AND root_key = ?`)\n const insert = db.query(`INSERT INTO ontology_source_roots (\n version_id, project_id, root_key, staging_ordinal, deleted\n ) VALUES (?, ?, ?, ?, ?) ON CONFLICT DO NOTHING RETURNING id`)\n for (const root of roots) {\n const inserted = insert.get(\n manifest.version_id,\n input.projectId,\n root.rootKey,\n root.stagingOrdinal,\n Number(root.deleted)\n )\n if (inserted) continue\n const previous = existing.get(manifest.version_id, root.rootKey) as {\n staging_ordinal: number\n deleted: number\n } | null\n if (\n !previous ||\n previous.staging_ordinal !== root.stagingOrdinal ||\n Boolean(previous.deleted) !== root.deleted\n ) {\n throw new MaterializationValidationError(\n \"Source materialization repeats root or stream ordinal with different content.\"\n )\n }\n }\n}\n\n/** Retires what the candidate replaces; its own roots go live when its version turns active. */\nexport function activateSourceRoots(\n db: Database,\n projectId: string,\n candidate: SqliteOntologySourceRow,\n activation: SourceActivationWrite\n): void {\n if (\n candidate.base_materialization_id !== null &&\n (candidate.base_materialization_id !== activation.expected.activeMaterializationId ||\n candidate.base_commit_id !== activation.expected.lastCommitId)\n )\n throw new MaterializationConflictError(\n \"projection-fence\",\n \"Source delta base changed before activation.\"\n )\n if (candidate.base_materialization_id !== null && candidate.root_count === 0) return\n const delta = candidate.base_materialization_id !== null\n db.query(`UPDATE ontology_source_roots SET retired_at = ?\n WHERE retired_at IS NULL AND deleted = 0\n AND version_id IN (SELECT version_id FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND status IN ${PUBLISHED})\n ${\n delta\n ? `AND project_id = ? AND root_key IN (\n SELECT root_key FROM ontology_source_roots WHERE version_id = ?)`\n : \"\"\n }`).run(\n activation.updatedAt,\n projectId,\n activation.source.projectionId,\n ...(delta ? [projectId, candidate.version_id] : [])\n )\n // Deletions are never live; retiring them lets cleanup remove them with their version.\n db.query(`UPDATE ontology_source_roots SET retired_at = ?\n WHERE version_id = ? AND deleted = 1`).run(activation.updatedAt, candidate.version_id)\n}\n\nexport function assertSourceRootCoverage(db: Database, manifest: SqliteOntologySourceRow): void {\n const invalid = db\n .query(`SELECT 1 FROM ontology_source_roots AS roots\n WHERE roots.version_id = ?\n AND roots.deleted = EXISTS (\n SELECT 1 FROM ontology_source_rows AS rows WHERE rows.root_id = roots.id\n ) LIMIT 1`)\n .get(manifest.version_id)\n if (invalid)\n throw new MaterializationValidationError(\n \"Source roots must have complete assertions or an explicit deletion, never both.\"\n )\n}\n\n/** The live assertions of `refs`, whichever source asserts them. */\nexport function activeSourceRows(\n db: Database,\n projectId: string,\n refs: readonly ProjectionEntityRef[]\n): SqliteOntologySourceAssertionRow[] {\n const requested = refs.flatMap((ref) => {\n const { rootKeys, ...entity } = requestedEntity(ref)\n return rootKeys.map((rootKey) => ({ ...entity, rootKey }))\n })\n return db\n .query(`WITH requested AS (\n SELECT DISTINCT json_extract(value, '$.rootKey') AS root_key, ${REQUESTED_ENTITY}\n FROM json_each(?)\n ) SELECT ${SOURCE_ASSERTION_COLUMNS} FROM requested\n CROSS JOIN ontology_source_roots AS roots ON roots.project_id = ?\n AND roots.root_key = requested.root_key AND roots.retired_at IS NULL AND roots.deleted = 0\n CROSS JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n AND versions.status IN ${PUBLISHED}\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id AND ${ENTITY_MATCH}`)\n .all(canonicalJson(requested), projectId) as SqliteOntologySourceAssertionRow[]\n}\n\n/** The candidate's assertions of `refs`, and optionally the live ones they would replace. */\nexport function replacementAssertionRows(\n db: Database,\n input: {\n projectId: string\n sourceId: string\n materializationId: string\n incremental: boolean\n includePrevious: boolean\n refs: readonly ProjectionEntityRef[]\n }\n): SqliteOntologySourceAssertionRow[] {\n const version = sourceVersionId(db, input)\n const previous = !input.includePrevious\n ? \"\"\n : `UNION ALL\n SELECT ${SOURCE_ASSERTION_COLUMNS} FROM requested_entities AS requested\n CROSS JOIN ontology_source_roots AS roots ON roots.project_id = ?\n AND roots.root_key IN (SELECT value FROM json_each(requested.root_keys))\n AND roots.retired_at IS NULL AND roots.deleted = 0\n CROSS JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n AND versions.source_id = ? AND versions.status IN ${PUBLISHED}\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id AND ${ENTITY_MATCH}\n ${\n !input.incremental\n ? \"\"\n : `WHERE EXISTS (SELECT 1 FROM ontology_source_roots AS changed\n WHERE changed.version_id = ? AND changed.root_key = roots.root_key)`\n }`\n return db\n .query(`WITH requested_entities AS (\n SELECT DISTINCT ${REQUESTED_ENTITY}, json_extract(value, '$.rootKeys') AS root_keys\n FROM json_each(?)\n ) SELECT ${SOURCE_ASSERTION_COLUMNS} FROM requested_entities AS requested\n CROSS JOIN ontology_source_roots AS roots ON roots.version_id = ?\n AND roots.root_key IN (SELECT value FROM json_each(requested.root_keys))\n CROSS JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id AND ${ENTITY_MATCH}\n ${previous}`)\n .all(\n canonicalJson(input.refs.map(requestedEntity)),\n version,\n ...(input.includePrevious\n ? [input.projectId, input.sourceId, ...(input.incremental ? [version] : [])]\n : [])\n ) as SqliteOntologySourceAssertionRow[]\n}\n",
52
52
  "import type { Database } from \"bun:sqlite\"\nimport {\n linkRefKey,\n MaterializationConflictError,\n objectRefKey,\n telemetryPointKey,\n} from \"@sixb/core/internal/materialization\"\nimport { effectiveConflict } from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n ExactEffectiveLinkWrite,\n ExactEffectiveObjectWrite,\n MaterializationPlanChunk,\n} from \"@sixb/core/storage\"\nimport { assertTimestamp, canonicalJson, isSqliteConstraintError, requireChanges } from \"./shared\"\n\nfunction linkOverrideConflictMessage(identityKind: \"edge\" | \"slot\"): string {\n return identityKind === \"edge\"\n ? \"Expected link edge override changed.\"\n : \"Expected link slot override changed.\"\n}\n\nfunction linkOverrideConflict(identityKind: \"edge\" | \"slot\"): MaterializationConflictError {\n return effectiveConflict(linkOverrideConflictMessage(identityKind))\n}\n\n/** Applies one already-validated exact plan chunk to SQLite authority tables. */\nexport class SqliteMaterializationWriter {\n constructor(private readonly db: Database) {}\n\n apply(projectId: string, commitId: string, chunk: MaterializationPlanChunk): void {\n this.applyOverrides(projectId, chunk)\n this.applyEffective(projectId, chunk)\n this.applyTimeseries(projectId, chunk)\n this.applyOutbox(projectId, commitId, chunk)\n }\n\n private applyOverrides(projectId: string, chunk: MaterializationPlanChunk): void {\n for (const item of chunk.overrides.objects.upserts) {\n if (item.expectedLastCommitId === null) {\n try {\n this.db\n .query(\n `INSERT INTO ontology_object_overrides (\n project_id, object_type_id, primary_id, value, edited_at,\n last_commit_id, updated_at\n ) VALUES (?, ?, ?, json(?), json(?), ?, ?)`\n )\n .run(\n projectId,\n item.ref.objectTypeId,\n item.ref.primaryId,\n canonicalJson(item.value),\n canonicalJson(item.editedAt),\n item.lastCommitId,\n item.updatedAt\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw effectiveConflict(\"Expected object override changed.\")\n }\n throw error\n }\n continue\n }\n requireChanges(\n this.db\n .query(\n `UPDATE ontology_object_overrides\n SET value = json(?), edited_at = json(?), last_commit_id = ?, updated_at = ?\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND last_commit_id = ?`\n )\n .run(\n canonicalJson(item.value),\n canonicalJson(item.editedAt),\n item.lastCommitId,\n item.updatedAt,\n projectId,\n item.ref.objectTypeId,\n item.ref.primaryId,\n item.expectedLastCommitId\n ).changes,\n \"effective-state\",\n \"Expected object override changed.\"\n )\n }\n for (const item of chunk.overrides.objects.deletes) {\n requireChanges(\n this.db\n .query(\n `DELETE FROM ontology_object_overrides\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND last_commit_id = ?`\n )\n .run(projectId, item.ref.objectTypeId, item.ref.primaryId, item.expectedLastCommitId)\n .changes,\n \"effective-state\",\n \"Expected object override changed.\"\n )\n }\n\n const upsertLink = (\n identityKind: \"edge\" | \"slot\",\n identityKey: string,\n ref: {\n readonly source: { readonly objectTypeId: string; readonly primaryId: string }\n readonly linkId: string\n readonly target: { readonly objectTypeId: string; readonly primaryId: string }\n },\n item:\n | (typeof chunk.overrides.links.edges.upserts)[number]\n | (typeof chunk.overrides.links.slots.upserts)[number]\n ): void => {\n if (item.expectedLastCommitId === null) {\n try {\n this.db\n .query(\n `INSERT INTO ontology_link_overrides (\n project_id, identity_kind, identity_key,\n source_type_id, source_primary_id, link_id,\n target_type_id, target_primary_id, value, last_commit_id, updated_at\n ) VALUES (?, ?, json(?), ?, ?, ?, ?, ?, json(?), ?, ?)`\n )\n .run(\n projectId,\n identityKind,\n identityKey,\n ref.source.objectTypeId,\n ref.source.primaryId,\n ref.linkId,\n ref.target.objectTypeId,\n ref.target.primaryId,\n canonicalJson(item.value),\n item.lastCommitId,\n item.updatedAt\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw linkOverrideConflict(identityKind)\n }\n throw error\n }\n return\n }\n requireChanges(\n this.db\n .query(\n `UPDATE ontology_link_overrides\n SET target_type_id = ?, target_primary_id = ?, value = json(?),\n last_commit_id = ?, updated_at = ?\n WHERE project_id = ? AND identity_kind = ? AND identity_key = json(?)\n AND last_commit_id = ?`\n )\n .run(\n ref.target.objectTypeId,\n ref.target.primaryId,\n canonicalJson(item.value),\n item.lastCommitId,\n item.updatedAt,\n projectId,\n identityKind,\n identityKey,\n item.expectedLastCommitId\n ).changes,\n \"effective-state\",\n linkOverrideConflictMessage(identityKind)\n )\n }\n\n for (const item of chunk.overrides.links.edges.upserts) {\n upsertLink(\"edge\", linkRefKey(item.ref), item.ref, item)\n }\n for (const item of chunk.overrides.links.slots.upserts) {\n upsertLink(\n \"slot\",\n JSON.stringify([item.ref.source.objectTypeId, item.ref.source.primaryId, item.ref.linkId]),\n { source: item.ref.source, linkId: item.ref.linkId, target: item.value.target },\n item\n )\n }\n\n const deleteLink = (\n identityKind: \"edge\" | \"slot\",\n identityKey: string,\n expectedLastCommitId: string\n ): void => {\n requireChanges(\n this.db\n .query(\n `DELETE FROM ontology_link_overrides\n WHERE project_id = ? AND identity_kind = ? AND identity_key = json(?)\n AND last_commit_id = ?`\n )\n .run(projectId, identityKind, identityKey, expectedLastCommitId).changes,\n \"effective-state\",\n linkOverrideConflictMessage(identityKind)\n )\n }\n for (const item of chunk.overrides.links.edges.deletes) {\n deleteLink(\"edge\", linkRefKey(item.ref), item.expectedLastCommitId)\n }\n for (const item of chunk.overrides.links.slots.deletes) {\n deleteLink(\n \"slot\",\n JSON.stringify([item.ref.source.objectTypeId, item.ref.source.primaryId, item.ref.linkId]),\n item.expectedLastCommitId\n )\n }\n }\n\n private applyEffective(projectId: string, chunk: MaterializationPlanChunk): void {\n for (const item of chunk.effective.linkDeletes) {\n requireChanges(\n this.db\n .query(\n `\n DELETE FROM links\n WHERE project_id = ? AND source_type_id = ? AND source_id = ? AND link_id = ?\n AND target_type_id = ? AND target_id = ? AND last_commit_id = ?\n `\n )\n .run(\n projectId,\n item.ref.source.objectTypeId,\n item.ref.source.primaryId,\n item.ref.linkId,\n item.ref.target.objectTypeId,\n item.ref.target.primaryId,\n item.expected.lastCommitId\n ).changes,\n \"effective-state\",\n `Expected link ${linkRefKey(item.ref)} changed.`\n )\n }\n for (const item of chunk.effective.objectDeletes) {\n requireChanges(\n this.db\n .query(\n `DELETE FROM objects\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND version = ? AND last_commit_id = ?`\n )\n .run(\n projectId,\n item.ref.objectTypeId,\n item.ref.primaryId,\n item.expected.version,\n item.expected.lastCommitId\n ).changes,\n \"effective-state\",\n `Expected object ${objectRefKey(item.ref)} changed.`\n )\n }\n for (const item of chunk.effective.objectUpserts) this.applyObject(projectId, item)\n for (const item of chunk.effective.linkUpserts) this.applyLink(projectId, item)\n }\n\n private applyObject(projectId: string, item: ExactEffectiveObjectWrite): void {\n const { row, expected } = item\n if (!expected.exists) {\n try {\n this.db\n .query(\n `\n INSERT INTO objects (\n project_id, object_type_id, primary_id, properties, created_at,\n updated_at, version, last_commit_id\n ) VALUES (?, ?, ?, json(?), ?, ?, ?, ?)\n `\n )\n .run(\n projectId,\n row.ref.objectTypeId,\n row.ref.primaryId,\n canonicalJson(row.properties),\n row.createdAt,\n row.updatedAt,\n row.version,\n row.lastCommitId\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw effectiveConflict(`Expected object ${objectRefKey(row.ref)} to be absent.`)\n }\n throw error\n }\n return\n }\n requireChanges(\n this.db\n .query(\n `\n UPDATE objects\n SET properties = json(?), created_at = ?, updated_at = ?, version = ?,\n last_commit_id = ?\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND version = ? AND last_commit_id = ?\n `\n )\n .run(\n canonicalJson(row.properties),\n row.createdAt,\n row.updatedAt,\n row.version,\n row.lastCommitId,\n projectId,\n row.ref.objectTypeId,\n row.ref.primaryId,\n expected.version,\n expected.lastCommitId\n ).changes,\n \"effective-state\",\n `Expected object ${objectRefKey(row.ref)} changed.`\n )\n }\n\n private applyLink(projectId: string, item: ExactEffectiveLinkWrite): void {\n const { row, expected } = item\n if (!expected.exists) {\n try {\n this.db\n .query(\n `\n INSERT INTO links (\n project_id, source_type_id, source_id, link_id, target_type_id, target_id,\n properties, created_at, updated_at, last_commit_id\n ) VALUES (?, ?, ?, ?, ?, ?, json(?), ?, ?, ?)\n `\n )\n .run(\n projectId,\n row.ref.source.objectTypeId,\n row.ref.source.primaryId,\n row.ref.linkId,\n row.ref.target.objectTypeId,\n row.ref.target.primaryId,\n row.properties === undefined ? null : canonicalJson(row.properties),\n row.createdAt,\n row.updatedAt,\n row.lastCommitId\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw effectiveConflict(`Expected link ${linkRefKey(row.ref)} to be absent.`)\n }\n throw error\n }\n return\n }\n requireChanges(\n this.db\n .query(\n `\n UPDATE links\n SET properties = json(?), created_at = ?, updated_at = ?,\n last_commit_id = ?\n WHERE project_id = ? AND source_type_id = ? AND source_id = ? AND link_id = ?\n AND target_type_id = ? AND target_id = ? AND last_commit_id = ?\n `\n )\n .run(\n row.properties === undefined ? null : canonicalJson(row.properties),\n row.createdAt,\n row.updatedAt,\n row.lastCommitId,\n projectId,\n row.ref.source.objectTypeId,\n row.ref.source.primaryId,\n row.ref.linkId,\n row.ref.target.objectTypeId,\n row.ref.target.primaryId,\n expected.lastCommitId\n ).changes,\n \"effective-state\",\n `Expected link ${linkRefKey(row.ref)} changed.`\n )\n }\n\n private applyTimeseries(projectId: string, chunk: MaterializationPlanChunk): void {\n for (const item of chunk.timeseries.pointUpserts) {\n const { point, expected } = item\n if (expected.lastCommitId === null) {\n try {\n this.db\n .query(\n `\n INSERT INTO timeseries (\n project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n ) VALUES (?, ?, ?, ?, json(?), ?, ?, ?)\n `\n )\n .run(\n projectId,\n point.series.object.objectTypeId,\n point.series.object.primaryId,\n point.series.propertyId,\n canonicalJson(point.value),\n point.unit ?? null,\n point.at,\n point.lastCommitId\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(point.series, point.at)} changed.`\n )\n }\n throw error\n }\n } else {\n requireChanges(\n this.db\n .query(\n `\n UPDATE timeseries\n SET value = json(?), unit = ?, last_commit_id = ?\n WHERE project_id = ? AND object_type_id = ? AND object_id = ?\n AND property_id = ? AND at = ? AND last_commit_id = ?\n `\n )\n .run(\n canonicalJson(point.value),\n point.unit ?? null,\n point.lastCommitId,\n projectId,\n point.series.object.objectTypeId,\n point.series.object.primaryId,\n point.series.propertyId,\n point.at,\n expected.lastCommitId\n ).changes,\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(point.series, point.at)} changed.`\n )\n }\n }\n }\n\n private applyOutbox(projectId: string, commitId: string, chunk: MaterializationPlanChunk): void {\n const insert = this.db.query(\n `\n INSERT INTO ontology_outbox (\n project_id, id, commit_id, commit_ordinal, envelope,\n available_at, attempts, lease_id, lease_expires_at,\n published_at, last_failure, created_at\n ) VALUES (?, ?, ?, ?, json(?), ?, 0, NULL, NULL, NULL, NULL, ?)\n `\n )\n for (const item of chunk.outbox) {\n assertTimestamp(item.availableAt, \"Outbox availableAt\")\n assertTimestamp(item.createdAt, \"Outbox createdAt\")\n try {\n insert.run(\n projectId,\n item.envelope.id,\n commitId,\n item.envelope.commitOrdinal,\n canonicalJson(item.envelope),\n item.availableAt,\n item.createdAt\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw effectiveConflict(`Duplicate outbox event '${item.envelope.id}'.`)\n }\n throw error\n }\n }\n }\n}\n",
53
53
  "import type { Database } from \"bun:sqlite\"\nimport { serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"@sixb/core/internal/materialization\"\nimport type {\n ClaimedOntologyOutboxRow,\n ClaimOntologyOutboxInput,\n CompleteOntologyOutboxLeaseInput,\n OntologyOutboxStorage,\n OntologyOutboxSummary,\n PurgePublishedOntologyOutboxInput,\n RescheduleOntologyOutboxLeaseInput,\n SummarizeOntologyOutboxInput,\n} from \"@sixb/core/storage\"\nimport { ONTOLOGY_OUTBOX_FAILURE_CODES } from \"@sixb/core/storage\"\nimport {\n assertNonblank,\n assertPositiveInteger,\n assertTimestamp,\n outboxRecord,\n type SqliteOntologyOutboxRow,\n type SqliteRootOperation,\n} from \"./shared\"\n\nexport class SqliteOntologyOutboxStorage implements OntologyOutboxStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation\n ) {}\n\n async claim(input: ClaimOntologyOutboxInput): Promise<readonly ClaimedOntologyOutboxRow[]> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertPositiveInteger(input.limit, \"Ontology outbox limit\")\n const now = assertTimestamp(input.now, \"Ontology outbox claim time\")\n const leaseExpiry = assertTimestamp(input.leaseExpiresAt, \"Ontology outbox lease expiry\")\n assertNonblank(input.leaseId, \"Ontology outbox lease id\")\n if (leaseExpiry <= now) {\n throw new MaterializationValidationError(\n \"Ontology outbox lease expiry must be later than the claim time.\"\n )\n }\n\n // Probe at most one page plus a sentinel through the eligibility index. Sparse retries\n // avoid scanning delayed rows; overflowing backlogs use publication order without a sort.\n const eligible = this.db\n .query(\n `SELECT CAST(rowid AS TEXT) AS rowId\n FROM ontology_outbox INDEXED BY idx_ontology_outbox_claim\n WHERE project_id = ? AND published_at IS NULL AND available_at <= ?\n AND (lease_expires_at IS NULL OR lease_expires_at <= ?)\n LIMIT ?`\n )\n .all(input.projectId, input.now, input.now, input.limit + 1) as { rowId: string }[]\n if (eligible.length === 0) return []\n const selected =\n eligible.length <= input.limit\n ? eligible\n : (this.db\n .query(\n `SELECT CAST(rowid AS TEXT) AS rowId\n FROM ontology_outbox INDEXED BY idx_ontology_outbox_publication_order\n WHERE project_id = ? AND published_at IS NULL AND available_at <= ?\n AND (lease_expires_at IS NULL OR lease_expires_at <= ?)\n ORDER BY created_at, commit_id, commit_ordinal\n LIMIT ?`\n )\n .all(input.projectId, input.now, input.now, input.limit) as { rowId: string }[])\n const rows = this.db\n .query(\n `\n UPDATE ontology_outbox\n SET attempts = attempts + 1, lease_id = ?, lease_expires_at = ?\n WHERE rowid IN (SELECT CAST(value AS INTEGER) FROM json_each(?))\n RETURNING envelope, available_at, attempts, lease_id, lease_expires_at,\n published_at, last_failure, created_at\n `\n )\n .all(\n input.leaseId,\n input.leaseExpiresAt,\n JSON.stringify(selected.map((row) => row.rowId))\n ) as SqliteOntologyOutboxRow[]\n return rows\n .map((row) => outboxRecord(row))\n .sort(\n (left, right) =>\n left.createdAt.localeCompare(right.createdAt) ||\n left.envelope.id.localeCompare(right.envelope.id)\n )\n .map((record) => {\n if (record.leaseId === null || record.leaseExpiresAt === null) {\n throw new MaterializationConflictError(\n \"outbox-lease\",\n \"Ontology outbox claim returned an unpaired lease.\"\n )\n }\n return { ...record, leaseId: record.leaseId, leaseExpiresAt: record.leaseExpiresAt }\n })\n })\n }\n\n async markPublished(input: CompleteOntologyOutboxLeaseInput): Promise<void> {\n await this.runRootOperation(() => {\n assertLeaseInput(input)\n assertTimestamp(input.publishedAt, \"Ontology outbox publishedAt\")\n const ids = validateLeaseIds(input.ids)\n const changed = this.db\n .query(\n `\n WITH requested(id) AS MATERIALIZED (\n SELECT CAST(value AS TEXT) FROM json_each(?)\n ), leased(id) AS MATERIALIZED (\n -- Drive validation from the bounded ID list even before ANALYZE.\n SELECT outbox.id FROM requested\n CROSS JOIN ontology_outbox AS outbox USING (id)\n WHERE outbox.project_id = ? AND outbox.lease_id = ?\n AND outbox.lease_expires_at IS NOT NULL\n ), eligible(id) AS (\n SELECT id FROM leased WHERE (SELECT COUNT(*) FROM leased) = ?\n )\n UPDATE ontology_outbox\n SET published_at = ?, lease_id = NULL, lease_expires_at = NULL\n WHERE project_id = ? AND id IN (SELECT id FROM eligible)\n AND lease_id = ? AND lease_expires_at IS NOT NULL\n `\n )\n .run(\n JSON.stringify(ids),\n input.projectId,\n input.leaseId,\n ids.length,\n input.publishedAt,\n input.projectId,\n input.leaseId\n ).changes\n if (changed !== ids.length) throw leaseConflict()\n })\n }\n\n async reschedule(input: RescheduleOntologyOutboxLeaseInput): Promise<void> {\n await this.runRootOperation(() => {\n assertLeaseInput(input)\n assertTimestamp(input.availableAt, \"Ontology outbox availableAt\")\n const ids = validateLeaseIds(input.ids)\n const failure =\n input.failure === undefined\n ? null\n : serializeSixbFailure(input.failure, ONTOLOGY_OUTBOX_FAILURE_CODES)\n const changed = this.db\n .query(\n `\n WITH requested(id) AS MATERIALIZED (\n SELECT CAST(value AS TEXT) FROM json_each(?)\n ), leased(id) AS MATERIALIZED (\n -- Drive validation from the bounded ID list even before ANALYZE.\n SELECT outbox.id FROM requested\n CROSS JOIN ontology_outbox AS outbox USING (id)\n WHERE outbox.project_id = ? AND outbox.lease_id = ?\n AND outbox.lease_expires_at IS NOT NULL\n ), eligible(id) AS (\n SELECT id FROM leased WHERE (SELECT COUNT(*) FROM leased) = ?\n )\n UPDATE ontology_outbox\n SET available_at = ?, last_failure = COALESCE(?, last_failure),\n lease_id = NULL, lease_expires_at = NULL\n WHERE project_id = ? AND id IN (SELECT id FROM eligible)\n AND lease_id = ? AND lease_expires_at IS NOT NULL\n `\n )\n .run(\n JSON.stringify(ids),\n input.projectId,\n input.leaseId,\n ids.length,\n input.availableAt,\n failure,\n input.projectId,\n input.leaseId\n ).changes\n if (changed !== ids.length) throw leaseConflict()\n })\n }\n\n async purgePublished(input: PurgePublishedOntologyOutboxInput): Promise<number> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertPositiveInteger(input.limit, \"Ontology outbox limit\")\n assertTimestamp(input.publishedBefore, \"Ontology outbox purge cutoff\")\n return this.db\n .query(\n `\n DELETE FROM ontology_outbox\n WHERE rowid IN (\n SELECT rowid FROM ontology_outbox\n WHERE project_id = ? AND published_at IS NOT NULL AND published_at < ?\n ORDER BY published_at, id\n LIMIT ?\n )\n `\n )\n .run(input.projectId, input.publishedBefore, input.limit).changes\n })\n }\n\n async summarize(input: SummarizeOntologyOutboxInput): Promise<OntologyOutboxSummary> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n const summary = this.db\n .query(\n `\n SELECT COUNT(*) AS pending_count,\n MIN(created_at) AS oldest_pending_at,\n SUM(CASE WHEN attempts > 0 THEN 1 ELSE 0 END) AS retrying_count,\n COALESCE(MAX(attempts), 0) AS max_attempts\n FROM ontology_outbox\n WHERE project_id = ? AND published_at IS NULL\n `\n )\n .get(input.projectId) as {\n readonly pending_count: number\n readonly oldest_pending_at: string | null\n readonly retrying_count: number | null\n readonly max_attempts: number\n }\n return {\n pendingCount: summary.pending_count,\n oldestPendingAt: summary.oldest_pending_at,\n retryingCount: summary.retrying_count ?? 0,\n maxAttempts: summary.max_attempts,\n }\n })\n }\n}\n\nfunction validateLeaseIds(ids: readonly string[]): string[] {\n const seen = new Set<string>()\n for (const id of ids) {\n assertNonblank(id, \"Ontology outbox event id\")\n if (seen.has(id)) {\n throw new MaterializationValidationError(`Ontology outbox lease batch repeats event '${id}'.`)\n }\n seen.add(id)\n }\n return [...seen]\n}\n\nfunction assertLeaseInput(input: {\n readonly projectId: string\n readonly ids: readonly string[]\n readonly leaseId: string\n}): void {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertNonblank(input.leaseId, \"Ontology outbox lease id\")\n}\n\nfunction leaseConflict(): MaterializationConflictError {\n return new MaterializationConflictError(\"outbox-lease\", \"Ontology outbox lease does not match.\")\n}\n",
54
- "import type { Database } from \"bun:sqlite\"\nimport { MaterializationValidationError } from \"@sixb/core/internal/materialization\"\nimport {\n assertSourceBeginInput as assertBeginInput,\n assertSourceExecutionIdentity as assertExecutionIdentity,\n assertSourceProject as assertProjectAndSource,\n assertSourceCandidateOwner,\n assertSourceWriteIdentity as assertWriteIdentity,\n sourceEntityColumns as entityColumns,\n isExactStagingManifest,\n reconcileSourceStageRows,\n type SourceStageRow,\n sourceConflict,\n sourceMaterializationIdentity,\n sourceStageRow,\n sourceStageRows,\n utf8SortKey,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n AbandonSourceMaterializationCandidateInput,\n AbandonSourceMaterializationInput,\n AssertSourceMaterializationExecutionInput,\n BeginSourceMaterializationInput,\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n GetActiveOntologySourceInput,\n MarkSourceMaterializationReadyInput,\n OntologySourceRecord,\n OntologySourceStorage,\n ReclaimSourceMaterializationInput,\n StageSourceRowsInput,\n StageSourceRowsResult,\n SummarizeTerminalSourceMaterializationsInput,\n TerminalSourceMaterializationSummary,\n} from \"@sixb/core/storage\"\nimport { yieldSqliteEventLoop } from \"../transactions\"\nimport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertProjectionExecution,\n assertTimestamp,\n canonicalJson,\n type SqliteOntologySourceAssertionRow,\n type SqliteOntologySourceRow,\n type SqliteRootOperation,\n sourceAssertion,\n sourceRecord,\n} from \"./shared\"\nimport { cleanupSourceVersions } from \"./source-cleanup\"\nimport { assertSourceRootCoverage, stageSourceRoots } from \"./source-roots\"\n\nexport class SqliteOntologySourceStorage implements OntologySourceStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation\n ) {}\n\n async beginMaterialization(\n input: BeginSourceMaterializationInput\n ): Promise<OntologySourceRecord> {\n return this.runRootOperation(() => {\n assertBeginInput(input)\n this.assertExecution(input, sourceMaterializationIdentity(input))\n const existing = this.getManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n if (existing) {\n if (isExactStagingManifest(sourceRecord(existing), input)) return sourceRecord(existing)\n throw sourceConflict(\n `Source materialization '${input.materializationId}' already exists with different identity or state.`\n )\n }\n\n const candidate = this.db\n .query(\n `\n SELECT 1\n FROM ontology_sources\n WHERE project_id = ? AND projection_run_id = ?\n AND status IN ('staging', 'ready')\n LIMIT 1\n `\n )\n .get(input.projectId, input.execution.projectionRunId)\n if (candidate) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a nonterminal source materialization; reclaim it before beginning another.`\n )\n }\n\n this.db\n .query(\n `\n INSERT INTO ontology_sources (\n project_id, source_id, materialization_id, projection_run_id,\n projection_kind, protocol, status, execution_token,\n dataset_id, dataset_version_id, dataset_version_created_at,\n projection_revision, ownership_hash, ontology_revision,\n root_count, assertion_count, created_at, ready_at, activated_at,\n terminal_at, last_commit_id, updated_at, base_materialization_id, base_commit_id\n ) VALUES (?, ?, ?, ?, ?, 'replacement', 'staging', ?, ?, ?, ?, ?, ?, ?,\n NULL, NULL, ?, NULL, NULL, NULL, NULL, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n input.execution.projectionRunId,\n input.projectionKind,\n input.execution.executionToken,\n input.datasetVersion.datasetId,\n input.datasetVersion.versionId,\n input.datasetVersion.createdAt,\n input.projectionRevision,\n input.ownershipHash,\n input.ontologyRevision,\n input.createdAt,\n input.createdAt,\n input.base?.materializationId ?? null,\n input.base?.lastCommitId ?? null\n )\n return sourceRecord(\n this.requireManifest(input.projectId, input.source.projectionId, input.materializationId)\n )\n })\n }\n\n async stageRows(input: StageSourceRowsInput): Promise<StageSourceRowsResult> {\n const result = await this.runRootOperation(() => {\n assertWriteIdentity(input)\n this.assertExecution(input)\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n if (manifest.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' is '${manifest.status}' and cannot accept rows.`\n )\n }\n\n const rows = sourceStageRows(manifest.projection_kind, input.rows)\n const existing = this.findStageRows(input, rows)\n const { pending, unchanged } = reconcileSourceStageRows(rows, existing)\n stageSourceRoots(this.db, manifest, input)\n this.insertStageRows(input, pending)\n return { inserted: pending.length, unchanged }\n })\n await yieldSqliteEventLoop()\n return result\n }\n\n async markReady(input: MarkSourceMaterializationReadyInput): Promise<OntologySourceRecord> {\n return this.runRootOperation(() => {\n assertWriteIdentity(input)\n assertTimestamp(input.readyAt, \"Source readyAt\", true)\n assertNonnegativeInteger(input.rootCount, \"Source root count\")\n assertNonnegativeInteger(input.assertionCount, \"Source assertion count\")\n this.assertExecution(input)\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n if (manifest.status === \"ready\") {\n if (\n manifest.root_count === input.rootCount &&\n manifest.assertion_count === input.assertionCount &&\n manifest.ready_at === input.readyAt\n ) {\n return sourceRecord(manifest)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was marked ready with different counts or time.`\n )\n }\n if (manifest.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' cannot transition from '${manifest.status}' to 'ready'.`\n )\n }\n if (input.readyAt < manifest.created_at) {\n throw new MaterializationValidationError(\"Source readyAt cannot precede source createdAt.\")\n }\n this.assertReadyState(manifest, input.rootCount, input.assertionCount)\n const result = this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'ready', root_count = ?, assertion_count = ?, ready_at = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status = 'staging' AND execution_token = ?\n `\n )\n .run(\n input.rootCount,\n input.assertionCount,\n input.readyAt,\n input.readyAt,\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n input.execution.executionToken\n )\n if (result.changes !== 1) {\n throw sourceConflict(`Source materialization '${input.materializationId}' changed.`)\n }\n return sourceRecord(\n this.requireManifest(input.projectId, input.source.projectionId, input.materializationId)\n )\n })\n }\n\n async getActive(input: GetActiveOntologySourceInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n const row = this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND status = 'active'\n `\n )\n .get(input.projectId, input.source.projectionId) as SqliteOntologySourceRow | null\n return row ? sourceRecord(row) : null\n })\n }\n\n async abandon(input: AbandonSourceMaterializationCandidateInput): Promise<OntologySourceRecord>\n async abandon(input: ReclaimSourceMaterializationInput): Promise<OntologySourceRecord | null>\n async abandon(input: AbandonSourceMaterializationInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n assertExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n assertTimestamp(input.abandonedAt, \"Source abandonedAt\", true)\n this.assertExecution(input)\n return input.kind === \"candidate\"\n ? this.abandonCandidate(input)\n : this.abandonForReclaim(input)\n })\n }\n\n async cleanupTerminal(\n input: CleanupTerminalSourceMaterializationsInput\n ): Promise<CleanupTerminalSourceMaterializationsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Terminal source cleanup project id\")\n assertTimestamp(input.terminalBefore, \"Terminal source cleanup cutoff\", true)\n assertPositiveInteger(input.limit, \"Terminal source cleanup limit\")\n return cleanupSourceVersions(this.db, input)\n })\n }\n\n async summarizeTerminal(\n input: SummarizeTerminalSourceMaterializationsInput\n ): Promise<TerminalSourceMaterializationSummary> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Terminal source summary project id\")\n const summary = this.db\n .query(\n `\n SELECT COUNT(*) AS terminal_count, MIN(terminal_at) AS oldest_terminal_at\n FROM ontology_sources\n WHERE project_id = ? AND status IN ('superseded', 'abandoned')\n `\n )\n .get(input.projectId) as {\n readonly terminal_count: number\n readonly oldest_terminal_at: string | null\n }\n return {\n count: summary.terminal_count,\n oldestTerminalAt: summary.oldest_terminal_at,\n }\n })\n }\n\n private abandonCandidate(\n input: AbandonSourceMaterializationCandidateInput\n ): OntologySourceRecord {\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n if (manifest.status === \"abandoned\") {\n if (\n manifest.projection_run_id === input.execution.projectionRunId &&\n manifest.terminal_at === input.abandonedAt\n ) {\n return sourceRecord(manifest)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was abandoned by another execution or at another time.`\n )\n }\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n return this.transitionToAbandoned(manifest, input.abandonedAt)\n }\n\n private abandonForReclaim(input: ReclaimSourceMaterializationInput): OntologySourceRecord | null {\n const candidates = this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND projection_run_id = ?\n AND status IN ('staging', 'ready')\n `\n )\n .all(\n input.projectId,\n input.source.projectionId,\n input.execution.projectionRunId\n ) as SqliteOntologySourceRow[]\n if (\n candidates.some((candidate) => candidate.execution_token === input.execution.executionToken)\n ) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a source materialization owned by the current execution.`\n )\n }\n if (candidates.length > 1) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' has multiple nonterminal source materializations.`\n )\n }\n return candidates[0] ? this.transitionToAbandoned(candidates[0], input.abandonedAt) : null\n }\n\n private transitionToAbandoned(\n manifest: SqliteOntologySourceRow,\n abandonedAt: string\n ): OntologySourceRecord {\n if (\n abandonedAt < manifest.created_at ||\n (manifest.ready_at !== null && abandonedAt < manifest.ready_at)\n ) {\n throw new MaterializationValidationError(\n \"Source abandonedAt cannot precede source creation or readiness.\"\n )\n }\n const changed = this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'abandoned', execution_token = NULL, terminal_at = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status IN ('staging', 'ready')\n `\n )\n .run(\n abandonedAt,\n abandonedAt,\n manifest.project_id,\n manifest.source_id,\n manifest.materialization_id\n ).changes\n if (changed !== 1) {\n throw sourceConflict(\n `Source materialization '${manifest.materialization_id}' cannot transition to 'abandoned'.`\n )\n }\n this.db\n .query(`UPDATE ontology_source_roots SET retired_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ? AND active = 0`)\n .run(abandonedAt, manifest.project_id, manifest.source_id, manifest.materialization_id)\n return sourceRecord(\n this.requireManifest(manifest.project_id, manifest.source_id, manifest.materialization_id)\n )\n }\n\n private assertReadyState(\n manifest: SqliteOntologySourceRow,\n rootCount: number,\n assertionCount: number\n ): void {\n const counts = this.db\n .query(\n `\n SELECT (SELECT COUNT(*) FROM ontology_source_rows\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?) AS assertions, COUNT(*) AS roots,\n COUNT(DISTINCT staging_ordinal) AS ordinals,\n MIN(staging_ordinal) AS min_ordinal, MAX(staging_ordinal) AS max_ordinal\n FROM ontology_source_roots\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n `\n )\n .get(\n manifest.project_id,\n manifest.source_id,\n manifest.materialization_id,\n manifest.project_id,\n manifest.source_id,\n manifest.materialization_id\n ) as {\n assertions: number\n roots: number\n ordinals: number\n min_ordinal: number | null\n max_ordinal: number | null\n }\n if (\n counts.assertions !== assertionCount ||\n counts.roots !== rootCount ||\n counts.ordinals !== rootCount ||\n (rootCount > 0 && (counts.min_ordinal !== 0 || counts.max_ordinal !== rootCount - 1))\n ) {\n throw new MaterializationValidationError(\n \"Source ready counts do not match the staged roots and assertions.\"\n )\n }\n assertSourceRootCoverage(this.db, manifest)\n const invalid = this.db\n .query(\n manifest.projection_kind === \"link\"\n ? `\n SELECT root_key\n FROM ontology_source_rows\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n GROUP BY root_key\n HAVING COUNT(*) <> 1 OR MIN(root_kind) <> 'link' OR MIN(entity_kind) <> 'link'\n OR MIN(root_key) <> MIN(entity_key)\n LIMIT 1\n `\n : `\n SELECT root_key\n FROM ontology_source_rows\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n GROUP BY root_key\n HAVING MIN(root_kind) <> 'object'\n OR SUM(CASE WHEN entity_kind = 'object' AND entity_key = root_key THEN 1 ELSE 0 END) <> 1\n OR SUM(CASE\n WHEN entity_kind = 'object' AND entity_key <> root_key THEN 1\n WHEN entity_kind = 'link' AND (\n source_type_id <> root_object_type_id OR source_primary_id <> root_primary_id\n ) THEN 1\n ELSE 0\n END) <> 0\n LIMIT 1\n `\n )\n .get(manifest.project_id, manifest.source_id, manifest.materialization_id)\n if (invalid) {\n throw new MaterializationValidationError(\n manifest.projection_kind === \"link\"\n ? \"Link projection roots must contain exactly their matching link assertion.\"\n : \"Object projection roots must contain exactly their matching object assertion plus links sourced from that root.\"\n )\n }\n }\n\n private findStageRows(\n input: StageSourceRowsInput,\n rows: readonly SourceStageRow[]\n ): readonly SourceStageRow[] {\n if (rows.length === 0) return []\n const rootSortKeys = [...new Set(rows.map((row) => utf8SortKey(row.rootKey)))]\n const ordinals = [...new Set(rows.map((row) => row.row.stagingOrdinal))]\n const entitySortKeys = [...new Set(rows.map((row) => utf8SortKey(row.entityKey)))]\n const existing = this.db\n .query(\n `\n SELECT * FROM ontology_source_rows\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND (\n root_sort_key IN (SELECT CAST(value AS TEXT) FROM json_each(?))\n OR staging_ordinal IN (SELECT CAST(value AS INTEGER) FROM json_each(?))\n OR entity_sort_key IN (SELECT CAST(value AS TEXT) FROM json_each(?))\n )\n `\n )\n .all(\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n JSON.stringify(rootSortKeys),\n JSON.stringify(ordinals),\n JSON.stringify(entitySortKeys)\n ) as SqliteOntologySourceAssertionRow[]\n return existing.map((row) => sourceStageRow(sourceAssertion(row)))\n }\n\n private insertStageRows(input: StageSourceRowsInput, rows: readonly SourceStageRow[]): void {\n if (rows.length === 0) return\n const payload = rows.map(({ entityKey, rootKey, row }) => {\n const entity = entityColumns(row.assertion)\n const root = entityColumns(row.root)\n return {\n entityKind: row.assertion.kind,\n entityKey,\n entitySortKey: utf8SortKey(entityKey),\n rootKind: row.root.kind,\n rootKey,\n rootSortKey: utf8SortKey(rootKey),\n stagingOrdinal: row.stagingOrdinal,\n root: row.root,\n assertion: row.assertion,\n objectTypeId: entity.objectTypeId,\n primaryId: entity.primaryId,\n sourceTypeId: entity.sourceTypeId,\n sourcePrimaryId: entity.sourcePrimaryId,\n linkId: entity.linkId,\n targetTypeId: entity.targetTypeId,\n targetPrimaryId: entity.targetPrimaryId,\n rootObjectTypeId: root.objectTypeId,\n rootPrimaryId: root.primaryId,\n rootSourceTypeId: root.sourceTypeId,\n rootSourcePrimaryId: root.sourcePrimaryId,\n rootLinkId: root.linkId,\n rootTargetTypeId: root.targetTypeId,\n rootTargetPrimaryId: root.targetPrimaryId,\n }\n })\n this.db\n .query(\n `\n WITH staged(value) AS (SELECT value FROM json_each(?))\n INSERT INTO ontology_source_rows (\n project_id, source_id, materialization_id,\n entity_kind, entity_key, entity_sort_key,\n root_kind, root_key, root_sort_key, staging_ordinal,\n root, assertion,\n object_type_id, primary_id,\n source_type_id, source_primary_id, link_id, target_type_id, target_primary_id,\n root_object_type_id, root_primary_id,\n root_source_type_id, root_source_primary_id, root_link_id,\n root_target_type_id, root_target_primary_id\n )\n SELECT\n ?, ?, ?,\n json_extract(value, '$.entityKind'), json_extract(value, '$.entityKey'),\n json_extract(value, '$.entitySortKey'),\n json_extract(value, '$.rootKind'), json_extract(value, '$.rootKey'),\n json_extract(value, '$.rootSortKey'), json_extract(value, '$.stagingOrdinal'),\n json(json_extract(value, '$.root')), json(json_extract(value, '$.assertion')),\n json_extract(value, '$.objectTypeId'), json_extract(value, '$.primaryId'),\n json_extract(value, '$.sourceTypeId'), json_extract(value, '$.sourcePrimaryId'),\n json_extract(value, '$.linkId'), json_extract(value, '$.targetTypeId'),\n json_extract(value, '$.targetPrimaryId'),\n json_extract(value, '$.rootObjectTypeId'), json_extract(value, '$.rootPrimaryId'),\n json_extract(value, '$.rootSourceTypeId'),\n json_extract(value, '$.rootSourcePrimaryId'), json_extract(value, '$.rootLinkId'),\n json_extract(value, '$.rootTargetTypeId'), json_extract(value, '$.rootTargetPrimaryId')\n FROM staged\n `\n )\n .run(\n canonicalJson(payload),\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n }\n\n private assertExecution(\n input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly execution: { readonly projectionRunId: string; readonly executionToken: string }\n },\n identity?: AssertSourceMaterializationExecutionInput[\"identity\"]\n ): void {\n assertProjectionExecution(this.db, {\n projectId: input.projectId,\n sourceId: input.source.projectionId,\n projectionRunId: input.execution.projectionRunId,\n executionToken: input.execution.executionToken,\n ...(identity ? { identity } : {}),\n })\n }\n\n private getManifest(\n projectId: string,\n sourceId: string,\n materializationId: string\n ): SqliteOntologySourceRow | null {\n return this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n `\n )\n .get(projectId, sourceId, materializationId) as SqliteOntologySourceRow | null\n }\n\n private requireManifest(\n projectId: string,\n sourceId: string,\n materializationId: string\n ): SqliteOntologySourceRow {\n const row = this.getManifest(projectId, sourceId, materializationId)\n if (!row) throw sourceConflict(`Source materialization '${materializationId}' does not exist.`)\n return row\n }\n}\n",
55
- "import type { Database } from \"bun:sqlite\"\nimport type {\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n} from \"@sixb/core/storage\"\n\nexport function cleanupSourceVersions(\n db: Database,\n input: CleanupTerminalSourceMaterializationsInput\n): CleanupTerminalSourceMaterializationsResult {\n let remaining = input.limit\n let rowsDeleted = db\n .query(`DELETE FROM ontology_source_rows WHERE rowid IN (\n SELECT rows.rowid FROM ontology_source_roots AS roots\n JOIN ontology_sources AS sources USING (project_id, source_id, materialization_id)\n CROSS JOIN ontology_source_rows AS rows\n ON rows.project_id = roots.project_id AND rows.source_id = roots.source_id\n AND rows.materialization_id = roots.materialization_id AND rows.root_sort_key = roots.root_sort_key\n WHERE roots.project_id = ? AND roots.active = 0 AND roots.retired_at < ?\n AND sources.status IN ('superseded', 'abandoned')\n ORDER BY roots.retired_at, roots.source_id, roots.materialization_id, roots.root_sort_key, rows.entity_sort_key\n LIMIT ?\n )`)\n .run(input.projectId, input.terminalBefore, remaining).changes\n remaining -= rowsDeleted\n if (remaining > 0) {\n const removed = db\n .query(`DELETE FROM ontology_source_roots WHERE rowid IN (\n SELECT roots.rowid FROM ontology_source_roots AS roots\n JOIN ontology_sources AS sources USING (project_id, source_id, materialization_id)\n WHERE roots.project_id = ? AND roots.active = 0 AND roots.retired_at < ?\n AND sources.status IN ('superseded', 'abandoned')\n AND NOT EXISTS (SELECT 1 FROM ontology_source_rows AS rows\n WHERE rows.project_id = roots.project_id AND rows.source_id = roots.source_id\n AND rows.materialization_id = roots.materialization_id AND rows.root_sort_key = roots.root_sort_key)\n ORDER BY roots.retired_at, roots.source_id, roots.materialization_id, roots.root_sort_key LIMIT ?\n )`)\n .run(input.projectId, input.terminalBefore, remaining).changes\n rowsDeleted += removed\n remaining -= removed\n }\n const materializationsDeleted =\n remaining === 0\n ? 0\n : db\n .query(`DELETE FROM ontology_sources WHERE rowid IN (\n SELECT sources.rowid FROM ontology_sources AS sources\n WHERE project_id = ? AND status IN ('superseded', 'abandoned') AND terminal_at < ?\n AND NOT EXISTS (SELECT 1 FROM ontology_source_roots AS roots\n WHERE roots.project_id = sources.project_id AND roots.source_id = sources.source_id\n AND roots.materialization_id = sources.materialization_id)\n AND NOT EXISTS (SELECT 1 FROM ontology_source_rows AS rows\n WHERE rows.project_id = sources.project_id AND rows.source_id = sources.source_id\n AND rows.materialization_id = sources.materialization_id)\n ORDER BY terminal_at, source_id, materialization_id LIMIT ?\n )`)\n .run(input.projectId, input.terminalBefore, remaining).changes\n return { rowsDeleted, materializationsDeleted }\n}\n",
54
+ "import type { Database } from \"bun:sqlite\"\nimport { MaterializationValidationError } from \"@sixb/core/internal/materialization\"\nimport {\n assertSourceBeginInput as assertBeginInput,\n assertSourceExecutionIdentity as assertExecutionIdentity,\n assertSourceProject as assertProjectAndSource,\n assertSourceCandidateOwner,\n assertSourceWriteIdentity as assertWriteIdentity,\n sourceEntityColumns as entityColumns,\n isExactStagingManifest,\n reconcileSourceStageRows,\n type SourceStageRow,\n sourceAssertionPayload,\n sourceConflict,\n sourceMaterializationIdentity,\n sourceStageRow,\n sourceStageRows,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n AbandonRunSourceMaterializationInput,\n AbandonSourceMaterializationCandidateInput,\n AbandonSourceMaterializationInput,\n AdoptedSourceMaterialization,\n AdoptSourceMaterializationInput,\n AssertSourceMaterializationExecutionInput,\n BeginSourceMaterializationInput,\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n GetActiveOntologySourceInput,\n MarkSourceMaterializationReadyInput,\n OntologySourceRecord,\n OntologySourceStorage,\n PurgeAbandonedSourceMaterializationsInput,\n StageSourceRowsInput,\n StageSourceRowsResult,\n SummarizeTerminalSourceMaterializationsInput,\n TerminalSourceMaterializationSummary,\n} from \"@sixb/core/storage\"\nimport { yieldSqliteEventLoop } from \"../transactions\"\nimport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertProjectionExecution,\n assertTimestamp,\n canonicalJson,\n type SqliteOntologySourceAssertionRow,\n type SqliteOntologySourceRow,\n type SqliteRootOperation,\n sourceAssertion,\n sourceRecord,\n} from \"./shared\"\nimport { cleanupSourceVersions, purgeAbandonedSourceVersions } from \"./source-cleanup\"\nimport {\n assertSourceRootCoverage,\n SOURCE_ASSERTION_COLUMNS,\n stageSourceRoots,\n} from \"./source-roots\"\n\nexport class SqliteOntologySourceStorage implements OntologySourceStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation\n ) {}\n\n async beginMaterialization(\n input: BeginSourceMaterializationInput\n ): Promise<OntologySourceRecord> {\n return this.runRootOperation(() => {\n assertBeginInput(input)\n this.assertExecution(input, sourceMaterializationIdentity(input))\n const existing = this.getManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n if (existing) {\n if (isExactStagingManifest(sourceRecord(existing), input)) return sourceRecord(existing)\n throw sourceConflict(\n `Source materialization '${input.materializationId}' already exists with different identity or state.`\n )\n }\n\n const candidate = this.db\n .query(\n `\n SELECT 1\n FROM ontology_sources\n WHERE project_id = ? AND projection_run_id = ?\n AND status IN ('staging', 'ready')\n LIMIT 1\n `\n )\n .get(input.projectId, input.execution.projectionRunId)\n if (candidate) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a nonterminal source materialization; adopt it before beginning another.`\n )\n }\n\n this.db\n .query(\n `\n INSERT INTO ontology_sources (\n project_id, source_id, materialization_id, projection_run_id,\n projection_kind, protocol, status, execution_token,\n dataset_id, dataset_version_id, dataset_version_created_at,\n projection_revision, ownership_hash, ontology_revision,\n root_count, assertion_count, created_at, ready_at, activated_at,\n terminal_at, last_commit_id, updated_at, base_materialization_id, base_commit_id\n ) VALUES (?, ?, ?, ?, ?, 'replacement', 'staging', ?, ?, ?, ?, ?, ?, ?,\n NULL, NULL, ?, NULL, NULL, NULL, NULL, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n input.execution.projectionRunId,\n input.projectionKind,\n input.execution.executionToken,\n input.datasetVersion.datasetId,\n input.datasetVersion.versionId,\n input.datasetVersion.createdAt,\n input.projectionRevision,\n input.ownershipHash,\n input.ontologyRevision,\n input.createdAt,\n input.createdAt,\n input.base?.materializationId ?? null,\n input.base?.lastCommitId ?? null\n )\n return sourceRecord(\n this.requireManifest(input.projectId, input.source.projectionId, input.materializationId)\n )\n })\n }\n\n async stageRows(input: StageSourceRowsInput): Promise<StageSourceRowsResult> {\n const result = await this.runRootOperation(() => {\n assertWriteIdentity(input)\n this.assertExecution(input)\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n if (manifest.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' is '${manifest.status}' and cannot accept rows.`\n )\n }\n\n const rows = sourceStageRows(manifest.projection_kind, input.rows)\n const existing = this.findStageRows(manifest, rows)\n const { pending, unchanged } = reconcileSourceStageRows(rows, existing)\n stageSourceRoots(this.db, manifest, input)\n this.insertStageRows(manifest, pending)\n return { inserted: pending.length, unchanged }\n })\n await yieldSqliteEventLoop()\n return result\n }\n\n async markReady(input: MarkSourceMaterializationReadyInput): Promise<OntologySourceRecord> {\n return this.runRootOperation(() => {\n assertWriteIdentity(input)\n assertTimestamp(input.readyAt, \"Source readyAt\", true)\n assertNonnegativeInteger(input.rootCount, \"Source root count\")\n assertNonnegativeInteger(input.assertionCount, \"Source assertion count\")\n this.assertExecution(input)\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n if (manifest.status === \"ready\") {\n if (\n manifest.root_count === input.rootCount &&\n manifest.assertion_count === input.assertionCount &&\n manifest.ready_at === input.readyAt\n ) {\n return sourceRecord(manifest)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was marked ready with different counts or time.`\n )\n }\n if (manifest.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' cannot transition from '${manifest.status}' to 'ready'.`\n )\n }\n if (input.readyAt < manifest.created_at) {\n throw new MaterializationValidationError(\"Source readyAt cannot precede source createdAt.\")\n }\n this.assertReadyState(manifest, input.rootCount, input.assertionCount)\n const result = this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'ready', root_count = ?, assertion_count = ?, ready_at = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status = 'staging' AND execution_token = ?\n `\n )\n .run(\n input.rootCount,\n input.assertionCount,\n input.readyAt,\n input.readyAt,\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n input.execution.executionToken\n )\n if (result.changes !== 1) {\n throw sourceConflict(`Source materialization '${input.materializationId}' changed.`)\n }\n return sourceRecord(\n this.requireManifest(input.projectId, input.source.projectionId, input.materializationId)\n )\n })\n }\n\n async getActive(input: GetActiveOntologySourceInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n const row = this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND status = 'active'\n `\n )\n .get(input.projectId, input.source.projectionId) as SqliteOntologySourceRow | null\n return row ? sourceRecord(row) : null\n })\n }\n\n async adopt(\n input: AdoptSourceMaterializationInput\n ): Promise<AdoptedSourceMaterialization | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n assertExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n assertTimestamp(input.adoptedAt, \"Source adoptedAt\", true)\n this.assertExecution(input)\n const candidate = this.findRunCandidate(input)\n if (!candidate) return null\n // Workers' clocks differ; adoption never moves the record back in time.\n const changed = this.db\n .query(\n `\n UPDATE ontology_sources SET execution_token = ?, updated_at = MAX(updated_at, ?)\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status IN ('staging', 'ready')\n `\n )\n .run(\n input.execution.executionToken,\n input.adoptedAt,\n candidate.project_id,\n candidate.source_id,\n candidate.materialization_id\n ).changes\n if (changed !== 1) {\n throw sourceConflict(`Source materialization '${candidate.materialization_id}' changed.`)\n }\n const adopted = this.requireManifest(\n candidate.project_id,\n candidate.source_id,\n candidate.materialization_id\n )\n return {\n record: sourceRecord(adopted),\n resumeStagingOrdinal:\n adopted.status === \"ready\" ? Number(adopted.root_count) : this.lastStagedOrdinal(adopted),\n }\n })\n }\n\n async abandon(input: AbandonSourceMaterializationCandidateInput): Promise<OntologySourceRecord>\n async abandon(input: AbandonRunSourceMaterializationInput): Promise<OntologySourceRecord | null>\n async abandon(input: AbandonSourceMaterializationInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n assertExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n assertTimestamp(input.abandonedAt, \"Source abandonedAt\", true)\n this.assertExecution(input)\n if (input.kind === \"candidate\") return this.abandonCandidate(input)\n const candidate = this.findRunCandidate(input)\n return candidate ? this.transitionToAbandoned(candidate, input.abandonedAt) : null\n })\n }\n\n async cleanupTerminal(\n input: CleanupTerminalSourceMaterializationsInput\n ): Promise<CleanupTerminalSourceMaterializationsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Terminal source cleanup project id\")\n assertTimestamp(input.terminalBefore, \"Terminal source cleanup cutoff\", true)\n assertPositiveInteger(input.limit, \"Terminal source cleanup limit\")\n return cleanupSourceVersions(this.db, input)\n })\n }\n\n async purgeAbandoned(\n input: PurgeAbandonedSourceMaterializationsInput\n ): Promise<CleanupTerminalSourceMaterializationsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Abandoned source purge project id\")\n assertPositiveInteger(input.limit, \"Abandoned source purge limit\")\n return purgeAbandonedSourceVersions(this.db, input)\n })\n }\n\n async summarizeTerminal(\n input: SummarizeTerminalSourceMaterializationsInput\n ): Promise<TerminalSourceMaterializationSummary> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Terminal source summary project id\")\n const summary = this.db\n .query(\n `\n SELECT COUNT(*) AS terminal_count, MIN(terminal_at) AS oldest_terminal_at\n FROM ontology_sources\n WHERE project_id = ? AND status IN ('superseded', 'abandoned')\n `\n )\n .get(input.projectId) as {\n readonly terminal_count: number\n readonly oldest_terminal_at: string | null\n }\n return {\n count: summary.terminal_count,\n oldestTerminalAt: summary.oldest_terminal_at,\n }\n })\n }\n\n private abandonCandidate(\n input: AbandonSourceMaterializationCandidateInput\n ): OntologySourceRecord {\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n if (manifest.status === \"abandoned\") {\n if (\n manifest.projection_run_id === input.execution.projectionRunId &&\n manifest.terminal_at === input.abandonedAt\n ) {\n return sourceRecord(manifest)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was abandoned by another execution or at another time.`\n )\n }\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n return this.transitionToAbandoned(manifest, input.abandonedAt)\n }\n\n /** The run's one staging or ready candidate, whichever execution staged it. */\n private findRunCandidate(input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly execution: { readonly projectionRunId: string }\n }): SqliteOntologySourceRow | null {\n const candidates = this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND projection_run_id = ?\n AND status IN ('staging', 'ready')\n `\n )\n .all(\n input.projectId,\n input.source.projectionId,\n input.execution.projectionRunId\n ) as SqliteOntologySourceRow[]\n if (candidates.length > 1) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' has multiple nonterminal source materializations.`\n )\n }\n return candidates[0] ?? null\n }\n\n private lastStagedOrdinal(manifest: SqliteOntologySourceRow): number {\n const last = this.db\n .query(\n \"SELECT MAX(staging_ordinal) AS ordinal FROM ontology_source_roots WHERE version_id = ?\"\n )\n .get(manifest.version_id) as {\n readonly ordinal: number | null\n } | null\n return last?.ordinal ?? 0\n }\n\n private transitionToAbandoned(\n manifest: SqliteOntologySourceRow,\n abandonedAt: string\n ): OntologySourceRecord {\n if (\n abandonedAt < manifest.created_at ||\n (manifest.ready_at !== null && abandonedAt < manifest.ready_at)\n ) {\n throw new MaterializationValidationError(\n \"Source abandonedAt cannot precede source creation or readiness.\"\n )\n }\n const changed = this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'abandoned', execution_token = NULL, terminal_at = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status IN ('staging', 'ready')\n `\n )\n .run(\n abandonedAt,\n abandonedAt,\n manifest.project_id,\n manifest.source_id,\n manifest.materialization_id\n ).changes\n if (changed !== 1) {\n throw sourceConflict(\n `Source materialization '${manifest.materialization_id}' cannot transition to 'abandoned'.`\n )\n }\n // Its roots were never live and stay unpublished; purging removes them with the version.\n return sourceRecord(\n this.requireManifest(manifest.project_id, manifest.source_id, manifest.materialization_id)\n )\n }\n\n private assertReadyState(\n manifest: SqliteOntologySourceRow,\n rootCount: number,\n assertionCount: number\n ): void {\n const counts = this.db\n .query(\n `\n SELECT (SELECT COUNT(*) FROM ontology_source_roots AS roots\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ?1) AS assertions,\n COUNT(*) AS roots, COUNT(DISTINCT staging_ordinal) AS ordinals,\n MIN(staging_ordinal) AS min_ordinal, MAX(staging_ordinal) AS max_ordinal\n FROM ontology_source_roots\n WHERE version_id = ?1\n `\n )\n .get(manifest.version_id) as {\n assertions: number\n roots: number\n ordinals: number\n min_ordinal: number | null\n max_ordinal: number | null\n }\n if (\n counts.assertions !== assertionCount ||\n counts.roots !== rootCount ||\n counts.ordinals !== rootCount ||\n (rootCount > 0 && (counts.min_ordinal !== 0 || counts.max_ordinal !== rootCount - 1))\n ) {\n throw new MaterializationValidationError(\n \"Source ready counts do not match the staged roots and assertions.\"\n )\n }\n assertSourceRootCoverage(this.db, manifest)\n // Roots store only their canonical key; compare its parts with each row's typed identity.\n const invalid = this.db\n .query(\n manifest.projection_kind === \"link\"\n ? `\n SELECT roots.root_key\n FROM ontology_source_roots AS roots\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ?\n GROUP BY roots.id\n HAVING COUNT(*) <> 1\n OR MAX(json_extract(roots.root_key, '$[0]') <> 'link')\n OR MAX(rows.entity_kind <> 'link')\n OR MAX(rows.source_type_id <> json_extract(roots.root_key, '$[1]')\n OR rows.source_primary_id <> json_extract(roots.root_key, '$[2]')\n OR rows.link_id <> json_extract(roots.root_key, '$[3]')\n OR rows.target_type_id <> json_extract(roots.root_key, '$[4]')\n OR rows.target_primary_id <> json_extract(roots.root_key, '$[5]'))\n LIMIT 1\n `\n : `\n SELECT roots.root_key\n FROM ontology_source_roots AS roots\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ?\n GROUP BY roots.id\n HAVING MAX(json_extract(roots.root_key, '$[0]') <> 'object')\n OR SUM(rows.entity_kind = 'object'\n AND rows.object_type_id = json_extract(roots.root_key, '$[1]')\n AND rows.primary_id = json_extract(roots.root_key, '$[2]')) <> 1\n OR SUM(\n (rows.entity_kind = 'object' AND (\n rows.object_type_id <> json_extract(roots.root_key, '$[1]')\n OR rows.primary_id <> json_extract(roots.root_key, '$[2]')))\n OR (rows.entity_kind = 'link' AND (\n rows.source_type_id <> json_extract(roots.root_key, '$[1]')\n OR rows.source_primary_id <> json_extract(roots.root_key, '$[2]')))\n ) <> 0\n OR SUM(rows.entity_kind = 'link') <> COUNT(DISTINCT CASE\n WHEN rows.entity_kind = 'link'\n THEN json_array(rows.link_id, rows.target_type_id, rows.target_primary_id)\n END)\n LIMIT 1\n `\n )\n .get(manifest.version_id)\n if (invalid) {\n throw new MaterializationValidationError(\n manifest.projection_kind === \"link\"\n ? \"Link projection roots must contain exactly their matching link assertion.\"\n : \"Object projection roots must contain exactly their matching object assertion plus links sourced from that root.\"\n )\n }\n }\n\n /** Already staged assertions sharing a root or an ordinal with `rows`. */\n private findStageRows(\n manifest: SqliteOntologySourceRow,\n rows: readonly SourceStageRow[]\n ): readonly SourceStageRow[] {\n if (rows.length === 0) return []\n const rootKeys = [...new Set(rows.map((row) => row.rootKey))]\n const ordinals = [...new Set(rows.map((row) => row.row.stagingOrdinal))]\n // Two keyed lookups: an OR over both columns scans every root of the version per batch.\n const existing = this.db\n .query(\n `\n WITH selected AS (\n SELECT roots.id FROM json_each(?2) AS requested\n CROSS JOIN ontology_source_roots AS roots\n ON roots.version_id = ?1 AND roots.root_key = CAST(requested.value AS TEXT)\n UNION\n SELECT roots.id FROM json_each(?3) AS requested\n CROSS JOIN ontology_source_roots AS roots\n ON roots.version_id = ?1 AND roots.staging_ordinal = CAST(requested.value AS INTEGER)\n )\n SELECT ${SOURCE_ASSERTION_COLUMNS} FROM selected\n CROSS JOIN ontology_source_roots AS roots ON roots.id = selected.id\n CROSS JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n `\n )\n .all(\n manifest.version_id,\n JSON.stringify(rootKeys),\n JSON.stringify(ordinals)\n ) as SqliteOntologySourceAssertionRow[]\n return existing.map((row) => sourceStageRow(sourceAssertion(row)))\n }\n\n private insertStageRows(\n manifest: SqliteOntologySourceRow,\n rows: readonly SourceStageRow[]\n ): void {\n if (rows.length === 0) return\n const payload = rows.map(({ rootKey, row }) => {\n const entity = entityColumns(row.assertion)\n return {\n rootKey,\n entityKind: row.assertion.kind,\n objectTypeId: entity.objectTypeId,\n primaryId: entity.primaryId,\n sourceTypeId: entity.sourceTypeId,\n sourcePrimaryId: entity.sourcePrimaryId,\n linkId: entity.linkId,\n targetTypeId: entity.targetTypeId,\n targetPrimaryId: entity.targetPrimaryId,\n payload: sourceAssertionPayload(row.assertion),\n }\n })\n const inserted = this.db\n .query(\n `\n WITH staged(value) AS (SELECT value FROM json_each(?))\n INSERT INTO ontology_source_rows (\n root_id, entity_kind, object_type_id, primary_id,\n source_type_id, source_primary_id, link_id, target_type_id, target_primary_id, payload\n )\n SELECT roots.id, json_extract(value, '$.entityKind'),\n json_extract(value, '$.objectTypeId'), json_extract(value, '$.primaryId'),\n json_extract(value, '$.sourceTypeId'), json_extract(value, '$.sourcePrimaryId'),\n json_extract(value, '$.linkId'), json_extract(value, '$.targetTypeId'),\n json_extract(value, '$.targetPrimaryId'), json_extract(value, '$.payload')\n FROM staged\n CROSS JOIN ontology_source_roots AS roots\n ON roots.version_id = ? AND roots.root_key = json_extract(value, '$.rootKey')\n `\n )\n .run(canonicalJson(payload), manifest.version_id).changes\n if (inserted !== rows.length) {\n throw sourceConflict(\"Staged source rows do not all belong to a staged root.\")\n }\n }\n\n private assertExecution(\n input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly execution: { readonly projectionRunId: string; readonly executionToken: string }\n },\n identity?: AssertSourceMaterializationExecutionInput[\"identity\"]\n ): void {\n assertProjectionExecution(this.db, {\n projectId: input.projectId,\n sourceId: input.source.projectionId,\n projectionRunId: input.execution.projectionRunId,\n executionToken: input.execution.executionToken,\n ...(identity ? { identity } : {}),\n })\n }\n\n private getManifest(\n projectId: string,\n sourceId: string,\n materializationId: string\n ): SqliteOntologySourceRow | null {\n return this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n `\n )\n .get(projectId, sourceId, materializationId) as SqliteOntologySourceRow | null\n }\n\n private requireManifest(\n projectId: string,\n sourceId: string,\n materializationId: string\n ): SqliteOntologySourceRow {\n const row = this.getManifest(projectId, sourceId, materializationId)\n if (!row) throw sourceConflict(`Source materialization '${materializationId}' does not exist.`)\n return row\n }\n}\n",
55
+ "import type { Database } from \"bun:sqlite\"\nimport type {\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n PurgeAbandonedSourceMaterializationsInput,\n} from \"@sixb/core/storage\"\n\n/**\n * Superseded versions can still hold live roots (a delta keeps unchanged roots where they were),\n * so they are cleaned root by root once retired. An abandoned candidate was never published:\n * everything it holds goes, one whole version at a time, each delete on its own version prefix.\n */\nexport function purgeAbandonedSourceVersions(\n db: Database,\n input: PurgeAbandonedSourceMaterializationsInput\n): CleanupTerminalSourceMaterializationsResult {\n let remaining = input.limit\n let rowsDeleted = 0\n let materializationsDeleted = 0\n const nextCandidate = db.query(`\n SELECT version_id FROM ontology_sources\n WHERE project_id = ? AND status = 'abandoned'\n ORDER BY terminal_at, source_id, materialization_id LIMIT 1\n `)\n const deleteRows = db.query(`DELETE FROM ontology_source_rows WHERE rowid IN (\n SELECT rows.rowid FROM ontology_source_roots AS roots\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ? LIMIT ?)`)\n const deleteRoots = db.query(`DELETE FROM ontology_source_roots WHERE id IN (\n SELECT id FROM ontology_source_roots WHERE version_id = ? LIMIT ?)`)\n const deleteManifest = db.query(\n \"DELETE FROM ontology_sources WHERE version_id = ? AND status = 'abandoned'\"\n )\n while (remaining > 0) {\n const candidate = nextCandidate.get(input.projectId) as { readonly version_id: number } | null\n if (!candidate) break\n const rows = deleteRows.run(candidate.version_id, remaining).changes\n rowsDeleted += rows\n remaining -= rows\n if (remaining === 0) break\n const roots = deleteRoots.run(candidate.version_id, remaining).changes\n rowsDeleted += roots\n remaining -= roots\n if (remaining === 0) break\n const manifest = deleteManifest.run(candidate.version_id).changes\n if (manifest === 0) break\n materializationsDeleted += manifest\n remaining -= manifest\n }\n return { rowsDeleted, materializationsDeleted }\n}\n\nexport function cleanupSourceVersions(\n db: Database,\n input: CleanupTerminalSourceMaterializationsInput\n): CleanupTerminalSourceMaterializationsResult {\n let remaining = input.limit\n const retired = `roots.project_id = ? AND roots.retired_at < ? AND versions.status = 'superseded'`\n let rowsDeleted = db\n .query(`DELETE FROM ontology_source_rows WHERE rowid IN (\n SELECT rows.rowid FROM ontology_source_roots AS roots\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE ${retired}\n ORDER BY roots.retired_at, roots.id\n LIMIT ?\n )`)\n .run(input.projectId, input.terminalBefore, remaining).changes\n remaining -= rowsDeleted\n if (remaining > 0) {\n const removed = db\n .query(`DELETE FROM ontology_source_roots WHERE id IN (\n SELECT roots.id FROM ontology_source_roots AS roots\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n WHERE ${retired}\n AND NOT EXISTS (SELECT 1 FROM ontology_source_rows AS rows WHERE rows.root_id = roots.id)\n ORDER BY roots.retired_at, roots.id LIMIT ?\n )`)\n .run(input.projectId, input.terminalBefore, remaining).changes\n rowsDeleted += removed\n remaining -= removed\n }\n const materializationsDeleted =\n remaining === 0\n ? 0\n : db\n .query(`DELETE FROM ontology_sources WHERE version_id IN (\n SELECT versions.version_id FROM ontology_sources AS versions\n WHERE project_id = ? AND status = 'superseded' AND terminal_at < ?\n AND NOT EXISTS (SELECT 1 FROM ontology_source_roots AS roots\n WHERE roots.version_id = versions.version_id)\n ORDER BY terminal_at, source_id, materialization_id LIMIT ?\n )`)\n .run(input.projectId, input.terminalBefore, remaining).changes\n return { rowsDeleted, materializationsDeleted }\n}\n",
56
56
  "import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n type MaterializationSession,\n type OntologyVectorIndexingStorage,\n VECTOR_INDEXING_FAILURE_CODES,\n type VectorIndexingRequest,\n type VectorIndexingWork,\n} from \"@sixb/core/storage\"\nimport type { SqliteRootOperation } from \"./shared\"\n\ninterface WorkRow {\n batch_id: string | null\n request: string\n status: VectorIndexingWork[\"status\"]\n available_at: string\n values_json: string | null\n error: string | null\n}\nexport class SqliteVectorIndexingStorage implements OntologyVectorIndexingStorage {\n constructor(\n private readonly db: Database,\n private readonly run: SqliteRootOperation,\n private readonly assertSession: (session: MaterializationSession, projectId: string) => void\n ) {}\n async schedule(input: Parameters<OntologyVectorIndexingStorage[\"schedule\"]>[0]) {\n this.assertSession(input.session, input.projectId)\n for (const ref of input.deleted)\n this.db\n .query(\n `DELETE FROM object_vector_indexing WHERE project_id = ? AND object_type_id = ? AND primary_id = ?`\n )\n .run(input.projectId, ref.objectTypeId, ref.primaryId)\n const insert =\n this.db.query(`INSERT INTO object_vector_indexing (project_id, id, object_type_id, primary_id, profile, batch_id, request, status, available_at, dispatch_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?)\n ON CONFLICT (project_id, object_type_id, primary_id, profile) DO UPDATE SET id = excluded.id, batch_id = excluded.batch_id, request = excluded.request, status = 'pending', available_at = excluded.available_at, dispatch_at = excluded.dispatch_at, values_json = NULL, error = NULL`)\n for (const { batchId, ...request } of input.requests)\n insert.run(\n input.projectId,\n request.id,\n request.ref.objectTypeId,\n request.ref.primaryId,\n request.profile,\n batchId ?? null,\n JSON.stringify(request),\n input.availableAt,\n input.availableAt\n )\n }\n async complete(input: Parameters<OntologyVectorIndexingStorage[\"complete\"]>[0]) {\n this.assertSession(input.session, input.projectId)\n const remove = this.db.query(\n `DELETE FROM object_vector_indexing WHERE project_id = ? AND object_type_id = ? AND primary_id = ? AND profile = ? AND json_extract(request, '$.configuration') = ? AND json_extract(request, '$.sourceFingerprint') = ?`\n )\n for (const entry of input.entries) {\n remove.run(\n input.projectId,\n entry.ref.objectTypeId,\n entry.ref.primaryId,\n entry.profile,\n entry.configuration,\n entry.sourceFingerprint\n )\n }\n }\n\n async dispatched(input: Parameters<OntologyVectorIndexingStorage[\"dispatched\"]>[0]) {\n await this.run(() => {\n const update = this.db.query(\n `UPDATE object_vector_indexing SET dispatch_at = ? WHERE project_id = ? AND id = ?`\n )\n for (const id of input.ids) update.run(input.nextDispatchAt, input.projectId, id)\n })\n }\n async get(input: Parameters<OntologyVectorIndexingStorage[\"get\"]>[0]) {\n return this.run(() => {\n const row = this.db\n .query<WorkRow, [string, string]>(\n `SELECT batch_id, request, status, available_at, values_json, error FROM object_vector_indexing WHERE project_id = ? AND id = ?`\n )\n .get(input.projectId, input.id)\n return row ? decode(row) : null\n })\n }\n async getBatch(input: Parameters<OntologyVectorIndexingStorage[\"getBatch\"]>[0]) {\n return this.run(() =>\n this.db\n .query<WorkRow, [string, string]>(`\n SELECT batch_id, request, status, available_at, values_json, error FROM object_vector_indexing\n WHERE project_id = ? AND batch_id = ? ORDER BY id`)\n .all(input.projectId, input.batchId)\n .map(decode)\n )\n }\n\n async getBatchMember(input: Parameters<OntologyVectorIndexingStorage[\"getBatchMember\"]>[0]) {\n return this.run(() => {\n const row = this.db\n .query<WorkRow, [string, string, string, string, string]>(`\n SELECT batch_id, request, status, available_at, values_json, error\n FROM object_vector_indexing WHERE project_id = ? AND object_type_id = ?\n AND primary_id = ? AND profile = ? AND batch_id = ?`)\n .get(\n input.projectId,\n input.ref.objectTypeId,\n input.ref.primaryId,\n input.profile,\n input.batchId\n )\n return row ? decode(row) : null\n })\n }\n\n async updateBatch(input: Parameters<OntologyVectorIndexingStorage[\"updateBatch\"]>[0]) {\n return this.run(() =>\n this.db.transaction(() => {\n const status = this.db.query<{ status: string }, [string, string]>(\n \"SELECT status FROM object_vector_indexing WHERE project_id = ? AND id = ?\"\n )\n if (\n input.requireAll &&\n input.updates.some(\n (update) => status.get(input.projectId, update.id)?.status !== update.expectedStatus\n )\n )\n return false\n const updateRow = this.db.query(`UPDATE object_vector_indexing\n SET status = ?, available_at = ?, values_json = COALESCE(?, values_json), error = ?\n WHERE project_id = ? AND id = ? AND status = ?`)\n for (const update of input.updates)\n updateRow.run(\n update.status,\n update.availableAt,\n update.values ? JSON.stringify(update.values) : null,\n update.error ? JSON.stringify(update.error) : null,\n input.projectId,\n update.id,\n update.expectedStatus\n )\n return true\n })()\n )\n }\n\n async listDue(input: Parameters<OntologyVectorIndexingStorage[\"listDue\"]>[0]) {\n return this.run(() =>\n this.db\n .query<WorkRow, [string, string, number]>(\n `SELECT batch_id, request, status, available_at, NULL AS values_json, error FROM object_vector_indexing WHERE project_id = ? AND status <> 'failed' AND dispatch_at <= ? ORDER BY dispatch_at, id LIMIT ?`\n )\n .all(input.projectId, input.now, input.limit)\n .map(decode)\n )\n }\n async update(input: Parameters<OntologyVectorIndexingStorage[\"update\"]>[0]) {\n return this.run(\n () =>\n this.db\n .query(\n `UPDATE object_vector_indexing SET status = ?, available_at = ?, values_json = COALESCE(?, values_json), error = ? WHERE project_id = ? AND id = ? AND status = ?`\n )\n .run(\n input.status,\n input.availableAt,\n input.values ? JSON.stringify(input.values) : null,\n input.error ? JSON.stringify(input.error) : null,\n input.projectId,\n input.id,\n input.expectedStatus\n ).changes === 1\n )\n }\n async remove(input: Parameters<OntologyVectorIndexingStorage[\"remove\"]>[0]) {\n await this.run(() => {\n this.db\n .query(`DELETE FROM object_vector_indexing WHERE project_id = ? AND id = ?`)\n .run(input.projectId, input.id)\n })\n }\n}\nfunction decode(row: WorkRow): VectorIndexingWork {\n const request = JSON.parse(row.request) as VectorIndexingRequest\n return {\n ...request,\n ...(row.batch_id ? { batchId: row.batch_id } : {}),\n status: row.status,\n availableAt: row.available_at,\n ...(row.values_json ? { values: JSON.parse(row.values_json) as number[] } : {}),\n ...(row.error\n ? {\n error: parseSixbFailure(row.error, VECTOR_INDEXING_FAILURE_CODES),\n }\n : {}),\n }\n}\n",
57
57
  "import type { Database } from \"bun:sqlite\"\nimport { MaterializationConflictError } from \"@sixb/core/internal/materialization\"\nimport type {\n MaterializationSession,\n ObjectVectorState,\n OntologyVectorStorage,\n} from \"@sixb/core/storage\"\nimport { encodeSqliteVector } from \"../vector-encoding\"\nimport type { SqliteRootOperation } from \"./shared\"\n\ninterface VectorMetadataRow {\n readonly profile: string\n readonly configuration: string\n readonly source: string\n readonly source_fingerprint: string\n readonly last_commit_id: string\n}\n\nexport class SqliteOntologyVectorStorage implements OntologyVectorStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation,\n private readonly assertSession: (\n session: MaterializationSession,\n projectId: string,\n commitId?: string\n ) => void\n ) {}\n\n async list(\n input: Parameters<OntologyVectorStorage[\"list\"]>[0]\n ): Promise<readonly ObjectVectorState[]> {\n return this.runRootOperation(() => {\n const rows = this.db\n .query<VectorMetadataRow, [string, string, string]>(`\n SELECT profile, configuration, source, source_fingerprint, last_commit_id\n FROM object_vectors\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n ORDER BY profile\n `)\n .all(input.projectId, input.ref.objectTypeId, input.ref.primaryId)\n return rows.map((row) => ({\n ref: { ...input.ref },\n profile: row.profile,\n configuration: row.configuration,\n source: JSON.parse(row.source) as string[],\n sourceFingerprint: row.source_fingerprint,\n lastCommitId: row.last_commit_id,\n }))\n })\n }\n\n async listBatch(\n input: Parameters<OntologyVectorStorage[\"listBatch\"]>[0]\n ): Promise<readonly ObjectVectorState[]> {\n if (!input.refs.length) return []\n return this.runRootOperation(() => {\n // Keep the bounded request set first so SQLite probes the composite object index.\n const rows = this.db\n .query<\n VectorMetadataRow & { object_type_id: string; primary_id: string },\n [string, string]\n >(`\n WITH requested AS (\n SELECT DISTINCT json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id FROM json_each(?)\n )\n SELECT stored.object_type_id, stored.primary_id, stored.profile, stored.configuration,\n stored.source, stored.source_fingerprint, stored.last_commit_id\n FROM requested CROSS JOIN object_vectors AS stored\n WHERE stored.project_id = ? AND stored.object_type_id = requested.object_type_id\n AND stored.primary_id = requested.primary_id\n ORDER BY stored.object_type_id, stored.primary_id, stored.profile\n `)\n .all(JSON.stringify(input.refs), input.projectId)\n return rows.map((row) => ({\n ref: { objectTypeId: row.object_type_id, primaryId: row.primary_id },\n profile: row.profile,\n configuration: row.configuration,\n source: JSON.parse(row.source) as string[],\n sourceFingerprint: row.source_fingerprint,\n lastCommitId: row.last_commit_id,\n }))\n })\n }\n\n async removeBatch(input: Parameters<OntologyVectorStorage[\"removeBatch\"]>[0]): Promise<void> {\n this.assertSession(input.session, input.projectId)\n if (!input.entries.length) return\n const { changes } = this.db\n .query(`\n DELETE FROM object_vectors WHERE rowid IN (\n SELECT stored.rowid FROM json_each(?) AS requested CROSS JOIN object_vectors AS stored\n WHERE stored.project_id = ? AND stored.object_type_id = json_extract(requested.value, '$.ref.objectTypeId')\n AND stored.primary_id = json_extract(requested.value, '$.ref.primaryId')\n AND stored.profile = json_extract(requested.value, '$.profile')\n AND stored.last_commit_id = json_extract(requested.value, '$.expectedCommitId')\n )\n `)\n .run(JSON.stringify(input.entries), input.projectId)\n if (changes !== input.entries.length) throw vectorConflict()\n }\n\n async write(input: Parameters<OntologyVectorStorage[\"write\"]>[0]): Promise<void> {\n const { value } = input\n this.assertSession(input.session, input.projectId, value.lastCommitId)\n // The Materializer validates and normalizes float32 values before this boundary.\n const embedding = encodeSqliteVector(value.values)\n const changes =\n input.expectedCommitId === null\n ? this.db\n .query(`\n INSERT INTO object_vectors (\n project_id, object_type_id, primary_id, profile,\n configuration, source, source_fingerprint, embedding, last_commit_id\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (project_id, object_type_id, primary_id, profile) DO NOTHING\n `)\n .run(\n input.projectId,\n value.ref.objectTypeId,\n value.ref.primaryId,\n value.profile,\n value.configuration,\n JSON.stringify(value.source),\n value.sourceFingerprint,\n embedding,\n value.lastCommitId\n ).changes\n : this.db\n .query(`\n UPDATE object_vectors\n SET configuration = ?, source = ?, source_fingerprint = ?, embedding = ?, last_commit_id = ?\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND profile = ? AND last_commit_id = ?\n `)\n .run(\n value.configuration,\n JSON.stringify(value.source),\n value.sourceFingerprint,\n embedding,\n value.lastCommitId,\n input.projectId,\n value.ref.objectTypeId,\n value.ref.primaryId,\n value.profile,\n input.expectedCommitId\n ).changes\n if (changes !== 1) throw vectorConflict()\n }\n\n async writeBatch(input: Parameters<OntologyVectorStorage[\"writeBatch\"]>[0]): Promise<void> {\n for (const entry of input.entries) {\n await this.write({ session: input.session, projectId: input.projectId, ...entry })\n }\n }\n\n async remove(input: Parameters<OntologyVectorStorage[\"remove\"]>[0]): Promise<void> {\n this.assertSession(input.session, input.projectId)\n const { changes } = this.db\n .query(`\n DELETE FROM object_vectors\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND profile = ? AND last_commit_id = ?\n `)\n .run(\n input.projectId,\n input.ref.objectTypeId,\n input.ref.primaryId,\n input.profile,\n input.expectedCommitId\n )\n if (changes !== 1) throw vectorConflict()\n }\n}\n\nfunction vectorConflict(): MaterializationConflictError {\n return new MaterializationConflictError(\n \"effective-state\",\n \"Vector changed since it was prepared.\"\n )\n}\n",
58
58
  "import type { Database } from \"bun:sqlite\"\nimport type { OntologyStorage } from \"@sixb/core/storage\"\nimport { SqliteOntologyCommitStorage } from \"./commits\"\nimport type { SqliteOntologyTransactionContext } from \"./materialization-session\"\nimport { SqliteOntologyMaterializationStorage } from \"./materializations\"\nimport { SqliteOntologyOutboxStorage } from \"./outbox\"\nimport type { SqliteRootOperation } from \"./shared\"\nimport { SqliteOntologySourceStorage } from \"./sources\"\n\nimport { SqliteVectorIndexingStorage } from \"./vector-indexing\"\nimport { SqliteOntologyVectorStorage } from \"./vectors\"\n\nexport class SqliteOntologyStorage implements OntologyStorage {\n readonly commits: SqliteOntologyCommitStorage\n readonly sources: SqliteOntologySourceStorage\n readonly materializations: SqliteOntologyMaterializationStorage\n readonly vectorIndexing: SqliteVectorIndexingStorage\n readonly vectors: SqliteOntologyVectorStorage\n readonly outbox: SqliteOntologyOutboxStorage\n\n constructor(input: {\n readonly db: Database\n readonly runRootOperation: SqliteRootOperation\n readonly transactionContext: SqliteOntologyTransactionContext | null\n }) {\n this.commits = new SqliteOntologyCommitStorage(input.db, input.runRootOperation)\n this.sources = new SqliteOntologySourceStorage(input.db, input.runRootOperation)\n this.materializations = new SqliteOntologyMaterializationStorage(\n input.db,\n input.transactionContext\n )\n this.vectorIndexing = new SqliteVectorIndexingStorage(\n input.db,\n input.runRootOperation,\n (session, projectId) => this.materializations.assertVectorSession(session, projectId)\n )\n this.vectors = new SqliteOntologyVectorStorage(\n input.db,\n input.runRootOperation,\n (session, projectId, commitId) =>\n this.materializations.assertVectorSession(session, projectId, commitId)\n )\n this.outbox = new SqliteOntologyOutboxStorage(input.db, input.runRootOperation)\n }\n\n deactivateSessions(): void {\n this.materializations.deactivateSessions()\n }\n}\n\nexport type { SqliteOntologyTransactionContext } from \"./materialization-session\"\n",
59
59
  "import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure, serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport { assertPipelineRunExecution } from \"@sixb/core/internal/pipeline-run-storage-provider\"\nimport { canRequeuePipelineRunAfterEnqueueFailure } from \"@sixb/core/internal/storage\"\nimport type { DatasetVersionRef } from \"@sixb/core/lake-storage\"\nimport type {\n ExecutionStorage,\n FinishPipelineRunInput,\n FinishPipelineStepRunInput,\n ListLatestPipelineRunsInput,\n ListLatestPipelineRunsResult,\n ListPipelineRunsInput,\n ListPipelineRunsResult,\n ListPipelineStepRunsInput,\n ListPipelineStepRunsResult,\n PipelineRunRecord,\n PipelineRunStorage,\n PipelineStepRunRecord,\n QueuePipelineRunInput,\n StartPipelineRunInput,\n StartPipelineStepRunInput,\n} from \"@sixb/core/storage\"\nimport { PIPELINE_RUN_FAILURE_CODES, PipelineRunError } from \"@sixb/core/storage\"\nimport { queryLatestRunsByOwnerId } from \"./latest-run-query\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport {\n appendRunListFilters,\n hasEmptyStatuses,\n queryRunList,\n type SqliteValue,\n} from \"./run-list-query\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqlitePipelineRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqlitePipelineRunStorage implements PipelineRunStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly executions: ExecutionStorage\n\n constructor(options: SqlitePipelineRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n }\n\n async queue(input: QueuePipelineRunInput): Promise<PipelineRunRecord> {\n const queuedAt = input.queuedAt ?? new Date()\n await assertPipelineRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n pipelineId: input.pipelineId,\n })\n\n try {\n this.db\n .query(\n `\n INSERT INTO pipeline_runs (\n project_id,\n id,\n execution_id,\n pipeline_id,\n status,\n queued_at,\n started_at\n ) VALUES (?, ?, ?, ?, ?, ?, NULL)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.executionId,\n input.pipelineId,\n \"queued\",\n queuedAt.toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n return this.requeueAfterEnqueueFailure(input, queuedAt)\n }\n\n throw error\n }\n\n const record = await this.getById({ projectId: input.projectId, id: input.id })\n if (!record) {\n throw new PipelineRunError(\n `[SixbSqlite] Failed to load pipeline run '${input.id}' for project '${input.projectId}'.`\n )\n }\n\n return record\n }\n\n private async requeueAfterEnqueueFailure(\n input: QueuePipelineRunInput,\n queuedAt: Date\n ): Promise<PipelineRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineRunDatabaseRow | null\n if (\n !existing ||\n !canRequeuePipelineRunAfterEnqueueFailure(rowToPipelineRunRecord(existing), input)\n ) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE pipeline_runs\n SET status = ?, queued_at = ?, started_at = NULL, finished_at = NULL,\n output_dataset_id = NULL, output_version_id = NULL, error = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\"queued\", queuedAt.toISOString(), input.projectId, input.id)\n\n const updated = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineRunDatabaseRow\n return rowToPipelineRunRecord(updated)\n })()\n }\n\n async start(input: StartPipelineRunInput): Promise<PipelineRunRecord> {\n const result = this.db\n .query(\n `\n UPDATE pipeline_runs\n SET status = ?, started_at = ?, error = NULL\n WHERE project_id = ? AND id = ? AND status = ?\n `\n )\n .run(\n \"running\",\n (input.startedAt ?? new Date()).toISOString(),\n input.projectId,\n input.id,\n \"queued\"\n )\n if (result.changes > 0) {\n const record = await this.getById({ projectId: input.projectId, id: input.id })\n if (record) return record\n }\n\n const existing = await this.getById({ projectId: input.projectId, id: input.id })\n if (!existing) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' cannot start from status '${existing.status}'.`\n )\n }\n\n async finish(input: FinishPipelineRunInput): Promise<PipelineRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineRunDatabaseRow | null\n\n if (!existing) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n const enqueueFailure =\n input.status === \"failed\" && input.error.code === \"queue.enqueue_failed\"\n if (\n (enqueueFailure && existing.status !== \"queued\") ||\n (!enqueueFailure && existing.status !== \"running\")\n ) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' cannot finish from status '${existing.status}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE pipeline_runs\n SET\n status = ?,\n finished_at = ?,\n output_dataset_id = ?,\n output_version_id = ?,\n error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n (input.finishedAt ?? new Date()).toISOString(),\n input.status === \"succeeded\" ? (input.output?.datasetId ?? null) : null,\n input.status === \"succeeded\" ? (input.output?.versionId ?? null) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, PIPELINE_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineRunDatabaseRow\n\n return rowToPipelineRunRecord(updated)\n })()\n }\n\n async startStep(input: StartPipelineStepRunInput): Promise<PipelineStepRunRecord> {\n return this.db.transaction(() => {\n const pipelineRun = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.pipelineRunId) as PipelineRunDatabaseRow | null\n\n if (!pipelineRun) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.pipelineRunId}' not found for project '${input.projectId}'.`\n )\n }\n\n if (pipelineRun.status !== \"running\") {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.pipelineRunId}' for project '${input.projectId}' is already terminal.`\n )\n }\n\n if (pipelineRun.pipeline_id !== input.pipelineId) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' pipeline '${input.pipelineId}' does not match pipeline run '${input.pipelineRunId}' pipeline '${pipelineRun.pipeline_id}'.`\n )\n }\n\n const startedAt = input.startedAt ?? new Date()\n\n try {\n this.db\n .query(\n `\n INSERT INTO pipeline_step_runs (\n project_id,\n id,\n pipeline_run_id,\n pipeline_id,\n step_id,\n dataset_id,\n mode,\n status,\n started_at,\n inputs\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.pipelineRunId,\n input.pipelineId,\n input.stepId,\n input.datasetId,\n input.mode,\n \"running\",\n startedAt.toISOString(),\n serializeDatasetVersionRefs(input.inputs)\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n const row = this.db\n .query(\"SELECT * FROM pipeline_step_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineStepRunDatabaseRow | null\n\n if (!row) {\n throw new PipelineRunError(\n `[SixbSqlite] Failed to load pipeline step run '${input.id}' for project '${input.projectId}'.`\n )\n }\n\n return rowToPipelineStepRunRecord(row)\n })()\n }\n\n async finishStep(input: FinishPipelineStepRunInput): Promise<PipelineStepRunRecord> {\n assertOptionalNonNegativeInteger(input.rowsWritten, \"rowsWritten\")\n\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM pipeline_step_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineStepRunDatabaseRow | null\n\n if (!existing) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"running\") {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' for project '${input.projectId}' is already terminal.`\n )\n }\n\n if (input.status === \"succeeded\" && input.output.datasetId !== existing.dataset_id) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' output dataset '${input.output.datasetId}' does not match '${existing.dataset_id}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE pipeline_step_runs\n SET\n status = ?,\n finished_at = ?,\n output_version_id = ?,\n rows_written = ?,\n error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n (input.finishedAt ?? new Date()).toISOString(),\n input.status === \"succeeded\" ? input.output.versionId : null,\n input.rowsWritten ?? existing.rows_written ?? null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, PIPELINE_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM pipeline_step_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineStepRunDatabaseRow\n\n return rowToPipelineStepRunRecord(updated)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<PipelineRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as PipelineRunDatabaseRow | null\n\n return row ? rowToPipelineRunRecord(row) : null\n }\n\n async list(input: ListPipelineRunsInput): Promise<ListPipelineRunsResult> {\n if (hasEmptyStatuses(input) || input.pipelineIds?.length === 0) {\n return {\n runs: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.pipelineId) {\n whereClauses.push(\"pipeline_id = ?\")\n args.push(input.pipelineId)\n }\n\n if (input.pipelineIds) {\n whereClauses.push(`pipeline_id IN (${input.pipelineIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.pipelineIds)\n }\n\n appendRunListFilters(whereClauses, args, input, \"COALESCE(started_at, queued_at)\")\n\n const { rows, total, hasMore } = queryRunList<PipelineRunDatabaseRow>({\n db: this.db,\n tableName: \"pipeline_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return {\n runs: rows.map(rowToPipelineRunRecord),\n hasMore,\n total,\n }\n }\n\n async listLatestByPipelineIds(\n input: ListLatestPipelineRunsInput\n ): Promise<ListLatestPipelineRunsResult> {\n const rows = queryLatestRunsByOwnerId<PipelineRunDatabaseRow>({\n db: this.db,\n tableName: \"pipeline_runs\",\n ownerColumn: \"pipeline_id\",\n ownerIds: input.pipelineIds,\n projectId: input.projectId,\n ownerIdFor: (row) => row.pipeline_id,\n })\n\n return {\n runs: rows.map(rowToPipelineRunRecord),\n }\n }\n\n async listSteps(input: ListPipelineStepRunsInput): Promise<ListPipelineStepRunsResult> {\n if (hasEmptyStatuses(input)) {\n return {\n steps: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.pipelineRunId) {\n whereClauses.push(\"pipeline_run_id = ?\")\n args.push(input.pipelineRunId)\n }\n\n if (input.pipelineId) {\n whereClauses.push(\"pipeline_id = ?\")\n args.push(input.pipelineId)\n }\n\n if (input.stepId) {\n whereClauses.push(\"step_id = ?\")\n args.push(input.stepId)\n }\n\n if (input.datasetId) {\n whereClauses.push(\"dataset_id = ?\")\n args.push(input.datasetId)\n }\n\n appendRunListFilters(whereClauses, args, input)\n\n const { rows, total, hasMore } = queryRunList<PipelineStepRunDatabaseRow>({\n db: this.db,\n tableName: \"pipeline_step_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return {\n steps: rows.map(rowToPipelineStepRunRecord),\n hasMore,\n total,\n }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n}\n\nfunction serializeDatasetVersionRefs(refs: readonly DatasetVersionRef[]): string {\n return JSON.stringify(refs)\n}\n\nfunction parseDatasetVersionRefs(value: string): readonly DatasetVersionRef[] {\n return JSON.parse(value) as readonly DatasetVersionRef[]\n}\n\nfunction rowToPipelineRunRecord(row: PipelineRunDatabaseRow): PipelineRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n pipelineId: row.pipeline_id,\n status: row.status,\n queuedAt: new Date(row.queued_at),\n startedAt: row.started_at ? new Date(row.started_at) : undefined,\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n output:\n row.output_dataset_id && row.output_version_id\n ? {\n datasetId: row.output_dataset_id,\n versionId: row.output_version_id,\n }\n : undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, PIPELINE_RUN_FAILURE_CODES),\n }\n}\n\nfunction rowToPipelineStepRunRecord(row: PipelineStepRunDatabaseRow): PipelineStepRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n pipelineRunId: row.pipeline_run_id,\n pipelineId: row.pipeline_id,\n stepId: row.step_id,\n datasetId: row.dataset_id,\n mode: row.mode,\n status: row.status,\n startedAt: new Date(row.started_at),\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n inputs: parseDatasetVersionRefs(row.inputs),\n output: row.output_version_id\n ? {\n datasetId: row.dataset_id,\n versionId: row.output_version_id,\n }\n : undefined,\n rowsWritten: row.rows_written ?? undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, PIPELINE_RUN_FAILURE_CODES),\n }\n}\n\nfunction assertOptionalNonNegativeInteger(value: number | undefined, fieldName: string): void {\n if (value !== undefined && (!Number.isInteger(value) || value < 0)) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run ${fieldName} must be a non-negative integer.`\n )\n }\n}\n\ninterface PipelineRunDatabaseRow {\n project_id: string\n id: string\n execution_id: string\n pipeline_id: string\n status: PipelineRunRecord[\"status\"]\n queued_at: string\n started_at: string | null\n finished_at: string | null\n output_dataset_id: string | null\n output_version_id: string | null\n error: string | null\n}\n\ninterface PipelineStepRunDatabaseRow {\n project_id: string\n id: string\n pipeline_run_id: string\n pipeline_id: string\n step_id: string\n dataset_id: string\n mode: PipelineStepRunRecord[\"mode\"]\n status: PipelineStepRunRecord[\"status\"]\n started_at: string\n finished_at: string | null\n inputs: string\n output_version_id: string | null\n rows_written: number | null\n error: string | null\n}\n",
60
- "import type { Database } from \"bun:sqlite\"\nimport type { SqliteValue } from \"./run-list-query\"\n\ntype SqliteLatestRunTarget =\n | { readonly tableName: \"pipeline_runs\"; readonly ownerColumn: \"pipeline_id\" }\n | { readonly tableName: \"projection_runs\"; readonly ownerColumn: \"projection_id\" }\n | { readonly tableName: \"sync_runs\"; readonly ownerColumn: \"sync_id\" }\n | { readonly tableName: \"workflow_runs\"; readonly ownerColumn: \"workflow_id\" }\n\nexport function queryLatestRunsByOwnerId<TRow>(\n input: {\n readonly db: Database\n readonly ownerIds: readonly string[]\n readonly projectId: string\n readonly ownerIdFor: (row: TRow) => string\n } & SqliteLatestRunTarget\n): readonly TRow[] {\n const ownerIds = [...new Set(input.ownerIds)]\n if (ownerIds.length === 0) {\n return []\n }\n\n const placeholders = ownerIds.map(() => \"?\").join(\", \")\n const orderColumn =\n input.tableName === \"sync_runs\" ||\n input.tableName === \"pipeline_runs\" ||\n input.tableName === \"projection_runs\"\n ? \"COALESCE(started_at, queued_at)\"\n : \"started_at\"\n const rows = input.db\n .query(\n `\n SELECT *\n FROM (\n SELECT\n *,\n ROW_NUMBER() OVER (\n PARTITION BY ${input.ownerColumn}\n ORDER BY ${orderColumn} DESC, id DESC\n ) AS sixb_latest_rank\n FROM ${input.tableName}\n WHERE project_id = ? AND ${input.ownerColumn} IN (${placeholders})\n )\n WHERE sixb_latest_rank = 1\n `\n )\n .all(input.projectId, ...ownerIds) as (TRow & { sixb_latest_rank: SqliteValue })[]\n\n const latestByOwnerId = new Map(rows.map((row) => [input.ownerIdFor(row), row]))\n\n return ownerIds.flatMap((ownerId) => {\n const row = latestByOwnerId.get(ownerId)\n return row ? [row] : []\n })\n}\n",
61
- "import type { Database } from \"bun:sqlite\"\nimport { randomUUID } from \"node:crypto\"\nimport { serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n advanceProjectionTelemetry,\n assertGenericProgressDoesNotAdvanceTelemetry,\n assertProjectionMissingTarget,\n assertProjectionRunAttempt,\n assertProjectionRunDurableExecution,\n assertProjectionRunListWindow,\n assertProjectionRunNonEmpty,\n assertProjectionRunQueueInput,\n assertProjectionRunRunning,\n assertProjectionRunStartInput,\n canRequeueProjectionRunAfterEnqueueFailure,\n createProjectionRunClaim,\n createProjectionRunRecord,\n failProjectionRunEnqueue,\n immutableDatasetVersionConflict,\n mergeProjectionRunProgress,\n type PersistedProjectionRunRecord,\n planProjectionRunFinish,\n planProjectionRunReclaim,\n projectionRunNotFound,\n publicProjectionRunRecord,\n requireTelemetryProjectionRun,\n restoreProjectionRun,\n type StoredProjectionRunRecord,\n staleProjectionRunExecution,\n} from \"@sixb/core/internal/projection-run-storage-provider\"\nimport type {\n AdvanceProjectionTelemetryCheckpointInput,\n ExecutionStorage,\n FailProjectionRunEnqueueInput,\n FinishProjectionRunInput,\n ListLatestProjectionRunsInput,\n ListLatestProjectionRunsResult,\n ListProjectionRunsInput,\n ListProjectionRunsResult,\n LockProjectionRunForMaterializationInput,\n ProjectionKind,\n ProjectionRunClaim,\n ProjectionRunProgress,\n ProjectionRunRecord,\n ProjectionRunStatus,\n ProjectionRunStorage,\n QueueProjectionRunInput,\n RecordProjectionMissingTargetInput,\n StartOrReclaimProjectionRunInput,\n TelemetryProjectionRunRecord,\n UpdateProjectionRunInput,\n} from \"@sixb/core/storage\"\nimport { PROJECTION_RUN_FAILURE_CODES, ProjectionRunError } from \"@sixb/core/storage\"\nimport { queryLatestRunsByOwnerId } from \"./latest-run-query\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransaction,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteProjectionRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteProjectionRunStorage implements ProjectionRunStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly executions: ExecutionStorage\n\n constructor(options: SqliteProjectionRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n }\n\n async queue(input: QueueProjectionRunInput): Promise<ProjectionRunRecord> {\n assertProjectionRunQueueInput(input)\n await assertProjectionRunDurableExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n projectionId: input.identity.projectionId,\n datasetId: input.identity.datasetVersion.datasetId,\n datasetVersionId: input.identity.datasetVersion.versionId,\n })\n\n return runImmediateTransaction(this.db, () => {\n this.assertDatasetVersionIsImmutable(input)\n const existing = this.findRow(input.projectId, input.id)\n if (existing) {\n const restored = restoreProjectionRunRow(existing)\n if (!canRequeueProjectionRunAfterEnqueueFailure(restored, input)) {\n throw duplicateProjectionRun(input)\n }\n const queuedAt = input.queuedAt ?? new Date()\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET status = 'queued', queued_at = ?, started_at = NULL, finished_at = NULL,\n attempt = 0, execution_token = NULL, next_batch_ordinal = ?, next_row_offset = ?,\n input_exhausted = ?, missing_target_object_type_id = NULL,\n missing_target_object_id = NULL, missing_target_batch_ordinal = NULL,\n missing_target_first_seen_at = NULL, source_rows_read = 0,\n source_rows_skipped = 0, source_changes_read = NULL, error = NULL\n WHERE project_id = ? AND id = ? AND status = 'failed'\n AND json_extract(error, '$.code') = 'queue.enqueue_failed'\n `\n )\n .run(\n queuedAt.toISOString(),\n input.fixedBatchSize === undefined ? null : 0,\n input.fixedBatchSize === undefined ? null : 0,\n input.fixedBatchSize === undefined ? null : 0,\n input.projectId,\n input.id\n )\n if (result.changes !== 1) throw duplicateProjectionRun(input)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n }\n\n const record = createProjectionRunRecord(input)\n try {\n this.insertQueued(record)\n } catch (error) {\n if (isUniqueConstraintError(error)) throw duplicateProjectionRun(input)\n throw error\n }\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async startOrReclaim(input: StartOrReclaimProjectionRunInput): Promise<ProjectionRunClaim> {\n return runImmediateTransaction(this.db, () => {\n assertProjectionRunStartInput(input)\n\n const metadataConflict = this.db\n .query(\n `\n SELECT 1 FROM projection_runs\n WHERE project_id = ? AND id <> ? AND dataset_id = ? AND dataset_version_id = ?\n AND dataset_version_created_at IS NOT NULL\n AND dataset_version_created_at <> ?\n LIMIT 1\n `\n )\n .get(\n input.projectId,\n input.id,\n input.identity.datasetVersion.datasetId,\n input.identity.datasetVersion.versionId,\n input.identity.datasetVersion.createdAt\n )\n if (metadataConflict) {\n throw immutableDatasetVersionConflict(input.identity)\n }\n\n const existing = this.requireRow(input.projectId, input.id)\n const existingRecord = restoreProjectionRunRow(existing)\n const attempt = planProjectionRunReclaim(existingRecord, input).attempt\n\n const executionToken = createFreshExecutionToken(existing.execution_token)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET status = 'running', started_at = COALESCE(started_at, ?), finished_at = NULL,\n attempt = ?, execution_token = ?, error = NULL\n WHERE project_id = ? AND id = ?\n AND (\n (status = 'queued' AND execution_token IS NULL)\n OR (status = 'running' AND execution_token = ?)\n )\n `\n )\n .run(\n (input.startedAt ?? new Date()).toISOString(),\n attempt,\n executionToken,\n input.projectId,\n input.id,\n existing.execution_token\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n\n return projectionRunClaim(this.requireRow(input.projectId, input.id))\n })\n }\n\n async failEnqueue(input: FailProjectionRunEnqueueInput): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = restoreProjectionRunRow(this.requireRow(input.projectId, input.id))\n const failed = failProjectionRunEnqueue(existing, input)\n if (!failed.finishedAt || !failed.error) {\n throw new ProjectionRunError(`[SixbSqlite] Projection run '${input.id}' did not finish.`)\n }\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET status = 'failed', finished_at = ?, error = ?\n WHERE project_id = ? AND id = ? AND status = 'queued'\n `\n )\n .run(\n failed.finishedAt.toISOString(),\n serializeSixbFailure(failed.error, PROJECTION_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n if (result.changes !== 1) throw duplicateProjectionRun(input)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async lockForMaterialization(\n input: LockProjectionRunForMaterializationInput\n ): Promise<ProjectionRunRecord> {\n return rowToProjectionRunRecord(this.requireMaterializationExecution(input))\n }\n\n async update(input: UpdateProjectionRunInput): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existingRow = this.requireMaterializationExecution(input)\n const existing = restoreProjectionRunRow(existingRow)\n assertGenericProgressDoesNotAdvanceTelemetry(existing, input.progress)\n const progress = mergeProjectionRunProgress(existing.progress, input.progress)\n const result = this.updateProgress(existingRow, progress, input.executionToken)\n if (result !== 1) throw staleProjectionRunExecution(input.id)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async finish(input: FinishProjectionRunInput): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existingRow = this.requireMaterializationExecution(input)\n const plan = planProjectionRunFinish(restoreProjectionRunRow(existingRow), input)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n status = ?,\n finished_at = ?,\n execution_token = NULL,\n source_rows_read = ?,\n source_rows_skipped = ?,\n source_changes_read = ?,\n input_exhausted = ?,\n error = ?\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n `\n )\n .run(\n input.status,\n plan.finishedAt.toISOString(),\n plan.progress.sourceRowsRead,\n plan.progress.sourceRowsSkipped,\n plan.progress.sourceChangesRead ?? null,\n plan.inputExhausted ? 1 : existingRow.input_exhausted,\n plan.error === undefined\n ? null\n : serializeSixbFailure(plan.error, PROJECTION_RUN_FAILURE_CODES),\n input.projectId,\n input.id,\n input.executionToken\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async advanceTelemetryCheckpoint(\n input: AdvanceProjectionTelemetryCheckpointInput\n ): Promise<TelemetryProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = this.requireMaterializationExecution(input)\n const advance = advanceProjectionTelemetry(restoreProjectionRunRow(existing), input)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n next_batch_ordinal = ?,\n next_row_offset = ?,\n input_exhausted = ?,\n source_rows_read = ?,\n source_rows_skipped = ?,\n missing_target_object_type_id = NULL,\n missing_target_object_id = NULL,\n missing_target_batch_ordinal = NULL,\n missing_target_first_seen_at = NULL\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n AND next_batch_ordinal = ? AND input_exhausted = 0\n `\n )\n .run(\n advance.checkpoint.nextBatchOrdinal,\n advance.checkpoint.nextRowOffset,\n advance.checkpoint.inputExhausted ? 1 : 0,\n advance.progress.sourceRowsRead,\n advance.progress.sourceRowsSkipped,\n input.projectId,\n input.id,\n input.executionToken,\n input.batchOrdinal\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToTelemetryProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async recordMissingTarget(\n input: RecordProjectionMissingTargetInput\n ): Promise<TelemetryProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = this.requireMaterializationExecution(input)\n const missingTarget = assertProjectionMissingTarget(\n requireTelemetryProjectionRun(restoreProjectionRunRow(existing)),\n input.missingTarget\n )\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n missing_target_object_type_id = ?,\n missing_target_object_id = ?,\n missing_target_batch_ordinal = ?,\n missing_target_first_seen_at = ?\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n AND next_batch_ordinal = ?\n `\n )\n .run(\n missingTarget.objectTypeId,\n missingTarget.objectId,\n missingTarget.batchOrdinal,\n missingTarget.firstSeenAt.toISOString(),\n input.projectId,\n input.id,\n input.executionToken,\n missingTarget.batchOrdinal\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToTelemetryProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async getById(params: { projectId: string; id: string }): Promise<ProjectionRunRecord | null> {\n const row = this.findRow(params.projectId, params.id)\n return row ? rowToProjectionRunRecord(row) : null\n }\n\n async list(input: ListProjectionRunsInput): Promise<ListProjectionRunsResult> {\n assertProjectionRunNonEmpty(input.projectId, \"projectId\")\n\n if (input.statuses && input.statuses.length === 0) {\n return { runs: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: (string | number)[] = [input.projectId]\n\n if (input.projectionId) {\n whereClauses.push(\"projection_id = ?\")\n args.push(input.projectionId)\n }\n if (input.projectionKind) {\n whereClauses.push(\"projection_kind = ?\")\n args.push(input.projectionKind)\n }\n if (input.datasetId) {\n whereClauses.push(\"dataset_id = ?\")\n args.push(input.datasetId)\n }\n if (input.datasetVersionId) {\n whereClauses.push(\"dataset_version_id = ?\")\n args.push(input.datasetVersionId)\n }\n if (input.objectTypeIds) {\n if (input.objectTypeIds.length === 0) {\n return { runs: [], hasMore: false, total: 0 }\n }\n const placeholders = input.objectTypeIds.map(() => \"?\").join(\", \")\n whereClauses.push(\n `(object_type_id IN (${placeholders})` +\n ` OR (source_object_type_id IN (${placeholders})` +\n ` AND target_object_type_id IN (${placeholders})))`\n )\n args.push(...input.objectTypeIds, ...input.objectTypeIds, ...input.objectTypeIds)\n }\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n if (input.startedAfter) {\n whereClauses.push(\"COALESCE(started_at, queued_at) >= ?\")\n args.push(input.startedAfter.toISOString())\n }\n if (input.startedBefore) {\n whereClauses.push(\"COALESCE(started_at, queued_at) <= ?\")\n args.push(input.startedBefore.toISOString())\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n const limit = input.limit\n\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM projection_runs ${where}`)\n .get(...args) as { count: number }\n\n let query = `\n SELECT * FROM projection_runs\n ${where}\n ORDER BY COALESCE(started_at, queued_at) ${order}, id ${order}\n `\n const queryArgs = [...args]\n\n if (limit !== undefined) {\n assertProjectionRunListWindow(limit, \"limit\")\n assertProjectionRunListWindow(offset, \"offset\")\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(limit, offset)\n } else if (offset > 0) {\n assertProjectionRunListWindow(offset, \"offset\")\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = this.db.query(query).all(...queryArgs) as DatabaseRow[]\n const runs = rows.map(rowToProjectionRunRecord)\n return { runs, hasMore: offset + runs.length < totalRow.count, total: totalRow.count }\n }\n\n async listLatestByProjectionIds(\n input: ListLatestProjectionRunsInput\n ): Promise<ListLatestProjectionRunsResult> {\n const rows = queryLatestRunsByOwnerId<DatabaseRow>({\n db: this.db,\n tableName: \"projection_runs\",\n ownerColumn: \"projection_id\",\n ownerIds: input.projectionIds,\n projectId: input.projectId,\n ownerIdFor: (row) => row.projection_id,\n })\n return { runs: rows.map(rowToProjectionRunRecord) }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private assertDatasetVersionIsImmutable(input: QueueProjectionRunInput): void {\n const conflict = this.db\n .query(\n `\n SELECT 1 FROM projection_runs\n WHERE project_id = ? AND id <> ? AND dataset_id = ? AND dataset_version_id = ?\n AND dataset_version_created_at <> ?\n LIMIT 1\n `\n )\n .get(\n input.projectId,\n input.id,\n input.identity.datasetVersion.datasetId,\n input.identity.datasetVersion.versionId,\n input.identity.datasetVersion.createdAt\n )\n if (conflict) throw immutableDatasetVersionConflict(input.identity)\n }\n\n private insertQueued(record: ProjectionRunRecord): void {\n const checkpoint = record.telemetryCheckpoint\n this.db\n .query(\n `\n INSERT INTO projection_runs (\n project_id, id, execution_id, projection_id, projection_kind,\n materialization_protocol, dataset_id, dataset_version_id,\n dataset_version_created_at, ontology_revision, projection_revision, ownership_hash,\n object_type_id, source_object_type_id, target_object_type_id, status, queued_at,\n started_at, finished_at, attempt, execution_token, fixed_batch_size,\n next_batch_ordinal, next_row_offset, input_exhausted, source_rows_read,\n source_rows_skipped\n ) VALUES (\n ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'queued', ?, NULL, NULL, 0, NULL,\n ?, ?, ?, ?, 0, 0\n )\n `\n )\n .run(\n record.projectId,\n record.id,\n record.executionId,\n record.identity.projectionId,\n record.identity.projectionKind,\n record.identity.protocol,\n record.identity.datasetVersion.datasetId,\n record.identity.datasetVersion.versionId,\n record.identity.datasetVersion.createdAt,\n record.identity.ontologyRevision,\n record.identity.projectionRevision,\n record.identity.ownershipHash,\n \"objectTypeId\" in record.target ? record.target.objectTypeId : null,\n \"sourceObjectTypeId\" in record.target ? record.target.sourceObjectTypeId : null,\n \"sourceObjectTypeId\" in record.target ? record.target.targetObjectTypeId : null,\n record.queuedAt.toISOString(),\n checkpoint?.fixedBatchSize ?? null,\n checkpoint?.nextBatchOrdinal ?? null,\n checkpoint?.nextRowOffset ?? null,\n checkpoint === undefined ? null : checkpoint.inputExhausted ? 1 : 0\n )\n }\n\n private updateProgress(\n existing: DatabaseRow,\n progress: ProjectionRunProgress,\n executionToken: string\n ): number {\n const args: (string | number | null)[] = [\n progress.sourceRowsRead,\n progress.sourceRowsSkipped,\n progress.sourceChangesRead ?? null,\n existing.project_id,\n existing.id,\n executionToken,\n ]\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n source_rows_read = ?,\n source_rows_skipped = ?,\n source_changes_read = ?\n WHERE project_id = ? AND id = ? AND status = 'running'\n AND execution_token = ?\n `\n )\n .run(...args)\n return result.changes\n }\n\n private requireMaterializationExecution(\n input: LockProjectionRunForMaterializationInput\n ): DatabaseRow {\n const row = this.requireRunning(input.projectId, input.id)\n assertProjectionRunAttempt(restoreProjectionRunRow(row), input)\n return row\n }\n\n private requireRunning(projectId: string, id: string): DatabaseRow {\n const row = this.requireRow(projectId, id)\n assertProjectionRunRunning(restoreProjectionRunRow(row))\n return row\n }\n\n private findRow(projectId: string, id: string): DatabaseRow | null {\n return this.db\n .query(\"SELECT * FROM projection_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as DatabaseRow | null\n }\n\n private requireRow(projectId: string, id: string): DatabaseRow {\n assertProjectionRunNonEmpty(projectId, \"projectId\")\n assertProjectionRunNonEmpty(id, \"id\")\n const row = this.findRow(projectId, id)\n if (!row) throw projectionRunNotFound(projectId, id)\n return row\n }\n}\n\nfunction createFreshExecutionToken(previous: string | null): string {\n let token = randomUUID()\n while (token === previous) token = randomUUID()\n return token\n}\n\nfunction rowToProjectionRunRecord(row: DatabaseRow): ProjectionRunRecord {\n return publicProjectionRunRecord(restoreProjectionRunRow(row))\n}\n\nfunction restoreProjectionRunRow(row: DatabaseRow): StoredProjectionRunRecord {\n const persisted: PersistedProjectionRunRecord = {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n projectionId: row.projection_id,\n projectionKind: row.projection_kind,\n protocol: row.materialization_protocol ?? undefined,\n datasetId: row.dataset_id,\n datasetVersionId: row.dataset_version_id,\n datasetVersionCreatedAt: row.dataset_version_created_at ?? undefined,\n ontologyRevision: row.ontology_revision ?? undefined,\n projectionRevision: row.projection_revision ?? undefined,\n ownershipHash: row.ownership_hash ?? undefined,\n objectTypeId: row.object_type_id ?? undefined,\n sourceObjectTypeId: row.source_object_type_id ?? undefined,\n targetObjectTypeId: row.target_object_type_id ?? undefined,\n status: row.status,\n queuedAt: new Date(row.queued_at),\n startedAt: row.started_at ? new Date(row.started_at) : undefined,\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n attempt: databaseSafeInteger(row.attempt, \"attempt\"),\n executionToken: row.execution_token ?? undefined,\n fixedBatchSize: optionalDatabaseSafeInteger(row.fixed_batch_size, \"fixedBatchSize\"),\n nextBatchOrdinal: optionalDatabaseSafeInteger(row.next_batch_ordinal, \"nextBatchOrdinal\"),\n nextRowOffset: optionalDatabaseSafeInteger(row.next_row_offset, \"nextRowOffset\"),\n inputExhausted: row.input_exhausted === null ? undefined : row.input_exhausted === 1,\n missingTargetObjectTypeId: row.missing_target_object_type_id ?? undefined,\n missingTargetObjectId: row.missing_target_object_id ?? undefined,\n missingTargetBatchOrdinal: optionalDatabaseSafeInteger(\n row.missing_target_batch_ordinal,\n \"missingTargetBatchOrdinal\"\n ),\n missingTargetFirstSeenAt: row.missing_target_first_seen_at\n ? new Date(row.missing_target_first_seen_at)\n : undefined,\n progress: {\n sourceRowsRead: databaseSafeInteger(row.source_rows_read, \"sourceRowsRead\"),\n sourceRowsSkipped: databaseSafeInteger(row.source_rows_skipped, \"sourceRowsSkipped\"),\n ...(row.source_changes_read == null\n ? {}\n : { sourceChangesRead: databaseSafeInteger(row.source_changes_read, \"sourceChangesRead\") }),\n },\n error: row.error ?? undefined,\n }\n return restoreProjectionRun(persisted)\n}\n\nfunction projectionRunClaim(row: DatabaseRow): ProjectionRunClaim {\n return createProjectionRunClaim(restoreProjectionRunRow(row))\n}\n\nfunction rowToTelemetryProjectionRunRecord(row: DatabaseRow): TelemetryProjectionRunRecord {\n return requireTelemetryProjectionRun(rowToProjectionRunRecord(row))\n}\n\nfunction optionalDatabaseSafeInteger(value: number | null, fieldName: string): number | undefined {\n return value === null ? undefined : databaseSafeInteger(value, fieldName)\n}\n\nfunction databaseSafeInteger(value: number, fieldName: string): number {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new ProjectionRunError(\n `[SixbSqlite] Projection run persisted ${fieldName} is not a non-negative safe integer.`\n )\n }\n return value\n}\n\nfunction isUniqueConstraintError(error: unknown): boolean {\n return error instanceof Error && error.message.includes(\"UNIQUE constraint failed\")\n}\n\ninterface DatabaseRow {\n project_id: string\n id: string\n execution_id: string\n projection_id: string\n projection_kind: ProjectionKind\n materialization_protocol: \"replacement\" | \"telemetry\" | null\n dataset_id: string\n dataset_version_id: string\n dataset_version_created_at: string | null\n ontology_revision: string | null\n projection_revision: string | null\n ownership_hash: string | null\n object_type_id: string | null\n source_object_type_id: string | null\n target_object_type_id: string | null\n status: ProjectionRunStatus\n queued_at: string\n started_at: string | null\n finished_at: string | null\n attempt: number\n execution_token: string | null\n fixed_batch_size: number | null\n next_batch_ordinal: number | null\n next_row_offset: number | null\n input_exhausted: 0 | 1 | null\n missing_target_object_type_id: string | null\n missing_target_object_id: string | null\n missing_target_batch_ordinal: number | null\n missing_target_first_seen_at: string | null\n source_rows_read: number\n source_rows_skipped: number\n source_changes_read: number | null\n error: string | null\n}\n\nfunction duplicateProjectionRun(input: { readonly projectId: string; readonly id: string }) {\n return new ProjectionRunError(\n `[SixbSqlite] Projection run '${input.id}' already exists for project '${input.projectId}'.`\n )\n}\n",
60
+ "import type { Database } from \"bun:sqlite\"\nimport type { SqliteValue } from \"./run-list-query\"\n\ntype SqliteLatestRunTarget =\n | { readonly tableName: \"pipeline_runs\"; readonly ownerColumn: \"pipeline_id\" }\n | { readonly tableName: \"projection_runs\"; readonly ownerColumn: \"projection_id\" }\n | { readonly tableName: \"sync_runs\"; readonly ownerColumn: \"sync_id\" }\n | { readonly tableName: \"workflow_runs\"; readonly ownerColumn: \"workflow_id\" }\n\nexport function queryLatestRunsByOwnerId<TRow>(\n input: {\n readonly db: Database\n readonly ownerIds: readonly string[]\n readonly projectId: string\n readonly ownerIdFor: (row: TRow) => string\n /** A status that never counts as the latest run, such as a run made stale by a newer one. */\n readonly excludedStatus?: string\n } & SqliteLatestRunTarget\n): readonly TRow[] {\n const ownerIds = [...new Set(input.ownerIds)]\n if (ownerIds.length === 0) {\n return []\n }\n\n const placeholders = ownerIds.map(() => \"?\").join(\", \")\n const statusFilter = input.excludedStatus === undefined ? \"\" : \" AND status <> ?\"\n const statusArgs = input.excludedStatus === undefined ? [] : [input.excludedStatus]\n const orderColumn =\n input.tableName === \"sync_runs\" ||\n input.tableName === \"pipeline_runs\" ||\n input.tableName === \"projection_runs\"\n ? \"COALESCE(started_at, queued_at)\"\n : \"started_at\"\n const rows = input.db\n .query(\n `\n SELECT *\n FROM (\n SELECT\n *,\n ROW_NUMBER() OVER (\n PARTITION BY ${input.ownerColumn}\n ORDER BY ${orderColumn} DESC, id DESC\n ) AS sixb_latest_rank\n FROM ${input.tableName}\n WHERE project_id = ? AND ${input.ownerColumn} IN (${placeholders})${statusFilter}\n )\n WHERE sixb_latest_rank = 1\n `\n )\n .all(input.projectId, ...ownerIds, ...statusArgs) as (TRow & {\n sixb_latest_rank: SqliteValue\n })[]\n\n const latestByOwnerId = new Map(rows.map((row) => [input.ownerIdFor(row), row]))\n\n return ownerIds.flatMap((ownerId) => {\n const row = latestByOwnerId.get(ownerId)\n return row ? [row] : []\n })\n}\n",
61
+ "import type { Database } from \"bun:sqlite\"\nimport { randomUUID } from \"node:crypto\"\nimport { serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n advanceProjectionTelemetry,\n assertGenericProgressDoesNotAdvanceTelemetry,\n assertProjectionMissingTarget,\n assertProjectionRunAttempt,\n assertProjectionRunDurableExecution,\n assertProjectionRunListWindow,\n assertProjectionRunNonEmpty,\n assertProjectionRunQueueInput,\n assertProjectionRunRunning,\n assertProjectionRunStartInput,\n canRequeueProjectionRunAfterEnqueueFailure,\n createProjectionRunClaim,\n createProjectionRunRecord,\n failProjectionRunEnqueue,\n immutableDatasetVersionConflict,\n mergeProjectionRunProgress,\n type PersistedProjectionRunRecord,\n parseProjectionAttemptFailure,\n planProjectionRunFinish,\n planProjectionRunReclaim,\n projectionRunNotFound,\n publicProjectionRunRecord,\n requireTelemetryProjectionRun,\n restoreProjectionRun,\n type StoredProjectionRunRecord,\n SUPERSEDING_PROJECTION_RUN_STATUSES,\n staleProjectionRunExecution,\n} from \"@sixb/core/internal/projection-run-storage-provider\"\nimport type {\n AdvanceProjectionTelemetryCheckpointInput,\n ExecutionStorage,\n FailProjectionRunEnqueueInput,\n FindSupersedingProjectionRunInput,\n FinishProjectionRunInput,\n ListLatestProjectionRunsInput,\n ListLatestProjectionRunsResult,\n ListProjectionRunsInput,\n ListProjectionRunsResult,\n LockProjectionRunForMaterializationInput,\n ProjectionKind,\n ProjectionRunClaim,\n ProjectionRunProgress,\n ProjectionRunRecord,\n ProjectionRunStatus,\n ProjectionRunStorage,\n QueueProjectionRunInput,\n RecordProjectionAttemptFailureInput,\n RecordProjectionMissingTargetInput,\n StartOrReclaimProjectionRunInput,\n TelemetryProjectionRunRecord,\n UpdateProjectionRunInput,\n} from \"@sixb/core/storage\"\nimport { PROJECTION_RUN_FAILURE_CODES, ProjectionRunError } from \"@sixb/core/storage\"\nimport { queryLatestRunsByOwnerId } from \"./latest-run-query\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransaction,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteProjectionRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteProjectionRunStorage implements ProjectionRunStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly executions: ExecutionStorage\n\n constructor(options: SqliteProjectionRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n }\n\n async queue(input: QueueProjectionRunInput): Promise<ProjectionRunRecord> {\n assertProjectionRunQueueInput(input)\n await assertProjectionRunDurableExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n projectionId: input.identity.projectionId,\n datasetId: input.identity.datasetVersion.datasetId,\n datasetVersionId: input.identity.datasetVersion.versionId,\n })\n\n return runImmediateTransaction(this.db, () => {\n this.assertDatasetVersionIsImmutable(input)\n const existing = this.findRow(input.projectId, input.id)\n if (existing) {\n const restored = restoreProjectionRunRow(existing)\n if (!canRequeueProjectionRunAfterEnqueueFailure(restored, input)) {\n throw duplicateProjectionRun(input)\n }\n const queuedAt = input.queuedAt ?? new Date()\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET status = 'queued', queued_at = ?, started_at = NULL, finished_at = NULL,\n attempt = 0, execution_token = NULL, next_batch_ordinal = ?, next_row_offset = ?,\n input_exhausted = ?, missing_target_object_type_id = NULL,\n missing_target_object_id = NULL, missing_target_batch_ordinal = NULL,\n missing_target_first_seen_at = NULL, source_rows_read = 0,\n source_rows_skipped = 0, source_changes_read = NULL, error = NULL\n WHERE project_id = ? AND id = ? AND status = 'failed'\n AND json_extract(error, '$.code') = 'queue.enqueue_failed'\n `\n )\n .run(\n queuedAt.toISOString(),\n input.fixedBatchSize === undefined ? null : 0,\n input.fixedBatchSize === undefined ? null : 0,\n input.fixedBatchSize === undefined ? null : 0,\n input.projectId,\n input.id\n )\n if (result.changes !== 1) throw duplicateProjectionRun(input)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n }\n\n const record = createProjectionRunRecord(input)\n try {\n this.insertQueued(record)\n } catch (error) {\n if (isUniqueConstraintError(error)) throw duplicateProjectionRun(input)\n throw error\n }\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async startOrReclaim(input: StartOrReclaimProjectionRunInput): Promise<ProjectionRunClaim> {\n return runImmediateTransaction(this.db, () => {\n assertProjectionRunStartInput(input)\n\n const metadataConflict = this.db\n .query(\n `\n SELECT 1 FROM projection_runs\n WHERE project_id = ? AND id <> ? AND dataset_id = ? AND dataset_version_id = ?\n AND dataset_version_created_at IS NOT NULL\n AND dataset_version_created_at <> ?\n LIMIT 1\n `\n )\n .get(\n input.projectId,\n input.id,\n input.identity.datasetVersion.datasetId,\n input.identity.datasetVersion.versionId,\n input.identity.datasetVersion.createdAt\n )\n if (metadataConflict) {\n throw immutableDatasetVersionConflict(input.identity)\n }\n\n const existing = this.requireRow(input.projectId, input.id)\n const existingRecord = restoreProjectionRunRow(existing)\n const attempt = planProjectionRunReclaim(existingRecord, input).attempt\n\n const executionToken = createFreshExecutionToken(existing.execution_token)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET status = 'running', started_at = COALESCE(started_at, ?), finished_at = NULL,\n attempt = ?, execution_token = ?\n WHERE project_id = ? AND id = ?\n AND (\n (status = 'queued' AND execution_token IS NULL)\n OR (status = 'running' AND execution_token = ?)\n )\n `\n )\n .run(\n (input.startedAt ?? new Date()).toISOString(),\n attempt,\n executionToken,\n input.projectId,\n input.id,\n existing.execution_token\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n\n return projectionRunClaim(this.requireRow(input.projectId, input.id))\n })\n }\n\n async failEnqueue(input: FailProjectionRunEnqueueInput): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = restoreProjectionRunRow(this.requireRow(input.projectId, input.id))\n const failed = failProjectionRunEnqueue(existing, input)\n if (!failed.finishedAt || !failed.error) {\n throw new ProjectionRunError(`[SixbSqlite] Projection run '${input.id}' did not finish.`)\n }\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET status = 'failed', finished_at = ?, error = ?\n WHERE project_id = ? AND id = ? AND status = 'queued'\n `\n )\n .run(\n failed.finishedAt.toISOString(),\n serializeSixbFailure(failed.error, PROJECTION_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n if (result.changes !== 1) throw duplicateProjectionRun(input)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async lockForMaterialization(\n input: LockProjectionRunForMaterializationInput\n ): Promise<ProjectionRunRecord> {\n return rowToProjectionRunRecord(this.requireMaterializationExecution(input))\n }\n\n async update(input: UpdateProjectionRunInput): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existingRow = this.requireMaterializationExecution(input)\n const existing = restoreProjectionRunRow(existingRow)\n assertGenericProgressDoesNotAdvanceTelemetry(existing, input.progress)\n const progress = mergeProjectionRunProgress(existing.progress, input.progress)\n const result = this.updateProgress(existingRow, progress, input.executionToken)\n if (result !== 1) throw staleProjectionRunExecution(input.id)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async recordAttemptFailure(\n input: RecordProjectionAttemptFailureInput\n ): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existingRow = this.requireMaterializationExecution(input)\n const error = parseProjectionAttemptFailure(restoreProjectionRunRow(existingRow), input.error)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET error = ?\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n `\n )\n .run(\n serializeSixbFailure(error, PROJECTION_RUN_FAILURE_CODES),\n input.projectId,\n input.id,\n input.executionToken\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async finish(input: FinishProjectionRunInput): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existingRow = this.requireMaterializationExecution(input)\n const plan = planProjectionRunFinish(restoreProjectionRunRow(existingRow), input)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n status = ?,\n finished_at = ?,\n execution_token = NULL,\n source_rows_read = ?,\n source_rows_skipped = ?,\n source_changes_read = ?,\n input_exhausted = ?,\n error = ?\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n `\n )\n .run(\n input.status,\n plan.finishedAt.toISOString(),\n plan.progress.sourceRowsRead,\n plan.progress.sourceRowsSkipped,\n plan.progress.sourceChangesRead ?? null,\n plan.inputExhausted ? 1 : existingRow.input_exhausted,\n plan.error === undefined\n ? null\n : serializeSixbFailure(plan.error, PROJECTION_RUN_FAILURE_CODES),\n input.projectId,\n input.id,\n input.executionToken\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async advanceTelemetryCheckpoint(\n input: AdvanceProjectionTelemetryCheckpointInput\n ): Promise<TelemetryProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = this.requireMaterializationExecution(input)\n const advance = advanceProjectionTelemetry(restoreProjectionRunRow(existing), input)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n next_batch_ordinal = ?,\n next_row_offset = ?,\n input_exhausted = ?,\n source_rows_read = ?,\n source_rows_skipped = ?,\n missing_target_object_type_id = NULL,\n missing_target_object_id = NULL,\n missing_target_batch_ordinal = NULL,\n missing_target_first_seen_at = NULL\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n AND next_batch_ordinal = ? AND input_exhausted = 0\n `\n )\n .run(\n advance.checkpoint.nextBatchOrdinal,\n advance.checkpoint.nextRowOffset,\n advance.checkpoint.inputExhausted ? 1 : 0,\n advance.progress.sourceRowsRead,\n advance.progress.sourceRowsSkipped,\n input.projectId,\n input.id,\n input.executionToken,\n input.batchOrdinal\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToTelemetryProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async recordMissingTarget(\n input: RecordProjectionMissingTargetInput\n ): Promise<TelemetryProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = this.requireMaterializationExecution(input)\n const missingTarget = assertProjectionMissingTarget(\n requireTelemetryProjectionRun(restoreProjectionRunRow(existing)),\n input.missingTarget\n )\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n missing_target_object_type_id = ?,\n missing_target_object_id = ?,\n missing_target_batch_ordinal = ?,\n missing_target_first_seen_at = ?\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n AND next_batch_ordinal = ?\n `\n )\n .run(\n missingTarget.objectTypeId,\n missingTarget.objectId,\n missingTarget.batchOrdinal,\n missingTarget.firstSeenAt.toISOString(),\n input.projectId,\n input.id,\n input.executionToken,\n missingTarget.batchOrdinal\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToTelemetryProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async getById(params: { projectId: string; id: string }): Promise<ProjectionRunRecord | null> {\n const row = this.findRow(params.projectId, params.id)\n return row ? rowToProjectionRunRecord(row) : null\n }\n\n async list(input: ListProjectionRunsInput): Promise<ListProjectionRunsResult> {\n assertProjectionRunNonEmpty(input.projectId, \"projectId\")\n\n if (input.statuses && input.statuses.length === 0) {\n return { runs: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: (string | number)[] = [input.projectId]\n\n if (input.projectionId) {\n whereClauses.push(\"projection_id = ?\")\n args.push(input.projectionId)\n }\n if (input.projectionKind) {\n whereClauses.push(\"projection_kind = ?\")\n args.push(input.projectionKind)\n }\n if (input.datasetId) {\n whereClauses.push(\"dataset_id = ?\")\n args.push(input.datasetId)\n }\n if (input.datasetVersionId) {\n whereClauses.push(\"dataset_version_id = ?\")\n args.push(input.datasetVersionId)\n }\n if (input.objectTypeIds) {\n if (input.objectTypeIds.length === 0) {\n return { runs: [], hasMore: false, total: 0 }\n }\n const placeholders = input.objectTypeIds.map(() => \"?\").join(\", \")\n whereClauses.push(\n `(object_type_id IN (${placeholders})` +\n ` OR (source_object_type_id IN (${placeholders})` +\n ` AND target_object_type_id IN (${placeholders})))`\n )\n args.push(...input.objectTypeIds, ...input.objectTypeIds, ...input.objectTypeIds)\n }\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n if (input.startedAfter) {\n whereClauses.push(\"COALESCE(started_at, queued_at) >= ?\")\n args.push(input.startedAfter.toISOString())\n }\n if (input.startedBefore) {\n whereClauses.push(\"COALESCE(started_at, queued_at) <= ?\")\n args.push(input.startedBefore.toISOString())\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n const limit = input.limit\n\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM projection_runs ${where}`)\n .get(...args) as { count: number }\n\n let query = `\n SELECT * FROM projection_runs\n ${where}\n ORDER BY COALESCE(started_at, queued_at) ${order}, id ${order}\n `\n const queryArgs = [...args]\n\n if (limit !== undefined) {\n assertProjectionRunListWindow(limit, \"limit\")\n assertProjectionRunListWindow(offset, \"offset\")\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(limit, offset)\n } else if (offset > 0) {\n assertProjectionRunListWindow(offset, \"offset\")\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = this.db.query(query).all(...queryArgs) as DatabaseRow[]\n const runs = rows.map(rowToProjectionRunRecord)\n return { runs, hasMore: offset + runs.length < totalRow.count, total: totalRow.count }\n }\n\n async findSupersedingRun(\n input: FindSupersedingProjectionRunInput\n ): Promise<ProjectionRunRecord | null> {\n const run = this.requireRow(input.projectId, input.id)\n if (run.materialization_protocol !== \"replacement\") return null\n // SQLite compares TEXT with the binary collation, under which canonical UTC ISO timestamps\n // order chronologically.\n const statuses = SUPERSEDING_PROJECTION_RUN_STATUSES\n const newer = this.db\n .query(\n `\n SELECT * FROM projection_runs\n WHERE project_id = ? AND projection_id = ? AND materialization_protocol = 'replacement'\n AND status IN (${statuses.map(() => \"?\").join(\", \")})\n AND dataset_version_created_at > ?\n ORDER BY dataset_version_created_at DESC, id DESC\n LIMIT 1\n `\n )\n .get(\n input.projectId,\n run.projection_id,\n ...statuses,\n run.dataset_version_created_at\n ) as DatabaseRow | null\n return newer ? rowToProjectionRunRecord(newer) : null\n }\n\n async listLatestByProjectionIds(\n input: ListLatestProjectionRunsInput\n ): Promise<ListLatestProjectionRunsResult> {\n const rows = queryLatestRunsByOwnerId<DatabaseRow>({\n db: this.db,\n tableName: \"projection_runs\",\n ownerColumn: \"projection_id\",\n ownerIds: input.projectionIds,\n projectId: input.projectId,\n ownerIdFor: (row) => row.projection_id,\n excludedStatus: \"superseded\",\n })\n return { runs: rows.map(rowToProjectionRunRecord) }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private assertDatasetVersionIsImmutable(input: QueueProjectionRunInput): void {\n const conflict = this.db\n .query(\n `\n SELECT 1 FROM projection_runs\n WHERE project_id = ? AND id <> ? AND dataset_id = ? AND dataset_version_id = ?\n AND dataset_version_created_at <> ?\n LIMIT 1\n `\n )\n .get(\n input.projectId,\n input.id,\n input.identity.datasetVersion.datasetId,\n input.identity.datasetVersion.versionId,\n input.identity.datasetVersion.createdAt\n )\n if (conflict) throw immutableDatasetVersionConflict(input.identity)\n }\n\n private insertQueued(record: ProjectionRunRecord): void {\n const checkpoint = record.telemetryCheckpoint\n this.db\n .query(\n `\n INSERT INTO projection_runs (\n project_id, id, execution_id, projection_id, projection_kind,\n materialization_protocol, dataset_id, dataset_version_id,\n dataset_version_created_at, ontology_revision, projection_revision, ownership_hash,\n object_type_id, source_object_type_id, target_object_type_id, status, queued_at,\n started_at, finished_at, attempt, execution_token, fixed_batch_size,\n next_batch_ordinal, next_row_offset, input_exhausted, source_rows_read,\n source_rows_skipped\n ) VALUES (\n ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'queued', ?, NULL, NULL, 0, NULL,\n ?, ?, ?, ?, 0, 0\n )\n `\n )\n .run(\n record.projectId,\n record.id,\n record.executionId,\n record.identity.projectionId,\n record.identity.projectionKind,\n record.identity.protocol,\n record.identity.datasetVersion.datasetId,\n record.identity.datasetVersion.versionId,\n record.identity.datasetVersion.createdAt,\n record.identity.ontologyRevision,\n record.identity.projectionRevision,\n record.identity.ownershipHash,\n \"objectTypeId\" in record.target ? record.target.objectTypeId : null,\n \"sourceObjectTypeId\" in record.target ? record.target.sourceObjectTypeId : null,\n \"sourceObjectTypeId\" in record.target ? record.target.targetObjectTypeId : null,\n record.queuedAt.toISOString(),\n checkpoint?.fixedBatchSize ?? null,\n checkpoint?.nextBatchOrdinal ?? null,\n checkpoint?.nextRowOffset ?? null,\n checkpoint === undefined ? null : checkpoint.inputExhausted ? 1 : 0\n )\n }\n\n private updateProgress(\n existing: DatabaseRow,\n progress: ProjectionRunProgress,\n executionToken: string\n ): number {\n const args: (string | number | null)[] = [\n progress.sourceRowsRead,\n progress.sourceRowsSkipped,\n progress.sourceChangesRead ?? null,\n existing.project_id,\n existing.id,\n executionToken,\n ]\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n source_rows_read = ?,\n source_rows_skipped = ?,\n source_changes_read = ?\n WHERE project_id = ? AND id = ? AND status = 'running'\n AND execution_token = ?\n `\n )\n .run(...args)\n return result.changes\n }\n\n private requireMaterializationExecution(\n input: LockProjectionRunForMaterializationInput\n ): DatabaseRow {\n const row = this.requireRunning(input.projectId, input.id)\n assertProjectionRunAttempt(restoreProjectionRunRow(row), input)\n return row\n }\n\n private requireRunning(projectId: string, id: string): DatabaseRow {\n const row = this.requireRow(projectId, id)\n assertProjectionRunRunning(restoreProjectionRunRow(row))\n return row\n }\n\n private findRow(projectId: string, id: string): DatabaseRow | null {\n return this.db\n .query(\"SELECT * FROM projection_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as DatabaseRow | null\n }\n\n private requireRow(projectId: string, id: string): DatabaseRow {\n assertProjectionRunNonEmpty(projectId, \"projectId\")\n assertProjectionRunNonEmpty(id, \"id\")\n const row = this.findRow(projectId, id)\n if (!row) throw projectionRunNotFound(projectId, id)\n return row\n }\n}\n\nfunction createFreshExecutionToken(previous: string | null): string {\n let token = randomUUID()\n while (token === previous) token = randomUUID()\n return token\n}\n\nfunction rowToProjectionRunRecord(row: DatabaseRow): ProjectionRunRecord {\n return publicProjectionRunRecord(restoreProjectionRunRow(row))\n}\n\nfunction restoreProjectionRunRow(row: DatabaseRow): StoredProjectionRunRecord {\n const persisted: PersistedProjectionRunRecord = {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n projectionId: row.projection_id,\n projectionKind: row.projection_kind,\n protocol: row.materialization_protocol ?? undefined,\n datasetId: row.dataset_id,\n datasetVersionId: row.dataset_version_id,\n datasetVersionCreatedAt: row.dataset_version_created_at ?? undefined,\n ontologyRevision: row.ontology_revision ?? undefined,\n projectionRevision: row.projection_revision ?? undefined,\n ownershipHash: row.ownership_hash ?? undefined,\n objectTypeId: row.object_type_id ?? undefined,\n sourceObjectTypeId: row.source_object_type_id ?? undefined,\n targetObjectTypeId: row.target_object_type_id ?? undefined,\n status: row.status,\n queuedAt: new Date(row.queued_at),\n startedAt: row.started_at ? new Date(row.started_at) : undefined,\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n attempt: databaseSafeInteger(row.attempt, \"attempt\"),\n executionToken: row.execution_token ?? undefined,\n fixedBatchSize: optionalDatabaseSafeInteger(row.fixed_batch_size, \"fixedBatchSize\"),\n nextBatchOrdinal: optionalDatabaseSafeInteger(row.next_batch_ordinal, \"nextBatchOrdinal\"),\n nextRowOffset: optionalDatabaseSafeInteger(row.next_row_offset, \"nextRowOffset\"),\n inputExhausted: row.input_exhausted === null ? undefined : row.input_exhausted === 1,\n missingTargetObjectTypeId: row.missing_target_object_type_id ?? undefined,\n missingTargetObjectId: row.missing_target_object_id ?? undefined,\n missingTargetBatchOrdinal: optionalDatabaseSafeInteger(\n row.missing_target_batch_ordinal,\n \"missingTargetBatchOrdinal\"\n ),\n missingTargetFirstSeenAt: row.missing_target_first_seen_at\n ? new Date(row.missing_target_first_seen_at)\n : undefined,\n progress: {\n sourceRowsRead: databaseSafeInteger(row.source_rows_read, \"sourceRowsRead\"),\n sourceRowsSkipped: databaseSafeInteger(row.source_rows_skipped, \"sourceRowsSkipped\"),\n ...(row.source_changes_read == null\n ? {}\n : { sourceChangesRead: databaseSafeInteger(row.source_changes_read, \"sourceChangesRead\") }),\n },\n error: row.error ?? undefined,\n }\n return restoreProjectionRun(persisted)\n}\n\nfunction projectionRunClaim(row: DatabaseRow): ProjectionRunClaim {\n return createProjectionRunClaim(restoreProjectionRunRow(row))\n}\n\nfunction rowToTelemetryProjectionRunRecord(row: DatabaseRow): TelemetryProjectionRunRecord {\n return requireTelemetryProjectionRun(rowToProjectionRunRecord(row))\n}\n\nfunction optionalDatabaseSafeInteger(value: number | null, fieldName: string): number | undefined {\n return value === null ? undefined : databaseSafeInteger(value, fieldName)\n}\n\nfunction databaseSafeInteger(value: number, fieldName: string): number {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new ProjectionRunError(\n `[SixbSqlite] Projection run persisted ${fieldName} is not a non-negative safe integer.`\n )\n }\n return value\n}\n\nfunction isUniqueConstraintError(error: unknown): boolean {\n return error instanceof Error && error.message.includes(\"UNIQUE constraint failed\")\n}\n\ninterface DatabaseRow {\n project_id: string\n id: string\n execution_id: string\n projection_id: string\n projection_kind: ProjectionKind\n materialization_protocol: \"replacement\" | \"telemetry\" | null\n dataset_id: string\n dataset_version_id: string\n dataset_version_created_at: string | null\n ontology_revision: string | null\n projection_revision: string | null\n ownership_hash: string | null\n object_type_id: string | null\n source_object_type_id: string | null\n target_object_type_id: string | null\n status: ProjectionRunStatus\n queued_at: string\n started_at: string | null\n finished_at: string | null\n attempt: number\n execution_token: string | null\n fixed_batch_size: number | null\n next_batch_ordinal: number | null\n next_row_offset: number | null\n input_exhausted: 0 | 1 | null\n missing_target_object_type_id: string | null\n missing_target_object_id: string | null\n missing_target_batch_ordinal: number | null\n missing_target_first_seen_at: string | null\n source_rows_read: number\n source_rows_skipped: number\n source_changes_read: number | null\n error: string | null\n}\n\nfunction duplicateProjectionRun(input: { readonly projectId: string; readonly id: string }) {\n return new ProjectionRunError(\n `[SixbSqlite] Projection run '${input.id}' already exists for project '${input.projectId}'.`\n )\n}\n",
62
62
  "import type { Database } from \"bun:sqlite\"\nimport type { RuleEventSubject } from \"@sixb/core\"\nimport type {\n ListActiveRuleStatesInput,\n ListActiveRuleStatesResult,\n ListRuleStatesReconciliationPageInput,\n ListRuleStatesReconciliationPageResult,\n RuleStateRecord,\n RuleStateTransitionEvent,\n RulesStorage,\n StoredRuleResolvedEvent,\n StoredRuleTriggeredEvent,\n} from \"@sixb/core/storage\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransaction,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteRulesStorageOptions {\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteRulesStorage implements RulesStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n constructor(options: SqliteRulesStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n }\n\n async getActive(params: {\n projectId: string\n ruleId: string\n subject: RuleEventSubject\n }): Promise<RuleStateRecord | null> {\n const row = this.db\n .query(\n `\n SELECT\n project_id,\n rule_id,\n subject_kind,\n object_type_id,\n primary_id,\n triggered_at\n FROM rule_states\n WHERE project_id = ?\n AND rule_id = ?\n AND subject_kind = ?\n AND object_type_id = ?\n AND primary_id = ?\n `\n )\n .get(\n params.projectId,\n params.ruleId,\n params.subject.kind,\n params.subject.objectTypeId,\n params.subject.primaryId\n ) as SqliteRuleStateRow | null\n\n return row ? rowToRuleStateRecord(row) : null\n }\n\n async getActiveBatch(params: {\n projectId: string\n items: readonly {\n readonly ruleId: string\n readonly subject: RuleEventSubject\n }[]\n }): Promise<readonly RuleStateRecord[]> {\n if (params.items.length === 0) return []\n const rows = this.db\n .query(\n `\n WITH requested AS (\n SELECT\n json_extract(value, '$.ruleId') AS rule_id,\n json_extract(value, '$.subject.kind') AS subject_kind,\n json_extract(value, '$.subject.objectTypeId') AS object_type_id,\n json_extract(value, '$.subject.primaryId') AS primary_id\n FROM json_each(?)\n )\n SELECT states.project_id, states.rule_id, states.subject_kind,\n states.object_type_id, states.primary_id, states.triggered_at\n FROM rule_states AS states\n JOIN requested USING (rule_id, subject_kind, object_type_id, primary_id)\n WHERE states.project_id = ?\n `\n )\n .all(JSON.stringify(params.items), params.projectId) as SqliteRuleStateRow[]\n return rows.map(rowToRuleStateRecord)\n }\n\n async listActive(input: ListActiveRuleStatesInput): Promise<ListActiveRuleStatesResult> {\n if (input.objectTypeIds?.length === 0) {\n return { states: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: (string | number)[] = [input.projectId]\n\n if (input.ruleId) {\n whereClauses.push(\"rule_id = ?\")\n args.push(input.ruleId)\n }\n\n if (input.objectTypeId) {\n whereClauses.push(\"object_type_id = ?\")\n args.push(input.objectTypeId)\n }\n\n if (input.objectTypeIds) {\n whereClauses.push(`object_type_id IN (${input.objectTypeIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.objectTypeIds)\n }\n\n if (input.primaryId) {\n whereClauses.push(\"primary_id = ?\")\n args.push(input.primaryId)\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n const limit = input.limit\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM rule_states ${where}`)\n .get(...args) as { count: number }\n\n let query = `\n SELECT\n project_id,\n rule_id,\n subject_kind,\n object_type_id,\n primary_id,\n triggered_at\n FROM rule_states\n ${where}\n ORDER BY triggered_at ${order}, rule_id ${order}, object_type_id ${order}, primary_id ${order}\n `\n const queryArgs = [...args]\n\n if (limit !== undefined) {\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(limit, offset)\n } else if (offset > 0) {\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = this.db.query(query).all(...queryArgs) as SqliteRuleStateRow[]\n const states = rows.map(rowToRuleStateRecord)\n\n return {\n states,\n hasMore: offset + states.length < totalRow.count,\n total: totalRow.count,\n }\n }\n\n async listReconciliationPage(\n input: ListRuleStatesReconciliationPageInput\n ): Promise<ListRuleStatesReconciliationPageResult> {\n assertPositiveLimit(input.limit)\n const rows = this.db\n .query(\n `\n SELECT project_id, rule_id, subject_kind, object_type_id, primary_id, triggered_at\n FROM rule_states\n WHERE project_id = ? AND subject_kind = 'object'\n AND (\n ? IS NULL OR\n (rule_id, object_type_id, primary_id) > (?, ?, ?)\n )\n ORDER BY rule_id ASC, object_type_id ASC, primary_id ASC\n LIMIT ?\n `\n )\n .all(\n input.projectId,\n input.after?.ruleId ?? null,\n input.after?.ruleId ?? null,\n input.after?.objectTypeId ?? null,\n input.after?.primaryId ?? null,\n input.limit + 1\n ) as SqliteRuleStateRow[]\n return reconciliationPage(rows, input.limit)\n }\n\n async applyTriggered(event: StoredRuleTriggeredEvent): Promise<void> {\n this.db\n .query(\n `\n INSERT INTO rule_states (\n project_id,\n rule_id,\n subject_kind,\n object_type_id,\n primary_id,\n triggered_at\n ) VALUES (?, ?, ?, ?, ?, ?)\n ON CONFLICT(project_id, rule_id, subject_kind, object_type_id, primary_id)\n DO UPDATE SET triggered_at = excluded.triggered_at\n `\n )\n .run(\n event.projectId,\n event.payload.ruleId,\n event.payload.subject.kind,\n event.payload.subject.objectTypeId,\n event.payload.subject.primaryId,\n event.payload.triggeredAt\n )\n }\n\n async applyResolved(event: StoredRuleResolvedEvent): Promise<void> {\n this.db\n .query(\n `\n DELETE FROM rule_states\n WHERE project_id = ?\n AND rule_id = ?\n AND subject_kind = ?\n AND object_type_id = ?\n AND primary_id = ?\n `\n )\n .run(\n event.projectId,\n event.payload.ruleId,\n event.payload.subject.kind,\n event.payload.subject.objectTypeId,\n event.payload.subject.primaryId\n )\n }\n\n async applyTransitions(events: readonly RuleStateTransitionEvent[]): Promise<void> {\n if (events.length === 0) return\n const rows = events.map(transitionRow)\n\n runImmediateTransaction(this.db, () => {\n this.db\n .query(\n `\n WITH transitions AS (\n SELECT\n json_extract(value, '$.type') AS type,\n json_extract(value, '$.projectId') AS project_id,\n json_extract(value, '$.ruleId') AS rule_id,\n json_extract(value, '$.subjectKind') AS subject_kind,\n json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id,\n json_extract(value, '$.transitionAt') AS transition_at\n FROM json_each(?)\n )\n INSERT INTO rule_states (\n project_id, rule_id, subject_kind, object_type_id, primary_id, triggered_at\n )\n SELECT project_id, rule_id, subject_kind, object_type_id, primary_id, transition_at\n FROM transitions\n WHERE type = 'rule.triggered'\n ON CONFLICT(project_id, rule_id, subject_kind, object_type_id, primary_id)\n DO UPDATE SET triggered_at = excluded.triggered_at\n `\n )\n .run(JSON.stringify(rows))\n\n this.db\n .query(\n `\n WITH transitions AS (\n SELECT\n json_extract(value, '$.type') AS type,\n json_extract(value, '$.projectId') AS project_id,\n json_extract(value, '$.ruleId') AS rule_id,\n json_extract(value, '$.subjectKind') AS subject_kind,\n json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id\n FROM json_each(?)\n )\n DELETE FROM rule_states\n WHERE EXISTS (\n SELECT 1 FROM transitions\n WHERE transitions.type = 'rule.resolved'\n AND transitions.project_id = rule_states.project_id\n AND transitions.rule_id = rule_states.rule_id\n AND transitions.subject_kind = rule_states.subject_kind\n AND transitions.object_type_id = rule_states.object_type_id\n AND transitions.primary_id = rule_states.primary_id\n )\n `\n )\n .run(JSON.stringify(rows))\n })\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n}\n\nfunction transitionRow(event: RuleStateTransitionEvent) {\n return {\n type: event.type,\n projectId: event.projectId,\n ruleId: event.payload.ruleId,\n subjectKind: event.payload.subject.kind,\n objectTypeId: event.payload.subject.objectTypeId,\n primaryId: event.payload.subject.primaryId,\n transitionAt:\n event.type === \"rule.triggered\" ? event.payload.triggeredAt : event.payload.resolvedAt,\n }\n}\n\nfunction reconciliationPage(\n rows: readonly SqliteRuleStateRow[],\n limit: number\n): ListRuleStatesReconciliationPageResult {\n const hasMore = rows.length > limit\n const states = rows.slice(0, limit).map(rowToRuleStateRecord)\n const last = states.at(-1)\n return {\n states,\n ...(hasMore && last\n ? {\n next: {\n ruleId: last.ruleId,\n objectTypeId: last.subject.objectTypeId,\n primaryId: last.subject.primaryId,\n },\n }\n : {}),\n }\n}\n\nfunction assertPositiveLimit(limit: number): void {\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new Error(\"Rules reconciliation page limit must be a positive safe integer.\")\n }\n}\n\ninterface SqliteRuleStateRow {\n readonly project_id: string\n readonly rule_id: string\n readonly subject_kind: RuleEventSubject[\"kind\"]\n readonly object_type_id: string\n readonly primary_id: string\n readonly triggered_at: string\n}\n\nfunction rowToRuleStateRecord(row: SqliteRuleStateRow): RuleStateRecord {\n return {\n projectId: row.project_id,\n ruleId: row.rule_id,\n subject: {\n kind: row.subject_kind,\n objectTypeId: row.object_type_id,\n primaryId: row.primary_id,\n },\n triggeredAt: row.triggered_at,\n }\n}\n",
63
63
  "import type { Database } from \"bun:sqlite\"\nimport {\n normalizeGetShareGrantByIdInput,\n normalizeListShareGrantsInput,\n normalizeRevokeShareGrantInput,\n normalizeShareGrantCreate,\n parseShareGrantRecord,\n} from \"@sixb/core/internal/share-grant-storage-provider\"\nimport type {\n CreateShareGrantInput,\n GetShareGrantByIdInput,\n ListShareGrantsInput,\n ListShareGrantsResult,\n RevokeShareGrantInput,\n ShareGrantRecord,\n ShareGrantStorage,\n} from \"@sixb/core/storage\"\nimport { ShareGrantStorageError } from \"@sixb/core/storage\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteShareGrantStorageOptions {\n readonly path?: string\n readonly connection?: SqliteStoreConnection\n}\n\n/** SQLite persistence for issued Share grants. Secret handling remains in Core. */\nexport class SqliteShareGrantStorage implements ShareGrantStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n constructor(options: SqliteShareGrantStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n if (this.connection.installFreshSchema) installFreshSqliteSchema(this.db)\n }\n\n async create(input: CreateShareGrantInput): Promise<ShareGrantRecord> {\n const record = normalizeShareGrantCreate(input)\n try {\n this.db\n .query(\n `\n INSERT INTO share_grants (\n project_id, id, definition_id, target_object_type_id, target_primary_id,\n issued_by_type, issued_by_id, authority_version, authority_snapshot,\n authority_digest, token_hash, destination_path, created_at, expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n record.projectId,\n record.id,\n record.definitionId,\n record.target.objectTypeId,\n record.target.primaryId,\n record.issuedBy.type,\n record.issuedBy.id,\n record.authoritySnapshot.version,\n JSON.stringify(record.authoritySnapshot),\n record.authorityDigest,\n record.tokenHash,\n record.destinationPath,\n record.createdAt.toISOString(),\n record.expiresAt.toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new ShareGrantStorageError(\n \"duplicate\",\n `[SixbSqlite] Share grant '${record.id}' conflicts with an existing record.`,\n { cause: error }\n )\n }\n throw error\n }\n return this.require(record.projectId, record.id, \"create\")\n }\n\n async getById(input: GetShareGrantByIdInput): Promise<ShareGrantRecord | null> {\n const normalized = normalizeGetShareGrantByIdInput(input)\n return this.getRow(normalized.projectId, normalized.id)\n }\n\n async list(input: ListShareGrantsInput): Promise<ListShareGrantsResult> {\n const normalized = normalizeListShareGrantsInput(input)\n const where = [\"project_id = ?\"]\n const args: (string | number)[] = [normalized.projectId]\n if (normalized.definitionId !== undefined) {\n where.push(\"definition_id = ?\")\n args.push(normalized.definitionId)\n }\n if (normalized.target !== undefined) {\n where.push(\"target_object_type_id = ?\", \"target_primary_id = ?\")\n args.push(normalized.target.objectTypeId, normalized.target.primaryId)\n }\n if (!normalized.includeRevoked) where.push(\"revoked_at IS NULL\")\n if (!normalized.includeExpired) {\n where.push(\"expires_at > ?\")\n args.push(normalized.now.toISOString())\n }\n\n const predicate = where.join(\" AND \")\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS total FROM share_grants WHERE ${predicate}`)\n .get(...args) as { readonly total: number }\n const rows = this.db\n .query(\n `\n SELECT * FROM share_grants\n WHERE ${predicate}\n ORDER BY created_at DESC, id DESC\n LIMIT ? OFFSET ?\n `\n )\n .all(...args, normalized.limit, normalized.offset) as SqliteShareGrantRow[]\n const grants = rows.map(rowToRecord)\n return {\n grants,\n total: totalRow.total,\n hasMore: normalized.offset + grants.length < totalRow.total,\n }\n }\n\n async revoke(input: RevokeShareGrantInput): Promise<ShareGrantRecord | null> {\n const normalized = normalizeRevokeShareGrantInput(input)\n const current = this.getRow(normalized.projectId, normalized.id)\n if (!current || current.revokedAt) return current\n\n const revocation = normalizeRevokeShareGrantInput(normalized, current.createdAt)\n this.db\n .query(\n `\n UPDATE share_grants\n SET revoked_at = ?, revoked_by_type = ?, revoked_by_id = ?\n WHERE project_id = ? AND id = ? AND revoked_at IS NULL\n `\n )\n .run(\n revocation.revokedAt.toISOString(),\n revocation.revokedBy.type,\n revocation.revokedBy.id,\n revocation.projectId,\n revocation.id\n )\n return this.require(revocation.projectId, revocation.id, \"revoke\")\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private getRow(projectId: string, id: string): ShareGrantRecord | null {\n const row = this.db\n .query(\"SELECT * FROM share_grants WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as SqliteShareGrantRow | null\n return row ? rowToRecord(row) : null\n }\n\n private require(projectId: string, id: string, operation: string): ShareGrantRecord {\n const record = this.getRow(projectId, id)\n if (!record) {\n throw new ShareGrantStorageError(\n \"invalid_record\",\n `[SixbSqlite] Share grant '${id}' disappeared after ${operation}.`\n )\n }\n return record\n }\n}\n\ninterface SqliteShareGrantRow {\n readonly project_id: unknown\n readonly id: unknown\n readonly definition_id: unknown\n readonly target_object_type_id: unknown\n readonly target_primary_id: unknown\n readonly issued_by_type: unknown\n readonly issued_by_id: unknown\n readonly authority_version: unknown\n readonly authority_snapshot: unknown\n readonly authority_digest: unknown\n readonly token_hash: unknown\n readonly destination_path: unknown\n readonly created_at: unknown\n readonly expires_at: unknown\n readonly revoked_at: unknown\n readonly revoked_by_type: unknown\n readonly revoked_by_id: unknown\n}\n\nfunction rowToRecord(row: SqliteShareGrantRow): ShareGrantRecord {\n const authoritySnapshot = parseStoredJson(row.authority_snapshot, \"authority snapshot\")\n if (\n typeof row.authority_version !== \"number\" ||\n !isRecord(authoritySnapshot) ||\n authoritySnapshot.version !== row.authority_version\n ) {\n throw invalidRecord(\"Share authority version does not match its snapshot.\")\n }\n\n const hasRevokedAt = row.revoked_at !== null\n const hasRevokedBy = row.revoked_by_type !== null || row.revoked_by_id !== null\n if (hasRevokedAt !== hasRevokedBy) {\n throw invalidRecord(\"Share revocation time and actor must be stored together.\")\n }\n\n return parseShareGrantRecord({\n projectId: row.project_id,\n id: row.id,\n definitionId: row.definition_id,\n target: {\n objectTypeId: row.target_object_type_id,\n primaryId: row.target_primary_id,\n },\n issuedBy: { type: row.issued_by_type, id: row.issued_by_id },\n authoritySnapshot,\n authorityDigest: row.authority_digest,\n tokenHash: row.token_hash,\n destinationPath: row.destination_path,\n createdAt: row.created_at,\n expiresAt: row.expires_at,\n ...(hasRevokedAt ? { revokedAt: row.revoked_at } : {}),\n ...(hasRevokedBy ? { revokedBy: { type: row.revoked_by_type, id: row.revoked_by_id } } : {}),\n })\n}\n\nfunction parseStoredJson(value: unknown, field: string): unknown {\n if (typeof value !== \"string\") throw invalidRecord(`Share ${field} must be stored as JSON text.`)\n try {\n return JSON.parse(value)\n } catch (cause) {\n throw new ShareGrantStorageError(\n \"invalid_record\",\n `[SixbSqlite] Share ${field} contains invalid JSON.`,\n { cause }\n )\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction invalidRecord(message: string): ShareGrantStorageError {\n return new ShareGrantStorageError(\"invalid_record\", `[SixbSqlite] ${message}`)\n}\n",
64
64
  "import type { Database } from \"bun:sqlite\"\nimport {\n normalizeGetShareSessionByIdInput,\n normalizeRenewShareSessionIfValidInput,\n normalizeRevokeShareSessionInput,\n normalizeShareSessionCreate,\n parseShareSessionRecord,\n} from \"@sixb/core/internal/share-session-storage-provider\"\nimport type {\n CreateShareSessionInput,\n GetShareSessionByIdInput,\n RenewShareSessionIfValidInput,\n RevokeShareSessionInput,\n ShareSessionRecord,\n ShareSessionStorage,\n} from \"@sixb/core/storage\"\nimport { ShareSessionStorageError } from \"@sixb/core/storage\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport { isForeignKeyConstraintError, isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteShareSessionStorageOptions {\n readonly path?: string\n readonly connection?: SqliteStoreConnection\n}\n\n/** SQLite persistence for short-lived Share access sessions. */\nexport class SqliteShareSessionStorage implements ShareSessionStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n constructor(options: SqliteShareSessionStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n if (this.connection.installFreshSchema) installFreshSqliteSchema(this.db)\n }\n\n async create(input: CreateShareSessionInput): Promise<ShareSessionRecord> {\n const record = normalizeShareSessionCreate(input)\n try {\n const row = this.db\n .query(\n `\n INSERT INTO share_sessions (\n project_id, id, grant_id, token_hash, created_at, expires_at,\n absolute_expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?)\n RETURNING *\n `\n )\n .get(\n record.projectId,\n record.id,\n record.grantId,\n record.tokenHash,\n record.createdAt.toISOString(),\n record.expiresAt.toISOString(),\n record.absoluteExpiresAt.toISOString()\n ) as SqliteShareSessionRow | null\n if (!row) throw invalidRecord(`Share session '${record.id}' disappeared after create.`)\n return rowToRecord(row)\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new ShareSessionStorageError(\n \"duplicate\",\n `[SixbSqlite] Share session '${record.id}' conflicts with an existing record.`,\n { cause: error }\n )\n }\n if (isForeignKeyConstraintError(error)) {\n throw new ShareSessionStorageError(\n \"invalid_input\",\n `[SixbSqlite] Share grant '${record.grantId}' does not exist in project '${record.projectId}'.`,\n { cause: error }\n )\n }\n throw error\n }\n }\n\n async getById(input: GetShareSessionByIdInput): Promise<ShareSessionRecord | null> {\n const normalized = normalizeGetShareSessionByIdInput(input)\n return this.getRow(normalized.projectId, normalized.id)\n }\n\n async renewIfValid(input: RenewShareSessionIfValidInput): Promise<ShareSessionRecord | null> {\n const normalized = normalizeRenewShareSessionIfValidInput(input)\n const requestedExpiry = normalized.expiresAt.toISOString()\n const now = normalized.now.toISOString()\n const row = this.db\n .query(\n `\n UPDATE share_sessions\n SET expires_at = CASE\n WHEN ? > absolute_expires_at THEN absolute_expires_at\n WHEN ? > expires_at THEN ?\n ELSE expires_at\n END\n WHERE project_id = ?\n AND id = ?\n AND grant_id = ?\n AND token_hash = ?\n AND revoked_at IS NULL\n AND created_at <= ?\n AND expires_at > ?\n AND absolute_expires_at > ?\n RETURNING *\n `\n )\n .get(\n requestedExpiry,\n requestedExpiry,\n requestedExpiry,\n normalized.projectId,\n normalized.id,\n normalized.grantId,\n normalized.tokenHash,\n now,\n now,\n now\n ) as SqliteShareSessionRow | null\n return row ? rowToRecord(row) : null\n }\n\n async revoke(input: RevokeShareSessionInput): Promise<ShareSessionRecord | null> {\n const normalized = normalizeRevokeShareSessionInput(input)\n const current = this.getRow(normalized.projectId, normalized.id)\n if (!current || current.revokedAt) return current\n const revocation = normalizeRevokeShareSessionInput(normalized, current.createdAt)\n const row = this.db\n .query(\n `\n UPDATE share_sessions\n SET revoked_at = ?\n WHERE project_id = ? AND id = ? AND revoked_at IS NULL\n RETURNING *\n `\n )\n .get(\n revocation.revokedAt.toISOString(),\n revocation.projectId,\n revocation.id\n ) as SqliteShareSessionRow | null\n return row ? rowToRecord(row) : this.getRow(revocation.projectId, revocation.id)\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private getRow(projectId: string, id: string): ShareSessionRecord | null {\n const row = this.db\n .query(\"SELECT * FROM share_sessions WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as SqliteShareSessionRow | null\n return row ? rowToRecord(row) : null\n }\n}\n\ninterface SqliteShareSessionRow {\n readonly project_id: unknown\n readonly id: unknown\n readonly grant_id: unknown\n readonly token_hash: unknown\n readonly created_at: unknown\n readonly expires_at: unknown\n readonly absolute_expires_at: unknown\n readonly revoked_at: unknown\n}\n\nfunction rowToRecord(row: SqliteShareSessionRow): ShareSessionRecord {\n return parseShareSessionRecord({\n projectId: row.project_id,\n id: row.id,\n grantId: row.grant_id,\n tokenHash: row.token_hash,\n createdAt: row.created_at,\n expiresAt: row.expires_at,\n absoluteExpiresAt: row.absolute_expires_at,\n ...(row.revoked_at === null ? {} : { revokedAt: row.revoked_at }),\n })\n}\n\nfunction invalidRecord(message: string): ShareSessionStorageError {\n return new ShareSessionStorageError(\"invalid_record\", `[SixbSqlite] ${message}`)\n}\n",
@@ -69,7 +69,7 @@
69
69
  "import type { Database } from \"bun:sqlite\"\nimport type { WorkflowIOSnapshot } from \"@sixb/core/internal/workflows\"\nimport type {\n CancelWorkflowInterventionInput,\n CreateWorkflowInterventionInput,\n ExpireWorkflowInterventionInput,\n ListWorkflowInterventionsInput,\n ListWorkflowInterventionsResult,\n Principal,\n SubmitWorkflowInterventionInput,\n WorkflowInterventionRecord,\n WorkflowInterventionStorage,\n} from \"@sixb/core/storage\"\nimport { WorkflowInterventionError } from \"@sixb/core/storage\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteWorkflowInterventionStorageOptions {\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteWorkflowInterventionStorage implements WorkflowInterventionStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n constructor(options: SqliteWorkflowInterventionStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n }\n\n async create(input: CreateWorkflowInterventionInput): Promise<WorkflowInterventionRecord> {\n assertNonNegativeInteger(input.nodeIndex, \"nodeIndex\")\n\n try {\n this.db\n .query(\n `\n INSERT INTO workflow_interventions (\n project_id,\n id,\n workflow_id,\n workflow_run_id,\n node_run_id,\n node_index,\n node_id,\n node_key,\n intervention_id,\n input,\n default_response,\n status,\n requested_at,\n expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.workflowId,\n input.workflowRunId,\n input.nodeRunId,\n input.nodeIndex,\n input.nodeId,\n input.nodeKey,\n input.interventionId,\n serializeRecord(input.input),\n serializeRecord(input.defaultResponse),\n \"pending\",\n (input.requestedAt ?? new Date()).toISOString(),\n input.expiresAt?.toISOString() ?? null\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new WorkflowInterventionError(\n `[SixbSqlite] Workflow intervention '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n return this.requireIntervention(input.projectId, input.id)\n }\n\n async submit(input: SubmitWorkflowInterventionInput): Promise<WorkflowInterventionRecord> {\n return this.db.transaction(() => {\n const existing = this.requirePendingIntervention(input.projectId, input.id)\n\n this.db\n .query(\n `\n UPDATE workflow_interventions\n SET\n status = ?,\n submitted_at = ?,\n submitted_by = ?,\n response = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"submitted\",\n (input.submittedAt ?? new Date()).toISOString(),\n serializePrincipal(input.submittedBy),\n serializeRecord(input.response),\n existing.project_id,\n existing.id\n )\n\n return this.requireIntervention(input.projectId, input.id)\n })()\n }\n\n async cancel(input: CancelWorkflowInterventionInput): Promise<WorkflowInterventionRecord> {\n return this.db.transaction(() => {\n const existing = this.requirePendingIntervention(input.projectId, input.id)\n\n this.db\n .query(\n `\n UPDATE workflow_interventions\n SET\n status = ?,\n cancelled_at = ?,\n cancelled_by = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"cancelled\",\n (input.cancelledAt ?? new Date()).toISOString(),\n serializePrincipal(input.cancelledBy),\n existing.project_id,\n existing.id\n )\n\n return this.requireIntervention(input.projectId, input.id)\n })()\n }\n\n async expire(input: ExpireWorkflowInterventionInput): Promise<WorkflowInterventionRecord> {\n return this.db.transaction(() => {\n const existing = this.requirePendingIntervention(input.projectId, input.id)\n\n this.db\n .query(\n `\n UPDATE workflow_interventions\n SET\n status = ?,\n expired_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"expired\",\n (input.expiredAt ?? new Date()).toISOString(),\n existing.project_id,\n existing.id\n )\n\n return this.requireIntervention(input.projectId, input.id)\n })()\n }\n\n async getById(params: {\n projectId: string\n id: string\n }): Promise<WorkflowInterventionRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM workflow_interventions WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as WorkflowInterventionDatabaseRow | null\n\n return row ? rowToWorkflowInterventionRecord(row) : null\n }\n\n async list(input: ListWorkflowInterventionsInput): Promise<ListWorkflowInterventionsResult> {\n if ((input.statuses && input.statuses.length === 0) || input.workflowIds?.length === 0) {\n return {\n interventions: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n\n if (input.workflowId) {\n whereClauses.push(\"workflow_id = ?\")\n args.push(input.workflowId)\n }\n\n if (input.workflowIds) {\n whereClauses.push(`workflow_id IN (${input.workflowIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.workflowIds)\n }\n\n if (input.workflowRunId) {\n whereClauses.push(\"workflow_run_id = ?\")\n args.push(input.workflowRunId)\n }\n\n if (input.nodeRunId) {\n whereClauses.push(\"node_run_id = ?\")\n args.push(input.nodeRunId)\n }\n\n if (input.nodeId) {\n whereClauses.push(\"node_id = ?\")\n args.push(input.nodeId)\n }\n\n if (input.nodeKey) {\n whereClauses.push(\"node_key = ?\")\n args.push(input.nodeKey)\n }\n\n if (input.interventionId) {\n whereClauses.push(\"intervention_id = ?\")\n args.push(input.interventionId)\n }\n\n if (input.requestedAfter) {\n whereClauses.push(\"requested_at >= ?\")\n args.push(input.requestedAfter.toISOString())\n }\n\n if (input.requestedBefore) {\n whereClauses.push(\"requested_at <= ?\")\n args.push(input.requestedBefore.toISOString())\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM workflow_interventions ${where}`)\n .get(...args) as { count: number }\n\n let query = `\n SELECT * FROM workflow_interventions\n ${where}\n ORDER BY requested_at ${order}, id ${order}\n `\n const queryArgs = [...args]\n\n if (input.limit !== undefined) {\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(input.limit, offset)\n } else if (offset > 0) {\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = this.db.query(query).all(...queryArgs) as WorkflowInterventionDatabaseRow[]\n\n return {\n interventions: rows.map(rowToWorkflowInterventionRecord),\n hasMore: offset + rows.length < totalRow.count,\n total: totalRow.count,\n }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private requirePendingIntervention(\n projectId: string,\n id: string\n ): WorkflowInterventionDatabaseRow {\n const row = this.db\n .query(\"SELECT * FROM workflow_interventions WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as WorkflowInterventionDatabaseRow | null\n\n if (!row) {\n throw new WorkflowInterventionError(\n `[SixbSqlite] Workflow intervention '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (row.status !== \"pending\") {\n throw new WorkflowInterventionError(\n `[SixbSqlite] Workflow intervention '${id}' for project '${projectId}' is not pending.`\n )\n }\n\n return row\n }\n\n private requireIntervention(projectId: string, id: string): WorkflowInterventionRecord {\n const row = this.db\n .query(\"SELECT * FROM workflow_interventions WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as WorkflowInterventionDatabaseRow | null\n\n if (!row) {\n throw new WorkflowInterventionError(\n `[SixbSqlite] Failed to load workflow intervention '${id}' for project '${projectId}'.`\n )\n }\n\n return rowToWorkflowInterventionRecord(row)\n }\n}\n\ntype SqliteValue = string | number | null\n\nfunction serializeRecord(value: WorkflowIOSnapshot): string {\n return JSON.stringify(value)\n}\n\nfunction parseRecord(value: string): WorkflowIOSnapshot {\n return JSON.parse(value) as WorkflowIOSnapshot\n}\n\nfunction serializePrincipal(principal: Principal | undefined): string | null {\n return principal ? JSON.stringify(principal) : null\n}\n\nfunction parsePrincipal(value: string | null): Principal | undefined {\n return value ? (JSON.parse(value) as Principal) : undefined\n}\n\nfunction rowToWorkflowInterventionRecord(\n row: WorkflowInterventionDatabaseRow\n): WorkflowInterventionRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n workflowId: row.workflow_id,\n workflowRunId: row.workflow_run_id,\n nodeRunId: row.node_run_id,\n nodeIndex: row.node_index,\n nodeId: row.node_id,\n nodeKey: row.node_key,\n interventionId: row.intervention_id,\n input: parseRecord(row.input),\n defaultResponse: parseRecord(row.default_response),\n status: row.status,\n requestedAt: new Date(row.requested_at),\n expiresAt: row.expires_at ? new Date(row.expires_at) : undefined,\n submittedAt: row.submitted_at ? new Date(row.submitted_at) : undefined,\n submittedBy: parsePrincipal(row.submitted_by),\n response: row.response ? parseRecord(row.response) : undefined,\n cancelledAt: row.cancelled_at ? new Date(row.cancelled_at) : undefined,\n cancelledBy: parsePrincipal(row.cancelled_by),\n expiredAt: row.expired_at ? new Date(row.expired_at) : undefined,\n }\n}\n\nfunction assertNonNegativeInteger(value: number, fieldName: string): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new WorkflowInterventionError(\n `[SixbSqlite] Workflow intervention ${fieldName} must be a non-negative integer.`\n )\n }\n}\n\ninterface WorkflowInterventionDatabaseRow {\n project_id: string\n id: string\n workflow_id: string\n workflow_run_id: string\n node_run_id: string\n node_index: number\n node_id: string\n node_key: string\n intervention_id: string\n input: string\n default_response: string\n status: WorkflowInterventionRecord[\"status\"]\n requested_at: string\n expires_at: string | null\n submitted_at: string | null\n submitted_by: string | null\n response: string | null\n cancelled_at: string | null\n cancelled_by: string | null\n expired_at: string | null\n}\n",
70
70
  "import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure, serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n assertWorkflowAgentNodeRunExecution,\n assertWorkflowRunExecution,\n} from \"@sixb/core/internal/workflow-run-storage-provider\"\nimport type { WorkflowIOSnapshot } from \"@sixb/core/internal/workflows\"\nimport type {\n CancelWorkflowAgentNodeRunInput,\n ConfirmWorkflowAgentNodeRunExecutionOwnershipInput,\n ConfirmWorkflowRunExecutionOwnershipInput,\n CreateWorkflowAgentNodeRunInput,\n ExecutionStorage,\n FinishWorkflowAgentNodeRunInput,\n FinishWorkflowNodeRunInput,\n FinishWorkflowRunInput,\n ListLatestWorkflowRunsInput,\n ListLatestWorkflowRunsResult,\n ListWorkflowAgentNodeRunsInput,\n ListWorkflowAgentNodeRunsResult,\n ListWorkflowNodeRunsInput,\n ListWorkflowNodeRunsResult,\n ListWorkflowRunsInput,\n ListWorkflowRunsResult,\n QueueWorkflowRunInput,\n ReclaimWorkflowAgentNodeRunInput,\n ReclaimWorkflowRunInput,\n ResumeWorkflowRunInput,\n StartWorkflowAgentNodeRunInput,\n StartWorkflowNodeRunInput,\n StartWorkflowRunInput,\n WaitWorkflowNodeRunInput,\n WaitWorkflowRunInput,\n WorkflowAgentNodeRunRecord,\n WorkflowAgentNodeRunStorage,\n WorkflowNodeRunRecord,\n WorkflowNodeRunStorage,\n WorkflowRunRecord,\n WorkflowRunStorage,\n} from \"@sixb/core/storage\"\nimport {\n AGENT_RUN_FAILURE_CODES,\n WORKFLOW_RUN_FAILURE_CODES,\n WorkflowRunError,\n} from \"@sixb/core/storage\"\nimport { queryLatestRunsByOwnerId } from \"./latest-run-query\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport {\n appendRunListFilters,\n hasEmptyStatuses,\n queryRunList,\n type SqliteValue,\n} from \"./run-list-query\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteWorkflowRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteWorkflowRunStorage implements WorkflowRunStorage {\n readonly nodes: SqliteWorkflowNodeRunStorage\n readonly agentNodes: SqliteWorkflowAgentNodeRunStorage\n\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly executions: ExecutionStorage\n\n constructor(options: SqliteWorkflowRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n\n this.nodes = new SqliteWorkflowNodeRunStorage(this.db)\n this.agentNodes = new SqliteWorkflowAgentNodeRunStorage(this.db, this.executions)\n }\n\n async queue(input: QueueWorkflowRunInput): Promise<WorkflowRunRecord> {\n const queuedAt = input.queuedAt ?? new Date()\n await assertWorkflowRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n workflowId: input.workflowId,\n })\n\n try {\n this.db\n .query(\n `\n INSERT INTO workflow_runs (\n project_id,\n id,\n execution_id,\n workflow_id,\n status,\n input,\n queued_at,\n started_at,\n attempt\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.executionId,\n input.workflowId,\n \"queued\",\n serializeRecord(input.input),\n queuedAt.toISOString(),\n queuedAt.toISOString(),\n 0\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' or execution '${input.executionId}' is already linked for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n return this.requireWorkflowRun(input.projectId, input.id)\n }\n\n async start(input: StartWorkflowRunInput): Promise<WorkflowRunRecord> {\n const startedAt = input.startedAt ?? new Date()\n\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow | null\n\n if (!existing || existing.status !== \"queued\") {\n throw new WorkflowRunError(\n existing\n ? `[SixbSqlite] Workflow run '${input.id}' cannot start from status '${existing.status}'.`\n : `[SixbSqlite] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE workflow_runs\n SET\n status = ?,\n started_at = ?,\n finished_at = NULL,\n error = NULL,\n attempt = attempt + 1,\n execution_token = ?, execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"running\",\n startedAt.toISOString(),\n input.execution?.token ?? null,\n input.execution?.queueLeaseExpiresAt.toISOString() ?? null,\n input.projectId,\n input.id\n )\n\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async reclaim(input: ReclaimWorkflowRunInput): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.id, \"running\")\n this.db\n .query(`\n UPDATE workflow_runs SET attempt = ?, execution_token = ?,\n execution_queue_lease_expires_at = ? WHERE project_id = ? AND id = ?\n `)\n .run(\n row.attempt + 1,\n input.execution.token,\n input.execution.queueLeaseExpiresAt.toISOString(),\n input.projectId,\n input.id\n )\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async confirmExecutionOwnership(\n input: ConfirmWorkflowRunExecutionOwnershipInput\n ): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.id, \"running\")\n assertSqliteWorkflowRunOwnership(row, input.executionToken)\n const current = row.execution_queue_lease_expires_at\n ? new Date(row.execution_queue_lease_expires_at)\n : input.queueLeaseExpiresAt\n this.db\n .query(`\n UPDATE workflow_runs SET execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND id = ?\n `)\n .run(\n new Date(Math.max(current.getTime(), input.queueLeaseExpiresAt.getTime())).toISOString(),\n input.projectId,\n input.id\n )\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async finish(input: FinishWorkflowRunInput): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (!canFinishWorkflowRun(existing.status, input.status)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' for project '${input.projectId}' cannot be finished from status '${existing.status}'.`\n )\n }\n assertSqliteWorkflowRunOwnership(existing, input.executionToken)\n\n this.db\n .query(\n `\n UPDATE workflow_runs\n SET\n status = ?,\n finished_at = ?,\n output = ?,\n error = ?,\n execution_token = NULL,\n execution_queue_lease_expires_at = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n (input.finishedAt ?? new Date()).toISOString(),\n input.status === \"succeeded\" ? serializeRecord(input.output) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, WORKFLOW_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow\n\n return rowToWorkflowRunRecord(updated)\n })()\n }\n\n async wait(input: WaitWorkflowRunInput): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' for project '${input.projectId}' must be running.`\n )\n }\n assertSqliteWorkflowRunOwnership(existing, input.executionToken)\n\n this.db\n .query(\n `\n UPDATE workflow_runs\n SET\n status = ?,\n finished_at = NULL,\n error = NULL\n , execution_token = NULL, execution_queue_lease_expires_at = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\"waiting\", input.projectId, input.id)\n\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async resume(input: ResumeWorkflowRunInput): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"waiting\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' for project '${input.projectId}' must be waiting.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE workflow_runs\n SET\n status = ?,\n finished_at = NULL,\n error = NULL\n , attempt = attempt + 1, execution_token = ?, execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"running\",\n input.execution?.token ?? null,\n input.execution?.queueLeaseExpiresAt.toISOString() ?? null,\n input.projectId,\n input.id\n )\n\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<WorkflowRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as WorkflowRunDatabaseRow | null\n\n return row ? rowToWorkflowRunRecord(row) : null\n }\n\n async list(input: ListWorkflowRunsInput): Promise<ListWorkflowRunsResult> {\n if (hasEmptyStatuses(input) || input.workflowIds?.length === 0) {\n return {\n runs: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.workflowId) {\n whereClauses.push(\"workflow_id = ?\")\n args.push(input.workflowId)\n }\n\n if (input.workflowIds) {\n whereClauses.push(`workflow_id IN (${input.workflowIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.workflowIds)\n }\n\n appendRunListFilters(whereClauses, args, input)\n\n const { rows, total, hasMore } = queryRunList<WorkflowRunDatabaseRow>({\n db: this.db,\n tableName: \"workflow_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return {\n runs: rows.map(rowToWorkflowRunRecord),\n hasMore,\n total,\n }\n }\n\n async listLatestByWorkflowIds(\n input: ListLatestWorkflowRunsInput\n ): Promise<ListLatestWorkflowRunsResult> {\n const rows = queryLatestRunsByOwnerId<WorkflowRunDatabaseRow>({\n db: this.db,\n tableName: \"workflow_runs\",\n ownerColumn: \"workflow_id\",\n ownerIds: input.workflowIds,\n projectId: input.projectId,\n ownerIdFor: (row) => row.workflow_id,\n })\n\n return {\n runs: rows.map(rowToWorkflowRunRecord),\n }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private requireWorkflowRun(projectId: string, id: string): WorkflowRunRecord {\n const record = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as WorkflowRunDatabaseRow | null\n\n if (!record) {\n throw new WorkflowRunError(\n `[SixbSqlite] Failed to load workflow run '${id}' for project '${projectId}'.`\n )\n }\n\n return rowToWorkflowRunRecord(record)\n }\n\n private requireStatus(\n projectId: string,\n id: string,\n status: WorkflowRunRecord[\"status\"]\n ): WorkflowRunDatabaseRow {\n const row = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as WorkflowRunDatabaseRow | null\n if (!row) throw new WorkflowRunError(`[SixbSqlite] Workflow run '${id}' not found.`)\n if (row.status !== status) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${id}' must be ${status} (status '${row.status}').`\n )\n }\n return row\n }\n}\n\nexport class SqliteWorkflowAgentNodeRunStorage implements WorkflowAgentNodeRunStorage {\n constructor(\n private readonly db: Database,\n private readonly executions: ExecutionStorage\n ) {}\n\n async create(input: CreateWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n const parent = this.db\n .query(\n `\n SELECT workflow_runs.execution_id\n FROM workflow_node_runs\n JOIN workflow_runs\n ON workflow_runs.project_id = workflow_node_runs.project_id\n AND workflow_runs.id = workflow_node_runs.workflow_run_id\n WHERE workflow_node_runs.project_id = ?\n AND workflow_node_runs.id = ?\n AND workflow_node_runs.node_type = 'agent'\n `\n )\n .get(input.projectId, input.nodeRunId) as { execution_id: string } | null\n if (!parent) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${input.nodeRunId}' was not found.`\n )\n }\n await assertWorkflowAgentNodeRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n nodeRunId: input.nodeRunId,\n actorId: input.actorId,\n workflowExecutionId: parent.execution_id,\n })\n\n try {\n this.db\n .query(`\n INSERT INTO workflow_agent_node_runs (\n project_id, node_run_id, execution_id, actor_id, status, prompt, attempt, created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n `)\n .run(\n input.projectId,\n input.nodeRunId,\n input.executionId,\n input.actorId,\n \"queued\",\n input.prompt,\n 0,\n (input.createdAt ?? new Date()).toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent execution already exists for workflow node run '${input.nodeRunId}'.`\n )\n }\n throw error\n }\n return this.require(input.projectId, input.nodeRunId)\n }\n\n async start(input: StartWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n this.requireStatus(input.projectId, input.nodeRunId, \"queued\")\n this.db\n .query(`\n UPDATE workflow_agent_node_runs SET\n status = ?, model_id = ?, attempt = 1, execution_token = ?,\n execution_queue_lease_expires_at = ?, started_at = ?\n WHERE project_id = ? AND node_run_id = ?\n `)\n .run(\n \"running\",\n input.modelId ?? null,\n input.execution.token,\n input.execution.queueLeaseExpiresAt.toISOString(),\n (input.startedAt ?? new Date()).toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async reclaim(input: ReclaimWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.nodeRunId, \"running\")\n this.db\n .query(`\n UPDATE workflow_agent_node_runs SET\n attempt = ?, execution_token = ?, execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND node_run_id = ?\n `)\n .run(\n Number(row.attempt) + 1,\n input.execution.token,\n input.execution.queueLeaseExpiresAt.toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async confirmExecutionOwnership(\n input: ConfirmWorkflowAgentNodeRunExecutionOwnershipInput\n ): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.nodeRunId, \"running\")\n assertSqliteWorkflowAgentNodeOwnership(row, input.executionToken)\n const current = row.execution_queue_lease_expires_at\n ? new Date(row.execution_queue_lease_expires_at)\n : input.queueLeaseExpiresAt\n this.db\n .query(`\n UPDATE workflow_agent_node_runs SET execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND node_run_id = ?\n `)\n .run(\n new Date(Math.max(current.getTime(), input.queueLeaseExpiresAt.getTime())).toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async finish(input: FinishWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.nodeRunId, \"running\")\n assertSqliteWorkflowAgentNodeOwnership(row, input.executionToken)\n this.db\n .query(`\n UPDATE workflow_agent_node_runs SET\n status = ?, model_id = COALESCE(?, model_id), finish_reason = ?, trace = ?,\n diagnostics = ?, error = ?, execution_token = NULL,\n execution_queue_lease_expires_at = NULL, completed_at = ?\n WHERE project_id = ? AND node_run_id = ?\n `)\n .run(\n input.status,\n input.modelId ?? null,\n input.finishReason ?? null,\n input.trace ? JSON.stringify(input.trace) : null,\n input.diagnostics ? JSON.stringify(input.diagnostics) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, AGENT_RUN_FAILURE_CODES),\n (input.completedAt ?? new Date()).toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async cancel(input: CancelWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n const row = this.require(input.projectId, input.nodeRunId)\n if (row.status !== \"queued\" && row.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${input.nodeRunId}' cannot be cancelled from status '${row.status}'.`\n )\n }\n this.db\n .query(\n `UPDATE workflow_agent_node_runs SET status = ?, error = ?, execution_token = NULL,\n execution_queue_lease_expires_at = NULL, completed_at = ?\n WHERE project_id = ? AND node_run_id = ?`\n )\n .run(\n \"cancelled\",\n input.error === undefined\n ? null\n : serializeSixbFailure(input.error, AGENT_RUN_FAILURE_CODES),\n (input.completedAt ?? new Date()).toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async getByNodeRunId(params: {\n projectId: string\n nodeRunId: string\n }): Promise<WorkflowAgentNodeRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM workflow_agent_node_runs WHERE project_id = ? AND node_run_id = ?\")\n .get(params.projectId, params.nodeRunId) as WorkflowAgentNodeRunDatabaseRow | null\n return row ? rowToWorkflowAgentNodeRunRecord(row) : null\n }\n\n async list(input: ListWorkflowAgentNodeRunsInput): Promise<ListWorkflowAgentNodeRunsResult> {\n if (hasEmptyStatuses(input)) return { runs: [], total: 0, hasMore: false }\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n if (input.actorId) {\n whereClauses.push(\"actor_id = ?\")\n args.push(input.actorId)\n }\n appendRunListFilters(whereClauses, args, input)\n const result = queryRunList<WorkflowAgentNodeRunDatabaseRow>({\n db: this.db,\n tableName: \"workflow_agent_node_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n return { ...result, runs: result.rows.map(rowToWorkflowAgentNodeRunRecord) }\n }\n\n private require(projectId: string, nodeRunId: string): WorkflowAgentNodeRunRecord {\n const row = this.db\n .query(\"SELECT * FROM workflow_agent_node_runs WHERE project_id = ? AND node_run_id = ?\")\n .get(projectId, nodeRunId) as WorkflowAgentNodeRunDatabaseRow | null\n if (!row) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${nodeRunId}' not found for project '${projectId}'.`\n )\n }\n return rowToWorkflowAgentNodeRunRecord(row)\n }\n\n private requireStatus(\n projectId: string,\n nodeRunId: string,\n status: WorkflowAgentNodeRunRecord[\"status\"]\n ): WorkflowAgentNodeRunDatabaseRow {\n const row = this.db\n .query(\"SELECT * FROM workflow_agent_node_runs WHERE project_id = ? AND node_run_id = ?\")\n .get(projectId, nodeRunId) as WorkflowAgentNodeRunDatabaseRow | null\n if (!row) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${nodeRunId}' not found for project '${projectId}'.`\n )\n }\n if (row.status !== status) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${nodeRunId}' must be ${status} (status '${row.status}').`\n )\n }\n return row\n }\n}\n\nexport class SqliteWorkflowNodeRunStorage implements WorkflowNodeRunStorage {\n constructor(private readonly db: Database) {}\n\n async start(input: StartWorkflowNodeRunInput): Promise<WorkflowNodeRunRecord> {\n assertNonNegativeInteger(input.nodeIndex, \"nodeIndex\")\n\n return this.db.transaction(() => {\n const workflowRun = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.workflowRunId) as WorkflowRunDatabaseRow | null\n\n if (!workflowRun) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.workflowRunId}' not found for project '${input.projectId}'.`\n )\n }\n\n if (workflowRun.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.workflowRunId}' for project '${input.projectId}' must be running.`\n )\n }\n assertSqliteWorkflowRunOwnership(workflowRun, input.executionToken)\n\n if (workflowRun.workflow_id !== input.workflowId) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' workflow '${input.workflowId}' does not match workflow run '${input.workflowRunId}' workflow '${workflowRun.workflow_id}'.`\n )\n }\n\n const startedAt = input.startedAt ?? new Date()\n\n try {\n this.db\n .query(\n `\n INSERT INTO workflow_node_runs (\n project_id,\n id,\n workflow_run_id,\n workflow_id,\n node_index,\n node_type,\n node_id,\n node_key,\n status,\n input,\n started_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.workflowRunId,\n input.workflowId,\n input.nodeIndex,\n input.nodeType,\n input.nodeId,\n input.nodeKey,\n \"running\",\n serializeRecord(input.input),\n startedAt.toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n const row = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow | null\n\n if (!row) {\n throw new WorkflowRunError(\n `[SixbSqlite] Failed to load workflow node run '${input.id}' for project '${input.projectId}'.`\n )\n }\n\n return rowToWorkflowNodeRunRecord(row)\n })()\n }\n\n async finish(input: FinishWorkflowNodeRunInput): Promise<WorkflowNodeRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n this.assertNodeParentOwnership(existing, input.executionToken)\n\n if (existing.status !== \"running\" && existing.status !== \"waiting\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' for project '${input.projectId}' is already terminal.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE workflow_node_runs\n SET\n status = ?,\n finished_at = ?,\n output = ?,\n error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n (input.finishedAt ?? new Date()).toISOString(),\n input.status === \"succeeded\" && input.output ? serializeRecord(input.output) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, WORKFLOW_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow\n\n return rowToWorkflowNodeRunRecord(updated)\n })()\n }\n\n async wait(input: WaitWorkflowNodeRunInput): Promise<WorkflowNodeRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n this.assertNodeParentOwnership(existing, input.executionToken)\n\n if (existing.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' for project '${input.projectId}' must be running.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE workflow_node_runs\n SET\n status = ?,\n finished_at = NULL,\n output = NULL,\n error = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\"waiting\", input.projectId, input.id)\n\n const updated = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow\n\n return rowToWorkflowNodeRunRecord(updated)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<WorkflowNodeRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as WorkflowNodeRunDatabaseRow | null\n\n return row ? rowToWorkflowNodeRunRecord(row) : null\n }\n\n async list(input: ListWorkflowNodeRunsInput): Promise<ListWorkflowNodeRunsResult> {\n if (hasEmptyStatuses(input)) {\n return {\n nodes: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.workflowRunId) {\n whereClauses.push(\"workflow_run_id = ?\")\n args.push(input.workflowRunId)\n }\n\n if (input.workflowId) {\n whereClauses.push(\"workflow_id = ?\")\n args.push(input.workflowId)\n }\n\n if (input.nodeType) {\n whereClauses.push(\"node_type = ?\")\n args.push(input.nodeType)\n }\n\n if (input.nodeId) {\n whereClauses.push(\"node_id = ?\")\n args.push(input.nodeId)\n }\n\n if (input.nodeKey) {\n whereClauses.push(\"node_key = ?\")\n args.push(input.nodeKey)\n }\n\n appendRunListFilters(whereClauses, args, input)\n\n const { rows, total, hasMore } = queryRunList<WorkflowNodeRunDatabaseRow>({\n db: this.db,\n tableName: \"workflow_node_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return {\n nodes: rows.map(rowToWorkflowNodeRunRecord),\n hasMore,\n total,\n }\n }\n\n private assertNodeParentOwnership(node: WorkflowNodeRunDatabaseRow, token?: string): void {\n const run = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(node.project_id, node.workflow_run_id) as WorkflowRunDatabaseRow | null\n if (!run) throw new WorkflowRunError(\"[SixbSqlite] Parent workflow run was not found.\")\n assertSqliteWorkflowRunOwnership(run, token)\n }\n}\n\nfunction serializeRecord(value: WorkflowIOSnapshot): string {\n return JSON.stringify(value)\n}\n\nfunction parseRecord(value: string): WorkflowIOSnapshot {\n return JSON.parse(value) as WorkflowIOSnapshot\n}\n\nfunction rowToWorkflowRunRecord(row: WorkflowRunDatabaseRow): WorkflowRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n workflowId: row.workflow_id,\n status: row.status,\n input: parseRecord(row.input),\n output: row.output ? parseRecord(row.output) : undefined,\n queuedAt: row.queued_at ? new Date(row.queued_at) : undefined,\n startedAt: new Date(row.started_at),\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, WORKFLOW_RUN_FAILURE_CODES),\n attempt: row.attempt,\n ...(row.execution_token && row.execution_queue_lease_expires_at\n ? {\n execution: {\n token: row.execution_token,\n queueLeaseExpiresAt: new Date(row.execution_queue_lease_expires_at),\n },\n }\n : {}),\n }\n}\n\nfunction rowToWorkflowNodeRunRecord(row: WorkflowNodeRunDatabaseRow): WorkflowNodeRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n workflowRunId: row.workflow_run_id,\n workflowId: row.workflow_id,\n nodeIndex: row.node_index,\n nodeType: row.node_type,\n nodeId: row.node_id,\n nodeKey: row.node_key,\n status: row.status,\n input: parseRecord(row.input),\n startedAt: new Date(row.started_at),\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n output: row.output ? parseRecord(row.output) : undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, WORKFLOW_RUN_FAILURE_CODES),\n }\n}\n\nfunction assertNonNegativeInteger(value: number, fieldName: string): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run ${fieldName} must be a non-negative integer.`\n )\n }\n}\n\nfunction canFinishWorkflowRun(\n current: WorkflowRunRecord[\"status\"],\n next: FinishWorkflowRunInput[\"status\"]\n): boolean {\n return (\n current === \"running\" ||\n (current === \"waiting\" && next !== \"succeeded\") ||\n (current === \"queued\" && next !== \"succeeded\")\n )\n}\n\ninterface WorkflowRunDatabaseRow {\n project_id: string\n id: string\n execution_id: string\n workflow_id: string\n status: WorkflowRunRecord[\"status\"]\n input: string\n output: string | null\n queued_at: string | null\n started_at: string\n finished_at: string | null\n error: string | null\n attempt: number\n execution_token: string | null\n execution_queue_lease_expires_at: string | null\n}\n\ninterface WorkflowNodeRunDatabaseRow {\n project_id: string\n id: string\n workflow_run_id: string\n workflow_id: string\n node_index: number\n node_type: WorkflowNodeRunRecord[\"nodeType\"]\n node_id: string\n node_key: string\n status: WorkflowNodeRunRecord[\"status\"]\n input: string\n started_at: string\n finished_at: string | null\n output: string | null\n error: string | null\n}\n\ninterface WorkflowAgentNodeRunDatabaseRow {\n project_id: string\n node_run_id: string\n execution_id: string\n actor_id: string\n status: WorkflowAgentNodeRunRecord[\"status\"]\n prompt: string\n model_id: string | null\n finish_reason: WorkflowAgentNodeRunRecord[\"finishReason\"] | null\n trace: string | null\n diagnostics: string | null\n error: string | null\n attempt: number\n execution_token: string | null\n execution_queue_lease_expires_at: string | null\n created_at: string\n started_at: string | null\n completed_at: string | null\n}\n\nfunction assertSqliteWorkflowAgentNodeOwnership(\n row: WorkflowAgentNodeRunDatabaseRow,\n token: string\n): void {\n if (row.execution_token !== token) {\n throw new WorkflowRunError(\n `[SixbSqlite] Execution token is no longer current on agent workflow node run '${row.node_run_id}'.`\n )\n }\n}\n\nfunction rowToWorkflowAgentNodeRunRecord(\n row: WorkflowAgentNodeRunDatabaseRow\n): WorkflowAgentNodeRunRecord {\n return {\n projectId: row.project_id,\n nodeRunId: row.node_run_id,\n executionId: row.execution_id,\n actorId: row.actor_id,\n status: row.status,\n prompt: row.prompt,\n ...(row.model_id ? { modelId: row.model_id } : {}),\n ...(row.finish_reason ? { finishReason: row.finish_reason } : {}),\n ...(row.trace ? { trace: JSON.parse(row.trace) } : {}),\n ...(row.diagnostics ? { diagnostics: JSON.parse(row.diagnostics) } : {}),\n ...(row.error ? { error: parseSixbFailure(row.error, AGENT_RUN_FAILURE_CODES) } : {}),\n attempt: row.attempt,\n ...(row.execution_token && row.execution_queue_lease_expires_at\n ? {\n execution: {\n token: row.execution_token,\n queueLeaseExpiresAt: new Date(row.execution_queue_lease_expires_at),\n },\n }\n : {}),\n createdAt: new Date(row.created_at),\n ...(row.started_at ? { startedAt: new Date(row.started_at) } : {}),\n ...(row.completed_at ? { completedAt: new Date(row.completed_at) } : {}),\n }\n}\n\nfunction assertSqliteWorkflowRunOwnership(row: WorkflowRunDatabaseRow, token?: string): void {\n if (row.execution_token !== (token ?? null)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Execution token is no longer current on workflow run '${row.id}'.`\n )\n }\n}\n"
71
71
  ],
72
- "mappings": ";;AAIA;AAOA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;;;ACvBA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAwBA;;;AC/BA;AACA;AACA;AACA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
73
- "debugId": "9F25188860B63C3464756E2164756E21",
72
+ "mappings": ";;AAIA;AAOA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;;;ACvBA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAwBA;;;AC/BA;AACA;AACA;AACA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgHA,IAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAatB,IAAM,4BAA4B;AAClC,IAAM,sBAAsB;AAE5B,IAAM,0BAA0B,iBAAiB;AAAA,EACtD,WAAW;AAAA,EACX,OAAO;AAAA,IACL,UAAU,sBAAsB,2BAAgB;AAAA,IAChD,UAAU,2BAA2B,gCAAoB;AAAA,IACzD,UAAU,uBAAuB,4BAAgB;AAAA,IACjD,UAAU,kBAAkB,uBAAa;AAAA,IACzC,UAAU,2BAA2B,gCAAqB;AAAA,IAC1D,UAAU,yCAAyC,8CAAgC;AAAA,IACnF,UAAU,uBAAuB,4BAAiB;AAAA,IAClD,UAAU,yBAAyB,8BAAmB;AAAA,IACtD,UAAU,wBAAwB,6BAAkB;AAAA,IACpD,UAAU,sCAAsC,2CAA8B;AAAA,IAC9E,UAAU,2BAA2B,gCAAoB;AAAA,IACzD,UAAU,+BAA+B,oCAAwB;AAAA,IACjE,UAAU,+BAA+B,oCAAwB;AAAA,IACjE,UAAU,4BAA4B,iCAAqB;AAAA,IAC3D,UAAU,iCAAiC,sCAA0B;AAAA,IACrE,UAAU,kCAAkC,uCAA0B;AAAA,IACtE,UAAU,6BAA6B,kCAAsB;AAAA,IAC7D,UAAU,sCAAsC,2CAA8B;AAAA,IAC9E,UAAU,uCAAuC,4CAA+B;AAAA,IAChF,UAAU,kCAAkC,uCAA0B;AAAA,IACtE,UAAU,gCAAgC,qCAAyB;AAAA,IACnE,WACE,6BACA,CAAC,OAAO;AAAA,MACN,IAAI,GAAG,MAAM,uCAAuC,EAAE,IAAI,GAAG;AAAA,QAC3D,MAAM,IAAI,MACR,wGACF;AAAA,MACF;AAAA,MACA,GAAG,IAAI,kCAAuB;AAAA,OAEhC,EAAE,UAAU,SAAS,kCAAuB,EAAE,CAChD;AAAA,IACA,WACE,0BACA,CAAC,OAAO;AAAA,MACN,MAAM,UAAU,GAAG,MAAM,oCAAoC,EAAE,IAAI;AAAA,MACnE,MAAM,gBAAgB,GAAG,MAAM,0CAA0C,EAAE,IAAI;AAAA,MAC/E,IAAI,WAAW,eAAe;AAAA,QAC5B,MAAM,IAAI,MACR,mHACF;AAAA,MACF;AAAA,MACA,GAAG,IAAI,+BAAoB;AAAA,OAE7B,EAAE,UAAU,SAAS,+BAAoB,EAAE,CAC7C;AAAA,IACA,WACE,kCACA,CAAC,OAAO;AAAA,MACN,IAAI,GAAG,MAAM,wCAAwC,EAAE,IAAI,GAAG;AAAA,QAC5D,MAAM,IAAI,MACR,yGACF;AAAA,MACF;AAAA,MACA,GAAG,IAAI,uCAA2B;AAAA,OAEpC,EAAE,UAAU,SAAS,uCAA2B,EAAE,CACpD;AAAA,IACA,UAAU,6BAA6B,kCAAuB;AAAA,IAC9D,UAAU,0BAA0B,+BAAmB;AAAA,IACvD,UAAU,iCAAiC,sCAA0B;AAAA,IACrE,UAAU,kCAAkC,uCAA0B;AAAA,IACtE,UAAU,wBAAwB,6BAAkB;AAAA,IACpD,UAAU,uBAAuB,4BAAgB;AAAA,IACjD,UAAU,qBAAqB,0BAAe;AAAA,IAC9C,UAAU,6BAA6B,kCAAsB;AAAA,IAC7D,UAAU,gCAAgC,qCAAyB;AAAA,IACnE,UAAU,6BAA6B,kCAAuB;AAAA,IAC9D,UAAU,oBAAoB,yBAAc;AAAA,IAC5C,UAAU,sBAAsB,2BAAgB;AAAA,IAChD,UAAU,kCAAkC,uCAA2B;AAAA,IACvE,UAAU,+BAA+B,oCAAwB;AAAA,IACjE,UAAU,+BAA+B,oCAAwB;AAAA,IACjE,UAAU,gCAAgC,qCAAyB;AAAA,IACnE,UAAU,+BAA+B,oCAAwB;AAAA,IACjE,UAAU,uBAAuB,4BAAiB;AAAA,IAClD,UAAU,uBAAuB,4BAAiB;AAAA,IAClD,UAAU,uBAAuB,4BAAiB;AAAA,IAClD,UAAU,kCAAkC,uCAA0B;AAAA,IACtE,UAAU,wCAAwC,6CAAiC;AAAA,IACnF,UAAU,mCAAmC,wCAA4B;AAAA,IACzE,UAAU,4BAA4B,iCAAqB;AAAA,IAC3D,UAAU,uBAAuB,4BAAiB;AAAA,IAClD,UAAU,mCAAmC,wCAA4B;AAAA,IACzE,UAAU,mCAAmC,wCAA4B;AAAA,IACzE,WACE,8BACA,CAAC,OAAO;AAAA,MAEN,MAAM,SAAS,oBAAoB,EAAE;AAAA,MACrC,GAAG,IAAI,mCAAuB;AAAA,MAC9B,MAAM,QAAQ,oBAAoB,EAAE;AAAA,MACpC,IACE,MAAM,aAAa,OAAO,YAC1B,MAAM,UAAU,OAAO,SACvB,MAAM,SAAS,OAAO,MACtB;AAAA,QACA,MAAM,IAAI,MACR,+FACF;AAAA,MACF;AAAA,OAEF,EAAE,UAAU,SAAS,mCAAuB,EAAE,CAChD;AAAA,EACF;AACF,CAAC;AAEM,SAAS,iBAAiB,CAAC,UAA0B;AAAA,EAC1D,OAAO,GAAG,YAAY;AAAA;AAGjB,SAAS,SAAS,CAAC,IAAY,SAA0C;AAAA,EAC9E,OAAO,WACL,IACA,CAAC,OAAO;AAAA,IACN,GAAG,IAAI,OAAO;AAAA,KAEhB,EAAE,UAAU,SAAS,OAAO,EAAE,CAChC;AAAA;AAGK,SAAS,UAAU,CACxB,IACA,IACA,UAAgC,CAAC,GACR;AAAA,EACzB,OAAO,KAAe,IAAI,IAAI,OAAO;AAAA;AAGhC,SAAS,wBAAwB,CAAC,IAAoB;AAAA,EAC3D,WAAW,aAAa,wBAAwB,OAAO;AAAA,IACrD,MAAM,YAAY,UAAU,GAAG,EAAE;AAAA,IACjC,IAAI,qBAAqB,SAAS;AAAA,MAChC,MAAM,IAAI,MACR,IAAI,wBAAwB,iEAC9B;AAAA,IACF;AAAA,EACF;AAAA;AAGK,SAAS,4BAA4B,CAAC,UAA8C;AAAA,EACzF,OAAO;AAAA,IACL,qBAAqB;AAAA,MACnB,MAAM,kBAAkB,QAAQ;AAAA,MAChC,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAAA;AAGK,SAAS,oBAAoB,CAAC,QAGjB;AAAA,EAClB,OAAO;AAAA,IACL,WAAW,OAAO,WAAW;AAAA,IAC7B,eAAe,OAAO,WAAW;AAAA,SAC3B,OAAM,GAAG;AAAA,MACb,OAAO,yBAAyB;AAAA,QAC9B,YAAY,OAAO;AAAA,QACnB,MAAM,MAAM,kBAAkB,OAAO,MAAM,OAAO,WAAW,SAAS;AAAA,MACxE,CAAC;AAAA;AAAA,SAEG,QAAO,GAAG;AAAA,MACd,OAAO,mBAAmB,OAAO,MAAM,CAAC,OACtC,gBAAgB;AAAA,QACd,SAAS;AAAA,QACT,YAAY,OAAO;AAAA,QACnB,OAAO,4BAA4B,EAAE;AAAA,MACvC,CAAC,CACH;AAAA;AAAA,EAEJ;AAAA;AAGF,eAAsB,oBAAoB,CAAC,UAAiC;AAAA,EAC1E,UAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AAAA,EAEvC,WAAW,YAAY,6BAA6B,QAAQ,GAAG;AAAA,IAC7D,MAAM,SAAS,QAAQ;AAAA,EACzB;AAAA;AAGF,SAAS,2BAA2B,CAAC,IAAqC;AAAA,EACxE,OAAO;AAAA,IACL,MAAM,GAAG;AAAA,MACP,GAAG,IAAI,oBAAoB;AAAA;AAAA,IAE7B,WAAW,CAAC,WAAW;AAAA,MACrB,OAAO,GACJ,MAAM,qEAAqE,EAC3E,IAAI,SAAS,EACb,IAAI,oBAAoB;AAAA;AAAA,IAE7B,WAAW,CAAC,WAAW,WAAW,IAAI;AAAA,MACpC,GAAG,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAUR,EAAE,IAAI,WAAW,UAAU,SAAS,UAAU,IAAI,UAAU,YAAY,MAAM,EAAE;AAAA;AAAA,IAEnF,WAAW,CAAC,WAAW,WAAW,IAAI;AAAA,MACpC,GAAG,MAAM;AAAA;AAAA;AAAA;AAAA,OAIR,EAAE,IAAI,IAAI,WAAW,UAAU,OAAO;AAAA;AAAA,SAEnC,YAAW,CAAC,KAAK;AAAA,MAIrB,GAAG,IAAI,2BAA2B;AAAA,MAClC,GAAG,IAAI,OAAO;AAAA,MAEd,IAAI;AAAA,QACF,MAAM,SAAS,MAAM,IAAI;AAAA,QACzB,MAAM,aAAa,GAAG,MAAM,0BAA0B,EAAE,IAAI;AAAA,QAC5D,IAAI,WAAW,SAAS,GAAG;AAAA,UACzB,MAAM,IAAI,MACR,IAAI,iDAAiD,WAAW,kCAClE;AAAA,QACF;AAAA,QACA,GAAG,IAAI,QAAQ;AAAA,QACf,OAAO;AAAA,QACP,OAAO,OAAO;AAAA,QACd,gBAAgB,EAAE;AAAA,QAClB,MAAM;AAAA,gBACN;AAAA,QACA,GAAG,IAAI,0BAA0B;AAAA;AAAA;AAAA,EAGvC;AAAA;AAGF,SAAS,oBAAoB,CAAC,KAA+B;AAAA,EAC3D,MAAM,YAAY;AAAA,EAUlB,OAAO;AAAA,IACL,WAAW,UAAU;AAAA,IACrB,SAAS,UAAU;AAAA,IACnB,IAAI,UAAU;AAAA,IACd,UAAU,UAAU,YAAY;AAAA,IAChC,QAAQ,UAAU;AAAA,IAClB,WAAW,UAAU;AAAA,IACrB,YAAY,UAAU,eAAe;AAAA,EACvC;AAAA;AAGF,SAAS,mBAAmB,CAAC,IAI3B;AAAA,EACA,OAAO,GACJ,MAAM;AAAA;AAAA,0DAE+C,EACrD,IAAI;AAAA;AAGT,SAAS,QAAQ,CAAC,OAAuB;AAAA,EACvC,OAAO,WAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AAAA;AAYxD,eAAe,iBAAiB,CAC9B,MACA,WAC4C;AAAA,EAC5C,IAAI,SAAS,cAAc,CAAC,WAAW,IAAI,GAAG;AAAA,IAC5C,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK,IAAI,SAAS,MAAM,EAAE,UAAU,KAAK,CAAC;AAAA,EAChD,IAAI;AAAA,IACF,MAAM,QAAQ,GACX,MAAM,kFAAkF,EACxF,IAAI;AAAA,IACP,IAAI,CAAC,OAAO;AAAA,MACV,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,GACJ,MAAM,qEAAqE,EAC3E,IAAI,SAAS,EACb,IAAI,oBAAoB;AAAA,YAC3B;AAAA,IACA,GAAG,MAAM;AAAA;AAAA;AAIb,eAAe,kBAAqB,CAAC,MAAc,KAA+C;AAAA,EAChG,IAAI,SAAS;AAAA,IAAY,UAAU,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,EACrE,MAAM,KAAK,IAAI,SAAS,IAAI;AAAA,EAE5B,IAAI;AAAA,IACF,OAAO,MAAM,IAAI,EAAE;AAAA,YACnB;AAAA,IACA,GAAG,MAAM;AAAA;AAAA;AAIb,SAAS,eAAe,CAAC,IAAoB;AAAA,EAC3C,IAAI;AAAA,IACF,GAAG,IAAI,UAAU;AAAA,IACjB,MAAM;AAAA;;;ACtdV,qBAAS;AACT,sBAAS;AACT,oBAAS;AAcF,SAAS,yBAAyB,CACvC,UAAwC,CAAC,GAClB;AAAA,EACvB,IAAI,QAAQ,YAAY;AAAA,IACtB,OAAO;AAAA,MACL,IAAI,QAAQ,WAAW;AAAA,MACvB,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,QAAQ,QAAQ;AAAA,EAC7B,IAAI,SAAS,cAAc,CAAC,QAAQ;AAAA,IAAU,WAAU,SAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,EAC1F,MAAM,KAAK,IAAI,eAAe,MAAM,QAAQ,WAAW,EAAE,UAAU,KAAK,IAAI,SAAS;AAAA,EACrF,GAAG,IAAI,0BAA0B;AAAA,EACjC,GAAG,IAAI,4BAA4B;AAAA,EACnC,OAAO;AAAA,IACL;AAAA,IACA,gBAAgB;AAAA,IAChB,oBAAoB,SAAS,cAAc,CAAC,QAAQ;AAAA,EACtD;AAAA;AAGK,SAAS,0BAA0B,CAAC,YAAyC;AAAA,EAClF,IAAI,WAAW,gBAAgB;AAAA,IAC7B,WAAW,GAAG,MAAM;AAAA,EACtB;AAAA;AAGF,IAAM,8BAA8B,IAAI;AACxC,IAAM,iCAAiC,IAAI;AAEpC,SAAS,uBAA0B,CAAC,IAAc,KAAiB;AAAA,EACxE,IAAI,4BAA4B,IAAI,EAAE,GAAG;AAAA,IACvC,OAAO,IAAI;AAAA,EACb;AAAA,EAEA,GAAG,IAAI,iBAAiB;AAAA,EACxB,4BAA4B,IAAI,EAAE;AAAA,EAElC,IAAI;AAAA,IACF,MAAM,SAAS,IAAI;AAAA,IACnB,GAAG,IAAI,QAAQ;AAAA,IACf,OAAO;AAAA,IACP,OAAO,OAAO;AAAA,IACd,iBAAgB,EAAE;AAAA,IAClB,MAAM;AAAA,YACN;AAAA,IACA,4BAA4B,OAAO,EAAE;AAAA;AAAA;AAKlC,SAAS,oBAAoB,GAAkB;AAAA,EACpD,OAAO,IAAI,QAAQ,CAAC,YAAY,aAAa,OAAO,CAAC;AAAA;AAGvD,eAAsB,4BAA+B,CACnD,IACA,KACY;AAAA,EACZ,IAAI,4BAA4B,IAAI,EAAE,GAAG;AAAA,IACvC,OAAO,IAAI;AAAA,EACb;AAAA,EAEA,GAAG,IAAI,iBAAiB;AAAA,EACxB,4BAA4B,IAAI,EAAE;AAAA,EAElC,IAAI;AAAA,IACF,MAAM,SAAS,MAAM,IAAI;AAAA,IACzB,GAAG,IAAI,QAAQ;AAAA,IACf,OAAO;AAAA,IACP,OAAO,OAAO;AAAA,IACd,iBAAgB,EAAE;AAAA,IAClB,MAAM;AAAA,YACN;AAAA,IACA,4BAA4B,OAAO,EAAE;AAAA;AAAA;AAWlC,SAAS,0BAA6B,CAAC,IAAc,KAAiB;AAAA,EAC3E,IAAI,4BAA4B,IAAI,EAAE,KAAK,+BAA+B,IAAI,EAAE,GAAG;AAAA,IACjF,OAAO,IAAI;AAAA,EACb;AAAA,EACA,IAAI,GAAG,eAAe;AAAA,IACpB,MAAM,IAAI,MACR,kFACF;AAAA,EACF;AAAA,EAEA,GAAG,IAAI,gBAAgB;AAAA,EACvB,+BAA+B,IAAI,EAAE;AAAA,EACrC,IAAI;AAAA,IACF,MAAM,SAAS,IAAI;AAAA,IACnB,GAAG,IAAI,QAAQ;AAAA,IACf,OAAO;AAAA,IACP,OAAO,OAAO;AAAA,IACd,iBAAgB,EAAE;AAAA,IAClB,MAAM;AAAA,YACN;AAAA,IACA,+BAA+B,OAAO,EAAE;AAAA;AAAA;AAI5C,SAAS,gBAAe,CAAC,IAAoB;AAAA,EAC3C,IAAI;AAAA,IACF,GAAG,IAAI,UAAU;AAAA,IACjB,MAAM;AAAA;;;AFnFH,MAAM,uBAAmD;AAAA,EAC7C;AAAA,EACA;AAAA,EAEA;AAAA,EAEjB,WAAW,CAAC,SAAwC;AAAA,IAClD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,KAAK,aAAa,QAAQ;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA;AAAA,OAGI,uBAAsB,CAAC,OAAoE;AAAA,IAC/F,MAAM,MAAM,KAAK,GACd,MAAM,2EAA2E,EACjF,IAAI,MAAM,WAAW,MAAM,KAAK;AAAA,IAInC,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,eACR,4BAA4B,MAAM,iCAAiC,MAAM,aAC3E;AAAA,IACF;AAAA,IACA,IAAI,IAAI,cAAc,MAAM,UAAU;AAAA,MACpC,MAAM,IAAI,eACR,4BAA4B,MAAM,qCAAqC,MAAM,YAC/E;AAAA,IACF;AAAA,IACA,IAAI,IAAI,WAAW,WAAW;AAAA,MAC5B,MAAM,IAAI,eACR,4BAA4B,MAAM,0CAA0C,IAAI,UAClF;AAAA,IACF;AAAA,IACA,MAAM,SAAS,MAAM,KAAK,QAAQ,EAAE,WAAW,MAAM,WAAW,IAAI,MAAM,MAAM,CAAC;AAAA,IACjF,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,eACR,4BAA4B,MAAM,mDACpC;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,OAGH,MAAK,CAAC,OAAsD;AAAA,IAChE,MAAM,WAAW,MAAM,YAAY,IAAI;AAAA,IACvC,MAAM,yBAAyB;AAAA,MAC7B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,UAAU,MAAM;AAAA,IAClB,CAAC;AAAA,IAED,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SA+BF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,aACN,MAAM,UACN,MAAM,QAAQ,MACd,MAAM,QAAQ,SAAS,WAAW,MAAM,QAAQ,eAAe,MAC/D,MAAM,QAAQ,SAAS,WAAW,MAAM,QAAQ,YAAY,MAC5D,UACA,WACA,SAAS,YAAY,GACrB,KAAK,UAAU,MAAM,MAAM,GAC3B,MAAM,cACR;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,wBAAwB,KAAK,GAAG;AAAA,QAClC,OAAO,KAAK,2BAA2B,OAAO,QAAQ;AAAA,MACxD;AAAA,MAEA,MAAM;AAAA;AAAA,IAGR,MAAM,SAAS,MAAM,KAAK,QAAQ,EAAE,WAAW,MAAM,WAAW,IAAI,MAAM,GAAG,CAAC;AAAA,IAC9E,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,eACR,2CAA2C,MAAM,oBAAoB,MAAM,aAC7E;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,OAGK,2BAA0B,CACtC,OACA,UAC0B;AAAA,IAC1B,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IACE,CAAC,YACD,CAAC,uCAAuC,qBAAqB,QAAQ,GAAG,KAAK,GAC7E;AAAA,QACA,MAAM,IAAI,eACR,4BAA4B,MAAM,mCAAmC,MAAM,aAC7E;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAkBF,EACC,IAAI,UAAU,WAAW,SAAS,YAAY,GAAG,MAAM,WAAW,MAAM,EAAE;AAAA,MAE7E,MAAM,UAAU,KAAK,GAClB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,qBAAqB,OAAO;AAAA,KACpC,EAAE;AAAA;AAAA,OAGC,MAAK,CAAC,OAAsD;AAAA,IAChE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,eACR,4BAA4B,MAAM,8BAA8B,MAAM,aACxE;AAAA,MACF;AAAA,MAEA,IAAI,SAAS,WAAW,UAAU;AAAA,QAChC,MAAM,IAAI,eACR,4BAA4B,MAAM,iCAAiC,SAAS,UAC9E;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IACC,WACA,MAAM,SAAS,eACd,MAAM,aAAa,IAAI,MAAQ,YAAY,GAC5C,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,qBAAqB,OAAO;AAAA,KACpC,EAAE;AAAA;AAAA,OAGC,WAAU,CAAC,OAA2D;AAAA,IAC1E,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,KAAK,kBAAkB,MAAM,WAAW,MAAM,IAAI,kBAAkB;AAAA,MAEpE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IAAI,MAAM,OAAO,MAAM,WAAW,MAAM,EAAE;AAAA,MAE7C,MAAM,UAAU,KAAK,GAClB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,qBAAqB,OAAO;AAAA,KACpC,EAAE;AAAA;AAAA,OAGC,gBAAe,CAAC,OAA6D;AAAA,IACjF,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,kBAAkB,MAAM,WAAW,MAAM,IAAI,kBAAkB;AAAA,MACrF,MAAM,gBAAgB,kBAAkB,OAAO,IAAI,KAAK,MAAM,eAAe,IAAI,IAAM,CAAC;AAAA,MACxF,MAAM,mBAAmB,2BAA2B,QAAQ;AAAA,MAE5D,IAAI,kBAAkB;AAAA,QACpB,IAAI,2BAA2B,kBAAkB,aAAa,GAAG;AAAA,UAC/D,OAAO,qBAAqB,QAAQ;AAAA,QACtC;AAAA,QAEA,MAAM,IAAI,eACR,4BAA4B,MAAM,+CACpC;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUF,EACC,IACC,aACA,MAAM,QACN,cAAc,YAAY,YAAY,GACtC,MAAM,WAAW,cAAc,mBAAmB,MAAM,MAAM,IAAI,MAClE,MAAM,WAAW,WAAW,0BAA0B,MAAM,OAAO,WAAW,IAAI,MAClF,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,qBAAqB,OAAO;AAAA,KACpC,EAAE;AAAA;AAAA,OAGC,cAAa,CAAC,OAA2D;AAAA,IAC7E,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,kBAAkB,MAAM,WAAW,MAAM,IAAI,gBAAgB;AAAA,MACnF,MAAM,cAAc,gBAAgB,OAAO,IAAI,KAAK,MAAM,eAAe,IAAI,IAAM,CAAC;AAAA,MACpF,MAAM,iBAAiB,yBAAyB,QAAQ;AAAA,MAExD,IAAI,gBAAgB;AAAA,QAClB,IAAI,2BAA2B,gBAAgB,WAAW,GAAG;AAAA,UAC3D,OAAO,qBAAqB,QAAQ;AAAA,QACtC;AAAA,QAEA,MAAM,IAAI,eACR,4BAA4B,MAAM,6CACpC;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IACC,WACA,MAAM,QACN,YAAY,YAAY,YAAY,GACpC,MAAM,WAAW,WAAW,0BAA0B,MAAM,OAAO,SAAS,IAAI,MAChF,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,qBAAqB,OAAO;AAAA,KACpC,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAAuD;AAAA,IAClE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,eACR,4BAA4B,MAAM,8BAA8B,MAAM,aACxE;AAAA,MACF;AAAA,MAEA,IAAI,oBAAoB,EAAE,QAAQ,SAAS,OAAO,CAAC,GAAG;AAAA,QACpD,MAAM,IAAI,eACR,4BAA4B,MAAM,2CAA2C,SAAS,UACxF;AAAA,MACF;AAAA,MAEA,MAAM,QAAQ,qBAAqB,OAAO,SAAS,KAAK;AAAA,MAExD,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IACC,MAAM,QACN,QACC,MAAM,cAAc,IAAI,MAAQ,YAAY,GAC7C,MAAM,WAAW,cAAc,OAAO,0BAA0B,MAAM,KAAK,GAC3E,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,qBAAqB,OAAO;AAAA,KACpC,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAA4E;AAAA,IACxF,MAAM,MAAM,KAAK,GACd,MAAM,2DAA2D,EACjE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,qBAAqB,GAAG,IAAI;AAAA;AAAA,OAGrC,KAAI,CAAC,OAA2D;AAAA,IACpE,IAAK,MAAM,YAAY,MAAM,SAAS,WAAW,KAAM,MAAM,WAAW,WAAW,GAAG;AAAA,MACpF,OAAO;AAAA,QACL,MAAM,CAAC;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAA4B,CAAC,MAAM,SAAS;AAAA,IAElD,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,eAAe;AAAA,MACjC,KAAK,KAAK,MAAM,QAAQ;AAAA,IAC1B;AAAA,IAEA,IAAI,MAAM,WAAW;AAAA,MACnB,aAAa,KAAK,iBAAiB,MAAM,UAAU,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC/E,KAAK,KAAK,GAAG,MAAM,SAAS;AAAA,IAC9B;AAAA,IAEA,IAAI,MAAM,eAAe;AAAA,MACvB,IAAI,MAAM,cAAc,WAAW,GAAG;AAAA,QACpC,aAAa,KAAK,mBAAmB;AAAA,QACrC,KAAK,KAAK,QAAQ;AAAA,MACpB,EAAO;AAAA,QACL,aAAa,KACX,4CAA4C,MAAM,cAC/C,IAAI,MAAM,GAAG,EACb,KAAK,IAAI,KACd;AAAA,QACA,KAAK,KAAK,UAAU,GAAG,MAAM,aAAa;AAAA;AAAA,IAE9C;AAAA,IAEA,IAAI,MAAM,cAAc;AAAA,MACtB,aAAa,KAAK,kBAAkB;AAAA,MACpC,KAAK,KAAK,QAAQ;AAAA,MAClB,aAAa,KAAK,oBAAoB;AAAA,MACtC,KAAK,KAAK,MAAM,YAAY;AAAA,IAC9B;AAAA,IAEA,IAAI,MAAM,WAAW;AAAA,MACnB,aAAa,KAAK,kBAAkB;AAAA,MACpC,KAAK,KAAK,QAAQ;AAAA,MAClB,aAAa,KAAK,gBAAgB;AAAA,MAClC,KAAK,KAAK,MAAM,SAAS;AAAA,IAC3B;AAAA,IAEA,IAAI,MAAM,SAAS;AAAA,MACjB,aAAa,KAAK,kBAAkB;AAAA,MACpC,KAAK,KAAK,MAAM,QAAQ,IAAI;AAAA,MAC5B,IAAI,MAAM,QAAQ,SAAS,UAAU;AAAA,QACnC,aAAa,KAAK,oBAAoB;AAAA,QACtC,KAAK,KAAK,MAAM,QAAQ,YAAY;AAAA,QACpC,aAAa,KAAK,gBAAgB;AAAA,QAClC,KAAK,KAAK,MAAM,QAAQ,SAAS;AAAA,MACnC;AAAA,IACF;AAAA,IAEA,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,cAAc,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,QAAQ;AAAA,IAC7B;AAAA,IAEA,IAAI,MAAM,cAAc;AAAA,MACtB,aAAa,KAAK,sCAAsC;AAAA,MACxD,KAAK,KAAK,MAAM,aAAa,YAAY,CAAC;AAAA,IAC5C;AAAA,IAEA,IAAI,MAAM,eAAe;AAAA,MACvB,aAAa,KAAK,sCAAsC;AAAA,MACxD,KAAK,KAAK,MAAM,cAAc,YAAY,CAAC;AAAA,IAC7C;AAAA,IAEA,MAAM,QAAQ,SAAS,aAAa,KAAK,OAAO;AAAA,IAChD,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ;AAAA,IAC9C,MAAM,SAAS,MAAM,UAAU;AAAA,IAC/B,MAAM,QAAQ,MAAM;AAAA,IAEpB,MAAM,WAAW,KAAK,GACnB,MAAM,6CAA6C,OAAO,EAC1D,IAAI,GAAG,IAAI;AAAA,IAEd,IAAI,QAAQ;AAAA;AAAA,QAER;AAAA,iDACyC,aAAa;AAAA;AAAA,IAE1D,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,IAE1B,IAAI,UAAU,WAAW;AAAA,MACvB,SAAS;AAAA,MACT,UAAU,KAAK,OAAO,MAAM;AAAA,IAC9B,EAAO,SAAI,SAAS,GAAG;AAAA,MACrB,SAAS;AAAA,MACT,UAAU,KAAK,MAAM;AAAA,IACvB;AAAA,IAEA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,IAClD,MAAM,OAAO,KAAK,IAAI,CAAC,QAAQ,qBAAqB,GAAG,CAAC;AAAA,IAExD,OAAO;AAAA,MACL;AAAA,MACA,SAAS,SAAS,KAAK,SAAS,SAAS;AAAA,MACzC,OAAO,SAAS;AAAA,IAClB;AAAA;AAAA,EAGF,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,iBAAiB,CAAC,WAAmB,IAAY,WAAgC;AAAA,IACvF,MAAM,WAAW,KAAK,GACnB,MAAM,2DAA2D,EACjE,IAAI,WAAW,EAAE;AAAA,IAEpB,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,eACR,4BAA4B,8BAA8B,aAC5D;AAAA,IACF;AAAA,IAEA,IAAI,SAAS,WAAW,WAAW;AAAA,MACjC,MAAM,IAAI,eACR,4BAA4B,cAAc,0BAA0B,SAAS,UAC/E;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAEX;AAEA,SAAS,kBAAkB,CAAC,OAA0B;AAAA,EACpD,OAAO,KAAK,UAAU,KAAK;AAAA;AAG7B,SAAS,kBAAkB,CAAC,KAAgD;AAAA,EAC1E,OAAO,IAAI,UAAU,OAAO,YAAY,sBAAsB,IAAI,KAAK;AAAA;AAGzE,SAAS,iBAAkF,CACzF,OACA,eAC0B;AAAA,EAC1B,OAAO,sBAAsB,OAAO,aAAa;AAAA;AAGnD,SAAS,0BAA0B,CAAC,KAAwD;AAAA,EAC1F,IAAI,CAAC,IAAI,kBAAkB;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,IAAI,yBACpB,IAAI,KAAK,IAAI,sBAAsB,IACnC,IAAI,KAAK,IAAI,SAAS;AAAA,EAE1B,IAAI,IAAI,qBAAqB,aAAa;AAAA,IACxC,OAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA,QACE,IAAI,qBAAqB,OAAO,OAAQ,KAAK,MAAM,IAAI,gBAAgB;AAAA,IAC3E;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,OAAO,kBAAkB,IAAI,iBAAiB,WAAW;AAAA,EAC3D;AAAA;AAGF,SAAS,wBAAwB,CAAC,KAAsD;AAAA,EACtF,IAAI,CAAC,IAAI,gBAAgB;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,IAAI,uBACpB,IAAI,KAAK,IAAI,oBAAoB,IACjC,IAAI,KAAK,IAAI,SAAS;AAAA,EAE1B,IAAI,IAAI,mBAAmB,aAAa;AAAA,IACtC,OAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,OAAO,kBAAkB,IAAI,eAAe,SAAS;AAAA,EACvD;AAAA;AAGF,SAAS,iBAAiB,CACxB,OACA,aAC0B;AAAA,EAC1B,IAAI,MAAM,WAAW,aAAa;AAAA,IAChC,OAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ,MAAM;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,OAAO,MAAM;AAAA,EACf;AAAA;AAGF,SAAS,eAAe,CACtB,OACA,aACwB;AAAA,EACxB,IAAI,MAAM,WAAW,aAAa;AAAA,IAChC,OAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,OAAO,MAAM;AAAA,EACf;AAAA;AAGF,SAAS,oBAAoB,CAAC,KAAmC;AAAA,EAC/D,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,UAAU,IAAI;AAAA,IACd,SAAS,mBAAmB,GAAG;AAAA,IAC/B,QAAQ,IAAI;AAAA,IACZ,OAAO,IAAI,SAAS;AAAA,IACpB,UAAU,IAAI,KAAK,IAAI,SAAS;AAAA,IAChC,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,IACvD,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,QAAQ,KAAK,MAAM,IAAI,MAAM;AAAA,IAC7B,gBAAgB,IAAI;AAAA,IACpB,WAAW,2BAA2B,GAAG;AAAA,IACzC,SAAS,yBAAyB,GAAG;AAAA,IACrC,OAAO,mBAAmB,GAAG;AAAA,EAC/B;AAAA;AAGF,SAAS,kBAAkB,CAAC,KAAiC;AAAA,EAC3D,IAAI,IAAI,iBAAiB,QAAQ;AAAA,IAC/B,OAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AAAA,EAEA,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,YAAY;AAAA,IAC1C,MAAM,IAAI,eAAe,4BAA4B,IAAI,oCAAoC;AAAA,EAC/F;AAAA,EAEA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,cAAc,IAAI;AAAA,IAClB,WAAW,IAAI;AAAA,EACjB;AAAA;AAGF,SAAS,uBAAuB,CAAC,OAAyB;AAAA,EACxD,OAAO,iBAAiB,SAAS,MAAM,QAAQ,SAAS,0BAA0B;AAAA;;;AGrsBpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;;;ACNA;AACA;AACA;AAAA;AAAA;AAAA;AA4FO,SAAS,iBAAiB,CAAC,KAAwC;AAAA,EACxE,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,gBAAgB,EAAE,MAAM,IAAI,sBAAsB,IAAI,IAAI,mBAAmB;AAAA,IAC7E,OAAO,IAAI,SAAS;AAAA,OAChB,IAAI,iBAAiB,OACrB,CAAC,IACD;AAAA,MACE,cAAc,KAAK,MAAM,IAAI,aAAa;AAAA,IAC5C;AAAA,OACA,IAAI,kBAAkB,OACtB,CAAC,IACD,EAAE,eAAe,iCAAiC,KAAK,MAAM,IAAI,cAAc,CAAC,EAAE;AAAA,IACtF,QAAQ,IAAI;AAAA,IACZ,aAAa,IAAI;AAAA,IACjB,eAAe,IAAI,kBAAkB,IAAI,KAAK,IAAI,eAAe,IAAI;AAAA,IACrE,cAAc,IAAI;AAAA,IAClB,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGK,SAAS,cAAc,CAAC,KAAkC;AAAA,EAC/D,MAAM,OAAO;AAAA,IACX,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI,YAAY;AAAA,IACzB,cAAc,2BAA2B,IAAI,aAAa;AAAA,IAC1D,OAAO,IAAI,UAAU,OAAO,YAAY,iBAAiB,IAAI,OAAO,uBAAuB;AAAA,IAC3F,aACE,IAAI,gBAAgB,OAAO,YAAa,KAAK,MAAM,IAAI,WAAW;AAAA,IACpE,SAAS,IAAI;AAAA,IACb,WACE,IAAI,mBAAmB,IAAI,mCACvB;AAAA,MACE,OAAO,IAAI;AAAA,MACX,qBAAqB,IAAI,KAAK,IAAI,gCAAgC;AAAA,IACpE,IACA;AAAA,IACN,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,IACvD,aAAa,IAAI,eAAe,IAAI,KAAK,IAAI,YAAY,IAAI;AAAA,EAC/D;AAAA,EACA,IAAI,IAAI,SAAS,gBAAgB;AAAA,IAC/B,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,oBAAoB;AAAA,MAC7C,MAAM,IAAI,MACR,0CAA0C,IAAI,mCAChD;AAAA,IACF;AAAA,IACA,OAAO;AAAA,SACF;AAAA,MACH,MAAM;AAAA,MACN,UAAU,IAAI;AAAA,MACd,kBAAkB,IAAI;AAAA,SAClB,IAAI,SAAS,OAAO,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,IAAI,IAAI,EAA8B;AAAA,IACxF;AAAA,EACF;AAAA,EACA,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,aAAa,IAAI,SAAS,MAAM;AAAA,IAC7D,MAAM,IAAI,MAAM,8BAA8B,IAAI,mCAAmC;AAAA,EACvF;AAAA,EACA,OAAO;AAAA,OACF;AAAA,IACH,MAAM;AAAA,IACN,aAAa,IAAI;AAAA,IACjB,UAAU,IAAI;AAAA,IACd,MAAM,KAAK,MAAM,IAAI,IAAI;AAAA,OACrB,IAAI,WAAW,OAAO,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,IAAI,MAAM,EAAuB;AAAA,EACvF;AAAA;AAGK,SAAS,kBAAkB,CAAC,KAA0C;AAAA,EAC3E,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,UAAU,IAAI;AAAA,IACd,OAAO,IAAI;AAAA,IACX,MAAM,IAAI;AAAA,IACV,iBAAiB,qBAAqB,IAAI,uBAAuB,IAAI,mBAAmB;AAAA,IACxF,KAAK,IAAI;AAAA,IACT,OAAO,KAAK,MAAM,IAAI,KAAK;AAAA,IAG3B,UAAU,IAAI,aAAa,OAAO,YAAa,KAAK,MAAM,IAAI,QAAQ,KAAK;AAAA,IAC3E,gBAAgB,IAAI;AAAA,IACpB,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,aAAa,IAAI,eAAe,IAAI,KAAK,IAAI,YAAY,IAAI;AAAA,EAC/D;AAAA;AAGK,SAAS,4BAA4B,CAC1C,KAC8B;AAAA,EAC9B,IAAI,IAAI,2BAA2B,GAAG;AAAA,IACpC,MAAM,IAAI,MACR,6EAA6E,IAAI,0BACnF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,UAAU,IAAI;AAAA,IACd,gBAAgB,IAAI;AAAA,IACpB,sBAAsB,IAAI,0BAA0B;AAAA,IACpD,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI;AAAA,IACb,sBAAsB;AAAA,IACtB,sBAAsB,IAAI;AAAA,IAC1B,iBAAiB,IAAI;AAAA,IACrB,4BAA4B,IAAI;AAAA,IAChC,2BAA2B,IAAI;AAAA,IAC/B,gBAAgB,IAAI;AAAA,IACpB,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGF,SAAS,oBAAoB,CAC3B,MACA,IACuB;AAAA,EACvB,OAAO,QAAQ,KAAK,EAAE,MAAM,GAAG,IAAI;AAAA;AAK9B,SAAS,cAAoB,CAAC,OAQqD;AAAA,EACxF,MAAM,QAAQ,SAAS,MAAM,aAAa,KAAK,OAAO;AAAA,EACtD,MAAM,SAAS,MAAM,UAAU;AAAA,EAE/B,MAAM,WAAW,MAAM,GACpB,MAAM,iCAAiC,MAAM,SAAS,OAAO,EAC7D,IAAI,GAAG,MAAM,IAAI;AAAA,EAEpB,IAAI,QAAQ,iBAAiB,MAAM,SAAS,kBAAkB,MAAM;AAAA,EACpE,MAAM,YAAY,CAAC,GAAG,MAAM,IAAI;AAAA,EAEhC,IAAI,MAAM,UAAU,WAAW;AAAA,IAC7B,SAAS;AAAA,IACT,UAAU,KAAK,MAAM,OAAO,MAAM;AAAA,EACpC,EAAO,SAAI,SAAS,GAAG;AAAA,IACrB,SAAS;AAAA,IACT,UAAU,KAAK,MAAM;AAAA,EACvB;AAAA,EAEA,MAAM,OAAO,MAAM,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,EACnD,MAAM,QAAQ,SAAS;AAAA,EACvB,OAAO,EAAE,MAAM,OAAO,SAAS,SAAS,KAAK,SAAS,MAAM;AAAA;;;ADnO9D,IAAM,sCAAsC;AAAA;AAErC,MAAM,kCAAyE;AAAA,EACvD;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAAiF;AAAA,IAC5F,wCAAwC,OAAO,YAAY;AAAA,IAE3D,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,SAAS,KAAK,GACjB,MAAM,0DAA0D,EAChE,IAAI,MAAM,WAAW,MAAM,cAAc;AAAA,MAC5C,MAAM,YAAY,KAAK,GACpB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,QAAQ;AAAA,MACtC,sCAAsC;AAAA,QACpC,QAAQ;AAAA,QACR,KAAK,SAAS,eAAe,MAAM,IAAI;AAAA,QACvC,QAAQ,YAAY,kBAAkB,SAAS,IAAI;AAAA,QACnD,QAAQ;AAAA,MACV,CAAC;AAAA,MAED,MAAM,SAAS,KAAK,WAAW,MAAM,WAAW,MAAM,QAAQ;AAAA,MAC9D,MAAM,UAAU,KAAK,GAClB,MACC,gGACF,EACC,IAAI,MAAM,WAAW,MAAM,QAAQ;AAAA,MAEtC,MAAM,iBAAiB,KAAK,GACzB,MACC,wFACF,EACC,IAAI,MAAM,WAAW,MAAM,cAAc;AAAA,MAC5C,IAAI,gBAAgB;AAAA,QAClB,MAAM,SAAS,6BAA6B,cAAc;AAAA,QAC1D,IAAI,yCAAyC,QAAQ,KAAK,GAAG;AAAA,UAC3D,wCAAwC;AAAA,YACtC,QAAQ;AAAA,YACR,UAAU;AAAA,YACV;AAAA,YACA,SAAS,QAAQ;AAAA,YACjB,QAAQ;AAAA,UACV,CAAC;AAAA,UACD,OAAO;AAAA,QACT;AAAA,QACA,MAAM,IAAI,kBACR,iBACA,2BAA2B,MAAM,iEACnC;AAAA,MACF;AAAA,MAEA,MAAM,cAAc,KAAK,GACtB,MAAM,yEAAyE,EAC/E,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAChC,IAAI,aAAa;AAAA,QACf,MAAM,IAAI,kBACR,gBACA,0CAA0C,MAAM,mCAAmC,MAAM,aAC3F;AAAA,MACF;AAAA,MAEA,MAAM,mBAAmB,KAAK,GAC3B,MACC,0GACF,EACC,IAAI,MAAM,WAAW,MAAM,UAAU,MAAM,oBAAoB;AAAA,MAClE,oCAAoC;AAAA,QAClC,QAAQ;AAAA,QACR;AAAA,QACA,SAAS,QAAQ;AAAA,QACjB,eAAe,mBAAmB,mBAAmB,gBAAgB,IAAI;AAAA,QACzE,QAAQ;AAAA,MACV,CAAC;AAAA,MAED,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,MACzC,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAkBF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,UACN,MAAM,gBACN,MAAM,8BACN,MAAM,QACN,MAAM,SACN,MAAM,sBACN,MAAM,sBACN,MAAM,iBACN,MAAM,4BACN,MAAM,2BACN,MAAM,gBACN,UAAU,YAAY,CACxB;AAAA,MAEF,OAAO,KAAK,YAAY,MAAM,WAAW,MAAM,EAAE;AAAA,KAClD,EAAE;AAAA;AAAA,OAGC,UAAS,CAAC,OAGiC;AAAA,IAC/C,OAAO,KAAK,WAAW,MAAM,WAAW,MAAM,QAAQ;AAAA;AAAA,OAGlD,YAAW,CAAC,OAGmC;AAAA,IACnD,MAAM,SAAS,CAAC,GAAG,IAAI,IAAI,MAAM,MAAM,CAAC;AAAA,IACxC,IAAI,OAAO,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAEjC,MAAM,OAAoC,CAAC;AAAA,IAC3C,SAAS,SAAS,EAAG,SAAS,OAAO,QAAQ,UAAU,qCAAqC;AAAA,MAC1F,MAAM,QAAQ,OAAO,MAAM,QAAQ,SAAS,mCAAmC;AAAA,MAC/E,MAAM,eAAe,MAAM,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,MACnD,KAAK,KACH,GAAI,KAAK,GACN,MACC,0FAA0F,eAC5F,EACC,IAAI,MAAM,WAAW,GAAG,KAAK,CAClC;AAAA,IACF;AAAA,IACA,MAAM,UAAU,IAAI,IAClB,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,mBAAmB,6BAA6B,GAAG,CAAC,CAAU,CACvF;AAAA,IACA,OAAO,OAAO,QAAQ,CAAC,UAAU;AAAA,MAC/B,MAAM,aAAa,QAAQ,IAAI,KAAK;AAAA,MACpC,OAAO,aAAa,CAAC,UAAU,IAAI,CAAC;AAAA,KACrC;AAAA;AAAA,EAGK,UAAU,CAAC,WAAmB,UAAuD;AAAA,IAC3F,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IAAI,WAAW,QAAQ;AAAA,IAC1B,OAAO,MAAM,6BAA6B,GAAG,IAAI;AAAA;AAAA,EAG3C,WAAW,CAAC,WAAmB,IAA0C;AAAA,IAC/E,MAAM,MAAM,KAAK,GACd,MAAM,yEAAyE,EAC/E,IAAI,WAAW,EAAE;AAAA,IACpB,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,kBACR,iBACA,yDAAyD,oBAAoB,aAC/E;AAAA,IACF;AAAA,IACA,OAAO,6BAA6B,GAAG;AAAA;AAE3C;;;AE3MA;AACA;AAAA,uBAGE;AAAA;;;ACLK,SAAS,wBAAuB,CAAC,OAAyB;AAAA,EAC/D,OAAO,iBAAiB,SAAS,MAAM,QAAQ,SAAS,0BAA0B;AAAA;AAG7E,SAAS,2BAA2B,CAAC,OAAyB;AAAA,EACnE,OAAO,iBAAiB,SAAS,MAAM,QAAQ,SAAS,+BAA+B;AAAA;;;ADUlF,MAAM,wBAAqD;AAAA,EACnC;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAA6D;AAAA,IACxE,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,IAEzC,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,SAAS,KAAK,GACjB,MAAM,wEAAwE,EAC9E,IAAI,MAAM,WAAW,MAAM,QAAQ;AAAA,MAEtC,IAAI,CAAC,QAAQ;AAAA,QACX,MAAM,IAAI,mBACR,oBACA,8BAA8B,MAAM,oCAAoC,MAAM,aAChF;AAAA,MACF;AAAA,MAEA,IAAI,MAAM,UAAU,MAAM;AAAA,QACxB,MAAM,MAAM,KAAK,GACd,MAAM,qEAAqE,EAC3E,IAAI,MAAM,WAAW,MAAM,KAAK;AAAA,QAEnC,IAAI,CAAC,KAAK;AAAA,UACR,MAAM,IAAI,mBACR,iBACA,2BAA2B,MAAM,iCAAiC,MAAM,aAC1E;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,SAAS,KAAK,GACjB,MACC,qGACF,EACC,IAAI,MAAM,WAAW,MAAM,QAAQ;AAAA,MAEtC,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAiBF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,UACN,MAAM,OACN,MAAM,MACN,MAAM,iBAAiB,QAAQ,MAC/B,MAAM,iBAAiB,MAAM,MAC7B,OAAO,MACP,KAAK,UAAU,MAAM,KAAK,GAC1B,MAAM,aAAa,YAAY,OAAO,KAAK,UAAU,MAAM,QAAQ,GACnE,+BACA,UAAU,YAAY,GACtB,MAAM,cAAc,MAAM,YAAY,YAAY,IAAI,IACxD;AAAA,QACF,OAAO,OAAO;AAAA,QACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,UAClC,MAAM,IAAI,mBACR,gBACA,+BAA+B,MAAM,mCAAmC,MAAM,aAChF;AAAA,QACF;AAAA,QAEA,MAAM;AAAA;AAAA,MAGR,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IAAI,UAAU,YAAY,GAAG,UAAU,YAAY,GAAG,MAAM,WAAW,MAAM,QAAQ;AAAA,MAExF,OAAO,KAAK,eAAe,MAAM,WAAW,MAAM,EAAE;AAAA,KACrD,EAAE;AAAA;AAAA,OAGC,cAAa,CAAC,OAAuD;AAAA,IACzE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,SAAS,KAAK,GACjB,MAAM,wEAAwE,EAC9E,IAAI,MAAM,WAAW,MAAM,QAAQ;AAAA,MAEtC,IAAI,CAAC,QAAQ;AAAA,QACX,MAAM,IAAI,mBACR,oBACA,8BAA8B,MAAM,oCAAoC,MAAM,aAChF;AAAA,MACF;AAAA,MAEA,MAAM,UAAU,KAAK,GAClB,MAAM,kFAAkF,EACxF,IAAI,MAAM,WAAW,MAAM,UAAU,MAAM,KAAK;AAAA,MACnD,IAAI,QAAQ,YAAY,GAAG;AAAA,QACzB,OAAO;AAAA,MACT;AAAA,MAEA,MAAM,YAAY,IAAI,KAAK,EAAE,YAAY;AAAA,MACzC,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAeF,EACC,IACC,MAAM,WACN,MAAM,UACN,MAAM,WACN,MAAM,UACN,WACA,MAAM,WACN,MAAM,QACR;AAAA,MAEF,OAAO,QAAQ;AAAA,KAChB,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAA+E;AAAA,IAC3F,MAAM,MAAM,KAAK,GACd,MAAM,8DAA8D,EACpE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,mBAAmB,GAAG,IAAI;AAAA;AAAA,OAGnC,KAAI,CAAC,OAAiE;AAAA,IAC1E,IAAI,MAAM,UAAU,aAAa,MAAM,MAAM,WAAW,GAAG;AAAA,MACzD,OAAO,EAAE,UAAU,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IAClD;AAAA,IAEA,MAAM,eAAe,CAAC,kBAAkB,eAAe;AAAA,IACvD,MAAM,OAAsB,CAAC,MAAM,WAAW,MAAM,QAAQ;AAAA,IAE5D,IAAI,MAAM,aAAa,WAAW;AAAA,MAChC,aAAa,KAAK,SAAS;AAAA,MAC3B,KAAK,KAAK,MAAM,QAAQ;AAAA,IAC1B;AAAA,IAEA,IAAI,MAAM,OAAO;AAAA,MACf,aAAa,KAAK,YAAY,MAAM,MAAM,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MACtE,KAAK,KAAK,GAAG,MAAM,KAAK;AAAA,IAC1B;AAAA,IAEA,MAAM,MAAM,MAAM,UAAU,SAAS,SAAS;AAAA,IAC9C,QAAQ,MAAM,OAAO,YAAY,eAAgC;AAAA,MAC/D,IAAI,KAAK;AAAA,MACT,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,SAAS,OAAO;AAAA,MAChB,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,OAAO,EAAE,UAAU,KAAK,IAAI,kBAAkB,GAAG,SAAS,MAAM;AAAA;AAAA,EAG1D,cAAc,CAAC,WAAmB,IAAgC;AAAA,IACxE,MAAM,MAAM,KAAK,GACd,MAAM,8DAA8D,EACpE,IAAI,WAAW,EAAE;AAAA,IAEpB,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,mBACR,iBACA,8CAA8C,oBAAoB,aACpE;AAAA,IACF;AAAA,IAEA,OAAO,mBAAmB,GAAG;AAAA;AAEjC;;;AE3NA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA,6BACE;AAAA,uBAGA;AAAA;;;ACCK,SAAS,gBAAgB,CAAC,OAA4D;AAAA,EAC3F,OAAO,MAAM,aAAa,aAAa,MAAM,SAAS,WAAW;AAAA;AAQ5D,SAAS,oBAAoB,CAClC,cACA,MACA,OAKA,sBAA2C,cACrC;AAAA,EACN,IAAI,MAAM,UAAU;AAAA,IAClB,IAAI,MAAM,SAAS,WAAW,GAAG;AAAA,MAC/B,aAAa,KAAK,OAAO;AAAA,IAC3B,EAAO;AAAA,MACL,aAAa,KAAK,cAAc,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,QAAQ;AAAA;AAAA,EAE/B;AAAA,EAEA,IAAI,MAAM,cAAc;AAAA,IACtB,aAAa,KAAK,GAAG,0BAA0B;AAAA,IAC/C,KAAK,KAAK,MAAM,aAAa,YAAY,CAAC;AAAA,EAC5C;AAAA,EAEA,IAAI,MAAM,eAAe;AAAA,IACvB,aAAa,KAAK,GAAG,0BAA0B;AAAA,IAC/C,KAAK,KAAK,MAAM,cAAc,YAAY,CAAC;AAAA,EAC7C;AAAA;AAGK,SAAS,YAAkB,CAAC,OAQuD;AAAA,EACxF,MAAM,QAAQ,SAAS,MAAM,aAAa,KAAK,OAAO;AAAA,EACtD,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ;AAAA,EAC9C,MAAM,SAAS,MAAM,UAAU;AAAA,EAE/B,MAAM,WAAW,MAAM,GACpB,MAAM,iCAAiC,MAAM,aAAa,OAAO,EACjE,IAAI,GAAG,MAAM,IAAI;AAAA,EAEpB,MAAM,cACJ,MAAM,cAAc,eAChB,qCACA,MAAM,cAAc,eAAe,MAAM,cAAc,kBACrD,oCACA,MAAM,cAAc,6BAClB,eACA;AAAA,EACV,MAAM,WAAW,MAAM,cAAc,6BAA6B,gBAAgB;AAAA,EAClF,IAAI,QAAQ;AAAA,oBACM,MAAM;AAAA,MACpB;AAAA,eACS,eAAe,UAAU,YAAY;AAAA;AAAA,EAElD,MAAM,YAAY,CAAC,GAAG,MAAM,IAAI;AAAA,EAEhC,IAAI,MAAM,UAAU,WAAW;AAAA,IAC7B,SAAS;AAAA,IACT,UAAU,KAAK,MAAM,OAAO,MAAM;AAAA,EACpC,EAAO,SAAI,SAAS,GAAG;AAAA,IACrB,SAAS;AAAA,IACT,UAAU,KAAK,MAAM;AAAA,EACvB;AAAA,EAEA,MAAM,OAAO,MAAM,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,EACnD,MAAM,QAAQ,SAAS;AAAA,EAEvB,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,SAAS,SAAS,KAAK,SAAS;AAAA,EAClC;AAAA;;;ADjEF,IAAM,2BAA2B;AAAA;AAE1B,MAAM,oBAA6C;AAAA,EAErC;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,IACA,YACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,OAGb,OAAM,CAAC,OAAiE;AAAA,IAC5E,+BAA+B,MAAM,MAAM,YAAY;AAAA,IACvD,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,IACzC,MAAM,wBAAwB;AAAA,MAC5B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,IACf,CAAC;AAAA,IAED,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,SAAS,KAAK,GACjB,MAAM,yEAAyE,EAC/E,IAAI,MAAM,WAAW,MAAM,QAAQ;AAAA,MAEtC,IAAI,CAAC,QAAQ;AAAA,QACX,MAAM,IAAI,mBACR,oBACA,8BAA8B,MAAM,oCAAoC,MAAM,aAChF;AAAA,MACF;AAAA,MACA,IAAI,OAAO,kBAAkB,MAAM;AAAA,QACjC,MAAM,IAAI,mBACR,qBACA,8BAA8B,MAAM,wCAAwC,OAAO,iBACrF;AAAA,MACF;AAAA,MAEA,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAcF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,aACN,MAAM,UACN,MAAM,kBACN,KAAK,UAAU,MAAM,IAAI,GACzB,UAAU,YAAY,CACxB;AAAA,QACF,OAAO,OAAO;AAAA,QACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,UAClC,MAAM,IAAI,mBACR,gBACA,2BAA2B,MAAM,mCAAmC,MAAM,aAC5E;AAAA,QACF;AAAA,QAEA,MAAM;AAAA;AAAA,MAGR,KAAK,GACF,MACC,4FACF,EACC,IAAI,MAAM,IAAI,UAAU,YAAY,GAAG,MAAM,WAAW,MAAM,QAAQ;AAAA,MAEzE,MAAM,UAAU,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,MACzD,IAAI,QAAQ,SAAS,gBAAgB;AAAA,QACnC,MAAM,IAAI,MAAM,kCAAkC,MAAM,kCAAkC;AAAA,MAC5F;AAAA,MACA,OAAO;AAAA,KACR,EAAE;AAAA;AAAA,OAGC,eAAc,CAAC,OAA2D;AAAA,IAC9E,6BAA6B,OAAO,YAAY;AAAA,IAChD,MAAM,YAAY,MAAM,wBAAwB;AAAA,MAC9C,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,IACf,CAAC;AAAA,IAED,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,YAAY,KAAK,GACpB,MAAM,0DAA0D,EAChE,IAAI,MAAM,WAAW,MAAM,WAAW;AAAA,MACzC,IAAI,CAAC,aAAa,UAAU,SAAS,gBAAgB;AAAA,QACnD,MAAM,IAAI,mBACR,iBACA,kCAAkC,MAAM,6BAC1C;AAAA,MACF;AAAA,MAEA,MAAM,cAAc,KAAK,GACtB,MAAM,0DAA0D,EAChE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAChC,IAAI,aAAa;AAAA,QACf,MAAM,WAAW,eAAe,WAAW;AAAA,QAC3C,IAAI,8BAA8B,UAAU,KAAK;AAAA,UAAG,OAAO;AAAA,QAC3D,MAAM,IAAI,mBACR,gBACA,8BAA8B,MAAM,qDACtC;AAAA,MACF;AAAA,MACA,IAAI,UAAU,WAAW,WAAW;AAAA,QAClC,MAAM,IAAI,mBACR,iBACA,kCAAkC,UAAU,+BAA+B,UAAU,WACvF;AAAA,MACF;AAAA,MACA,IACE,UAAU,OAAO,SAAS,eAC1B,UAAU,OAAO,gBAAgB,UAAU,cAC3C;AAAA,QACA,MAAM,IAAI,mBACR,iBACA,oCAAoC,UAAU,2CAA2C,UAAU,gBACrG;AAAA,MACF;AAAA,MACA,IAAI,UAAU,oBAAoB,MAAM,sBAAsB;AAAA,QAC5D,MAAM,IAAI,mBACR,kBACA,kCAAkC,UAAU,2CAC9C;AAAA,MACF;AAAA,MAEA,MAAM,QAAQ,KAAK,GAChB,MACC;AAAA,0FAEF,EACC,IAAI,MAAM,WAAW,MAAM,WAAW;AAAA,MACzC,IAAI,MAAM,SAAS,MAAM,mBAAmB;AAAA,QAC1C,MAAM,IAAI,mBACR,sBACA,2BAA2B,UAAU,mBAAmB,MAAM,yBAChE;AAAA,MACF;AAAA,MAEA,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,WAMF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,aACN,MAAM,aACN,MAAM,UACN,KAAK,UAAU,MAAM,IAAI,IACxB,MAAM,aAAa,IAAI,MAAQ,YAAY,CAC9C;AAAA,QACF,OAAO,OAAO;AAAA,QACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,UAClC,MAAM,IAAI,mBACR,gBACA,8BAA8B,MAAM,+CACtC;AAAA,QACF;AAAA,QACA,MAAM;AAAA;AAAA,MAGR,MAAM,UAAU,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,MACzD,IAAI,QAAQ,SAAS,YAAY;AAAA,QAC/B,MAAM,IAAI,MAAM,iCAAiC,MAAM,kCAAkC;AAAA,MAC3F;AAAA,MACA,OAAO;AAAA,KACR,EAAE;AAAA;AAAA,OAGC,MAAK,CAAC,OAAoD;AAAA,IAC9D,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,IACzC,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,KAAK,cAAc,MAAM,WAAW,MAAM,IAAI,QAAQ;AAAA,MACtD,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAWF,EACC,IACC,MAAM,WAAW,MACjB,MAAM,UAAU,OAChB,MAAM,UAAU,oBAAoB,YAAY,GAChD,UAAU,YAAY,GACtB,MAAM,WACN,MAAM,EACR;AAAA,MAEF,OAAO,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,KACjD,EAAE;AAAA;AAAA,OAGC,aAAY,CAAC,OAA2D;AAAA,IAC5E,MAAM,cAAc,MAAM,eAAe,IAAI;AAAA,IAC7C,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,cAAc,MAAM,WAAW,MAAM,IAAI,QAAQ;AAAA,MAClE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IACC,MAAM,QACN,MAAM,UAAU,YACZ,OACA,qBAAqB,MAAM,OAAO,wBAAuB,GAC7D,YAAY,YAAY,GACxB,MAAM,WACN,MAAM,EACR;AAAA,MACF,KAAK,cAAc,KAAK,WAAW;AAAA,MACnC,OAAO,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,KACjD,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,OAAsD;AAAA,IAClE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,KAAK,eAAe,MAAM,WAAW,MAAM,EAAE;AAAA,MAC7C,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQF,EACC,IACC,MAAM,UAAU,OAChB,MAAM,UAAU,oBAAoB,YAAY,GAChD,MAAM,WACN,MAAM,EACR;AAAA,MAEF,OAAO,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,KACjD,EAAE;AAAA;AAAA,OAGC,0BAAyB,CAC7B,OACyB;AAAA,IACzB,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,eAAe,MAAM,WAAW,MAAM,EAAE;AAAA,MACzD,IAAI,IAAI,oBAAoB,MAAM,gBAAgB;AAAA,QAChD,MAAM,IAAI,mBACR,kBACA,mEAAmE,MAAM,MAC3E;AAAA,MACF;AAAA,MACA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IAAI,MAAM,oBAAoB,YAAY,GAAG,MAAM,WAAW,MAAM,EAAE;AAAA,MACzE,OAAO,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,KACjD,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAAqD;AAAA,IAChE,MAAM,cAAc,MAAM,eAAe,IAAI;AAAA,IAC7C,MAAM,aACJ,MAAM,WAAW,eAAe,MAAM,UAAU,YAC5C,OACA,qBAAqB,MAAM,OAAO,wBAAuB;AAAA,IAE/D,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,eAAe,MAAM,WAAW,MAAM,EAAE;AAAA,MAEzD,IAAI,IAAI,oBAAoB,MAAM,gBAAgB;AAAA,QAChD,MAAM,IAAI,mBACR,kBACA,mEAAmE,MAAM,MAC3E;AAAA,MACF;AAAA,MACA,IAAI,MAAM,WAAW,eAAe,IAAI,SAAS,YAAY;AAAA,QAC3D,wBAAwB,MAAM,QAAQ,IAAI,IAAI,YAAY;AAAA,MAC5D;AAAA,MACA,IACE,MAAM,WAAW,eACjB,IAAI,SAAS,kBACb,MAAM,WAAW,WACjB;AAAA,QACA,MAAM,IAAI,mBACR,iBACA,0CAA0C,IAAI,uCAChD;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAcF,EACC,IACC,MAAM,QACN,MAAM,WAAW,MACjB,MAAM,gBAAgB,MACtB,YACA,MAAM,gBAAgB,YAAY,OAAO,KAAK,UAAU,MAAM,WAAW,GACzE,MAAM,WAAW,eAAe,MAAM,WAAW,YAC7C,KAAK,UAAU,MAAM,MAAM,IAC3B,MACJ,YAAY,YAAY,GACxB,MAAM,WACN,MAAM,EACR;AAAA,MAEF,KAAK,cAAc,KAAK,WAAW;AAAA,MAEnC,OAAO,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,KACjD,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAA2E;AAAA,IACvF,MAAM,MAAM,KAAK,GACd,MAAM,0DAA0D,EAChE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,eAAe,GAAG,IAAI;AAAA;AAAA,OAG/B,SAAQ,CAAC,QAGwB;AAAA,IACrC,MAAM,MAAM,CAAC,GAAG,IAAI,IAAI,OAAO,GAAG,CAAC;AAAA,IACnC,IAAI,IAAI,WAAW,GAAG;AAAA,MACpB,OAAO,CAAC;AAAA,IACV;AAAA,IAEA,MAAM,OAAsB,CAAC;AAAA,IAC7B,SAAS,SAAS,EAAG,SAAS,IAAI,QAAQ,UAAU,0BAA0B;AAAA,MAC5E,MAAM,QAAQ,IAAI,MAAM,QAAQ,SAAS,wBAAwB;AAAA,MACjE,MAAM,eAAe,MAAM,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,MACnD,KAAK,KACH,GAAI,KAAK,GACN,MAAM,4DAA4D,eAAe,EACjF,IAAI,OAAO,WAAW,GAAG,KAAK,CACnC;AAAA,IACF;AAAA,IACA,MAAM,OAAO,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC;AAAA,IACrE,OAAO,IAAI,QAAQ,CAAC,OAAO;AAAA,MACzB,MAAM,MAAM,KAAK,IAAI,EAAE;AAAA,MACvB,OAAO,MAAM,CAAC,GAAG,IAAI,CAAC;AAAA,KACvB;AAAA;AAAA,OAGG,KAAI,CAAC,OAAyD;AAAA,IAClE,IAAI,iBAAiB,KAAK,KAAK,MAAM,OAAO,WAAW,GAAG;AAAA,MACxD,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IAC9C;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,OAAO;AAAA,MACf,aAAa,KAAK,YAAY,MAAM,MAAM,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MACtE,KAAK,KAAK,GAAG,MAAM,KAAK;AAAA,IAC1B;AAAA,IAEA,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,eAAe;AAAA,MACjC,KAAK,KAAK,MAAM,QAAQ;AAAA,IAC1B;AAAA,IAEA,IAAI,MAAM,aAAa;AAAA,MACrB,aAAa,KAAK,mBAAmB;AAAA,MACrC,KAAK,KAAK,MAAM,WAAW;AAAA,IAC7B;AAAA,IAEA,qBAAqB,cAAc,MAAM,OAAO,kCAAkC;AAAA,IAElF,QAAQ,MAAM,OAAO,YAAY,aAA0B;AAAA,MACzD,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,OAAO,EAAE,MAAM,KAAK,IAAI,cAAc,GAAG,SAAS,MAAM;AAAA;AAAA,EAGlD,cAAc,CAAC,WAAmB,IAAyB;AAAA,IACjE,OAAO,KAAK,cAAc,WAAW,IAAI,SAAS;AAAA;AAAA,EAG5C,aAAa,CACnB,WACA,IACA,QACa;AAAA,IACb,MAAM,MAAM,KAAK,GACd,MAAM,0DAA0D,EAChE,IAAI,WAAW,EAAE;AAAA,IAEpB,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,mBACR,iBACA,2BAA2B,8BAA8B,aAC3D;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,WAAW,QAAQ;AAAA,MACzB,MAAM,IAAI,mBACR,iBACA,2BAA2B,cAAc,mBAAmB,IAAI,WAClE;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,aAAa,CAAC,KAAkB,aAAyB;AAAA,IAC/D,IAAI,IAAI,SAAS;AAAA,MAAgB;AAAA,IACjC,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,OAKF,EACC,IAAI,YAAY,YAAY,GAAG,IAAI,YAAY,IAAI,WAAW,IAAI,EAAE;AAAA;AAAA,EAGjE,UAAU,CAAC,WAAmB,IAA4B;AAAA,IAChE,MAAM,MAAM,KAAK,GACd,MAAM,0DAA0D,EAChE,IAAI,WAAW,EAAE;AAAA,IAEpB,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,mBACR,iBACA,2BAA2B,8BAA8B,aAC3D;AAAA,IACF;AAAA,IAEA,OAAO,eAAe,GAAG;AAAA;AAE7B;;;AEhhBA;AAAA,sCACE;AAAA;AAAA;AAGF;AAAA,uBACE;AAAA;AAmBK,MAAM,uBAAmD;AAAA,EACjC;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,kBAAiB,CACrB,OACkC;AAAA,IAClC,OAAO,KAAK,GACT,YAAY,MAAM;AAAA,MACjB,MAAM,MACJ,MAAM,WAAW,aACb,OACC,KAAK,GACH,MAAM,0DAA0D,EAChE,IAAI,MAAM,WAAW,MAAM,KAAK;AAAA,MACzC,MAAM,SAAS,KAAK,cAAc,MAAM,WAAW,MAAM,EAAE;AAAA,MAC3D,MAAM,QAAQ,6BAA6B,QAAQ,MAAM,eAAe,GAAG,IAAI,MAAM,KAAK;AAAA,MAC1F,KAAK,GACF,MAAM,4EAA4E,EAClF,IAAI,KAAK,UAAU,KAAK,GAAG,MAAM,WAAW,MAAM,EAAE;AAAA,MACvD,OAAO;AAAA,KACR,EACA,UAAU;AAAA;AAAA,OAGT,OAAM,CAAC,OAA2D;AAAA,IACtE,MAAM,gBACJ,MAAM,kBAAkB,YACpB,OACA,KAAK,UAAU,kCAAiC,MAAM,aAAa,CAAC;AAAA,IAC1E,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,IACzC,MAAM,YAAY,MAAM,aAAa;AAAA,IAErC,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAgBF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,eAAe,MACrB,MAAM,eAAe,IACrB,MAAM,SAAS,MACf,eACA,MAAM,UAAU,UAChB,UAAU,YAAY,GACtB,UAAU,YAAY,CACxB;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,IAAI,mBACR,gBACA,8BAA8B,MAAM,mCAAmC,MAAM,aAC/E;AAAA,MACF;AAAA,MAEA,MAAM;AAAA;AAAA,IAGR,OAAO,KAAK,cAAc,MAAM,WAAW,MAAM,EAAE;AAAA;AAAA,OAG/C,QAAO,CAAC,QAA8E;AAAA,IAC1F,MAAM,MAAM,KAAK,GACd,MAAM,6DAA6D,EACnE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,kBAAkB,GAAG,IAAI;AAAA;AAAA,OAGlC,KAAI,CAAC,OAA+D;AAAA,IACxE,IAAI,MAAM,aAAa,aAAa,MAAM,SAAS,WAAW,GAAG;AAAA,MAC/D,OAAO,EAAE,SAAS,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IACjD;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,cAAc,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,QAAQ;AAAA,IAC7B;AAAA,IAEA,IAAI,MAAM,gBAAgB;AAAA,MACxB,aAAa,KAAK,qDAAqD;AAAA,MACvE,KAAK,KAAK,MAAM,eAAe,MAAM,MAAM,eAAe,EAAE;AAAA,IAC9D;AAAA,IAEA,MAAM,MAAM,MAAM,UAAU,QAAQ,QAAQ;AAAA,IAC5C,QAAQ,MAAM,OAAO,YAAY,eAA+B;AAAA,MAC9D,IAAI,KAAK;AAAA,MACT,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,SAAS,yCAAyC,WAAW;AAAA,MAC7D,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,OAAO,EAAE,SAAS,KAAK,IAAI,iBAAiB,GAAG,SAAS,MAAM;AAAA;AAAA,EAGxD,aAAa,CAAC,WAAmB,IAA+B;AAAA,IACtE,MAAM,MAAM,KAAK,GACd,MAAM,6DAA6D,EACnE,IAAI,WAAW,EAAE;AAAA,IAEpB,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,mBACR,iBACA,6CAA6C,oBAAoB,aACnE;AAAA,IACF;AAAA,IAEA,OAAO,kBAAkB,GAAG;AAAA;AAEhC;;;AClIO,MAAM,mBAA2C;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEQ;AAAA,EAEjB,WAAW,CAAC,SAAoC;AAAA,IAC9C,KAAK,aAAa,0BAA0B,OAAO;AAAA,IAEnD,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,WAAW,EAAE;AAAA,IAC7C;AAAA,IAEA,KAAK,UAAU,IAAI,uBAAuB,KAAK,WAAW,EAAE;AAAA,IAC5D,KAAK,OAAO,IAAI,oBAAoB,KAAK,WAAW,IAAI,QAAQ,UAAU;AAAA,IAC1E,KAAK,WAAW,IAAI,wBAAwB,KAAK,WAAW,EAAE;AAAA,IAC9D,KAAK,cAAc,IAAI,kCAAkC,KAAK,WAAW,EAAE;AAAA;AAAA,EAG7E,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAE9C;;AClDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAQE;AAAA;AAAA;AAAA;AAAA;AAKF,sCAAS;AAET;AAAA;AAAA;;;ACfA;AAAA;AAAA;AAAA;AAAA;AAUA,eAAsB,qBAAqB,CACzC,YACA,OACsC;AAAA,EACtC,MAAM,QAAQ,oCAAoC,KAAK;AAAA,EACvD,MAAM,aAAa;AAAA,IACjB,MAAM;AAAA,IACN,MAAM,KAAK,YAAY;AAAA,IACvB,MAAM,GAAG,YAAY;AAAA,IACrB,MAAM,cAAc;AAAA,IACpB,MAAM,WAAW;AAAA,IACjB,MAAM,mBAAmB;AAAA,EAC3B;AAAA,EACA,MAAM,QAAQ,WAAW,GAAG,MAAM,SAAS,EAAE,IAAI,GAAG,UAAU;AAAA,EAC9D,MAAM,OAAO,WAAW,GACrB,MAAM,QAAQ,EACd,IAAI,GAAG,YAAY,MAAM,OAAO,MAAM,MAAM;AAAA,EAC/C,MAAM,QAAQ,OAAO,OAAO,KAAK;AAAA,EACjC,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ;AAAA,IAC1C,MAAM,IAAI,WAAW,wCAAwC;AAAA,EAC/D,MAAM,QAAQ,oCAAoC,KAAK,IAAI,+BAA+B,CAAC;AAAA,EAC3F,OAAO,EAAE,OAAO,OAAO,SAAS,MAAM,SAAS,MAAM,SAAS,MAAM;AAAA;AAGtE,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyCrB,IAAM,YAAY,GAAG;AACrB,IAAM,WAAW,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC5EpB;AACA;AAEA;AAAA;AAAA;AAAA;AA4BO,MAAM,qBAA+C;AAAA,EACzC;AAAA,EAEjB,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACrD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,WAAW,EAAE;AAAA,IAC7C;AAAA;AAAA,OAGI,gBAAe,CAAC,OAAiE;AAAA,IACrF,MAAM,SAAS,2BAA2B,KAAK;AAAA,IAC/C,OAAO,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MACvD,MAAM,WAAW,KAAK,qBAAqB,MAAM;AAAA,MACjD,IAAI;AAAA,QAAU,OAAO,EAAE,QAAQ,UAAU,SAAS,MAAM;AAAA,MACxD,KAAK,sBAAsB,OAAO,WAAW,OAAO,WAAW;AAAA,MAE/D,IAAI;AAAA,QACF,KAAK,aAAa,MAAM;AAAA,QACxB,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,yBAAwB,KAAK;AAAA,UAAG,MAAM;AAAA,QAE3C,MAAM,aAAa,KAAK,qBAAqB,MAAM;AAAA,QACnD,IAAI;AAAA,UAAY,OAAO,EAAE,QAAQ,YAAY,SAAS,MAAM;AAAA,QAC5D,MAAM,IAAI,oBACR,gBACA,iCAAiC,OAAO,mCAAmC,OAAO,aACpF;AAAA;AAAA,MAGF,WAAW,WAAW,OAAO,mBAAmB;AAAA,QAC9C,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA,aAKF,EACC,IAAI,OAAO,WAAW,OAAO,IAAI,SAAS,OAAO,WAAW,YAAY,CAAC;AAAA,MAC9E;AAAA,MAEA,OAAO,EAAE,QAAQ,KAAK,YAAY,OAAO,WAAW,OAAO,EAAE,GAAG,SAAS,KAAK;AAAA,KAC/E;AAAA;AAAA,OAGG,mBAAkB,CACtB,OACkC;AAAA,IAClC,OAAO,WAAW,MAAM,KAAK,oBAAoB;AAAA,MAC/C,WAAW,MAAM;AAAA,MACjB,cAAc,CAAC,MAAM,WAAW;AAAA,IAClC,CAAC;AAAA,IACD,OAAO;AAAA;AAAA,OAGH,sBAAqB,CACzB,OACwC;AAAA,IACxC,wBAAwB,MAAM,SAAS;AAAA,IACvC,yBAAyB,MAAM,WAAW;AAAA,IAC1C,MAAM,MAAM,KAAK,WAAW,GACzB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IAAI,MAAM,WAAW,MAAM,WAAW;AAAA,IACzC,OAAO,MAAM,KAAK,YAAY,GAAG,IAAI;AAAA;AAAA,OAGjC,oBAAmB,CACvB,OAC6C;AAAA,IAC7C,wBAAwB,MAAM,SAAS;AAAA,IACvC,WAAW,eAAe,MAAM;AAAA,MAAc,yBAAyB,WAAW;AAAA,IAClF,IAAI,MAAM,aAAa,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAE7C,MAAM,OAAO,KAAK,cAAc,KAAK;AAAA,IACrC,OAAO,uBAAuB,MAAM,cAAc,IAAI;AAAA;AAAA,EAGxD,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,YAAY,CAAC,QAAsC;AAAA,IACzD,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SA6BF,EACC,IACC,OAAO,WACP,OAAO,IACP,OAAO,aACP,OAAO,SACP,OAAO,QACP,OAAO,YACP,OAAO,gBAAgB,YAAY,OAAO,KAAK,UAAU,OAAO,WAAW,GAC3E,OAAO,kBACP,OAAO,uBAAuB,YAAY,OAAO,KAAK,UAAU,OAAO,kBAAkB,GACzF,OAAO,mBAAmB,MAC1B,OAAO,YACP,OAAO,MAAM,eAAe,MAC5B,OAAO,MAAM,gBAAgB,MAC7B,OAAO,MAAM,eAAe,MAC5B,OAAO,MAAM,uBAAuB,MACpC,OAAO,MAAM,wBAAwB,MACrC,OAAO,MAAM,yBAAyB,MACtC,OAAO,MAAM,oBAAoB,MACjC,OAAO,MAAM,yBAAyB,MACtC,OAAO,MAAM,iBACb,OAAO,aAAa,YAAY,OAAO,KAAK,UAAU,OAAO,QAAQ,GACrE,OAAO,WAAW,YAAY,GAC9B,OAAO,WAAW,YAAY,CAChC;AAAA;AAAA,EAGI,oBAAoB,CAC1B,QAI+B;AAAA,IAC/B,MAAM,MAAM,KAAK,WAAW,GACzB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQF,EACC,IACC,OAAO,WACP,OAAO,aACP,OAAO,SACP,OAAO,QACP,OAAO,UACT;AAAA,IACF,OAAO,MAAM,KAAK,YAAY,GAAG,IAAI;AAAA;AAAA,EAG/B,WAAW,CAAC,WAAmB,IAAoC;AAAA,IACzE,MAAM,MAAM,KAAK,WAAW,GACzB,MAAM,mEAAmE,EACzE,IAAI,WAAW,EAAE;AAAA,IACpB,IAAI,CAAC;AAAA,MAAK,MAAM,IAAI,MAAM,iCAAiC,+BAA+B;AAAA,IAC1F,OAAO,KAAK,YAAY,GAAG;AAAA;AAAA,EAGrB,WAAW,CAAC,KAAyC;AAAA,IAC3D,MAAM,YAAY,KAAK,WAAW,GAC/B,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IAAI,IAAI,YAAY,IAAI,EAAE;AAAA,IAE7B,OAAO;AAAA,MACL,IAAI,IAAI;AAAA,MACR,WAAW,IAAI;AAAA,MACf,aAAa,IAAI;AAAA,MACjB,SAAS,IAAI;AAAA,MACb,QAAQ,IAAI;AAAA,MACZ,mBAAmB,UAAU,IAAI,CAAC,UAAU,MAAM,QAAQ;AAAA,MAC1D,YAAY,IAAI;AAAA,SACZ,IAAI,iBAAiB,OACrB,CAAC,IACD,EAAE,aAAa,0BAA0B,KAAK,MAAM,IAAI,YAAY,CAAC,EAAE;AAAA,MAC3E,kBAAkB,IAAI;AAAA,SAClB,IAAI,wBAAwB,OAC5B,CAAC,IACD,EAAE,oBAAoB,0BAA0B,IAAI,mBAAmB,EAAE;AAAA,SACzE,IAAI,sBAAsB,OAAO,CAAC,IAAI,EAAE,iBAAiB,IAAI,kBAAkB;AAAA,MACnF,YAAY,IAAI;AAAA,MAChB,OAAO;AAAA,WACF,aAAa,GAAG;AAAA,WACf,IAAI,iBAAiB,OAAO,CAAC,IAAI,EAAE,aAAa,IAAI,aAAa;AAAA,QACrE,iBAAiB,IAAI;AAAA,MACvB;AAAA,SACI,IAAI,cAAc,OAClB,CAAC,IACD,EAAE,UAAU,KAAK,MAAM,IAAI,SAAS,EAAwB;AAAA,MAChE,YAAY,IAAI,KAAK,IAAI,WAAW;AAAA,MACpC,YAAY,IAAI,KAAK,IAAI,WAAW;AAAA,IACtC;AAAA;AAAA,EAGM,aAAa,CAAC,OAAsD;AAAA,IAC1E,MAAM,YAAY,KAAK,UAAU,CAAC,GAAG,IAAI,IAAI,MAAM,YAAY,CAAC,CAAC;AAAA,IACjE,OAAO,KAAK,WAAW,GACpB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUF,EACC,IAAI,WAAW,MAAM,SAAS;AAAA;AAAA,EAG3B,qBAAqB,CAAC,WAAmB,aAA2B;AAAA,IAC1E,MAAM,YAAY,KAAK,WAAW,GAC/B,MAAM,0DAA0D,EAChE,IAAI,WAAW,WAAW;AAAA,IAC7B,IAAI;AAAA,MAAW;AAAA,IACf,MAAM,IAAI,oBACR,qBACA,oCAAoC,2CAA2C,aACjF;AAAA;AAEJ;AA4BA,SAAS,sBAAsB,CAC7B,cACA,MACoC;AAAA,EACpC,MAAM,qBAAqB,IAAI;AAAA,EAC/B,WAAW,eAAe;AAAA,IAAc,mBAAmB,IAAI,aAAa,CAAC,CAAC;AAAA,EAC9E,WAAW,OAAO,MAAM;AAAA,IACtB,mBAAmB,IAAI,IAAI,YAAY,GAAG,KAAK,aAAa,GAAG,CAAC;AAAA,EAClE;AAAA,EACA,OAAO,aAAa,IAAI,CAAC,gBAAgB;AAAA,IACvC,MAAM,SAAS,mBAAmB,IAAI,WAAW,KAAK,CAAC;AAAA,IACvD,OAAO;AAAA,MACL,gBAAgB,OAAO;AAAA,MACvB,OAAO,0BAA0B,MAAM;AAAA,IACzC;AAAA,GACD;AAAA;AAGH,SAAS,YAAY,CAAC,KAAwC;AAAA,EAC5D,OAAO;AAAA,OACD,IAAI,iBAAiB,OAAO,CAAC,IAAI,EAAE,aAAa,IAAI,aAAa;AAAA,OACjE,IAAI,kBAAkB,OAAO,CAAC,IAAI,EAAE,cAAc,IAAI,cAAc;AAAA,OACpE,IAAI,0BAA0B,OAC9B,CAAC,IACD,EAAE,qBAAqB,IAAI,sBAAsB;AAAA,OACjD,IAAI,4BAA4B,OAChC,CAAC,IACD,EAAE,sBAAsB,IAAI,wBAAwB;AAAA,OACpD,IAAI,6BAA6B,OACjC,CAAC,IACD,EAAE,uBAAuB,IAAI,yBAAyB;AAAA,OACtD,IAAI,uBAAuB,OAAO,CAAC,IAAI,EAAE,kBAAkB,IAAI,mBAAmB;AAAA,OAClF,IAAI,4BAA4B,OAChC,CAAC,IACD,EAAE,uBAAuB,IAAI,wBAAwB;AAAA,EAC3D;AAAA;AAGK,SAAS,yBAAyB,CACvC,OAC8C;AAAA,EAC9C,MAAM,SAAkB,KAAK,MAAM,KAAK;AAAA,EACxC,IAAI,CAAC,iBAAiB,MAAM,GAAG;AAAA,IAC7B,MAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,uBAAuB,CAAC,WAAyB;AAAA,EACxD,IAAI,OAAO,cAAc,YAAY,UAAU,KAAK,EAAE,WAAW,GAAG;AAAA,IAClE,MAAM,IAAI,UAAU,6CAA6C;AAAA,EACnE;AAAA;;;AFxUK,MAAM,oBAA6C;AAAA,EAC3B;AAAA,EAA7B,WAAW,CAAkB,YAAmC;AAAA,IAAnC;AAAA;AAAA,OAEvB,oBAAmB,CACvB,OACsC;AAAA,IACtC,OAAO,sBAAsB,KAAK,YAAY,KAAK;AAAA;AAAA,OAG/C,oBAAmB,CAAC,OAA6C;AAAA,IACrE,MAAM,SAAS,+BAA+B,KAAK;AAAA,IACnD,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MAChD,MAAM,QAAQ,KAAK,UAAU,OAAO,WAAW,OAAO,aAAa;AAAA,MACnE,IAAI,CAAC;AAAA,QAAO,MAAM,aAAa,MAAM;AAAA,MACrC,uBAAuB,QAAQ,KAAK;AAAA,MACpC,IAAI,KAAK,SAAS,OAAO,WAAW,OAAO,aAAa;AAAA,QAAG;AAAA,MAC3D,IAAI;AAAA,QACF,KAAK,WAAW,MAAM;AAAA,QACtB,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,yBAAwB,KAAK;AAAA,UAAG,MAAM;AAAA,QAC3C,IAAI,CAAC,KAAK,SAAS,OAAO,WAAW,OAAO,aAAa;AAAA,UAAG,MAAM;AAAA;AAAA,KAErE;AAAA;AAAA,OAGG,oBAAmB,CACvB,OACmC;AAAA,IACnC,eAAe,MAAM,WAAW,wBAAwB;AAAA,IACxD,WAAW,MAAM,MAAM;AAAA,MAAc,eAAe,IAAI,0BAA0B;AAAA,IAClF,IAAI,MAAM,aAAa,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAC7C,MAAM,OAAO,KAAK,WAAW,GAC1B,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAYF,EACC,IAAI,KAAK,UAAU,CAAC,GAAG,IAAI,IAAI,MAAM,YAAY,CAAC,CAAC,GAAG,MAAM,SAAS;AAAA,IACxE,OAAO,qBAAqB,MAAM,cAAc,IAAI;AAAA;AAAA,OAGhD,qBAAoB,CAAC,OAAsE;AAAA,IAC/F,MAAM,QAAQ,2BAA2B,KAAK;AAAA,IAC9C,MAAM,OAAO,KAAK,WAAW,GAC1B,MAAM,8BAA8B,EACpC,IACC,MAAM,WACN,MAAM,KAAK,YAAY,GACvB,MAAM,GAAG,YAAY,GACrB,MAAM,cAAc,MACpB,MAAM,cAAc,MACpB,MAAM,WAAW,MACjB,MAAM,WAAW,MACjB,MAAM,MACR;AAAA,IACF,OAAO,uCAAuC,OAAO,KAAK,IAAI,wBAAwB,CAAC;AAAA;AAAA,OAGnF,eAAc,CAClB,OAC0C;AAAA,IAC1C,MAAM,QAAQ,qCAAoC,KAAK;AAAA,IACvD,MAAM,aAAa,+BAA+B,KAAK;AAAA,IACvD,MAAM,QAAQ,KAAK,WAAW,GAC3B,MAAM,gCAAgC,EACtC,IAAI,GAAG,UAAU;AAAA,IACpB,MAAM,OAAO,KAAK,WAAW,GAC1B,MAAM,+BAA+B,EACrC,IAAI,GAAG,YAAY,MAAM,OAAO,MAAM,MAAM;AAAA,IAC/C,MAAM,QAAQ,KAAK,IAAI,CAAC,QAAQ,iBAAiB,sBAAsB,GAAG,CAAC,CAAC;AAAA,IAC5E,MAAM,QAAQ,aAAa,MAAM,OAAO,uBAAuB;AAAA,IAC/D,OAAO,gBAAgB;AAAA,MACrB;AAAA,MACA;AAAA,MACA,SAAS,MAAM,SAAS,MAAM,SAAS;AAAA,IACzC,CAAC;AAAA;AAAA,EAGK,UAAU,CAAC,QAAqC;AAAA,IACtD,MAAM,QAAQ,OAAO,WAAW,UAAU,SAAS;AAAA,IACnD,MAAM,UAAU,uBAAuB,MAAM;AAAA,IAC7C,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA,gDAIF,EACC,IACC,OAAO,WACP,OAAO,eACP,OAAO,QACP,OAAO,iBAAiB,cAAc,MACtC,OAAO,iBAAiB,WAAW,MACnC,OAAO,MAAM,YAAY,MACzB,QAAQ,OAAO,MAAM,MAAM,WAAW,IAAI,MAC1C,OAAO,WAAW,gBAAgB,OAAO,SAAS,MAClD,KAAK,UAAU,OAAO,GACtB,OAAO,QAAQ,YAAY,CAC7B;AAAA;AAAA,EAGI,QAAQ,CAAC,WAAmB,SAA+C;AAAA,IACjF,MAAM,MAAM,KAAK,WAAW,GACzB,MACC;AAAA;AAAA,sDAGF,EACC,IAAI,WAAW,OAAO;AAAA,IACzB,OAAO,MAAM,UAAU,GAAG,IAAI;AAAA;AAAA,EAGxB,SAAS,CAAC,WAAmB,IAA2C;AAAA,IAC9E,MAAM,MAAM,KAAK,WAAW,GACzB,MAAM,mEAAmE,EACzE,IAAI,WAAW,EAAE;AAAA,IACpB,OAAO,MAAM,cAAa,KAAK,CAAC,CAAC,IAAI;AAAA;AAEzC;AAEA,IAAM,gCAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AActC,IAAM,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA,UAK/B;AAAA;AAGV,IAAM,kCAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UA4C9B;AAAA;AAAA;AAAA;AAKV,IAAM,iCAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6GvC,SAAS,8BAA8B,CACrC,OAC4B;AAAA,EAC5B,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,KAAK,YAAY;AAAA,IACvB,MAAM,GAAG,YAAY;AAAA,IACrB,MAAM,cAAc;AAAA,IACpB,MAAM,cAAc;AAAA,IACpB,MAAM,WAAW;AAAA,IACjB,MAAM,WAAW;AAAA,IACjB,MAAM,eAAe;AAAA,IACrB,MAAM,eAAe;AAAA,IACrB,MAAM,mBAAmB;AAAA,IACzB,MAAM,mBAAmB;AAAA,EAC3B;AAAA;AA4GF,SAAS,wBAAwB,CAAC,KAAkD;AAAA,EAClF,MAAM,gBACJ,IAAI,cAAc,UACd,EAAE,YAAY,SAAS,IAAI,KAAK,GAAG,SAAS,SAAS,IAAI,KAAK,EAAE,IAChE,IAAI,cAAc,UAChB;AAAA,IACE,WAAW,SAAS,IAAI,KAAK;AAAA,OACzB,IAAI,UAAU,kBACd,EAAE,YAAY,SAAS,IAAI,KAAK,GAAG,aAAa,SAAS,IAAI,KAAK,EAAE,IACpE,CAAC;AAAA,EACP,IACA,IAAI,cAAc,aAChB,EAAE,YAAY,SAAS,IAAI,KAAK,EAAE,IAClC,IAAI,cAAc,WAChB,EAAE,OAAO,IAAI,KAAK,SAAS,IAAI,YAAY,CAAC,EAAE,IAC9C,CAAC;AAAA,EACb,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,OACZ;AAAA,IACH,gBAAgB,IAAI;AAAA,IACpB,OAAO;AAAA,MACL,mBAAmB,IAAI;AAAA,MACvB,mBAAmB,IAAI;AAAA,MACvB,aAAa,cAAc,IAAI,oBAAoB,IAAI,gBAAgB;AAAA,MACvE,cAAc,cAAc,IAAI,qBAAqB,IAAI,iBAAiB;AAAA,MAC1E,qBAAqB,cACnB,IAAI,6BACJ,IAAI,yBACN;AAAA,MACA,sBAAsB,cACpB,IAAI,+BACJ,IAAI,2BACN;AAAA,MACA,uBAAuB,cACrB,IAAI,gCACJ,IAAI,4BACN;AAAA,MACA,kBAAkB,cAAc,IAAI,0BAA0B,IAAI,sBAAsB;AAAA,MACxF,uBAAuB,cACrB,IAAI,+BACJ,IAAI,2BACN;AAAA,IACF;AAAA,IACA,OAAO;AAAA,SACD,IAAI,oBAAoB,QAC5B,IAAI,gBAAgB,QACpB,IAAI,kBAAkB,QACtB,IAAI,eAAe,OACf,CAAC,IACD;AAAA,QACE,QAAQ;AAAA,UACN,UAAU,IAAI;AAAA,UACd,aAAa,sBAAsB,GAAG;AAAA,QACxC;AAAA,MACF;AAAA,MACJ,gBAAgB,IAAI;AAAA,MACpB,sBAAsB,IAAI;AAAA,MAC1B,mBAAmB,IAAI;AAAA,IACzB;AAAA,EACF;AAAA;AAGF,SAAS,aAAa,CAAC,kBAA0B,OAAsB;AAAA,EACrE,OAAO,EAAE,kBAAkB,MAAM;AAAA;AAGnC,SAAS,qBAAqB,CAC5B,KACQ;AAAA,EACR,QACE,OAAO,SAAS,IAAI,WAAW,CAAC,IAAI,iBACpC,OAAO,SAAS,IAAI,aAAa,CAAC,IAAI,WACtC,OAAO,SAAS,IAAI,UAAU,CAAC,GAC/B,SAAS;AAAA;AAGb,SAAS,qBAAqB,CAAC,KAA2C;AAAA,EACxE,MAAM,QAAQ,cAAa,KAAK,iBAAiB,IAAI,mBAAmB,CAAC;AAAA,EACzE,MAAM,OAAO,IAAI,gBAAgB,OAAO,YAAY,kBAAkB,GAAG;AAAA,EACzE,MAAM,cACJ,IAAI,qBAAqB,OACrB,2BAA2B,IAAI,eAAe,IAAI,aAAa,IAAI,YAAY,IAC/E,IAAI,qBAAqB,UACvB;AAAA,IACE,MAAM;AAAA,IACN,YAAY,SAAS,IAAI,wBAAwB;AAAA,IACjD,UAAU,SAAS,IAAI,qBAAqB;AAAA,EAC9C,IACA,IAAI,qBAAqB,aACvB;AAAA,IACE,MAAM;AAAA,IACN,eAAe,SAAS,IAAI,wBAAwB;AAAA,IACpD,aAAa,SAAS,IAAI,yBAAyB;AAAA,EACrD,IACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa,SAAS,IAAI,yBAAyB;AAAA,IACnD,WAAW,SAAS,IAAI,uBAAuB;AAAA,IAC/C,YAAY,SAAS,IAAI,uBAAuB;AAAA,IAChD,eAAe,SAAS,IAAI,2BAA2B;AAAA,EACzD;AAAA,EACV,OAAO;AAAA,IACL;AAAA,OACI,cAAc,EAAE,YAAY,IAAI,CAAC;AAAA,OACjC,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,EACzB;AAAA;AAGF,SAAS,aAAY,CAAC,KAAe,mBAA8D;AAAA,EACjG,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ;AAAA,IACA,YAAY,IAAI;AAAA,OACZ,IAAI,iBAAiB,OACrB,CAAC,IACD,EAAE,aAAa,2BAA0B,KAAK,MAAM,IAAI,YAAY,CAAC,EAAE;AAAA,IAC3E,kBAAkB,IAAI;AAAA,OAClB,IAAI,wBAAwB,OAC5B,CAAC,IACD,EAAE,oBAAoB,0BAA0B,IAAI,mBAAmB,EAAE;AAAA,OACzE,IAAI,sBAAsB,OAAO,CAAC,IAAI,EAAE,iBAAiB,IAAI,kBAAkB;AAAA,IACnF,YAAY,IAAI;AAAA,IAChB,OAAO;AAAA,SACD,IAAI,iBAAiB,OAAO,CAAC,IAAI,EAAE,aAAa,IAAI,aAAa;AAAA,SACjE,IAAI,kBAAkB,OAAO,CAAC,IAAI,EAAE,cAAc,IAAI,cAAc;AAAA,SACpE,IAAI,iBAAiB,OAAO,CAAC,IAAI,EAAE,aAAa,IAAI,aAAa;AAAA,SACjE,IAAI,0BAA0B,OAC9B,CAAC,IACD,EAAE,qBAAqB,IAAI,sBAAsB;AAAA,SACjD,IAAI,4BAA4B,OAChC,CAAC,IACD,EAAE,sBAAsB,IAAI,wBAAwB;AAAA,SACpD,IAAI,6BAA6B,OACjC,CAAC,IACD,EAAE,uBAAuB,IAAI,yBAAyB;AAAA,SACtD,IAAI,uBAAuB,OAAO,CAAC,IAAI,EAAE,kBAAkB,IAAI,mBAAmB;AAAA,SAClF,IAAI,4BAA4B,OAChC,CAAC,IACD,EAAE,uBAAuB,IAAI,wBAAwB;AAAA,MACzD,iBAAiB,IAAI;AAAA,IACvB;AAAA,OACI,IAAI,cAAc,OAClB,CAAC,IACD,EAAE,UAAU,KAAK,MAAM,IAAI,SAAS,EAAwB;AAAA,IAChE,YAAY,IAAI,KAAK,IAAI,WAAW;AAAA,IACpC,YAAY,IAAI,KAAK,IAAI,WAAW;AAAA,EACtC;AAAA;AAGF,SAAS,SAAS,CAAC,KAA0C;AAAA,EAC3D,OAAO,WAAW;AAAA,IAChB,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,YAAY,IAAI;AAAA,IAChB,SAAS,IAAI;AAAA,IACb,UAAU,IAAI;AAAA,IACd,aAAa,IAAI;AAAA,IACjB,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI;AAAA,IACb,SAAS,IAAI;AAAA,EACf,CAAC;AAAA;AAGH,SAAS,iBAAiB,CAAC,KAAuC;AAAA,EAChE,OAAO,WAAW;AAAA,IAChB,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,QAAQ,SAAS,IAAI,WAAW;AAAA,IAChC,YAAY,IAAI;AAAA,IAChB,SAAS,IAAI;AAAA,IACb,UAAU,IAAI;AAAA,IACd,aAAa,IAAI;AAAA,IACjB,QAAQ,IAAI;AAAA,IACZ,SAAS,SAAS,IAAI,YAAY;AAAA,IAClC,SAAS,SAAS,IAAI,aAAa;AAAA,EACrC,CAAC;AAAA;AAGH,SAAS,UAAU,CAAC,OAWM;AAAA,EACxB,MAAM,UAAU,4BAA4B,MAAM,OAAO;AAAA,EACzD,MAAM,cACJ,QAAQ,gBAAgB,YACpB,YACA,KAAK,QAAQ,aAAa,YAAY,IAAI,KAAK,QAAQ,YAAY,UAAU,EAAE;AAAA,EACrF,MAAM,OAAO;AAAA,OACP,QAAQ,aAAa,YAAY,CAAC,IAAI,EAAE,UAAU,QAAQ,SAAS;AAAA,IACvE,WAAW,MAAM;AAAA,IACjB,eAAe,MAAM;AAAA,IACrB,gBAAgB,QAAQ;AAAA,IACxB,SAAS,IAAI,KAAK,MAAM,OAAO;AAAA,EACjC;AAAA,EACA,IAAI,MAAM,WAAW,SAAS;AAAA,IAC5B,OAAO,+BAA+B;AAAA,SACjC;AAAA,MACH,QAAQ;AAAA,MACR,iBAAiB,EAAE,YAAY,SAAS,MAAM,UAAU,GAAG,SAAS,SAAS,MAAM,OAAO,EAAE;AAAA,MAC5F,aAAa,SAAS,WAAW;AAAA,MACjC,OAAO,EAAE,UAAU,SAAS,MAAM,QAAQ,GAAG,aAAa,SAAS,MAAM,WAAW,EAAE;AAAA,MACtF,YAAY,SAAS,QAAQ,UAAU;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EACA,OAAO,+BAA+B;AAAA,OACjC;AAAA,IACH,QAAQ;AAAA,OACJ,MAAM,cAAc,MAAM,UAC1B,EAAE,iBAAiB,EAAE,YAAY,MAAM,YAAY,SAAS,MAAM,QAAQ,EAAE,IAC5E,CAAC;AAAA,OACD,gBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY;AAAA,IACnD,QAAQ,SAAS,MAAM,MAAM;AAAA,OAIzB,QAAQ,gBAAgB,EAAE,eAAe,QAAQ,cAAc,IAAI,CAAC;AAAA,EAC1E,CAAC;AAAA;AAGH,SAAS,oBAAoB,CAC3B,KACA,MACiB;AAAA,EACjB,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC;AAAA,EACxD,WAAW,OAAO,MAAM;AAAA,IACtB,MAAM,QAAQ,IAAI,IAAI,IAAI,YAAY;AAAA,IACtC,IAAI,CAAC;AAAA,MAAO;AAAA,IACZ,IAAI,IAAI,WAAW;AAAA,MAAM,MAAM,qBAAqB;AAAA,IAC/C,SAAI,IAAI,WAAW;AAAA,MAAe,MAAM,wBAAwB;AAAA,IAChE;AAAA,MACH,MAAM,kBAAkB;AAAA,MACxB,IAAI,MAAM,SAAS,SAAS,IAAI,QAAQ,GAAG,SAAS,IAAI,YAAY,CAAC;AAAA;AAAA,EAEzE;AAAA,EACA,OAAO,IAAI,IAAI,CAAC,OAAO,OAAO,IAAI,IAAI,EAAE,CAAE,CAAC;AAAA;AAU7C,SAAS,WAAW,GAAgB;AAAA,EAClC,OAAO;AAAA,IACL,SAAS,IAAI;AAAA,IACb,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,mBAAmB;AAAA,EACrB;AAAA;AAGF,SAAS,MAAM,CAAC,OAAmC;AAAA,EACjD,OAAO;AAAA,IACL,SAAS,CAAC,GAAG,MAAM,OAAO,EACvB,KAAK,EAAE,QAAQ,WAAW,KAAK,cAAc,KAAK,CAAC,EACnD,IAAI,EAAE,UAAU,aAAa,EAAE,UAAU,aAAa,OAAO,SAAS,EAAE,EAAE;AAAA,IAC7E,gBAAgB,MAAM;AAAA,IACtB,sBAAsB,MAAM;AAAA,IAC5B,mBAAmB,MAAM;AAAA,EAC3B;AAAA;AAGF,SAAS,GAAG,CAAC,SAA8B,UAAkB,QAAsB;AAAA,EACjF,QAAQ,IAAI,WAAW,QAAQ,IAAI,QAAQ,KAAK,MAAM,OAAO,MAAM,CAAC;AAAA;AAGtE,SAAS,sBAAsB,CAC7B,QACA,OACM;AAAA,EACN,IAAI,CAAC,4BAA4B,QAAQ,KAAK,GAAG;AAAA,IAC/C,MAAM,IAAI,mBACR,iBACA,wCAAwC,OAAO,iDACjD;AAAA,EACF;AAAA;AAGF,SAAS,YAAY,CAAC,QAAsD;AAAA,EAC1E,OAAO,IAAI,mBACT,iBACA,0BAA0B,OAAO,gCACnC;AAAA;AAGF,SAAS,gBAAgB,CAAC,OAAyB;AAAA,EACjD,MAAM,SAAkB,KAAK,MAAM,KAAK;AAAA,EACxC,IAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,KAAK,CAAC,SAAS,OAAO,SAAS,QAAQ,GAAG;AAAA,IAC7E,MAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,cAAc,CAAC,OAAe,OAAqB;AAAA,EAC1D,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,WAAW,GAAG;AAAA,IAC1D,MAAM,IAAI,UAAU,aAAa,yBAAyB;AAAA,EAC5D;AAAA;AAGF,SAAS,YAAY,CAAC,OAAe,OAAuB;AAAA,EAC1D,IAAI,CAAC,iBAAiB,KAAK,KAAK,GAAG;AAAA,IACjC,MAAM,IAAI,MAAM,8BAA8B,mBAAmB;AAAA,EACnE;AAAA,EACA,MAAM,QAAQ,OAAO,KAAK;AAAA,EAC1B,IAAI,CAAC,OAAO,cAAc,KAAK,GAAG;AAAA,IAChC,MAAM,IAAI,UAAU,wBAAwB,uCAAuC;AAAA,EACrF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,QAAW,CAAC,OAAgC;AAAA,EACnD,IAAI,UAAU,QAAQ,UAAU,WAAW;AAAA,IACzC,MAAM,IAAI,MAAM,wDAAwD;AAAA,EAC1E;AAAA,EACA,OAAO;AAAA;;;AG5xBT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAYE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCF;AAeO,MAAM,qBAA+C;AAAA,EACzC;AAAA,EAEjB,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACrD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,IAAI,KAAK,WAAW;AAAA,MAAoB,yBAAyB,KAAK,WAAW,EAAE;AAAA;AAAA,OAG/E,aAAY,CAAC,OAAyD;AAAA,IAC1E,MAAM,SAAS,6BAA6B,KAAK;AAAA,IACjD,OAAO,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MACvD,MAAM,UAAU,oBAAoB,OAAO,OAAO;AAAA,MAClD,MAAM,QAAQ,uBAAuB,OAAO,KAAK;AAAA,MACjD,IAAI;AAAA,QACF,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,aAMF,EACC,IACC,OAAO,WACP,OAAO,IACP,QAAQ,MACR,QAAQ,IACR,MAAM,OACN,MAAM,UACN,MAAM,OAAO,SAAS,GACtB,OAAO,QACP,OAAO,UAAU,IAAI,GACrB,OAAO,UAAU,YAAY,GAC7B,OAAO,UAAU,YAAY,CAC/B;AAAA,QACF,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,kBAAkB,KAAK;AAAA,UAAG,MAAM;AAAA,QACrC,MAAM,gBAAgB,MAAM;AAAA;AAAA,MAE9B,OAAO,KAAK,cAAc,OAAO,WAAW,OAAO,EAAE;AAAA,KACtD;AAAA;AAAA,OAGG,aAAY,CAAC,OAAyD;AAAA,IAC1E,MAAM,SAAS,6BAA6B,KAAK;AAAA,IACjD,OAAO,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MACvD,MAAM,WAAW,KAAK,cAAc,OAAO,WAAW,OAAO,EAAE;AAAA,MAC/D,IAAI,OAAO,UAAU;AAAA,QAAW,oBAAoB,SAAS,OAAO,OAAO,KAAK;AAAA,MAChF,MAAM,QAAQ,uBAAuB,OAAO,SAAS,SAAS,KAAK;AAAA,MACnE,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA,WAKF,EACC,IACC,MAAM,OAAO,SAAS,GACrB,OAAO,WAAW,SAAS,UAAW,IAAI,GAC3C,OAAO,UAAU,YAAY,GAC7B,OAAO,WACP,OAAO,EACT;AAAA,MACF,OAAO,KAAK,cAAc,OAAO,WAAW,OAAO,EAAE;AAAA,KACtD;AAAA;AAAA,OAGG,aAAY,CAAC,OAAmD;AAAA,IACpE,uBAAuB,KAAK;AAAA,IAC5B,OAAO,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MACvD,MAAM,SAAS,KAAK,WAAW,GAC5B,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAChC,OAAO,OAAO,UAAU;AAAA,KACzB;AAAA;AAAA,OAGG,UAAS,CAAC,OAA6D;AAAA,IAC3E,uBAAuB,KAAK;AAAA,IAC5B,MAAM,MAAM,KAAK,WAAW,GACzB,MAAM,+DAA+D,EACrE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,IAChC,OAAO,MAAM,cAAc,GAAG,IAAI;AAAA;AAAA,OAG9B,aAAY,CAAC,OAAoE;AAAA,IACrF,gBAAe,MAAM,WAAW,WAAW;AAAA,IAC3C,OAAO,KAAK,WAAW,MAAM,WAAW,MAAM,mBAAmB,KAAK,EAAE,IAAI,aAAa;AAAA;AAAA,OAGrF,mBAAkB,CACtB,OACyC;AAAA,IACzC,gBAAe,MAAM,WAAW,WAAW;AAAA,IAC3C,MAAM,SAAS,qBAAqB,MAAM,MAAM,IAAI,IAAM;AAAA,IAC1D,MAAM,iBACJ,MAAM,qBAAqB,YAAY,YAAY,IAAI,IAAI,MAAM,gBAAgB;AAAA,IACnF,OAAO,wBAAwB,KAAK,WAAW,IAAI,MACjD,KAAK,WAAW,MAAM,WAAW,MAAM,mBAAmB,KAAK,EAAE,IAAI,CAAC,QACpE,KAAK,gBAAgB,cAAc,GAAG,GAAG,QAAQ,cAAc,CACjE,CACF;AAAA;AAAA,OAGI,iBAAgB,CAAC,OAAmE;AAAA,IACxF,MAAM,UAAU,4BAA4B,KAAK;AAAA,IACjD,OAAO,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MACvD,MAAM,WAAW,KAAK,gBAAgB,QAAQ,QAAQ;AAAA,MACtD,IAAI,UAAU;AAAA,QACZ,IAAI,CAAC,iCAAiC,UAAU,OAAO,GAAG;AAAA,UACxD,MAAM,IAAI,oBACR,wBACA,2CAA2C,MAAM,qEACnD;AAAA,QACF;AAAA,QACA,IAAI,SAAS,UAAU,UAAU;AAAA,UAC/B,OAAO,EAAE,QAAQ,YAAY,aAAa,UAAU,SAAS,MAAM;AAAA,QACrE;AAAA,QACA,OAAO,EAAE,QAAQ,YAAY,aAAa,UAAU,SAAS,MAAM;AAAA,MACrE;AAAA,MACA,KAAK,sBAAsB,QAAQ,SAAS,WAAW,QAAQ,SAAS,WAAW;AAAA,MAEnF,MAAM,cAAc,IAAI,IAAI,QAAQ,SAAS,IAAI,iBAAiB,CAAC;AAAA,MACnE,MAAM,YAAY,IAAI,IACpB,QAAQ,UAAU,IAAI,CAAC,aAAa;AAAA,QAClC,MAAM,SAAS,uBAAuB,QAAQ;AAAA,QAC9C,OAAO,CAAC,iBAAiB,MAAM,GAAG,MAAM;AAAA,OACzC,CACH;AAAA,MACA,MAAM,kBAAkB,KAAK,WAAW,QAAQ,SAAS,WAAW,KAAK,EAAE,IAAI,aAAa;AAAA,MAC5F,MAAM,oBAA2C,CAAC;AAAA,MAClD,MAAM,sBAA6C,CAAC;AAAA,MACpD,MAAM,qBAAqB,IAAI;AAAA,MAC/B,WAAW,UAAU,iBAAiB;AAAA,QACpC,IAAI,CAAC,YAAY,IAAI,kBAAkB,OAAO,OAAO,CAAC;AAAA,UAAG;AAAA,QACzD,MAAM,QAAQ,uBAAuB,OAAO,KAAK;AAAA,QACjD,MAAM,WAAW,UAAU,IAAI,iBAAiB,KAAK,CAAC;AAAA,QACtD,MAAM,SAAS,KAAK,gBAAgB,QAAQ,QAAQ,MAAM;AAAA,QAC1D,IAAI,CAAC,YAAY,OAAO,qBAAqB,eAAe;AAAA,UAC1D,oBAAoB,KAAK,MAAM;AAAA,UAC/B,IAAI,CAAC;AAAA,YAAU,mBAAmB,IAAI,iBAAiB;AAAA,UACvD,IAAI,OAAO,qBAAqB,eAAe;AAAA,YAC7C,mBAAmB,IAAI,sBAAsB;AAAA,UAC/C;AAAA,UACA;AAAA,QACF;AAAA,QACA,MAAM,cAAc,OAAO;AAAA,QAC3B,MAAM,WACJ,uBAAuB,YAAY,MAAM,EAAE,SAC3C,uBAAuB,YAAY,QAAQ,EAAE,SAC7C,uBAAuB,YAAY,OAAO,EAAE;AAAA,QAC9C,IAAI,WAAW,SAAS,SAAS,MAAM;AAAA,UAAQ,kBAAkB,KAAK,MAAM;AAAA,MAC9E;AAAA,MACA,IAAI,oBAAoB,SAAS,GAAG;AAAA,QAClC,oBAAoB,KAAK,CAAC,MAAM,UAAU,KAAK,OAAO,GAAG,cAAc,MAAM,OAAO,EAAE,CAAC;AAAA,QACvF,OAAO;AAAA,UACL,QAAQ;AAAA,UACR;AAAA,UACA,SAAS,CAAC,GAAG,kBAAkB,EAAE,KAAK;AAAA,QACxC;AAAA,MACF;AAAA,MACA,IAAI,kBAAkB,SAAS,GAAG;AAAA,QAChC,kBAAkB,KAAK,CAAC,MAAM,UAAU,KAAK,OAAO,GAAG,cAAc,MAAM,OAAO,EAAE,CAAC;AAAA,QACrF,OAAO;AAAA,UACL,QAAQ;AAAA,UACR;AAAA,UACA,SAAS,IAAI,KACX,KAAK,IAAI,GAAG,kBAAkB,IAAI,CAAC,WAAW,OAAO,OAAO,QAAQ,QAAQ,CAAC,CAAC,CAChF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,UAAU,0BACd,iBACA,QAAQ,UACR,QAAQ,SACV;AAAA,MACA,IAAI,QAAQ,WAAW;AAAA,QAAG,OAAO,EAAE,QAAQ,cAAc;AAAA,MACzD,WAAW,UAAU,SAAS;AAAA,QAC5B,MAAM,SAAS,uBAAuB,OAAO,QAAQ;AAAA,QACrD,KAAK,eACH,QAAQ,SAAS,WACjB,OAAO,SACP,QACA,QAAQ,QACR,EAAE,UAAU,OAAO,OAAO,GAC1B,QAAQ,UACV;AAAA,MACF;AAAA,MACA,MAAM,cAAsC;AAAA,WACvC,QAAQ;AAAA,QACX;AAAA,QACA,YAAY,6BAA6B,OAAO;AAAA,QAChD,QAAQ,QAAQ;AAAA,QAChB,OAAO;AAAA,QACP,YAAY,QAAQ;AAAA,QACpB,WAAW,IAAI,KAAK,QAAQ,UAAU;AAAA,MACxC;AAAA,MACA,KAAK,kBAAkB,WAAW;AAAA,MAClC,OAAO,EAAE,QAAQ,YAAY,aAAa,gBAAgB,WAAW,GAAG,SAAS,KAAK;AAAA,KACvF;AAAA;AAAA,OAGG,uBAAsB,CAAC,OAA0D;AAAA,IACrF,gBAAe,MAAM,WAAW,WAAW;AAAA,IAC3C,gBAAe,MAAM,eAAe,eAAe;AAAA,IACnD,MAAM,aAAa,eAAe,MAAM,cAAc,IAAI,MAAQ,YAAY;AAAA,IAC9E,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MAChD,MAAM,QAAQ,KAAK,uBAAuB,MAAM,WAAW,MAAM,aAAa;AAAA,MAC9E,MAAM,SAAS,qBAAqB,MAAM,UAAU;AAAA,MACpD,WAAW,gBAAgB,mCAAmC,KAAK,GAAG;AAAA,QACpE,MAAM,UAAU,oBAAoB,YAAY;AAAA,QAChD,MAAM,OAAO,KAAK,WAAW,GAC1B,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,aAMF,EACC,IACC,MAAM,WACN,QAAQ,MACR,QAAQ,IACR,OAAO,MAAM,YAAY,CAC3B;AAAA,QACF,WAAW,OAAO,MAAM;AAAA,UACtB,MAAM,SAAS,qBAAqB,CAAC,KAAK,GAAG,GAAG;AAAA,UAChD,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,eAMF,EACC,KACE,OAAO,IAAI,aAAa,IAAI,OAAO,QAAQ,SAAS,GACrD,IAAI,sBAAsB,iBAAiB,OAAO,qBAAqB,gBACnE,gBACA,YACJ,WAAW,YAAY,GACvB,MAAM,WACN,QAAQ,MACR,QAAQ,IACR,IAAI,OACJ,IAAI,UACJ,OAAO,MAAM,YAAY,CAC3B;AAAA,QACJ;AAAA,MACF;AAAA,KACD;AAAA;AAAA,OAGG,mBAAkB,CAAC,OAAmE;AAAA,IAC1F,MAAM,WAAW,wCAAwC,KAAK;AAAA,IAC9D,gBAAe,MAAM,eAAe,eAAe;AAAA,IACnD,MAAM,eAAe,eAAe,MAAM,gBAAgB,IAAI,MAAQ,cAAc;AAAA,IACpF,OAAO,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MACvD,MAAM,cAAc,KAAK,gBAAgB,QAAQ;AAAA,MACjD,IAAI,CAAC;AAAA,QAAa,MAAM,mBAAmB,QAAQ;AAAA,MACnD,IAAI,YAAY,UAAU,cAAc;AAAA,QACtC,IAAI,YAAY,kBAAkB,MAAM,eAAe;AAAA,UACrD,OAAO;AAAA,QACT;AAAA,QACA,MAAM,uBAAuB,SAAS,MAAM;AAAA,MAC9C;AAAA,MACA,MAAM,aAAa,KAAK,uBAAuB,SAAS,WAAW,MAAM,aAAa;AAAA,MACtF,0CAA0C,aAAa,UAAU;AAAA,MACjE,KAAK,0BAA0B,aAAa,YAAY,YAAY;AAAA,MACpE,MAAM,aAAqC;AAAA,WACtC;AAAA,QACH,OAAO;AAAA,QACP,eAAe,MAAM;AAAA,QACrB,WAAW;AAAA,MACb;AAAA,MACA,KAAK,kBAAkB,UAAU;AAAA,MACjC,OAAO,gBAAgB,UAAU;AAAA,KAClC;AAAA;AAAA,OAGG,uBAAsB,CAC1B,OACiC;AAAA,IACjC,MAAM,WAAW,wCAAwC,KAAK;AAAA,IAC9D,MAAM,WAAW,eAAe,MAAM,YAAY,IAAI,MAAQ,UAAU;AAAA,IACxE,OAAO,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MACvD,MAAM,cAAc,KAAK,gBAAgB,QAAQ;AAAA,MACjD,IAAI,CAAC;AAAA,QAAa,MAAM,mBAAmB,QAAQ;AAAA,MACnD,IAAI,YAAY,UAAU;AAAA,QAAW,OAAO;AAAA,MAC5C,IAAI,YAAY,UAAU;AAAA,QAAU,MAAM,aAAa,aAAa,cAAc;AAAA,MAClF,KAAK,qBAAqB,aAAa,EAAE,UAAU,CAAC,IAAI,SAAS,GAAG,GAAG,QAAQ;AAAA,MAC/E,MAAM,UAAU,KAAK,aAAa,OAAO,WAAoB,WAAW,SAAS;AAAA,MACjF,KAAK,kBAAkB,OAAO;AAAA,MAC9B,OAAO,gBAAgB,OAAO;AAAA,KAC/B;AAAA;AAAA,EAGH,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,UAAU,CAAC,WAAmB,iBAA8C;AAAA,IAClF,OAAO,KAAK,WAAW,GACpB,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IAAI,WAAW,kBAAkB,IAAI,CAAC;AAAA;AAAA,EAGnC,aAAa,CAAC,WAAmB,IAA2B;AAAA,IAClE,MAAM,MAAM,KAAK,WAAW,GACzB,MAAM,+DAA+D,EACrE,IAAI,WAAW,EAAE;AAAA,IACpB,IAAI;AAAA,MAAK,OAAO,cAAc,GAAG;AAAA,IACjC,MAAM,IAAI,oBACR,kBACA,iCAAiC,kCAAkC,aACrE;AAAA;AAAA,EAGM,eAAe,CACrB,QACA,QACA,gBACqB;AAAA,IACrB,MAAM,UAAU,oBAAoB,OAAO,OAAO;AAAA,IAClD,MAAM,QAAQ,uBAAuB,OAAO,KAAK;AAAA,IACjD,IAAI,MAAM,KAAK,WAAW,GACvB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IACC,OAAO,WACP,QAAQ,MACR,QAAQ,IACR,MAAM,OACN,MAAM,UACN,OAAO,MAAM,YAAY,CAC3B;AAAA,IAEF,IAAI,CAAC,OAAO,IAAI,sBAAsB,eAAe;AAAA,MACnD,MAAM,SAAS,qBAAqB,KAAK,kBAAkB,QAAQ,MAAM,GAAG,KAAK;AAAA,MACjF,MAAM;AAAA,QACJ,eAAe,OAAO,OAAO,SAAS;AAAA,QACtC,iBAAiB,KAAK,mBAAmB;AAAA,QACzC,gBAAgB,KAAK,kBAAkB;AAAA,QACvC,mBAAmB,OAAO;AAAA,MAC5B;AAAA,MACA,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAWF,EACC,IACC,OAAO,WACP,QAAQ,MACR,QAAQ,IACR,MAAM,OACN,MAAM,UACN,OAAO,MAAM,YAAY,GACzB,OAAO,IAAI,YAAY,GACvB,IAAI,eACJ,IAAI,mBACJ,IAAI,KAAK,EAAE,YAAY,CACzB;AAAA,IACJ;AAAA,IACA,OAAO,aAAa,QAAQ,QAAQ,KAAK,cAAc;AAAA;AAAA,EAGjD,cAAc,CACpB,WACA,cACA,QACA,QACA,SACA,WACM;AAAA,IACN,MAAM,UAAU,oBAAoB,YAAY;AAAA,IAChD,MAAM,MAAM,KAAK,WAAW,GACzB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IACC,WACA,QAAQ,MACR,QAAQ,IACR,OAAO,OACP,OAAO,UACP,OAAO,MAAM,YAAY,CAC3B;AAAA,IACF,MAAM,WAAW,OAAO,KAAK,mBAAmB,GAAG,KAAK,QAAQ,YAAY;AAAA,IAC5E,MAAM,UAAU,OAAO,KAAK,kBAAkB,GAAG,KAAK,QAAQ,WAAW;AAAA,IACzE,IAAI,WAAW,MAAM,UAAU,IAAI;AAAA,MACjC,MAAM,IAAI,MAAM,uDAAuD;AAAA,IACzE;AAAA,IACA,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAcF,EACC,IACC,WACA,QAAQ,MACR,QAAQ,IACR,OAAO,OACP,OAAO,UACP,OAAO,MAAM,YAAY,GACzB,OAAO,IAAI,YAAY,GACvB,KAAK,iBAAiB,KACtB,SAAS,SAAS,GAClB,QAAQ,SAAS,GACjB,KAAK,qBAAqB,YAC1B,UAAU,YAAY,CACxB;AAAA;AAAA,EAGI,oBAAoB,CAC1B,aACA,YACA,WACM;AAAA,IACN,WAAW,UAAU,YAAY,SAAS;AAAA,MACxC,MAAM,SAAS,uBAAuB,OAAO,QAAQ;AAAA,MACrD,KAAK,eACH,YAAY,WACZ,OAAO,SACP,QACA,YAAY,QACZ;AAAA,WACM,WAAW,aAAa,YACxB,CAAC,IACD,EAAE,UAAU,WAAW,WAAW,OAAO,OAAO;AAAA,WAChD,WAAW,YAAY,YACvB,CAAC,IACD,EAAE,SAAS,WAAW,UAAU,OAAO,OAAO;AAAA,MACpD,GACA,SACF;AAAA,IACF;AAAA;AAAA,EAGM,yBAAyB,CAC/B,aACA,OACA,WACM;AAAA,IACN,WAAW,UAAU,YAAY,SAAS;AAAA,MACxC,MAAM,SAAS,uBAAuB,OAAO,QAAQ;AAAA,MACrD,MAAM,SAAS,qBAAqB,CAAC,KAAK,GAAG,MAAM;AAAA,MACnD,IAAI,OAAO,qBAAqB,YAAY;AAAA,QAC1C,KAAK,eACH,YAAY,WACZ,OAAO,SACP,QACA,YAAY,QACZ,YAAY,UAAU,WAClB,EAAE,UAAU,CAAC,OAAO,OAAO,IAC3B,EAAE,SAAS,CAAC,OAAO,OAAO,GAC9B,SACF;AAAA,MACF,EAAO,SAAI,YAAY,UAAU,UAAU;AAAA,QACzC,KAAK,eACH,YAAY,WACZ,OAAO,SACP,QACA,YAAY,QACZ,EAAE,UAAU,CAAC,OAAO,QAAQ,SAAS,OAAO,OAAO,GACnD,SACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA,EAGM,iBAAiB,CAAC,aAA2C;AAAA,IACnE,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IAAI,GAAG,qBAAqB,WAAW,CAAC;AAAA;AAAA,EAGrC,iBAAiB,CAAC,aAA2C;AAAA,IACnE,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IACC,YAAY,OACZ,YAAY,iBAAiB,MAC7B,YAAY,UAAU,YAAY,GAClC,YAAY,WACZ,YAAY,aACZ,YAAY,SACZ,YAAY,MACd;AAAA;AAAA,EAGI,eAAe,CAAC,OAKU;AAAA,IAChC,MAAM,MAAM,KAAK,WAAW,GACzB,MACC;AAAA;AAAA;AAAA,SAIF,EACC,IACC,MAAM,WACN,MAAM,aACN,MAAM,SACN,MAAM,MACR;AAAA,IACF,OAAO,MAAM,mBAAmB,GAAG,IAAI;AAAA;AAAA,EAGjC,iBAAiB,CACvB,QACA,QACmC;AAAA,IACnC,MAAM,UAAU,oBAAoB,OAAO,OAAO;AAAA,IAClD,MAAM,OAAO,KAAK,WAAW,GAC1B,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAmCF,EACC,IACC,OAAO,WACP,OAAO,MAAM,YAAY,GACzB,OAAO,IAAI,YAAY,GACvB,QAAQ,MACR,QAAQ,MACR,QAAQ,IACR,QAAQ,MACR,QAAQ,IACR,QAAQ,MACR,QAAQ,EACV;AAAA,IACF,OAAO,KAAK,IAAI,CAAC,QAAQ,uBAAuB,KAAK,OAAO,OAAO,CAAC;AAAA;AAAA,EAG9D,sBAAsB,CAAC,WAAmB,eAA+C;AAAA,IAC/F,MAAM,MAAM,KAAK,WAAW,GACzB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAiBF,EACC,IAAI,WAAW,aAAa;AAAA,IAC/B,IAAI,KAAK;AAAA,MACP,MAAM,SAAS,KAAK,WAAW,GAC5B,MACC;AAAA;AAAA;AAAA;AAAA,WAKF,EACC,IAAI,WAAW,aAAa;AAAA,MAC/B,OAAO,uBACL,KACA,WACA,OAAO,IAAI,CAAC,UAAU,MAAM,QAAQ,CACtC;AAAA,IACF;AAAA,IACA,MAAM,IAAI,oBACR,wBACA,iCAAiC,6CAA6C,aAChF;AAAA;AAAA,EAGM,qBAAqB,CAAC,WAAmB,aAA2B;AAAA,IAC1E,MAAM,MAAM,KAAK,WAAW,GACzB,MAAM,0DAA0D,EAChE,IAAI,WAAW,WAAW;AAAA,IAC7B,IAAI;AAAA,MAAK;AAAA,IACT,MAAM,IAAI,oBACR,qBACA,oCAAoC,2CAA2C,aACjF;AAAA;AAEJ;AA4DA,SAAS,aAAa,CAAC,KAAsC;AAAA,EAC3D,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,SAAS,wBAAwB,IAAI,cAAc,IAAI,UAAU;AAAA,IACjE,OAAO,0BAA0B;AAAA,MAC/B,OAAO,IAAI;AAAA,MACX,UAAU,IAAI;AAAA,MACd,QAAQ,OAAO,IAAI,YAAY;AAAA,IACjC,CAAC;AAAA,IACD,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI,YAAY;AAAA,IACzB,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGF,SAAS,YAAY,CACnB,QACA,QACA,KACA,gBACqB;AAAA,EACrB,MAAM,QAAQ,uBAAuB,OAAO,KAAK;AAAA,EACjD,MAAM,SAAS,OAAO,IAAI,aAAa;AAAA,EACvC,MAAM,WAAW,OAAO,IAAI,eAAe;AAAA,EAC3C,MAAM,UAAU,OAAO,IAAI,cAAc;AAAA,EACzC,MAAM,WAAW,SAAS,WAAW;AAAA,EACrC,MAAM,WAAW,CAAC,WAAmB,0BAA0B,KAAK,OAAO,OAAO,CAAC;AAAA,EACnF,OAAO;AAAA,IACL;AAAA,IACA,QAAQ,gBAAgB,MAAM;AAAA,IAC9B,aAAa;AAAA,MACX,QAAQ,SAAS,MAAM;AAAA,MACvB,UAAU,SAAS,QAAQ;AAAA,MAC3B,SAAS,SAAS,OAAO;AAAA,MACzB,WAAW,SAAS,MAAM,SAAS,WAAW,MAAM,SAAS,WAAW,EAAE;AAAA,IAC5E;AAAA,IACA,kBAAkB,IAAI;AAAA,IACtB,WAAW,YAAY,MAAM;AAAA,IAC7B,UACE,OAAO,QAAQ,SAAS,WACxB,mBAAmB,aACnB,CAAC,eAAe,IAAI,OAAO,QAAQ,EAAE;AAAA,EACzC;AAAA;AAGF,SAAS,sBAAsB,CAC7B,KACA,SACA,oBAAoB,SAAS,SAAS,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,GACxC;AAAA,EACxB,MAAM,cAAc,IAAI,iBAAiB,OAAO,YAAY,OAAO,IAAI,YAAY;AAAA,EACnF,MAAM,YAAY,IAAI,uBACjB,EAAE,MAAM,QAAQ,IAAI,IAAI,qBAAqB,IAC9C,IAAI,kCACD,EAAE,MAAM,kBAAkB,IAAI,IAAI,gCAAgC,IACnE;AAAA,EACN,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,eAAe,IAAI;AAAA,IACnB,aAAa,IAAI;AAAA,IACjB,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,YAAY,IAAI,KAAK,IAAI,WAAW;AAAA,OAChC,gBAAgB,aAAa,OAAO,cAAc,WAAW,IAAI,EAAE,YAAY,IAAI,CAAC;AAAA,IACxF;AAAA,OACI,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,OAC7B,IAAI,qBAAqB,WAC7B,IAAI,uBAAuB,QAC3B,IAAI,2BAA2B,OAC3B;AAAA,MACE,WAAW;AAAA,QACT,QAAQ;AAAA,QACR,OAAO;AAAA,UACL,UAAU,IAAI;AAAA,UACd,aAAa,IAAI;AAAA,QACnB;AAAA,MACF;AAAA,IACF,IACA,IAAI,qBAAqB,gBACvB,EAAE,WAAW,EAAE,QAAQ,cAAuB,EAAE,IAChD,CAAC;AAAA,EACT;AAAA;AAGF,SAAS,kBAAkB,CAAC,KAAwD;AAAA,EAClF,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,SAAS,qBAAqB,IAAI,OAAO;AAAA,IACzC,YAAY,IAAI;AAAA,IAChB,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,OAAO,IAAI,KAAK,IAAI,YAAY;AAAA,MAChC,KAAK,IAAI,KAAK,IAAI,UAAU;AAAA,MAC5B,SAAS,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC;AAAA,IACA,OAAO,IAAI;AAAA,OACP,IAAI,oBAAoB,OAAO,CAAC,IAAI,EAAE,eAAe,IAAI,gBAAgB;AAAA,IAC7E,YAAY,IAAI,KAAK,IAAI,WAAW;AAAA,IACpC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGF,SAAS,oBAAoB,CAAC,OAAoD;AAAA,EAChF,MAAM,UAAU,KAAK,MAAM,KAAK;AAAA,EAChC,OAAO,QAAQ,IAAI,CAAC,YAAY;AAAA,IAC9B,SAAS,gBAAgB,OAAO,OAAO;AAAA,IACvC,UAAU,2BAA2B,CAAC,OAAO,QAAQ,GAAG,eAAe,EAAE;AAAA,EAC3E,EAAE;AAAA;AAGJ,SAAS,oBAAoB,CAAC,aAAyD;AAAA,EACrF,OAAO;AAAA,IACL,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,KAAK,UAAU,YAAY,OAAO;AAAA,IAClC,YAAY;AAAA,IACZ,YAAY,OAAO,MAAM,YAAY;AAAA,IACrC,YAAY,OAAO,IAAI,YAAY;AAAA,IACnC,YAAY;AAAA,IACZ,YAAY,iBAAiB;AAAA,IAC7B,YAAY,WAAW,YAAY;AAAA,IACnC,YAAY,UAAU,YAAY;AAAA,EACpC;AAAA;AAGF,SAAS,mBAAmB,CAAC,UAA2B,MAA6B;AAAA,EACnF,IACE,iBAAiB,uBAAuB,QAAQ,CAAC,MACjD,iBAAiB,uBAAuB,IAAI,CAAC,GAC7C;AAAA,IACA,MAAM,IAAI,UAAU,+DAA+D;AAAA,EACrF;AAAA;AAGF,SAAS,sBAAsB,CAAC,OAAoC;AAAA,EAClE,gBAAe,MAAM,WAAW,WAAW;AAAA,EAC3C,gBAAe,MAAM,IAAI,WAAW;AAAA;AAGtC,SAAS,eAAe,CAAC,QAA4C;AAAA,EACnE,OAAO,IAAI,oBACT,oBACA,4FAA4F,OAAO,MACrG;AAAA;AAGF,SAAS,kBAAkB,CAAC,OAIJ;AAAA,EACtB,OAAO,IAAI,oBACT,uBACA,2CAA2C,MAAM,yCAAyC,MAAM,wBAAwB,MAAM,UAChI;AAAA;AAGF,SAAS,sBAAsB,CAAC,QAAqC;AAAA,EACnE,OAAO,IAAI,oBACT,2BACA,2CAA2C,uDAC7C;AAAA;AAGF,SAAS,YAAY,CAAC,aAAqC,WAAwC;AAAA,EACjG,OAAO,IAAI,oBACT,6BACA,uBAAuB,wCAAwC,YAAY,qBAAqB,YAAY,SAC9G;AAAA;AAGF,SAAS,iBAAiB,CAAC,OAAyB;AAAA,EAClD,OAAO,iBAAiB,SAAS,cAAc,KAAK,MAAM,OAAO;AAAA;;;ACl8BnE,6BAAS;;;ACTT,6BAAS;;;ACiKF,SAAS,eAAe,CAAC,KAAoC;AAAA,EAClE,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,OAAO,IAAI;AAAA,IACX,aAAa,IAAI,gBAAgB;AAAA,IACjC,WAAW,IAAI,cAAc;AAAA,IAC7B,QAAQ,IAAI;AAAA,IACZ,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGK,SAAS,mBAAmB,CAAC,KAAoD;AAAA,EACtF,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,YAAY,IAAI;AAAA,IAChB,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,QAAQ,oBAAoB,IAAI,MAAM;AAAA,IACtC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGK,SAAS,yBAAyB,CAAC,KAAwD;AAAA,EAChG,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,MAAM,IAAI;AAAA,IACV,aAAa,IAAI,eAAe;AAAA,IAChC,QAAQ,IAAI;AAAA,IACZ,oBACE,IAAI,6BAA6B,IAAI,0BACjC;AAAA,MACE,MAAM,IAAI;AAAA,MACV,IAAI,IAAI;AAAA,IACV,IACA;AAAA,IACN,oBAAoB,IAAI,yBAAyB;AAAA,IACjD,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGK,SAAS,wCAAwC,CACtD,KACqC;AAAA,EACrC,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,kBAAkB,IAAI;AAAA,IACtB,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGK,SAAS,kBAAkB,CAAC,KAA0C;AAAA,EAC3E,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,QAAQ,IAAI;AAAA,IACZ,YAAY,IAAI;AAAA,IAChB,UAAU,IAAI;AAAA,IACd,WAAW,IAAI;AAAA,IACf,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,mBAAmB,IAAI,sBAAsB,IAAI,KAAK,IAAI,mBAAmB,IAAI;AAAA,IACjF,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,IACvD,YAAY,IAAI,eAAe,IAAI,KAAK,IAAI,YAAY,IAAI;AAAA,IAC5D,WAAW,IAAI,cAAc;AAAA,IAC7B,WAAW,IAAI,cAAc;AAAA,IAC7B,QACE,IAAI,uBAAuB,QAAQ,IAAI,gBAAgB,QAAQ,IAAI,sBAAsB,OACrF;AAAA,MACE,YAAY,IAAI;AAAA,MAChB,iBAAiB,IAAI,KAAK,IAAI,iBAAiB;AAAA,MAC/C,kBAAkB,IAAI;AAAA,MACtB,0BAA0B,IAAI,+BAA+B;AAAA,MAC7D,aAAa,IAAI,eAAe,IAAI,KAAK,IAAI,YAAY,IAAI;AAAA,IAC/D,IACA;AAAA,EACR;AAAA;AAGK,SAAS,sBAAsB,CAAC,KAAkD;AAAA,EACvF,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,SAAS,EAAE,MAAM,IAAI,cAAc,IAAI,IAAI,WAAW;AAAA,IACtD,WAAW,IAAI;AAAA,IACf,UAAU,yBAAyB,IAAI,SAAS;AAAA,IAChD,oBACE,IAAI,6BAA6B,IAAI,0BACjC;AAAA,MACE,MAAM,IAAI;AAAA,MACV,IAAI,IAAI;AAAA,IACV,IACA;AAAA,IACN,oBAAoB,IAAI,yBAAyB;AAAA,IACjD,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,IACvD,YAAY,IAAI,eAAe,IAAI,KAAK,IAAI,YAAY,IAAI;AAAA,IAC5D,mBAAmB,IAAI,wBAAwB;AAAA,IAC/C,mBAAmB,IAAI,wBAAwB;AAAA,EACjD;AAAA;AAGK,SAAS,qBAAqB,CACnC,KACA,UACkB;AAAA,EAClB,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,OAAO,IAAI;AAAA,IACX;AAAA,IACA,QAAQ,IAAI;AAAA,IACZ,oBACE,IAAI,6BAA6B,IAAI,0BACjC;AAAA,MACE,MAAM,IAAI;AAAA,MACV,IAAI,IAAI;AAAA,IACV,IACA;AAAA,IACN,oBAAoB,IAAI,yBAAyB;AAAA,IACjD,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,EACzD;AAAA;AAGK,SAAS,0BAA0B,CACxC,KACuB;AAAA,EACvB,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGK,SAAS,oBAAoB,CAAC,KAA8C;AAAA,EACjF,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,YAAY,IAAI;AAAA,IAChB,UAAU,IAAI;AAAA,IACd,OAAO,IAAI;AAAA,IACX,WAAW,IAAI;AAAA,IACf,UAAU,IAAI,aAAa;AAAA,IAC3B,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,EACzD;AAAA;AAGK,SAAS,mCAAmC,CACjD,KACgC;AAAA,EAChC,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,YAAY,IAAI;AAAA,IAChB,UAAU,IAAI;AAAA,IACd,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,IACf,cAAc,IAAI;AAAA,IAClB,UAAU,IAAI,aAAa;AAAA,IAC3B,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,EAC5D;AAAA;AAGK,SAAS,8BAA8B,CAC5C,KAC2B;AAAA,EAC3B,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,gBAAgB,IAAI;AAAA,IACpB,UAAU,IAAI;AAAA,IACd,YAAY,IAAI;AAAA,IAChB,QAAQ,IAAI;AAAA,IACZ,gBAAgB,IAAI,oBAAoB;AAAA,IACxC,mBAAmB,IAAI,uBAAuB;AAAA,IAC9C,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,UAAU,IAAI,YAAY,IAAI,KAAK,IAAI,SAAS,IAAI;AAAA,IACpD,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,EAC5D;AAAA;AAGK,SAAS,uBAAuB,CACrC,OACe;AAAA,EACf,OAAO,QAAQ,KAAK,UAAU,KAAK,IAAI;AAAA;AAGlC,SAAS,4BAA4B,CAAC,OAAqD;AAAA,EAChG,OAAO,UAAU,YAAY,OAAO,KAAK,UAAU,KAAK;AAAA;AAG1D,SAAS,mBAAmB,CAAC,OAAqE;AAAA,EAChG,OAAO,QAAS,KAAK,MAAM,KAAK,IAA0C;AAAA;AAG5E,SAAS,wBAAwB,CAAC,OAAqD;AAAA,EACrF,OAAO,UAAU,OAAO,YAAa,KAAK,MAAM,KAAK;AAAA;;;ACxXvD;AAqBO,SAAS,cAAc,CAAC,OAAe,OAAuB;AAAA,EACnE,MAAM,aAAa,MAAM,KAAK;AAAA,EAC9B,IAAI,CAAC,YAAY;AAAA,IACf,MAAM,IAAI,iBAAiB,iBAAiB,UAAU,mCAAmC;AAAA,EAC3F;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,cAAc,CAAC,OAAuB;AAAA,EACpD,OAAO,eAAe,OAAO,OAAO,EAAE,YAAY;AAAA;AAG7C,SAAS,iBAAiB,CAAC,UAA4D;AAAA,EAC5F,OAAO,CAAC,GAAG,IAAI,KAAK,YAAY,CAAC,GAAG,IAAI,CAAC,YAAY,eAAe,SAAS,UAAU,CAAC,CAAC,CAAC;AAAA;AAGrF,SAAS,SAAS,CAAC,OAA+B;AAAA,EACvD,OAAO,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI;AAAA;AAGhC,SAAS,KAAK,CAAC,OAAqB;AAAA,EACzC,OAAO,MAAM,YAAY;AAAA;AAGpB,SAAS,cAAc,CAAC,QAAiD;AAAA,EAC9E,OAAO,WAAW,aAAa,OAAO,WAAW;AAAA;AAG5C,SAAS,gBAAgB,CAC9B,OACA,MACA,OACQ;AAAA,EACR,MAAM,SAAS,MAAM,UAAU;AAAA,EAE/B,IAAI,MAAM,UAAU,WAAW;AAAA,IAC7B,KAAK,KAAK,MAAM,OAAO,MAAM;AAAA,IAC7B,OAAO,GAAG;AAAA,EACZ;AAAA,EAEA,IAAI,SAAS,GAAG;AAAA,IACd,KAAK,KAAK,MAAM;AAAA,IAChB,OAAO,GAAG;AAAA,EACZ;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,cAAc,CAC5B,IACA,QAC0B;AAAA,EAC1B,OAAO,GACJ,MAAM,0DAA0D,EAChE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA;AAG7B,SAAS,iBAAiB,CAC/B,IACA,QAC0B;AAAA,EAC1B,OAAO,GACJ,MAAM,6DAA6D,EACnE,IAAI,OAAO,WAAW,eAAe,OAAO,KAAK,CAAC;AAAA;AAGhD,SAAS,uBAAuB,CACrC,IACA,QAKkC;AAAA,EAClC,OAAO,GACJ,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOF,EACC,IAAI,OAAO,WAAW,OAAO,YAAY,OAAO,OAAO;AAAA;AAGrD,SAAS,iBAAiB,CAC/B,IACA,QAC6B;AAAA,EAC7B,OAAO,GACJ,MAAM,6DAA6D,EACnE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA;AAG7B,SAAS,cAAc,CAC5B,IACA,QAC8C;AAAA,EAC9C,MAAM,MAAM,kBAAkB,IAAI,MAAM;AAAA,EACxC,OAAO,MAAM,mBAAmB,GAAG,IAAI;AAAA;AAGlC,SAAS,kBAAkB,CAChC,IACA,QACuC;AAAA,EACvC,MAAM,UAAU,eAAe,IAAI,MAAM;AAAA,EACzC,IAAI,CAAC,SAAS;AAAA,IACZ,MAAM,IAAI,iBACR,mBACA,mBAAmB,OAAO,8BAA8B,OAAO,aACjE;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,qBAAqB,CACnC,IACA,QACmB;AAAA,EACnB,MAAM,OAAO,GACV,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOF,EACC,IAAI,OAAO,WAAW,OAAO,YAAY;AAAA,EAE5C,OAAO,KAAK,IAAI,CAAC,QAAQ,IAAI,QAAQ;AAAA;AAGhC,SAAS,iBAAiB,CAC/B,IACA,QACyB;AAAA,EACzB,MAAM,MAAM,GACT,MAAM,gEAAgE,EACtE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,EAElC,OAAO,MAAM,sBAAsB,IAAI,GAAG,IAAI;AAAA;AAGzC,SAAS,qBAAqB,CACnC,IACA,QACkB;AAAA,EAClB,MAAM,aAAa,kBAAkB,IAAI,MAAM;AAAA,EAC/C,IAAI,CAAC,YAAY;AAAA,IACf,MAAM,IAAI,iBACR,sBACA,sBAAsB,OAAO,8BAA8B,OAAO,aACpE;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,0BAA0B,CACxC,IACA,QACyB;AAAA,EACzB,MAAM,MAAM,GACT,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAUF,EACC,IACC,OAAO,WACP,eAAe,OAAO,KAAK,GAC3B,MAAM,OAAO,GAAG,CAClB;AAAA,EAEF,OAAO,MAAM,sBAAsB,IAAI,GAAG,IAAI;AAAA;AAGzC,SAAS,uBAAuB,CACrC,IACA,QAKM;AAAA,EACN,GAAG,MAAM,+EAA+E,EAAE,IACxF,OAAO,WACP,OAAO,YACT;AAAA,EAEA,YAAY,OAAO,YAAY,OAAO,SAAS,QAAQ,GAAG;AAAA,IACxD,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAQF,EAAE,IAAI,OAAO,WAAW,OAAO,cAAc,SAAS,KAAK;AAAA,EAC7D;AAAA;AAGK,SAAS,mBAAmB,CACjC,IACA,QAC+B;AAAA,EAC/B,OAAO,GACJ,MAAM,gEAAgE,EACtE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA;AAG7B,SAAS,gBAAgB,CAC9B,IACA,QACwB;AAAA,EACxB,MAAM,MAAM,oBAAoB,IAAI,MAAM;AAAA,EAC1C,OAAO,MAAM,qBAAqB,GAAG,IAAI;AAAA;AAGpC,SAAS,gBAAgB,CAC9B,IACA,QAMiB;AAAA,EACjB,MAAM,YAAY,eAAe,OAAO,WAAW,YAAY;AAAA,EAC/D,MAAM,KAAK,eAAe,OAAO,IAAI,eAAe;AAAA,EACpD,MAAM,YAAY,eAAe,OAAO,WAAW,uBAAuB;AAAA,EAC1E,MAAM,MAAM,oBAAoB,IAAI,EAAE,WAAW,GAAG,CAAC;AAAA,EAErD,IAAI,CAAC,KAAK;AAAA,IACR,MAAM,IAAI,iBACR,sBACA,sBAAsB,8BAA8B,aACtD;AAAA,EACF;AAAA,EAEA,IAAI,IAAI,eAAe,aAAa,IAAI,eAAe,IAAI,YAAY;AAAA,IACrE,MAAM,IAAI,iBACR,sBACA,sBAAsB,iCAAiC,aACzD;AAAA,EACF;AAAA,EAEA,IAAI,IAAI,KAAK,IAAI,UAAU,KAAK,OAAO,YAAY;AAAA,IACjD,MAAM,IAAI,iBACR,sBACA,sBAAsB,+BAA+B,aACvD;AAAA,EACF;AAAA,EAEA,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA,GAMF,EAAE,IAAI,MAAM,OAAO,UAAU,GAAG,WAAW,EAAE;AAAA,EAE7C,OAAO,qBAAqB;AAAA,OACvB;AAAA,IACH,aAAa,MAAM,OAAO,UAAU;AAAA,EACtC,CAAC;AAAA;AAGI,SAAS,qBAAqB,CACnC,IACA,QACiC;AAAA,EACjC,OAAO,GACJ,MAAM,gFAAgF,EACtF,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA;AAG7B,SAAS,kBAAkB,CAChC,IACA,QACuC;AAAA,EACvC,MAAM,MAAM,sBAAsB,IAAI,MAAM;AAAA,EAC5C,OAAO,MAAM,oCAAoC,GAAG,IAAI;AAAA;AAGnD,SAAS,kBAAkB,CAChC,IACA,QAMgC;AAAA,EAChC,MAAM,YAAY,eAAe,OAAO,WAAW,YAAY;AAAA,EAC/D,MAAM,KAAK,eAAe,OAAO,IAAI,+BAA+B;AAAA,EACpE,MAAM,YAAY,eAAe,OAAO,WAAW,iBAAiB;AAAA,EACpE,MAAM,MAAM,sBAAsB,IAAI,EAAE,WAAW,GAAG,CAAC;AAAA,EAEvD,IAAI,CAAC,KAAK;AAAA,IACR,MAAM,IAAI,iBACR,wBACA,sCAAsC,8BAA8B,aACtE;AAAA,EACF;AAAA,EAEA,IAAI,IAAI,eAAe,aAAa,IAAI,aAAa;AAAA,IACnD,MAAM,IAAI,iBACR,wBACA,sCAAsC,iCAAiC,aACzE;AAAA,EACF;AAAA,EAEA,IAAI,IAAI,KAAK,IAAI,UAAU,KAAK,OAAO,YAAY;AAAA,IACjD,MAAM,IAAI,iBACR,wBACA,sCAAsC,+BAA+B,aACvE;AAAA,EACF;AAAA,EAEA,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA,GAMF,EAAE,IAAI,MAAM,OAAO,UAAU,GAAG,WAAW,EAAE;AAAA,EAE7C,OAAO,oCAAoC;AAAA,OACtC;AAAA,IACH,aAAa,MAAM,OAAO,UAAU;AAAA,EACtC,CAAC;AAAA;AAGI,SAAS,4BAA4B,CAC1C,IACA,WACA,SACM;AAAA,EACN,MAAM,YAAY,eAAe,QAAQ,IAAI,YAAY;AAAA,EACzD,eAAe,QAAQ,UAAU,kBAAkB;AAAA,EACnD,eAAe,QAAQ,WAAW,oBAAoB;AAAA,EACtD,yBAAyB,IAAI,WAAW,SAAS;AAAA;AAG5C,SAAS,wBAAwB,CAAC,IAAc,WAAmB,WAAyB;AAAA,EACjG,IAAI,kBAAkB,IAAI,EAAE,WAAW,IAAI,UAAU,CAAC,GAAG;AAAA,IACvD,MAAM,IAAI,iBACR,qBACA,mBAAmB,0CAA0C,aAC/D;AAAA,EACF;AAAA;AAGK,SAAS,aAAa,CAC3B,IACA,OACuC;AAAA,EACvC,MAAM,KAAK,eAAe,MAAM,IAAI,YAAY;AAAA,EAChD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,EAC9D,MAAM,SAAS,eAAe,MAAM,QAAQ,SAAS;AAAA,EACrD,MAAM,aAAa,eAAe,MAAM,YAAY,aAAa;AAAA,EACjE,MAAM,WAAW,eAAe,MAAM,UAAU,kBAAkB;AAAA,EAClE,MAAM,YAAY,eAAe,MAAM,WAAW,oBAAoB;AAAA,EAEtE,yBAAyB,IAAI,WAAW,EAAE;AAAA,EAE1C,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkBF,EAAE,IACA,WACA,IACA,QACA,YACA,UACA,WACA,MAAM,MAAM,SAAS,GACrB,MAAM,MAAM,SAAS,GACrB,MAAM,oBAAoB,MAAM,MAAM,iBAAiB,IAAI,MAC3D,MAAM,aAAa,MACnB,MAAM,aAAa,MACnB,MAAM,SAAS,eAAe,MAAM,OAAO,YAAY,qBAAqB,IAAI,MAChF,MAAM,SAAS,MAAM,MAAM,OAAO,eAAe,IAAI,MACrD,MAAM,SAAS,eAAe,MAAM,OAAO,kBAAkB,oBAAoB,IAAI,IACvF;AAAA,EAEA,MAAM,UAAU,eAAe,IAAI,EAAE,WAAW,GAAG,CAAC;AAAA,EACpD,IAAI,CAAC,SAAS;AAAA,IACZ,MAAM,IAAI,iBACR,mBACA,kCAAkC,oBAAoB,aACxD;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,2BAA2B,CACzC,IACA,QAMkD;AAAA,EAClD,MAAM,YAAY,MAAM,OAAO,SAAS;AAAA,EACxC,MAAM,oBAAoB,OAAO,aAAa,YAAY,KAAK;AAAA,EAC/D,MAAM,aACJ,OAAO,aAAa,YAChB,CAAC,OAAO,WAAW,OAAO,QAAQ,WAAW,SAAS,IACtD,CAAC,OAAO,WAAW,OAAO,QAAQ,OAAO,UAAU,WAAW,SAAS;AAAA,EAC7E,MAAM,aACJ,OAAO,aAAa,YAChB,CAAC,WAAW,OAAO,WAAW,OAAO,QAAQ,WAAW,SAAS,IACjE,CAAC,WAAW,OAAO,WAAW,OAAO,QAAQ,OAAO,UAAU,WAAW,SAAS;AAAA,EACxF,MAAM,OAAO,GACV,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,UAKI;AAAA;AAAA;AAAA;AAAA;AAAA,KAMN,EACC,IAAI,GAAG,UAAU;AAAA,EAEpB,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA,QAKI;AAAA;AAAA;AAAA;AAAA,GAKN,EAAE,IAAI,GAAG,UAAU;AAAA,EAEnB,OAAO,KAAK,IAAI,CAAC,QACf,mBAAmB;AAAA,OACd;AAAA,IACH,YAAY;AAAA,EACd,CAAC,CACH;AAAA;AAGK,SAAS,qBAAqB,CACnC,IACA,OACuB;AAAA,EACvB,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,EAC9D,MAAM,SAAS,eAAe,MAAM,QAAQ,SAAS;AAAA,EACrD,MAAM,UAAU,eAAe,MAAM,SAAS,UAAU;AAAA,EACxD,IAAI,CAAC,eAAe,IAAI,EAAE,WAAW,IAAI,OAAO,CAAC,GAAG;AAAA,IAClD,MAAM,IAAI,iBACR,gBACA,gBAAgB,kCAAkC,aACpD;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,mBAAmB,IAAI,EAAE,WAAW,QAAQ,QAAQ,CAAC;AAAA,EAEtE,IAAI,UAAU;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,UAAU,MAAM,SAAS;AAAA,EAC3C,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASF,EAAE,IAAI,WAAW,QAAQ,SAAS,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,EAEhE,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,MAAM;AAAA,IACd;AAAA,EACF;AAAA;AAGK,SAAS,qBAAqB,CACnC,IACA,QAC8B;AAAA,EAC9B,MAAM,YAAY,eAAe,OAAO,WAAW,YAAY;AAAA,EAC/D,MAAM,SAAS,eAAe,OAAO,QAAQ,SAAS;AAAA,EACtD,MAAM,UAAU,eAAe,OAAO,SAAS,UAAU;AAAA,EAEzD,MAAM,WAAW,mBAAmB,IAAI,EAAE,WAAW,QAAQ,QAAQ,CAAC;AAAA,EACtE,IAAI,CAAC,UAAU;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EAEA,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA,GAMF,EAAE,IAAI,WAAW,QAAQ,OAAO;AAAA,EAEhC,OAAO;AAAA;AAGF,SAAS,kBAAkB,CAChC,IACA,QAC8B;AAAA,EAC9B,MAAM,MAAM,GACT,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOF,EACC,IAAI,OAAO,WAAW,OAAO,QAAQ,OAAO,OAAO;AAAA,EAEtD,OAAO,MAAM,2BAA2B,GAAG,IAAI;AAAA;AAG1C,SAAS,sBAAsB,CACpC,IACA,QACkC;AAAA,EAClC,MAAM,OAAO,GACV,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOF,EACC,IAAI,OAAO,WAAW,OAAO,MAAM;AAAA,EAEtC,OAAO,KAAK,IAAI,0BAA0B;AAAA;AAGrC,SAAS,8BAA8B,CAC5C,IACA,QAC4B;AAAA,EAC5B,MAAM,QAAQ,eAAe,OAAO,KAAK;AAAA,EACzC,MAAM,YAAY,MAAM,OAAO,SAAS;AAAA,EACxC,MAAM,OAAO,GACV,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAUF,EACC,IAAI,OAAO,WAAW,OAAO,SAAS;AAAA,EAEzC,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASF,EAAE,IAAI,WAAW,OAAO,WAAW,OAAO,SAAS;AAAA,EAEnD,OAAO,KAAK,IAAI,CAAC,QACf,qBAAqB;AAAA,OAChB;AAAA,IACH,YAAY;AAAA,EACd,CAAC,CACH;AAAA;AAGK,SAAS,wBAAwB,CACtC,OACA,MAUA,SACO;AAAA,EACP,IAAI,yBAAwB,KAAK,GAAG;AAAA,IAClC,MAAM,IAAI,iBAAiB,MAAM,OAAO;AAAA,EAC1C;AAAA,EAEA,MAAM;AAAA;AAGR,SAAS,qBAAqB,CAAC,IAAc,KAAgD;AAAA,EAC3F,OAAO,sBACL,KACA,sBAAsB,IAAI;AAAA,IACxB,WAAW,IAAI;AAAA,IACf,cAAc,IAAI;AAAA,EACpB,CAAC,CACH;AAAA;;;AF1pBF,SAAS,qBAAqB,CAAC,IAAc,OAAsD;AAAA,EACjG,MAAM,KAAK,eAAe,MAAM,IAAI,iBAAiB;AAAA,EACrD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,EAC9D,MAAM,OAAO,eAAe,MAAM,MAAM,mBAAmB;AAAA,EAC3D,MAAM,YAAY,eAAe,MAAM,QAAQ,IAAI,yBAAyB;AAAA,EAC5E,MAAM,YAAY,eAAe,MAAM,WAAW,mBAAmB;AAAA,EACrE,yBAAyB,KAAK;AAAA,EAC9B,oBAAoB,IAAI,WAAW,MAAM,QAAQ,MAAM,SAAS;AAAA,EAChE,MAAM,WAAW,MAAM,aAAa,YAAY,YAAY,kBAAkB,MAAM,QAAQ;AAAA,EAE5F,IAAI;AAAA,IACF,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAiBF,EAAE,IACA,WACA,IACA,MACA,MAAM,MACN,MAAM,QAAQ,MACd,WACA,WACA,6BAA6B,QAAQ,GACrC,MAAM,oBAAoB,QAAQ,MAClC,MAAM,oBAAoB,MAAM,MAChC,MAAM,sBAAsB,MAC5B,MAAM,MAAM,SAAS,GACrB,MAAM,MAAM,SAAS,CACvB;AAAA,IACA,OAAO,OAAO;AAAA,IACd,yBACE,OACA,0BACA,wBAAwB,mCAAmC,aAC7D;AAAA;AAAA,EAGF,MAAM,MAAM,GACT,MAAM,kEAAkE,EACxE,IAAI,WAAW,EAAE;AAAA,EACpB,MAAM,QAAQ,MAAM,uBAAuB,GAAG,IAAI;AAAA,EAClD,IAAI,CAAC,OAAO;AAAA,IACV,MAAM,IAAI,kBACR,wBACA,wBAAwB,8BAA8B,aACxD;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAAA;AAGF,MAAM,2BAA2D;AAAA,EACzC;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAA+D;AAAA,IAC1E,OAAO,sBAAsB,KAAK,IAAI,KAAK;AAAA;AAAA,OAGvC,QAAO,CAAC,QAGwB;AAAA,IACpC,MAAM,MAAM,KAAK,GACd,MAAM,kEAAkE,EACxE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAClC,OAAO,MAAM,uBAAuB,GAAG,IAAI;AAAA;AAAA,OAGvC,KAAI,CAAC,OAAuE;AAAA,IAChF,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAC5C,IAAI,MAAM,MAAM;AAAA,MACd,aAAa,KAAK,UAAU;AAAA,MAC5B,KAAK,KAAK,MAAM,IAAI;AAAA,IACtB;AAAA,IACA,IAAI,MAAM,SAAS;AAAA,MACjB,aAAa,KAAK,oBAAoB,gBAAgB;AAAA,MACtD,KAAK,KAAK,MAAM,QAAQ,MAAM,MAAM,QAAQ,EAAE;AAAA,IAChD;AAAA,IACA,IAAI,CAAC,MAAM,gBAAgB;AAAA,MACzB,aAAa,KAAK,oBAAoB;AAAA,IACxC;AAAA,IAEA,MAAM,QAAQ,SAAS,aAAa,KAAK,OAAO;AAAA,IAChD,MAAM,QAAQ,MAAM,UAAU,SAAS,SAAS;AAAA,IAChD,MAAM,WAAW,KAAK,GACnB,MAAM,oDAAoD,OAAO,EACjE,IAAI,GAAG,IAAI;AAAA,IACd,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,IAC1B,MAAM,QAAQ,iBACZ;AAAA;AAAA;AAAA,QAGE;AAAA,4BACoB,aAAa;AAAA,OAEnC,WACA,KACF;AAAA,IACA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,IAElD,OAAO;AAAA,MACL,cAAc,KAAK,IAAI,sBAAsB;AAAA,MAC7C,SACE,MAAM,UAAU,YAAY,SAAS,MAAM,UAAU,KAAK,MAAM,QAAQ,SAAS;AAAA,MACnF,OAAO,SAAS;AAAA,IAClB;AAAA;AAAA,OAGI,qBAAoB,CAAC,QAMW;AAAA,IACpC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAUF,EACC,IACC,OAAO,WACP,OAAO,IACP,OAAO,MACP,OAAO,WACP,MAAM,OAAO,GAAG,CAClB;AAAA,IAEF,OAAO,MAAM,uBAAuB,GAAG,IAAI;AAAA;AAAA,OAGvC,OAAM,CAAC,QAIkB;AAAA,IAC7B,MAAM,WAAW,MAAM,KAAK,QAAQ,MAAM;AAAA,IAC1C,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,kBACR,wBACA,wBAAwB,OAAO,8BAA8B,OAAO,aACtE;AAAA,IACF;AAAA,IAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,OAMF,EACC,IAAI,MAAM,OAAO,SAAS,GAAG,OAAO,WAAW,OAAO,EAAE;AAAA,IAE3D,OAAO,KAAK,UAAU,WAAW,IAAI,KAAK,OAAO,SAAS,EAAE;AAAA;AAAA,OAGxD,MAAK,CAAC,QAMmB;AAAA,IAC7B,MAAM,WAAW,MAAM,KAAK,QAAQ,MAAM;AAAA,IAC1C,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,kBACR,wBACA,wBAAwB,OAAO,8BAA8B,OAAO,aACtE;AAAA,IACF;AAAA,IAEA,MAAM,oBAAoB,OAAO,aAAa,SAAS;AAAA,IACvD,MAAM,oBAAoB,OAAO,aAAa,SAAS;AAAA,IAEvD,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQF,EACC,IACC,MAAM,OAAO,UAAU,GACvB,qBAAqB,MACrB,qBAAqB,MACrB,OAAO,WACP,OAAO,EACT;AAAA,IAEF,OAAO;AAAA,SACF;AAAA,MACH,YAAY,IAAI,KAAK,OAAO,UAAU;AAAA,MACtC;AAAA,MACA;AAAA,IACF;AAAA;AAEJ;AAEA,SAAS,mBAAmB,CAC1B,IACA,WACA,aACA,WACM;AAAA,EACN,IAAI,gBAAgB,QAAQ;AAAA,IAC1B,MAAM,MAAM,GACT,MAAM,0DAA0D,EAChE,IAAI,WAAW,SAAS;AAAA,IAC3B,IAAI;AAAA,MAAK;AAAA,IACT,MAAM,IAAI,kBACR,gBACA,gBAAgB,qCAAqC,aACvD;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,GACT,MAAM,qEAAqE,EAC3E,IAAI,WAAW,SAAS;AAAA,EAC3B,IAAI;AAAA,IAAK;AAAA,EACT,MAAM,IAAI,kBACR,2BACA,2BAA2B,qCAAqC,aAClE;AAAA;AAGF,SAAS,wBAAwB,CAAC,OAAyC;AAAA,EACzE,IACG,MAAM,SAAS,cAAc,MAAM,QAAQ,SAAS,UACpD,MAAM,SAAS,oBAAoB,MAAM,QAAQ,SAAS,kBAC3D;AAAA,IACA;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,kBACR,iBACA,6BAA6B,MAAM,qCAAqC,MAAM,QAAQ,QACxF;AAAA;;;AG3RF,6BAAS;AAMF,MAAM,mCAA2E;AAAA,EACzD;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAA2E;AAAA,IACtF,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,KAAK,GACF,MAAM,iFAAiF,EACvF,IAAI,MAAM,WAAW,MAAM,MAAM,SAAS,CAAC;AAAA,MAC9C,MAAM,UAAU,KAAK,GAClB,MACC,sGACF,EACC,IAAI,MAAM,SAAS;AAAA,MACtB,IAAI,QAAQ,SAAS,mCAAmC;AAAA,QACtD,MAAM,IAAI,kBACR,uCACA,mBAAmB,MAAM,wDAC3B;AAAA,MACF;AAAA,MACA,IAAI;AAAA,QACF,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,SAKR,EACE,IACC,eAAe,MAAM,WAAW,YAAY,GAC5C,eAAe,MAAM,IAAI,yBAAyB,GAClD,eAAe,MAAM,gBAAgB,kBAAkB,GACvD,eAAe,MAAM,UAAU,WAAW,GAC1C,eAAe,MAAM,YAAY,aAAa,GAC9C,MAAM,MAAM,SAAS,GACrB,MAAM,MAAM,SAAS,CACvB;AAAA,QACF,OAAO,OAAO;AAAA,QACd,yBACE,OACA,kCACA,gCAAgC,MAAM,mCAAmC,MAAM,aACjF;AAAA;AAAA,MAEF,OAAO,YAAY,KAAK,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,KACtD;AAAA;AAAA,OAGG,QAAO,CAAC,QAA6D;AAAA,IACzE,OAAO,QAAQ,KAAK,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA;AAAA,OAG/C,cAAa,CAAC,QAAmE;AAAA,IACrF,MAAM,MAAM,KAAK,GACd,MAAM,iFAAiF,EACvF,IAAI,OAAO,WAAW,OAAO,QAAQ;AAAA,IACxC,OAAO,MAAM,+BAA+B,GAAG,IAAI;AAAA;AAAA,OAG/C,QAAO,CAAC,QAMX;AAAA,IACD,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,SAAS,KAAK,GACjB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAUR,EACE,IACC,OAAO,QACP,OAAO,WACP,MAAM,OAAO,UAAU,GACvB,OAAO,WACP,OAAO,IACP,MAAM,OAAO,UAAU,GACvB,OAAO,WACP,OAAO,WACP,OAAO,QACP,MAAM,OAAO,UAAU,GACvB,MAAM,OAAO,UAAU,CACzB;AAAA,MACF,IAAI,OAAO,YAAY;AAAA,QAAG,MAAM,kBAAkB,OAAO,IAAI,OAAO,SAAS;AAAA,MAC7E,OAAO,YAAY,KAAK,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,KACxD;AAAA;AAAA,OAGG,KAAI,CAAC,QAAsF;AAAA,IAC/F,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,SAAS,KAAK,GACjB,MAAM;AAAA;AAAA;AAAA;AAAA,OAIR,EACE,IAAI,MAAM,OAAO,QAAQ,GAAG,OAAO,WAAW,OAAO,IAAI,MAAM,OAAO,QAAQ,CAAC;AAAA,MAClF,IAAI,OAAO,YAAY;AAAA,QAAG,MAAM,kBAAkB,OAAO,IAAI,OAAO,SAAS;AAAA,MAC7E,OAAO,YAAY,KAAK,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,KACxD;AAAA;AAEL;AAEO,SAAS,0BAA0B,CAAC,IAAc,WAAmB,IAAY;AAAA,EACtF,OAAO,QAAQ,IAAI,WAAW,EAAE;AAAA;AAGlC,SAAS,OAAO,CAAC,IAAc,WAAmB,IAAY;AAAA,EAC5D,MAAM,MAAM,GACT,MAAM,0EAA0E,EAChF,IAAI,WAAW,EAAE;AAAA,EACpB,OAAO,MAAM,+BAA+B,GAAG,IAAI;AAAA;AAGrD,SAAS,WAAW,CAAC,IAAc,WAAmB,IAAuC;AAAA,EAC3F,MAAM,SAAS,QAAQ,IAAI,WAAW,EAAE;AAAA,EACxC,IAAI,CAAC,QAAQ;AAAA,IACX,MAAM,IAAI,kBACR,gCACA,gCAAgC,8BAA8B,aAChE;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,iBAAiB,CAAC,IAAY,WAAqC;AAAA,EAC1E,OAAO,IAAI,kBACT,gCACA,gCAAgC,yCAAyC,aAC3E;AAAA;;;AC1IK,MAAM,+BAAmE;AAAA,EACjD;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAAuE;AAAA,IAClF,OAAO,wBAAwB,KAAK,IAAI,MAAM,sBAAsB,KAAK,IAAI,KAAK,CAAC;AAAA;AAAA,OAG/E,OAAM,CAAC,QAI6B;AAAA,IACxC,OAAO,wBAAwB,KAAK,IAAI,MAAM,sBAAsB,KAAK,IAAI,MAAM,CAAC;AAAA;AAAA,OAGhF,YAAW,CAAC,QAG4B;AAAA,IAC5C,OAAO,uBAAuB,KAAK,IAAI,MAAM;AAAA;AAAA,OAGzC,aAAY,CAAC,QAG2B;AAAA,IAC5C,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOF,EACC,IAAI,OAAO,WAAW,OAAO,OAAO;AAAA,IAEvC,OAAO,KAAK,IAAI,0BAA0B;AAAA;AAE9C;;;ACzCO,MAAM,4BAA6D;AAAA,EAC3C;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAAiE;AAAA,IAC5E,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,IAC9D,MAAM,aAAa,eAAe,MAAM,YAAY,aAAa;AAAA,IACjE,MAAM,UAAU,eAAe,MAAM,SAAS,SAAS;AAAA,IACvD,MAAM,SAAS,eAAe,MAAM,QAAQ,SAAS;AAAA,IACrD,MAAM,WAAW,wBAAwB,KAAK,IAAI;AAAA,MAChD;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,MAAM,YAAY,WAAW,IAAI,KAAK,SAAS,UAAU,IAAI,UAAU,MAAM,SAAS;AAAA,IACtF,MAAM,YAAY,MAAM,YACpB,IAAI,KAAK,MAAM,SAAS,IACxB,WACE,IAAI,OACJ;AAAA,IAEN,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAgBF,EACC,IACC,WACA,YACA,SACA,QACA,wBAAwB,MAAM,MAAM,GACpC,MAAM,SAAS,GACf,MAAM,SAAS,CACjB;AAAA,IAEF,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,MAAM,SAAS,gBAAgB,MAAM,MAAM,IAAI;AAAA,MACvD;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAGI,aAAY,CAAC,QAIoB;AAAA,IACrC,MAAM,MAAM,wBAAwB,KAAK,IAAI,MAAM;AAAA,IACnD,OAAO,MAAM,oBAAoB,GAAG,IAAI;AAAA;AAAA,OAGpC,YAAW,CAAC,QAGyB;AAAA,IACzC,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOF,EACC,IAAI,OAAO,WAAW,OAAO,MAAM;AAAA,IAEtC,OAAO,KAAK,IAAI,mBAAmB;AAAA;AAEvC;;;ACzFA,6BAAS;AAqBF,MAAM,0BAAyD;AAAA,EACvC;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,qBAAoB,CAAC,OAAqE;AAAA,IAC9F,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,KAAK,eAAe,MAAM,IAAI,eAAe;AAAA,MACnD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,MAC9D,MAAM,QAAQ,eAAe,MAAM,KAAK;AAAA,MACxC,MAAM,WAAW,kBAAkB,MAAM,QAAQ;AAAA,MACjD,MAAM,MAAM,UAAU,MAAM,aAAa,MAAM,SAAS;AAAA,MACxD,MAAM,iBAAiB,2BAA2B,KAAK,IAAI;AAAA,QACzD;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MAED,IAAI,gBAAgB;AAAA,QAClB,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAUF,EACC,IACC,MAAM,oBAAoB,QAAQ,MAClC,MAAM,oBAAoB,MAAM,MAChC,MAAM,sBAAsB,MAC5B,MAAM,MAAM,SAAS,GACrB,MAAM,GAAG,GACT,WACA,eAAe,EACjB;AAAA,QACF,wBAAwB,KAAK,IAAI;AAAA,UAC/B;AAAA,UACA,cAAc,eAAe;AAAA,UAC7B;AAAA,QACF,CAAC;AAAA,QAED,OAAO,sBAAsB,KAAK,IAAI,EAAE,WAAW,IAAI,eAAe,GAAG,CAAC;AAAA,MAC5E;AAAA,MAEA,IAAI,kBAAkB,KAAK,IAAI,EAAE,WAAW,GAAG,CAAC,GAAG;AAAA,QACjD,MAAM,IAAI,kBACR,wBACA,sBAAsB,qDAAqD,aAC7E;AAAA,MACF;AAAA,MAEA,MAAM,YAAY,UAAU,MAAM,SAAS;AAAA,MAC3C,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAcF,EACC,IACC,WACA,IACA,OACA,MAAM,oBAAoB,QAAQ,MAClC,MAAM,oBAAoB,MAAM,MAChC,MAAM,sBAAsB,MAC5B,MAAM,SAAS,GACf,MAAM,GAAG,GACT,MAAM,MAAM,SAAS,CACvB;AAAA,QACF,OAAO,OAAO;AAAA,QACd,yBACE,OACA,wBACA,sBAAsB,mCAAmC,aAC3D;AAAA;AAAA,MAGF,wBAAwB,KAAK,IAAI,EAAE,WAAW,cAAc,IAAI,SAAS,CAAC;AAAA,MAC1E,OAAO,sBAAsB,KAAK,IAAI,EAAE,WAAW,GAAG,CAAC;AAAA,KACxD;AAAA;AAAA,OAGG,QAAO,CAAC,QAGuB;AAAA,IACnC,OAAO,kBAAkB,KAAK,IAAI,MAAM;AAAA;AAAA,OAGpC,iBAAgB,CAAC,QAIc;AAAA,IACnC,OAAO,2BAA2B,KAAK,IAAI,MAAM;AAAA;AAAA,OAG7C,KAAI,CAAC,OAAqE;AAAA,IAC9E,IAAI,eAAe,MAAM,QAAQ,KAAK,eAAe,MAAM,QAAQ,GAAG;AAAA,MACpE,OAAO,EAAE,aAAa,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IACrD;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,OAAO;AAAA,MACf,aAAa,KAAK,WAAW;AAAA,MAC7B,KAAK,KAAK,eAAe,MAAM,KAAK,CAAC;AAAA,IACvC;AAAA,IAEA,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,cAAc,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,QAAQ;AAAA,IAC7B;AAAA,IAEA,MAAM,WAAW,MAAM,WAAW,kBAAkB,MAAM,QAAQ,IAAI;AAAA,IACtE,IAAI,UAAU;AAAA,MACZ,aAAa,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iDAMyB,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA;AAAA,OAE3E;AAAA,MACD,KAAK,KAAK,GAAG,QAAQ;AAAA,IACvB;AAAA,IAEA,MAAM,QAAQ,SAAS,aAAa,KAAK,OAAO;AAAA,IAChD,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ;AAAA,IAC9C,MAAM,WAAW,KAAK,GACnB,MAAM,kDAAkD,OAAO,EAC/D,IAAI,GAAG,IAAI;AAAA,IAEd,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,IAC1B,MAAM,QAAQ,iBACZ;AAAA;AAAA;AAAA,QAGE;AAAA,4BACoB,aAAa;AAAA,OAEnC,WACA,KACF;AAAA,IACA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,IAElD,OAAO;AAAA,MACL,aAAa,KAAK,IAAI,CAAC,QACrB,sBACE,KACA,sBAAsB,KAAK,IAAI;AAAA,QAC7B,WAAW,IAAI;AAAA,QACf,cAAc,IAAI;AAAA,MACpB,CAAC,CACH,CACF;AAAA,MACA,UAAU,MAAM,UAAU,KAAK,KAAK,SAAS,SAAS;AAAA,MACtD,OAAO,SAAS;AAAA,IAClB;AAAA;AAAA,OAGI,OAAM,CAAC,QAIiB;AAAA,IAC5B,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,sBAAsB,KAAK,IAAI,MAAM;AAAA,MAErC,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQF,EACC,IAAI,MAAM,OAAO,UAAU,GAAG,MAAM,OAAO,UAAU,GAAG,OAAO,WAAW,OAAO,EAAE;AAAA,MAEtF,OAAO,sBAAsB,KAAK,IAAI,MAAM;AAAA,KAC7C;AAAA;AAAA,OAGG,OAAM,CAAC,QAIiB;AAAA,IAC5B,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,sBAAsB,KAAK,IAAI,MAAM;AAAA,MAErC,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQF,EACC,IAAI,MAAM,OAAO,SAAS,GAAG,MAAM,OAAO,SAAS,GAAG,OAAO,WAAW,OAAO,EAAE;AAAA,MAEpF,OAAO,sBAAsB,KAAK,IAAI,MAAM;AAAA,KAC7C;AAAA;AAEL;;;AChQA;AAMA,6BAAS;AAeF,MAAM,yBAAuD;AAAA,EACrC;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAA2D;AAAA,IACtE,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,KAAK,eAAe,MAAM,IAAI,eAAe;AAAA,MACnD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,MAC9D,MAAM,aAAa,eAAe,MAAM,YAAY,aAAa;AAAA,MACjE,MAAM,WAAW,2BAA2B,MAAM,QAAQ;AAAA,MAC1D,MAAM,QAAQ,eAAe,MAAM,KAAK;AAAA,MACxC,MAAM,YAAY,eAAe,MAAM,WAAW,uBAAuB;AAAA,MAEzE,IAAI,oBAAoB,KAAK,IAAI,EAAE,WAAW,GAAG,CAAC,GAAG;AAAA,QACnD,MAAM,IAAI,kBACR,wBACA,sBAAsB,mCAAmC,aAC3D;AAAA,MACF;AAAA,MAEA,+BAA+B,KAAK,IAAI;AAAA,QACtC;AAAA,QACA;AAAA,QACA,WAAW,MAAM;AAAA,MACnB,CAAC;AAAA,MAED,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAaF,EACC,IACC,WACA,IACA,YACA,UACA,OACA,WACA,MAAM,YAAY,MAClB,MAAM,MAAM,SAAS,GACrB,MAAM,MAAM,SAAS,CACvB;AAAA,QACF,OAAO,OAAO;AAAA,QACd,yBACE,OACA,wBACA,sBAAsB,mCAAmC,aAC3D;AAAA;AAAA,MAGF,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,MAAM;AAAA,QAChB,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,QACnC,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,MACrC;AAAA,KACD;AAAA;AAAA,OAGG,QAAO,CAAC,QAGsB;AAAA,IAClC,OAAO,iBAAiB,KAAK,IAAI,MAAM;AAAA;AAAA,OAGnC,iBAAgB,CAAC,QAIa;AAAA,IAClC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAWF,EACC,IACC,OAAO,WACP,eAAe,OAAO,KAAK,GAC3B,MAAM,OAAO,GAAG,CAClB;AAAA,IAEF,OAAO,MAAM,qBAAqB,GAAG,IAAI;AAAA;AAAA,OAGrC,QAAO,CAAC,QAKe;AAAA,IAC3B,OAAO,wBAAwB,KAAK,IAAI,MAAM,iBAAiB,KAAK,IAAI,MAAM,CAAC;AAAA;AAAA,OAG3E,qBAAoB,CAAC,QAIa;AAAA,IACtC,OAAO,wBAAwB,KAAK,IAAI,MAAM,+BAA+B,KAAK,IAAI,MAAM,CAAC;AAAA;AAEjG;;;ACnJA,uCAAS;AAMT,6BAAS;AAWF,MAAM,wCAAqF;AAAA,EACnE;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CACV,OACyC;AAAA,IACzC,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,KAAK,eAAe,MAAM,IAAI,+BAA+B;AAAA,MACnE,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,MAC9D,MAAM,aAAa,eAAe,MAAM,YAAY,aAAa;AAAA,MACjE,MAAM,WAAW,4BAA2B,MAAM,QAAQ;AAAA,MAC1D,MAAM,YAAY,eAAe,MAAM,WAAW,iBAAiB;AAAA,MACnE,MAAM,YAAY,eAAe,MAAM,WAAW,iBAAiB;AAAA,MACnE,MAAM,eAAe,eAAe,MAAM,cAAc,oBAAoB;AAAA,MAE5E,IAAI,sBAAsB,KAAK,IAAI,EAAE,WAAW,GAAG,CAAC,GAAG;AAAA,QACrD,MAAM,IAAI,kBACR,0BACA,sCAAsC,mCAAmC,aAC3E;AAAA,MACF;AAAA,MAEA,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAcF,EACC,IACC,WACA,IACA,YACA,UACA,WACA,WACA,cACA,MAAM,YAAY,MAClB,MAAM,MAAM,SAAS,GACrB,MAAM,MAAM,SAAS,CACvB;AAAA,QACF,OAAO,OAAO;AAAA,QACd,yBACE,OACA,0BACA,sCAAsC,mCAAmC,aAC3E;AAAA;AAAA,MAGF,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,MAAM;AAAA,QAChB,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,QACnC,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,MACrC;AAAA,KACD;AAAA;AAAA,OAGG,QAAO,CAAC,QAGqC;AAAA,IACjD,OAAO,mBAAmB,KAAK,IAAI,MAAM;AAAA;AAAA,OAGrC,QAAO,CAAC,QAK8B;AAAA,IAC1C,OAAO,wBAAwB,KAAK,IAAI,MAAM,mBAAmB,KAAK,IAAI,MAAM,CAAC;AAAA;AAErF;;;ACrGA,6BAAS;AAQF,MAAM,6CAEb;AAAA,EAC+B;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CACV,OAC8C;AAAA,IAC9C,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,IAC9D,MAAM,mBAAmB,eAAe,MAAM,kBAAkB,oBAAoB;AAAA,IACpF,MAAM,UAAU,eAAe,MAAM,SAAS,UAAU;AAAA,IACxD,MAAM,iBAAiB,KAAK,GACzB,MAAM,qEAAqE,EAC3E,IAAI,WAAW,gBAAgB;AAAA,IAClC,IAAI,CAAC,gBAAgB;AAAA,MACnB,MAAM,IAAI,kBACR,2BACA,2BAA2B,4CAA4C,aACzE;AAAA,IACF;AAAA,IAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OASF,EACC,IAAI,WAAW,kBAAkB,SAAS,MAAM,QAAQ,MAAM,UAAU,MAAM,SAAS,CAAC,CAAC;AAAA,IAE5F,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOF,EACC,IAAI,WAAW,kBAAkB,OAAO;AAAA,IAC3C,OAAO,yCAAyC,GAAG;AAAA;AAAA,OAG/C,2BAA0B,CAC9B,OACyD;AAAA,IACzD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,IAC9D,MAAM,mBAAmB,eAAe,MAAM,kBAAkB,oBAAoB;AAAA,IACpF,MAAM,iBAAiB,KAAK,GACzB,MAAM,qEAAqE,EAC3E,IAAI,WAAW,gBAAgB;AAAA,IAClC,IAAI,CAAC,gBAAgB;AAAA,MACnB,MAAM,IAAI,kBACR,2BACA,2BAA2B,4CAA4C,aACzE;AAAA,IACF;AAAA,IAEA,MAAM,WAAW,kBAAkB,MAAM,QAAQ;AAAA,IACjD,MAAM,UAAU,IAAI,IAAI,QAAQ;AAAA,IAChC,MAAM,WAAW,MAAM,KAAK,sBAAsB,EAAE,WAAW,iBAAiB,CAAC;AAAA,IACjF,WAAW,cAAc,UAAU;AAAA,MACjC,IAAI,WAAW,WAAW,MAAM,UAAU,CAAC,QAAQ,IAAI,WAAW,OAAO,GAAG;AAAA,QAC1E,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IAAI,WAAW,kBAAkB,WAAW,SAAS,MAAM,MAAM;AAAA,MACtE;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,MAAM,UAAU,MAAM,SAAS,CAAC;AAAA,IAClD,WAAW,WAAW,UAAU;AAAA,MAC9B,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAWF,EACC,IAAI,WAAW,kBAAkB,SAAS,MAAM,QAAQ,SAAS;AAAA,IACtE;AAAA,IAEA,OAAO,KAAK,sBAAsB,EAAE,WAAW,iBAAiB,CAAC;AAAA;AAAA,OAG7D,sBAAqB,CAAC,QAGgC;AAAA,IAC1D,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOF,EACC,IACC,OAAO,WACP,OAAO,gBACT;AAAA,IAEF,OAAO,KAAK,IAAI,wCAAwC;AAAA;AAAA,OAGpD,aAAY,CAAC,QAGyC;AAAA,IAC1D,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOF,EACC,IAAI,OAAO,WAAW,OAAO,OAAO;AAAA,IAEvC,OAAO,KAAK,IAAI,wCAAwC;AAAA;AAE5D;;;ACvJA,6BAAS;AAaF,MAAM,8BAAiE;AAAA,EAC/C;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAAqE;AAAA,IAChF,MAAM,KAAK,eAAe,MAAM,IAAI,oBAAoB;AAAA,IACxD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,IAC9D,MAAM,OAAO,eAAe,MAAM,MAAM,sBAAsB;AAAA,IAC9D,MAAM,YAAY,UAAU,MAAM,SAAS;AAAA,IAC3C,MAAM,YAAY,MAAM,YAAY,IAAI,KAAK,MAAM,SAAS,IAAI;AAAA,IAEhE,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAcF,EACC,IACC,WACA,IACA,MACA,MAAM,eAAe,MACrB,MAAM,UAAU,UAChB,MAAM,oBAAoB,QAAQ,MAClC,MAAM,oBAAoB,MAAM,MAChC,MAAM,sBAAsB,MAC5B,MAAM,SAAS,GACf,MAAM,SAAS,CACjB;AAAA,MACF,OAAO,OAAO;AAAA,MACd,yBACE,OACA,6BACA,2BAA2B,mCAAmC,aAChE;AAAA;AAAA,IAGF,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,MAAM;AAAA,MACnB,QAAQ,MAAM,UAAU;AAAA,MACxB,oBAAoB,MAAM;AAAA,MAC1B,oBAAoB,MAAM;AAAA,MAC1B;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAGI,QAAO,CAAC,QAG2B;AAAA,IACvC,MAAM,MAAM,KAAK,GACd,MAAM,qEAAqE,EAC3E,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAClC,OAAO,MAAM,0BAA0B,GAAG,IAAI;AAAA;AAAA,OAG1C,OAAM,CAAC,OAAqE;AAAA,IAChF,MAAM,KAAK,eAAe,MAAM,IAAI,oBAAoB;AAAA,IACxD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,IAC9D,MAAM,YAAY,UAAU,MAAM,SAAS;AAAA,IAC3C,MAAM,OACJ,MAAM,SAAS,YAAY,OAAO,eAAe,MAAM,MAAM,sBAAsB;AAAA,IACrF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OASF,EACC,IAAI,MAAM,MAAM,eAAe,MAAM,MAAM,UAAU,MAAM,MAAM,SAAS,GAAG,WAAW,EAAE;AAAA,IAE7F,MAAM,UAAU,MAAM,KAAK,QAAQ,EAAE,WAAW,GAAG,CAAC;AAAA,IACpD,IAAI,CAAC,SAAS;AAAA,MACZ,MAAM,IAAI,kBACR,2BACA,2BAA2B,8BAA8B,aAC3D;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,OAGH,KAAI,CAAC,OAA6E;AAAA,IACtF,IAAI,eAAe,MAAM,QAAQ,GAAG;AAAA,MAClC,OAAO,EAAE,iBAAiB,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IACzD;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAC5C,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,cAAc,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,QAAQ;AAAA,IAC7B;AAAA,IAEA,MAAM,QAAQ,SAAS,aAAa,KAAK,OAAO;AAAA,IAChD,MAAM,QAAQ,MAAM,UAAU,SAAS,SAAS;AAAA,IAChD,MAAM,WAAW,KAAK,GACnB,MAAM,uDAAuD,OAAO,EACpE,IAAI,GAAG,IAAI;AAAA,IACd,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,IAC1B,MAAM,QAAQ,iBACZ;AAAA;AAAA;AAAA,QAGE;AAAA,4BACoB,aAAa;AAAA,OAEnC,WACA,KACF;AAAA,IACA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,IAElD,OAAO;AAAA,MACL,iBAAiB,KAAK,IAAI,yBAAyB;AAAA,MACnD,SACE,MAAM,UAAU,YAAY,SAAS,MAAM,UAAU,KAAK,MAAM,QAAQ,SAAS;AAAA,MACnF,OAAO,SAAS;AAAA,IAClB;AAAA;AAEJ;;;ACxJA,6BAAS;AAaF,MAAM,uBAAmD;AAAA,EACjC;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAAuD;AAAA,IAClE,OAAO,wBAAwB,KAAK,IAAI,MAAM,cAAc,KAAK,IAAI,KAAK,CAAC;AAAA;AAAA,OAGvE,QAAO,CAAC,QAGoB;AAAA,IAChC,OAAO,eAAe,KAAK,IAAI,MAAM;AAAA;AAAA,OAGjC,kBAAiB,CAAC,QAKU;AAAA,IAChC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAYF,EACC,IACC,OAAO,WACP,OAAO,QACP,OAAO,UACP,MAAM,OAAO,GAAG,GAChB,MAAM,OAAO,GAAG,CAClB;AAAA,IAEF,OAAO,MAAM,mBAAmB,GAAG,IAAI;AAAA;AAAA,OAGnC,mBAAkB,CAAC,QAIa;AAAA,IACpC,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAUF,EACC,IACC,OAAO,WACP,OAAO,QACP,MAAM,OAAO,GAAG,GAChB,MAAM,OAAO,GAAG,CAClB;AAAA,IAEF,OAAO,KAAK,IAAI,kBAAkB;AAAA;AAAA,OAG9B,qBAAoB,CAAC,QAMO;AAAA,IAChC,MAAM,MAAM,kBAAkB,KAAK,IAAI,MAAM;AAAA,IAE7C,IACE,CAAC,OACD,IAAI,uBAAuB,QAC3B,IAAI,aAAa,OAAO,YACxB,IAAI,eAAe,OAAO,aAC1B,CAAC,iBAAiB,KAAK,OAAO,GAAG,GACjC;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,mBAAmB,GAAG;AAAA;AAAA,OAGzB,2BAA0B,CAAC,QAKC;AAAA,IAChC,MAAM,MAAM,kBAAkB,KAAK,IAAI,MAAM;AAAA,IAC7C,IACE,CAAC,OACD,IAAI,sBAAsB,QAC1B,IAAI,eAAe,OAAO,aAC1B,IAAI,KAAK,IAAI,iBAAiB,KAAK,OAAO,OAC1C,CAAC,iBAAiB,KAAK,OAAO,GAAG,GACjC;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,mBAAmB,GAAG;AAAA;AAAA,OAGzB,mBAAkB,CACtB,QAC0C;AAAA,IAC1C,OAAO,wBAAwB,KAAK,IAAI,MAAuC;AAAA,MAC7E,MAAM,MAAM,kBAAkB,KAAK,IAAI,MAAM;AAAA,MAC7C,IAAI,CAAC,KAAK,sBAAsB,CAAC,iBAAiB,KAAK,OAAO,GAAG,GAAG;AAAA,QAClE,OAAO,EAAE,QAAQ,UAAU;AAAA,MAC7B;AAAA,MAEA,MAAM,mBACJ,IAAI,gCAAgC,OAAO,oBAC3C,IAAI,iBAAiB,QACrB,OAAO,IAAI,QAAQ,IAAI,IAAI,KAAK,IAAI,YAAY,EAAE,QAAQ,KAAK,OAAO;AAAA,MACxE,IAAI,IAAI,uBAAuB,OAAO,oBAAoB,CAAC,kBAAkB;AAAA,QAC3E,IAAI,IAAI,gCAAgC,OAAO,kBAAkB;AAAA,UAC/D,OAAO,EAAE,QAAQ,UAAU;AAAA,QAC7B;AAAA,QACA,KAAK,GACF,MAAM,yEAAyE,EAC/E,IAAI,MAAM,OAAO,GAAG,GAAG,OAAO,WAAW,OAAO,EAAE;AAAA,QACrD,OAAO,EAAE,QAAQ,SAAS;AAAA,MAC5B;AAAA,MAEA,MAAM,YAAY,MAAM,OAAO,KAAK,SAAS;AAAA,MAC7C,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUN,EACA,IACC,OAAO,KAAK,WACZ,MAAM,OAAO,KAAK,eAAe,GACjC,OAAO,KAAK,kBACZ,MAAM,OAAO,GAAG,GAChB,MAAM,OAAO,GAAG,GAChB,WACA,WACA,OAAO,WACP,OAAO,EACT;AAAA,MACF,MAAM,UAAU,eAAe,KAAK,IAAI,MAAM;AAAA,MAC9C,OAAO,UAAU,EAAE,QAAQ,WAAW,QAAQ,IAAI,EAAE,QAAQ,UAAU;AAAA,KACvE;AAAA;AAAA,OAGG,aAAY,CAAC,QAOe;AAAA,IAChC,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,MAAM,MAAM,OAAO,GAAG;AAAA,MAC5B,MAAM,YAAY,MAAM,OAAO,SAAS;AAAA,MACxC,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAgBF,EACC,IACC,WACA,WACA,KACA,OAAO,WACP,OAAO,IACP,OAAO,UACP,OAAO,WACP,KACA,GACF;AAAA,MAEF,OAAO,OAAO,YAAY,IAAI,OAAO,eAAe,KAAK,IAAI,MAAM;AAAA,KACpE;AAAA;AAAA,OAGG,OAAM,CAAC,QAIc;AAAA,IACzB,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,WAAW,kBAAkB,KAAK,IAAI,MAAM;AAAA,MAElD,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,kBACR,mBACA,mBAAmB,OAAO,8BAA8B,OAAO,aACjE;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IAAI,MAAM,OAAO,SAAS,GAAG,OAAO,WAAW,OAAO,EAAE;AAAA,MAE3D,OAAO,mBAAmB;AAAA,WACrB;AAAA,QACH,YAAY,MAAM,OAAO,SAAS;AAAA,MACpC,CAAC;AAAA,KACF;AAAA;AAAA,OAGG,oBAAmB,CAAC,QAKY;AAAA,IACpC,OAAO,wBAAwB,KAAK,IAAI,MAAM,4BAA4B,KAAK,IAAI,MAAM,CAAC;AAAA;AAAA,OAGtF,MAAK,CAAC,QAIe;AAAA,IACzB,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,mBAAmB,KAAK,IAAI,MAAM;AAAA,MAElC,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IAAI,MAAM,OAAO,UAAU,GAAG,OAAO,WAAW,OAAO,EAAE;AAAA,MAE5D,MAAM,UAAU,eAAe,KAAK,IAAI,MAAM;AAAA,MAC9C,IAAI,CAAC,SAAS;AAAA,QACZ,MAAM,IAAI,kBACR,mBACA,mBAAmB,OAAO,8BAA8B,OAAO,aACjE;AAAA,MACF;AAAA,MACA,OAAO;AAAA,KACR;AAAA;AAEL;AAEA,SAAS,gBAAgB,CAAC,KAA2B,KAAoB;AAAA,EACvE,OACE,IAAI,eAAe,QACnB,IAAI,KAAK,IAAI,UAAU,IAAI,QAC1B,IAAI,wBAAwB,QAAQ,IAAI,KAAK,IAAI,mBAAmB,IAAI;AAAA;;;AC9S7E,6BAAS;AAgBF,MAAM,oBAA6C;AAAA,EAC3B;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAAiD;AAAA,IAC5D,MAAM,KAAK,eAAe,MAAM,IAAI,SAAS;AAAA,IAC7C,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,IAC9D,MAAM,QAAQ,eAAe,MAAM,KAAK;AAAA,IAExC,IAAI,eAAe,KAAK,IAAI,EAAE,WAAW,GAAG,CAAC,GAAG;AAAA,MAC9C,MAAM,IAAI,mBACR,kBACA,gBAAgB,mCAAmC,aACrD;AAAA,IACF;AAAA,IAEA,IAAI,kBAAkB,KAAK,IAAI,EAAE,WAAW,MAAM,CAAC,GAAG;AAAA,MACpD,MAAM,IAAI,mBACR,kBACA,sBAAsB,sCAAsC,aAC9D;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,UAAU,MAAM,SAAS;AAAA,IAC3C,MAAM,YAAY,MAAM,YAAY,IAAI,KAAK,MAAM,SAAS,IAAI;AAAA,IAEhE,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAYF,EACC,IACC,WACA,IACA,OACA,MAAM,eAAe,MACrB,MAAM,aAAa,MACnB,MAAM,UAAU,UAChB,MAAM,SAAS,GACf,MAAM,SAAS,CACjB;AAAA,MACF,OAAO,OAAO;AAAA,MACd,yBACE,OACA,kBACA,gBAAgB,mCAAmC,aACrD;AAAA;AAAA,IAGF,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,MAAM;AAAA,MACnB,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM,UAAU;AAAA,MACxB;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAGI,QAAO,CAAC,QAGiB;AAAA,IAC7B,MAAM,MAAM,eAAe,KAAK,IAAI,MAAM;AAAA,IAC1C,OAAO,MAAM,gBAAgB,GAAG,IAAI;AAAA;AAAA,OAGhC,WAAU,CAAC,QAGc;AAAA,IAC7B,MAAM,MAAM,kBAAkB,KAAK,IAAI,MAAM;AAAA,IAC7C,OAAO,MAAM,gBAAgB,GAAG,IAAI;AAAA;AAAA,OAGhC,cAAa,CAAC,OAAwD;AAAA,IAC1E,MAAM,WAAW,eAAe,KAAK,IAAI;AAAA,MACvC,WAAW,MAAM;AAAA,MACjB,IAAI,MAAM;AAAA,IACZ,CAAC;AAAA,IAED,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,mBACR,gBACA,gBAAgB,MAAM,8BAA8B,MAAM,aAC5D;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,UAAU,MAAM,SAAS;AAAA,IAC3C,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQF,EACC,IACC,MAAM,eAAe,MACrB,MAAM,aAAa,MACnB,MAAM,SAAS,GACf,MAAM,WACN,MAAM,EACR;AAAA,IAEF,OAAO,gBAAgB;AAAA,SAClB;AAAA,MACH,cAAc,MAAM,eAAe;AAAA,MACnC,YAAY,MAAM,aAAa;AAAA,MAC/B,YAAY,MAAM,SAAS;AAAA,IAC7B,CAAC;AAAA;AAAA,OAGG,aAAY,CAAC,OAAuD;AAAA,IACxE,MAAM,WAAW,eAAe,KAAK,IAAI;AAAA,MACvC,WAAW,MAAM;AAAA,MACjB,IAAI,MAAM;AAAA,IACZ,CAAC;AAAA,IAED,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,mBACR,gBACA,gBAAgB,MAAM,8BAA8B,MAAM,aAC5D;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,UAAU,MAAM,SAAS;AAAA,IAC3C,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOF,EACC,IAAI,MAAM,QAAQ,MAAM,SAAS,GAAG,MAAM,WAAW,MAAM,EAAE;AAAA,IAEhE,OAAO,gBAAgB;AAAA,SAClB;AAAA,MACH,QAAQ,MAAM;AAAA,MACd,YAAY,MAAM,SAAS;AAAA,IAC7B,CAAC;AAAA;AAAA,OAGG,KAAI,CAAC,OAAyD;AAAA,IAClE,IAAI,eAAe,MAAM,QAAQ,GAAG;AAAA,MAClC,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IAC/C;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,cAAc,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,QAAQ;AAAA,IAC7B;AAAA,IAEA,MAAM,QAAQ,SAAS,aAAa,KAAK,OAAO;AAAA,IAChD,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ;AAAA,IAC9C,MAAM,WAAW,KAAK,GACnB,MAAM,4CAA4C,OAAO,EACzD,IAAI,GAAG,IAAI;AAAA,IAEd,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,IAC1B,MAAM,QAAQ,iBACZ;AAAA;AAAA;AAAA,QAGE;AAAA,4BACoB,aAAa;AAAA,OAEnC,WACA,KACF;AAAA,IACA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,IAElD,OAAO;AAAA,MACL,OAAO,KAAK,IAAI,eAAe;AAAA,MAC/B,UAAU,MAAM,UAAU,KAAK,KAAK,SAAS,SAAS;AAAA,MACtD,OAAO,SAAS;AAAA,IAClB;AAAA;AAEJ;;;AbzJO,MAAM,kBAAyC;AAAA,EACnC;AAAA,EACA;AAAA,EAER;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,WAAW,CAAC,UAAoC,CAAC,GAAG;AAAA,IAClD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA,IAEA,KAAK,QAAQ,IAAI,oBAAoB,KAAK,EAAE;AAAA,IAC5C,KAAK,aAAa,IAAI,4BAA4B,KAAK,EAAE;AAAA,IACzD,KAAK,kBAAkB,IAAI,8BAA8B,KAAK,EAAE;AAAA,IAChE,KAAK,iCAAiC,IAAI,6CAA6C,KAAK,EAAE;AAAA,IAC9F,KAAK,WAAW,IAAI,uBAAuB,KAAK,EAAE;AAAA,IAClD,KAAK,eAAe,IAAI,2BAA2B,KAAK,EAAE;AAAA,IAC1D,KAAK,cAAc,IAAI,0BAA0B,KAAK,EAAE;AAAA,IACxD,KAAK,mBAAmB,IAAI,+BAA+B,KAAK,EAAE;AAAA,IAClE,KAAK,aAAa,IAAI,yBAAyB,KAAK,EAAE;AAAA,IACtD,KAAK,4BAA4B,IAAI,wCAAwC,KAAK,EAAE;AAAA,IACpF,KAAK,uBAAuB,IAAI,mCAAmC,KAAK,EAAE;AAAA;AAAA,OAGtE,4BAA2B,CAC/B,OAC4C;AAAA,IAC5C,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,gBAAgB,2BAA2B,KAAK,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MACnF,IAAI,CAAC,eAAe;AAAA,QAClB,MAAM,IAAI,mBACR,gCACA,gCAAgC,MAAM,8BAA8B,MAAM,aAC5E;AAAA,MACF;AAAA,MACA,qCAAqC,eAAe,KAAK;AAAA,MACzD,MAAM,UAAU,cAAc,KAAK,IAAI,MAAM,OAAO;AAAA,MACpD,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA,OAIR,EACE,IAAI,MAAM,MAAM,WAAW,GAAG,MAAM,WAAW,MAAM,EAAE;AAAA,MAC1D,OAAO;AAAA,QACL,eAAe;AAAA,aACV;AAAA,UACH,QAAQ;AAAA,UACR,YAAY,IAAI,KAAK,MAAM,WAAW;AAAA,QACxC;AAAA,QACA;AAAA,MACF;AAAA,KACD;AAAA;AAAA,OAGG,wBAAuB,CAC3B,OAC+B;AAAA,IAC/B,MAAM,SAAS,wBACb,KAAK,IACL,MAAmD;AAAA,MACjD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,MAC9D,MAAM,cAAc,IAAI,KAAK,MAAM,WAAW;AAAA,MAC9C,MAAM,YAAY,oBAAoB,KAAK,IAAI;AAAA,QAC7C;AAAA,QACA,IAAI,MAAM;AAAA,MACZ,CAAC;AAAA,MAED,KAAK,sBACH,WACA,MAAM,aACN,MAAM,WACN,aACA,SACF;AAAA,MAEA,MAAM,kBAAkB,kBAAkB,KAAK,IAAI;AAAA,QACjD;AAAA,QACA,OAAO,UAAU;AAAA,MACnB,CAAC;AAAA,MACD,MAAM,mBAAmB,2BAA2B,KAAK,IAAI;AAAA,QAC3D;AAAA,QACA,OAAO,UAAU;AAAA,QACjB,KAAK;AAAA,MACP,CAAC;AAAA,MACD,MAAM,mBAAmB,CAAC;AAAA,MAC1B,MAAM,iBAAiB,kBAAkB,MAAM,cAAc;AAAA,MAE7D,IAAI,iBAAiB,WAAW,aAAa;AAAA,QAC3C,iBAAiB,KAAK,IAAI;AAAA,UACxB;AAAA,UACA,IAAI,MAAM;AAAA,UACV,WAAW,MAAM;AAAA,UACjB,YAAY;AAAA,QACd,CAAC;AAAA,QACD,OAAO;AAAA,UACL,OAAO,IAAI,mBACT,kBACA,gBAAgB,gBAAgB,iCAAiC,aACnE;AAAA,QACF;AAAA,MACF;AAAA,MAEA,IAAI,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,oCAAoC;AAAA,QACtF,iBAAiB,KAAK,IAAI;AAAA,UACxB;AAAA,UACA,IAAI,MAAM;AAAA,UACV,WAAW,MAAM;AAAA,UACjB,YAAY;AAAA,QACd,CAAC;AAAA,QACD,OAAO;AAAA,UACL,OAAO,IAAI,mBACT,6BACA,sBAAsB,MAAM,kDAAkD,aAChF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,6BAA6B,KAAK,IAAI,WAAW,MAAM,OAAO;AAAA,MAC9D,4BAA4B,WAAW,MAAM,QAAQ,UAAU,UAAU,QAAQ;AAAA,MAEjF,IAAI;AAAA,MACJ,IAAI,kBAAkB;AAAA,QACpB,YAAY,eAAe,MAAM,WAAW,SAAS;AAAA,QACrD,IAAI,eAAe,KAAK,IAAI,EAAE,WAAW,IAAI,UAAU,CAAC,GAAG;AAAA,UACzD,MAAM,IAAI,mBACR,kBACA,gBAAgB,0CAA0C,aAC5D;AAAA,QACF;AAAA,MACF;AAAA,MAEA,iBAAiB,KAAK,IAAI;AAAA,QACxB;AAAA,QACA,IAAI,MAAM;AAAA,QACV,WAAW,MAAM;AAAA,QACjB,YAAY;AAAA,MACd,CAAC;AAAA,MAED,MAAM,OAAO,kBACT,gBAAgB,eAAe,IAC/B,KAAK,WAAW;AAAA,QACd,IAAI,aAAa,eAAe,MAAM,WAAW,SAAS;AAAA,QAC1D;AAAA,QACA,OAAO,UAAU;AAAA,QACjB,aAAa,MAAM;AAAA,QACnB,WAAW,MAAM;AAAA,QACjB,WAAW;AAAA,MACb,CAAC;AAAA,MAEL,MAAM,aAAa,KAAK,+BAA+B;AAAA,QACrD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MACD,MAAM,mBAAmB,KAAK,YAAY;AAAA,QACxC;AAAA,QACA,QAAQ;AAAA,QACR,UAAU,WAAW;AAAA,QACrB,UAAU;AAAA,QACV;AAAA,QACA,QAAQ,KAAK;AAAA,MACf,CAAC;AAAA,MACD,MAAM,UAAU,KAAK,oBAAoB;AAAA,QACvC;AAAA,QACA,YAAY,UAAU;AAAA,QACtB,SAAS,MAAM;AAAA,QACf,QAAQ,KAAK;AAAA,MACf,CAAC;AAAA,MAED,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,YAAY,WAAW;AAAA,QACvB;AAAA,MACF;AAAA,KAEJ;AAAA,IAEA,IAAI,WAAW,QAAQ;AAAA,MACrB,MAAM,OAAO;AAAA,IACf;AAAA,IAEA,OAAO;AAAA;AAAA,OAGH,mBAAkB,CAAC,OAA+D;AAAA,IACtF,MAAM,SAAS,wBACb,KAAK,IACL,MAAmD;AAAA,MACjD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,MAC9D,MAAM,cAAc,IAAI,KAAK,MAAM,WAAW;AAAA,MAC9C,MAAM,UAAU,sBAAsB,KAAK,IAAI;AAAA,QAC7C;AAAA,QACA,IAAI,MAAM;AAAA,MACZ,CAAC;AAAA,MAED,KAAK,wBACH,WACA,MAAM,4BACN,MAAM,WACN,aACA,OACF;AAAA,MAEA,MAAM,UAAU,eAAe,MAAM,SAAS,SAAS;AAAA,MACvD,MAAM,QAAQ,eAAe,MAAM,KAAK;AAAA,MACxC,MAAM,WAAW,wBAAwB,KAAK,IAAI;AAAA,QAChD;AAAA,QACA,YAAY,QAAQ;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,MACD,MAAM,mBAAmB,WACrB,OACA,2BAA2B,KAAK,IAAI;AAAA,QAClC;AAAA,QACA;AAAA,QACA,KAAK;AAAA,MACP,CAAC;AAAA,MACL,IAAI,UAAU,WACV,eAAe,KAAK,IAAI,EAAE,WAAW,IAAI,SAAS,QAAQ,CAAC,IAC3D,kBAAkB,KAAK,IAAI,EAAE,WAAW,MAAM,CAAC;AAAA,MACnD,MAAM,mBAAmB,CAAC,YAAY,CAAC;AAAA,MACvC,MAAM,iBAAiB,kBAAkB,MAAM,cAAc;AAAA,MAE7D,IAAI,YAAY,CAAC,SAAS;AAAA,QACxB,KAAK,mBAAmB,OAAO,aAAa,SAAS;AAAA,QACrD,OAAO;AAAA,UACL,OAAO,IAAI,mBACT,gBACA,gBAAgB,SAAS,8CAC3B;AAAA,QACF;AAAA,MACF;AAAA,MAEA,IAAI,SAAS,WAAW,aAAa;AAAA,QACnC,KAAK,mBAAmB,OAAO,aAAa,SAAS;AAAA,QACrD,OAAO;AAAA,UACL,OAAO,IAAI,mBACT,kBACA,gBAAgB,QAAQ,iCAAiC,aAC3D;AAAA,QACF;AAAA,MACF;AAAA,MAEA,IAAI,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,oCAAoC;AAAA,QACtF,KAAK,mBAAmB,OAAO,aAAa,SAAS;AAAA,QACrD,OAAO;AAAA,UACL,OAAO,IAAI,mBACT,6BACA,sCAAsC,MAAM,iEAAiE,aAC/G;AAAA,QACF;AAAA,MACF;AAAA,MAEA,6BAA6B,KAAK,IAAI,WAAW,MAAM,OAAO;AAAA,MAC9D,4BAA4B,WAAW,MAAM,QAAQ,UAAU,QAAQ,QAAQ;AAAA,MAE/E,IAAI;AAAA,MACJ,IAAI,kBAAkB;AAAA,QACpB,YAAY,eAAe,MAAM,WAAW,SAAS;AAAA,QACrD,IAAI,eAAe,KAAK,IAAI,EAAE,WAAW,IAAI,UAAU,CAAC,GAAG;AAAA,UACzD,MAAM,IAAI,mBACR,kBACA,gBAAgB,0CAA0C,aAC5D;AAAA,QACF;AAAA,MACF;AAAA,MAEA,KAAK,mBAAmB,OAAO,aAAa,SAAS;AAAA,MAErD,IAAI,CAAC,SAAS;AAAA,QACZ,MAAM,OAAO,KAAK,WAAW;AAAA,UAC3B,IAAI,aAAa,eAAe,MAAM,WAAW,SAAS;AAAA,UAC1D;AAAA,UACA;AAAA,UACA,aAAa,MAAM;AAAA,UACnB,WAAW,MAAM;AAAA,UACjB,WAAW;AAAA,QACb,CAAC;AAAA,QACD,UAAU;AAAA,UACR,YAAY,KAAK;AAAA,UACjB,IAAI,KAAK;AAAA,UACT,OAAO,KAAK;AAAA,UACZ,cAAc,KAAK,eAAe;AAAA,UAClC,YAAY,KAAK,aAAa;AAAA,UAC9B,QAAQ,KAAK;AAAA,UACb,YAAY,MAAM,KAAK,SAAS;AAAA,UAChC,YAAY,MAAM,KAAK,SAAS;AAAA,QAClC;AAAA,MACF;AAAA,MAEA,MAAM,OAAO,gBAAgB,OAAO;AAAA,MACpC,MAAM,aAAa,KAAK,+BAA+B;AAAA,QACrD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MACD,MAAM,mBAAmB,KAAK,oBAAoB;AAAA,QAChD;AAAA,QACA,UAAU,KAAK,YAAY;AAAA,UACzB;AAAA,UACA,QAAQ;AAAA,UACR,UAAU,WAAW;AAAA,UACrB,UAAU;AAAA,UACV;AAAA,UACA,QAAQ,KAAK;AAAA,QACf,CAAC;AAAA,QACD,UAAU,MAAM;AAAA,QAChB;AAAA,QACA,QAAQ,KAAK;AAAA,MACf,CAAC;AAAA,MACD,MAAM,eAAe,KAAK,eAAe;AAAA,QACvC;AAAA,QACA,YAAY,QAAQ;AAAA,QACpB;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,QAAQ,MAAM;AAAA,QACd,WAAW,WAAW,IAAI,KAAK,SAAS,UAAU,IAAI;AAAA,QACtD,WAAW;AAAA,MACb,CAAC;AAAA,MACD,MAAM,UAAU,KAAK,oBAAoB;AAAA,QACvC;AAAA,QACA,YAAY,QAAQ;AAAA,QACpB,SAAS,MAAM;AAAA,QACf,QAAQ,KAAK;AAAA,MACf,CAAC;AAAA,MAED,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV,YAAY,WAAW;AAAA,QACvB;AAAA,MACF;AAAA,KAEJ;AAAA,IAEA,IAAI,WAAW,QAAQ;AAAA,MACrB,MAAM,OAAO;AAAA,IACf;AAAA,IAEA,OAAO;AAAA;AAAA,OAGH,6BAA4B,CAChC,OACqB;AAAA,IACrB,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,WAAW,eAAe,KAAK,IAAI;AAAA,QACvC,WAAW,MAAM;AAAA,QACjB,IAAI,MAAM;AAAA,MACZ,CAAC;AAAA,MAED,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,mBACR,gBACA,gBAAgB,MAAM,kCAAkC,MAAM,aAChE;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAOF,EACC,IAAI,MAAM,MAAM,WAAW,GAAG,MAAM,WAAW,MAAM,MAAM;AAAA,MAC9D,4BAA4B,KAAK,IAAI;AAAA,QACnC,WAAW,MAAM;AAAA,QACjB,QAAQ,MAAM;AAAA,QACd,WAAW,MAAM;AAAA,MACnB,CAAC;AAAA,MAED,OAAO,gBAAgB;AAAA,WAClB;AAAA,QACH,QAAQ;AAAA,QACR,YAAY,MAAM,MAAM,WAAW;AAAA,MACrC,CAAC;AAAA,KACF;AAAA;AAAA,EAGH,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,qBAAqB,CAC3B,WACA,IACA,WACA,aACA,KACuC;AAAA,IACvC,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,mBACR,sBACA,sBAAsB,8BAA8B,aACtD;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,eAAe,aAAa,IAAI,eAAe,IAAI,YAAY;AAAA,MACrE,MAAM,IAAI,mBACR,sBACA,sBAAsB,iCAAiC,aACzD;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,KAAK,IAAI,UAAU,KAAK,aAAa;AAAA,MAC3C,MAAM,IAAI,mBACR,sBACA,sBAAsB,+BAA+B,aACvD;AAAA,IACF;AAAA;AAAA,EAGM,uBAAuB,CAC7B,WACA,IACA,WACA,aACA,KACyC;AAAA,IACzC,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,mBACR,wBACA,sCAAsC,8BAA8B,aACtE;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,eAAe,aAAa,IAAI,aAAa;AAAA,MACnD,MAAM,IAAI,mBACR,wBACA,sCAAsC,iCAAiC,aACzE;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,KAAK,IAAI,UAAU,KAAK,aAAa;AAAA,MAC3C,MAAM,IAAI,mBACR,wBACA,sCAAsC,+BAA+B,aACvE;AAAA,IACF;AAAA;AAAA,EAGM,UAAU,CAAC,OAOJ;AAAA,IACb,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAYF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,OACN,MAAM,eAAe,MACrB,MAAM,aAAa,MACnB,MAAM,MAAM,SAAS,GACrB,MAAM,MAAM,SAAS,CACvB;AAAA,MACF,OAAO,OAAO;AAAA,MACd,yBACE,OACA,kBACA,gBAAgB,MAAM,mCAAmC,MAAM,aACjE;AAAA;AAAA,IAGF,OAAO;AAAA,MACL,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,OAAO,MAAM;AAAA,MACb,aAAa,MAAM;AAAA,MACnB,WAAW,MAAM;AAAA,MACjB,QAAQ;AAAA,MACR,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,MACnC,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,IACrC;AAAA;AAAA,EAGM,8BAA8B,CAAC,OAQrC;AAAA,IACA,IAAI,CAAC,MAAM,kBAAkB;AAAA,MAC3B,OAAO,EAAE,kBAAkB,CAAC,EAAE;AAAA,IAChC;AAAA,IAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQF,EACC,IACC,MAAM,MAAM,WAAW,GACvB,MAAM,MAAM,WAAW,GACvB,MAAM,WACN,MAAM,iBAAiB,EACzB;AAAA,IAEF,MAAM,aAA+B;AAAA,SAChC,MAAM;AAAA,MACT,QAAQ;AAAA,MACR,YAAY,IAAI,KAAK,MAAM,WAAW;AAAA,MACtC,WAAW,IAAI,KAAK,MAAM,WAAW;AAAA,IACvC;AAAA,IACA,MAAM,mBAAmB,MAAM,iBAAiB,SAAS,IAAI,CAAC,YAC5D,sBAAsB,KAAK,IAAI;AAAA,MAC7B,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM,KAAK;AAAA,MACnB;AAAA,MACA,QAAQ;AAAA,MACR,WAAW,MAAM;AAAA,IACnB,CAAC,CACH;AAAA,IAEA,OAAO,EAAE,YAAY,iBAAiB;AAAA;AAAA,EAGhC,WAAW,CAAC,OAOiB;AAAA,IACnC,MAAM,mBAAmB,CAAC,GAAG,MAAM,QAAQ;AAAA,IAE3C,WAAW,WAAW,MAAM,UAAU;AAAA,MACpC,iBAAiB,KACf,sBAAsB,KAAK,IAAI;AAAA,QAC7B,WAAW,MAAM;AAAA,QACjB,QAAQ,MAAM;AAAA,QACd;AAAA,QACA,QAAQ,MAAM;AAAA,QACd,WAAW,MAAM;AAAA,MACnB,CAAC,CACH;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAID,mBAAmB,CAAC,OAMS;AAAA,IACnC,IAAI,CAAC,MAAM,UAAU;AAAA,MACnB,OAAO,MAAM;AAAA,IACf;AAAA,IAEA,MAAM,WAAW,kBAAkB,MAAM,QAAQ;AAAA,IACjD,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,iCAKyB,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,OAE5D,EACC,IAAI,MAAM,WAAW,MAAM,QAAQ,GAAG,QAAQ;AAAA,IAEjD,OAAO,KAAK,YAAY,KAAK,OAAO,UAAU,QAAQ,YAAY,CAAC;AAAA;AAAA,EAG7D,mBAAmB,CAAC,OAKV;AAAA,IAChB,OAAO,cAAc,KAAK,IAAI;AAAA,MAC5B,IAAI,MAAM,QAAQ;AAAA,MAClB,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM;AAAA,MACd,YAAY,MAAM;AAAA,MAClB,UAAU,MAAM,QAAQ;AAAA,MACxB,WAAW,MAAM,QAAQ;AAAA,MACzB,WAAW,MAAM,QAAQ;AAAA,MACzB,WAAW,MAAM,QAAQ;AAAA,MACzB,mBAAmB,MAAM,QAAQ;AAAA,MACjC,WAAW,MAAM,QAAQ;AAAA,MACzB,WAAW,MAAM,QAAQ;AAAA,IAC3B,CAAC;AAAA;AAAA,EAGK,kBAAkB,CACxB,OACA,aACA,WACM;AAAA,IACN,mBAAmB,KAAK,IAAI;AAAA,MAC1B;AAAA,MACA,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,YAAY;AAAA,IACd,CAAC;AAAA;AAAA,EAGK,cAAc,CAAC,OAQA;AAAA,IACrB,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAgBF,EACC,IACC,MAAM,WACN,MAAM,YACN,MAAM,SACN,MAAM,QACN,wBAAwB,MAAM,MAAM,GACpC,MAAM,MAAM,SAAS,GACrB,MAAM,MAAM,SAAS,CACvB;AAAA,IAEF,OAAO,oBAAoB;AAAA,MACzB,YAAY,MAAM;AAAA,MAClB,aAAa,MAAM;AAAA,MACnB,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,MACf,QAAQ,wBAAwB,MAAM,MAAM;AAAA,MAC5C,YAAY,MAAM,MAAM,SAAS;AAAA,MACjC,YAAY,MAAM,MAAM,SAAS;AAAA,IACnC,CAAC;AAAA;AAEL;AAEA,SAAS,2BAA2B,CAClC,WACA,iBACA,gBACM;AAAA,EACN,IAAI,oBAAoB,gBAAgB;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,mBACR,iBACA,oCAAoC,yDAAyD,gCAAgC,aAC/H;AAAA;AAGF,SAAS,oCAAoC,CAC3C,eACA,OACM;AAAA,EACN,IAAI,cAAc,mBAAmB,MAAM,gBAAgB;AAAA,IACzD,MAAM,IAAI,mBACR,gCACA,sCACF;AAAA,EACF;AAAA,EACA,IAAI,cAAc,WAAW,WAAW;AAAA,IACtC,MAAM,IAAI,mBACR,gCACA,yCACF;AAAA,EACF;AAAA,EACA,IAAI,cAAc,WAAW,UAAU;AAAA,IACrC,MAAM,IAAI,mBACR,+BACA,yCACF;AAAA,EACF;AAAA,EACA,IACE,cAAc,WAAW,cACzB,cAAc,aAAa,MAAM,eACjC,CAAC,cAAc,kBACf,CAAC,cAAc,qBACf,MAAM,QAAQ,cAAc,MAAM,aAClC,MAAM,QAAQ,WAAW,cAAc,gBACvC;AAAA,IACA,MAAM,IAAI,mBACR,gCACA,yCACF;AAAA,EACF;AAAA;;AcvzBF;AAAA;AAAA;AAgBO,MAAM,yCAAyC,kCAAkC;AAAA,EACrE;AAAA,EAEjB,WAAW,CAAC,YAAmC;AAAA,IAC7C,MAAM,QAAQ,EAAE,UAAU,EAAE;AAAA,IAC5B,MAAM,IAAI,4CAA4C,WAAW,IAAI,KAAK,CAAC;AAAA,IAC3E,KAAK,QAAQ;AAAA;AAAA,EAIf,qBAAqB,CAAC,YAA0B;AAAA,IAC9C,KAAK,MAAM,YAAY;AAAA;AAE3B;AAAA;AAEA,MAAM,4CAA6F;AAAA,EAE9E;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,IACA,OACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,EAGnB,IAAO,CACL,OACA,KACY;AAAA,IACZ,OAAO,IAAI,IAAI,qCAAqC,KAAK,IAAI,OAAO,KAAK,KAAK,CAAC;AAAA;AAAA,EAGjF,WAAc,CACZ,OACA,KACY;AAAA,IACZ,OAAO,6BAA6B,KAAK,IAAI,MAC3C,IAAI,IAAI,qCAAqC,KAAK,IAAI,OAAO,KAAK,KAAK,CAAC,CAC1E;AAAA;AAEJ;AAAA;AAEA,MAAM,qCAA+E;AAAA,EAEhE;AAAA,EACA;AAAA,EACA;AAAA,EAHnB,WAAW,CACQ,IACA,OACA,OACjB;AAAA,IAHiB;AAAA,IACA;AAAA,IACA;AAAA;AAAA,OAGb,IAAG,GAAkB;AAAA,IACzB,MAAM,MAAM,KAAK,GAAG,MAAM,qDAAqD,EAAE,IAAI;AAAA,IAGrF,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,EAAE,QAAQ,IAAI,KAAK,MAAM,QAAQ;AAAA;AAAA,OAG7D,2BAA0B,CAAC,QAA+D;AAAA,IAC9F,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQF,EACC,IACC,OAAO,WACP,OAAO,aACP,OAAO,IACP,OAAO,MACP,OAAO,wBACP,OAAO,WACP,OAAO,iBAAiB,YAAY,OAAO,KAAK,OAAO,YAAY,GACnE,OAAO,aACP,OAAO,mBAAmB,MAC1B,OAAO,YAAY,MACnB,OAAO,uBAAuB,MAC9B,OAAO,qBAAqB,MAC5B,OAAO,2BAA2B,MAClC,OAAO,+BAA+B,KAAK,OAAO,4BAA4B,IAAI,MAClF,IAAI,OAAO,SAAS,GACpB,IAAI,OAAO,SAAS,CACtB;AAAA,MACF,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK;AAAA,QAAG,OAAO;AAAA,MAC3C,MAAM;AAAA;AAAA;AAAA,OAIJ,wBAAuB,CAAC,IAAiE;AAAA,IAC7F,MAAM,MAAM,KAAK,QAAuC,oCAAoC,EAAE;AAAA,IAC9F,OAAO,MAAM,4BAA4B,GAAG,IAAI;AAAA;AAAA,OAG5C,yCAAwC,CAC5C,iBACqD;AAAA,IACrD,IAAI,CAAC,KAAK,MAAM;AAAA,MAAa,OAAO;AAAA,IACpC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA,OAIF,EACC,IACC,KAAK,MAAM,WACX,KAAK,MAAM,aACX,eACF;AAAA,IACF,OAAO,MAAM,4BAA4B,GAAG,IAAI;AAAA;AAAA,OAG5C,2BAA0B,CAAC,IAA8B;AAAA,IAC7D,OAAO,KAAK,WAAW,oCAAoC,EAAE;AAAA;AAAA,OAGzD,oBAAmB,CAAC,QAAwD;AAAA,IAChF,IAAI;AAAA,MACF,KAAK,UAAU,MAAM;AAAA,MACrB,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK;AAAA,QAAG,OAAO;AAAA,MAC3C,MAAM;AAAA;AAAA;AAAA,OAIJ,0BAAyB,GAAqD;AAAA,IAClF,IAAI,CAAC,KAAK,MAAM;AAAA,MAAa,OAAO,CAAC;AAAA,IACrC,MAAM,OAAO,KAAK,GACf,MAAM;AAAA;AAAA,6FAEgF,EACtF,IAAI,KAAK,MAAM,WAAW,KAAK,MAAM,WAAW;AAAA,IACnD,OAAO,KAAK,IAAI,oBAAoB;AAAA;AAAA,OAGhC,iBAAgB,CAAC,IAA0D;AAAA,IAC/E,MAAM,MAAM,KAAK,QAAgC,6BAA6B,EAAE;AAAA,IAChF,OAAO,MAAM,qBAAqB,GAAG,IAAI;AAAA;AAAA,OAGrC,oBAAmB,CAAC,QAAqD;AAAA,IAC7E,MAAM,SAAS,UAAU,MAAM;AAAA,IAC/B,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQF,EACC,IAAI,GAAG,QAAQ,OAAO,WAAW,OAAO,aAAa,OAAO,EAAE;AAAA,IACjE,cAAc,OAAO,SAAS,4BAA4B,OAAO,EAAE;AAAA;AAAA,OAG/D,oBAAmB,CAAC,QAAwD;AAAA,IAChF,IAAI;AAAA,MACF,KAAK,uBAAuB,MAAM;AAAA,MAClC,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK;AAAA,QAAG,OAAO;AAAA,MAC3C,MAAM;AAAA;AAAA;AAAA,OAIJ,iBAAgB,CAAC,IAA0D;AAAA,IAC/E,MAAM,MAAM,KAAK,QAAgC,4BAA4B,EAAE;AAAA,IAC/E,OAAO,MAAM,qBAAqB,GAAG,IAAI;AAAA;AAAA,OAGrC,oBAAmB,CAAC,QAAqD;AAAA,IAC7E,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OASF,EACC,IAAI,GAAG,oBAAoB,MAAM,GAAG,OAAO,WAAW,OAAO,aAAa,OAAO,EAAE;AAAA,IACtF,cAAc,OAAO,SAAS,2BAA2B,OAAO,EAAE;AAAA;AAAA,OAG9D,iBAAgB,CAAC,QAAqD;AAAA,IAC1E,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IACC,OAAO,WACP,OAAO,aACP,OAAO,IACP,OAAO,iBACP,OAAO,MACP,KAAK,OAAO,OAAO,GACnB,OAAO,QAAQ,IACf,OAAO,QACP,YAAY,OAAO,cAAc,GACjC,IAAI,OAAO,SAAS,GACpB,IAAI,OAAO,SAAS,CACtB;AAAA,MACF,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK;AAAA,QAAG,OAAO;AAAA,MAC3C,MAAM;AAAA;AAAA;AAAA,OAIJ,kBAAiB,CAAC,IAAuD;AAAA,IAC7E,MAAM,MAAM,KAAK,QAA6B,yBAAyB,EAAE;AAAA,IACzE,OAAO,MAAM,kBAAkB,GAAG,IAAI;AAAA;AAAA,OAGlC,wBAAuB,CAAC,OAGgB;AAAA,IAC5C,IAAI,CAAC,KAAK,MAAM;AAAA,MAAa,OAAO;AAAA,IACpC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA,OAIF,EACC,IAAI,KAAK,MAAM,WAAW,KAAK,MAAM,aAAa,MAAM,IAAI;AAAA,IAC/D,OAAO,MAAM,kBAAkB,GAAG,IAAI;AAAA;AAAA,OAGlC,gBAAe,GAAkD;AAAA,IACrE,IAAI,CAAC,KAAK,MAAM;AAAA,MAAa,OAAO,CAAC;AAAA,IACrC,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA,OAKF,EACC,IAAI,KAAK,MAAM,WAAW,KAAK,MAAM,WAAW;AAAA,IACnD,OAAO,KAAK,IAAI,iBAAiB;AAAA;AAAA,OAG7B,+BAA8B,CAClC,iBACA,UAAgD,CAAC,GACF;AAAA,IAC/C,IAAI,CAAC,KAAK,MAAM;AAAA,MAAa,OAAO,CAAC;AAAA,IACrC,MAAM,OAAO,QAAQ,gBAChB,KAAK,GACH,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,WAMF,EACC,IACC,KAAK,MAAM,WACX,KAAK,MAAM,aACX,eACF,IACD,KAAK,GACH,MACC;AAAA;AAAA;AAAA;AAAA,WAKF,EACC,IACC,KAAK,MAAM,WACX,KAAK,MAAM,aACX,eACF;AAAA,IACN,OAAO,KAAK,IAAI,iBAAiB;AAAA;AAAA,OAG7B,iBAAgB,CAAC,QAAkD;AAAA,IACvE,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,OAMF,EACC,IACC,OAAO,iBACP,OAAO,MACP,KAAK,OAAO,OAAO,GACnB,OAAO,QAAQ,IACf,OAAO,QACP,YAAY,OAAO,cAAc,GACjC,IAAI,OAAO,SAAS,GACpB,OAAO,WACP,OAAO,aACP,OAAO,EACT;AAAA,IACF,cAAc,OAAO,SAAS,wBAAwB,OAAO,EAAE;AAAA;AAAA,EAGzD,SAAS,CAAC,QAA4C;AAAA,IAC5D,MAAM,SAAS,UAAU,MAAM;AAAA,IAC/B,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQF,EACC,IACC,OAAO,WACP,OAAO,aACP,OAAO,IACP,GAAG,OAAO,MAAM,GAAG,EAAE,GACrB,IAAI,OAAO,SAAS,GACpB,GAAG,OAAO,MAAM,EAAE,CACpB;AAAA;AAAA,EAGI,sBAAsB,CAAC,QAA4C;AAAA,IACzE,MAAM,SAAS,oBAAoB,MAAM;AAAA,IACzC,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OASF,EACC,IACC,OAAO,WACP,OAAO,aACP,OAAO,IACP,GAAG,OAAO,MAAM,GAAG,EAAE,GACrB,IAAI,OAAO,SAAS,GACpB,GAAG,OAAO,MAAM,EAAE,CACpB;AAAA;AAAA,EAGI,OAAa,CAAC,OAAuB,IAAyB;AAAA,IACpE,IAAI,KAAK,MAAM,aAAa;AAAA,MAC1B,OAAO,KAAK,GACT,MAAM,iBAAiB,4DAA4D,EACnF,IAAI,KAAK,MAAM,WAAW,KAAK,MAAM,aAAa,EAAE;AAAA,IACzD;AAAA,IACA,OAAO,KAAK,GACT,MAAM,iBAAiB,uCAAuC,EAC9D,IAAI,KAAK,MAAM,WAAW,EAAE;AAAA;AAAA,EAGzB,UAAU,CAAC,OAAuB,IAAqB;AAAA,IAC7D,MAAM,SAAS,KAAK,MAAM,cACtB,KAAK,GACF,MAAM,eAAe,4DAA4D,EACjF,IAAI,KAAK,MAAM,WAAW,KAAK,MAAM,aAAa,EAAE,IACvD,KAAK,GACF,MAAM,eAAe,uCAAuC,EAC5D,IAAI,KAAK,MAAM,WAAW,EAAE;AAAA,IACnC,OAAO,OAAO,YAAY;AAAA;AAE9B;AAQA,SAAS,2BAA2B,CAClC,KACqC;AAAA,EACrC,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,OAAO,EAAE,MAAM,UAAU;AAAA,IACzB,MAAM,IAAI;AAAA,IACV,wBAAwB,IAAI;AAAA,IAC5B,WAAW,IAAI;AAAA,OACX,IAAI,kBAAkB,OAAO,CAAC,IAAI,EAAE,cAAc,UAAU,IAAI,aAAa,EAAE;AAAA,IACnF,aAAa,IAAI;AAAA,OACb,IAAI,sBAAsB,OAAO,CAAC,IAAI,EAAE,iBAAiB,IAAI,kBAAkB;AAAA,OAC/E,IAAI,cAAc,OAAO,CAAC,IAAI,EAAE,UAAU,IAAI,UAAU;AAAA,OACxD,IAAI,0BAA0B,OAC9B,CAAC,IACD,EAAE,qBAAqB,IAAI,sBAAsB;AAAA,OACjD,IAAI,uBAAuB,OAAO,CAAC,IAAI,EAAE,mBAAmB,IAAI,mBAAmB;AAAA,OACnF,IAAI,6BAA6B,OACjC,CAAC,IACD,EAAE,yBAAyB,IAAI,yBAAyB;AAAA,OACxD,IAAI,mCAAmC,OACvC,CAAC,IACD,EAAE,8BAA8B,UAAU,IAAI,8BAA8B,EAAE;AAAA,IAClF,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGF,SAAS,SAAS,CAAC,QAAmE;AAAA,EACpF,MAAM,aAAa,OAAO,WAAW,YAAY,OAAO,aAAa;AAAA,EACrE,MAAM,eAAe,OAAO,WAAW,YAAY,OAAO,eAAe;AAAA,EACzE,MAAM,oBAAoB,OAAO,WAAW,YAAY,IAAI,OAAO,iBAAiB,IAAI;AAAA,EACxF,MAAM,YACJ,OAAO,WAAW,aAAa,OAAO,WAAW,YAAY,IAAI,OAAO,SAAS,IAAI;AAAA,EACvF,MAAM,kBAAkB,qBAAqB,SAAU,OAAO,mBAAmB,OAAQ;AAAA,EACzF,MAAM,yBACJ,OAAO,WAAW,cAAe,OAAO,0BAA0B,OAAQ;AAAA,EAC5E,MAAM,cAAc,OAAO,WAAW,cAAc,KAAK,OAAO,WAAW,IAAI;AAAA,EAC/E,MAAM,QAAQ,OAAO,WAAW,WAAW,KAAK,OAAO,KAAK,IAAI;AAAA,EAChE,MAAM,aACJ,OAAO,WAAW,eAClB,OAAO,WAAW,YAClB,OAAO,WAAW,eAClB,OAAO,WAAW,YACd,IAAI,OAAO,UAAU,IACrB;AAAA,EACN,OAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,IAAI,OAAO,SAAS;AAAA,IACpB;AAAA,EACF;AAAA;AAGF,SAAS,oBAAoB,CAAC,KAA2D;AAAA,EACvF,MAAM,OAAO;AAAA,IACX,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,MAAM,IAAI;AAAA,IACV,OAAO,EAAE,MAAM,UAAmB;AAAA,IAClC,MAAM,IAAI;AAAA,IACV,wBAAwB,IAAI;AAAA,IAC5B,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA,EACA,IAAI,IAAI,WAAW,aAAa,IAAI,gBAAgB,0BAA0B;AAAA,IAC5E,OAAO;AAAA,SACF;AAAA,MACH,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,WAAW,IAAI,KAAK,UAAS,IAAI,YAAY,YAAY,CAAC;AAAA,IAC5D;AAAA,EACF;AAAA,EACA,IAAI,IAAI,WAAW,aAAa,IAAI,gBAAgB,qBAAqB;AAAA,IACvE,OAAO;AAAA,SACF;AAAA,MACH,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,iBAAiB,UAAS,IAAI,kBAAkB,kBAAkB;AAAA,MAClE,WAAW,IAAI,KAAK,UAAS,IAAI,YAAY,YAAY,CAAC;AAAA,IAC5D;AAAA,EACF;AAAA,EACA,IAAI,IAAI,WAAW,WAAW;AAAA,IAC5B,OAAO;AAAA,SACF;AAAA,MACH,QAAQ;AAAA,MACR,cAAc,UAAS,IAAI,eAAe,eAAe;AAAA,MACzD,mBAAmB,IAAI,KAAK,UAAS,IAAI,qBAAqB,gBAAgB,CAAC;AAAA,MAC/E,WAAW,IAAI,KAAK,UAAS,IAAI,YAAY,YAAY,CAAC;AAAA,SACtD,IAAI,qBAAqB,OAAO,CAAC,IAAI,EAAE,iBAAiB,IAAI,iBAAiB;AAAA,IACnF;AAAA,EACF;AAAA,EACA,MAAM,aAAa,IAAI,KAAK,UAAS,IAAI,aAAa,YAAY,CAAC;AAAA,EACnE,IAAI,IAAI,WAAW,aAAa;AAAA,IAC9B,OAAO;AAAA,SACF;AAAA,MACH,QAAQ;AAAA,MACR,iBAAiB,UAAS,IAAI,kBAAkB,kBAAkB;AAAA,SAC9D,IAAI,6BAA6B,OACjC,CAAC,IACD,EAAE,wBAAwB,IAAI,yBAAyB;AAAA,MAC3D,aAAa,UACX,UAAS,IAAI,aAAa,aAAa,CACzC,EAAE,IAAI,wBAAwB;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAAA,EACA,IAAI,IAAI,WAAW,UAAU;AAAA,IAC3B,OAAO;AAAA,SACF;AAAA,MACH,QAAQ;AAAA,MACR,OAAO,UAAU,UAAS,IAAI,OAAO,WAAW,CAAC;AAAA,SAC7C,IAAI,qBAAqB,OAAO,CAAC,IAAI,EAAE,iBAAiB,IAAI,iBAAiB;AAAA,MACjF;AAAA,IACF;AAAA,EACF;AAAA,EACA,IAAI,IAAI,WAAW,aAAa;AAAA,IAC9B,OAAO;AAAA,SACF;AAAA,MACH,QAAQ;AAAA,SACJ,IAAI,qBAAqB,OAAO,CAAC,IAAI,EAAE,iBAAiB,IAAI,iBAAiB;AAAA,MACjF;AAAA,IACF;AAAA,EACF;AAAA,EACA,IAAI,IAAI,WAAW,WAAW;AAAA,IAC5B,OAAO;AAAA,SACF;AAAA,MACH,QAAQ;AAAA,SACJ,IAAI,qBAAqB,OAAO,CAAC,IAAI,EAAE,iBAAiB,IAAI,iBAAiB;AAAA,MACjF;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM,mBAAmB,mCAAmC,IAAI,MAAM;AAAA;AAGxE,SAAS,mBAAmB,CAAC,QAAmE;AAAA,EAC9F,MAAM,WAAW,OAAO;AAAA,EACxB,MAAM,SAAS,UAAU;AAAA,EACzB,OAAO;AAAA,IACL,KAAK,OAAO,YAAY;AAAA,IACxB,OAAO,cAAc,KAAK,OAAO,WAAW,IAAI;AAAA,IAChD,YAAY,OAAO,mBAAmB;AAAA,IACtC,KAAK,OAAO,MAAM;AAAA,IAClB,KAAK,OAAO,QAAQ;AAAA,IACpB,OAAO;AAAA,IACP,YAAY,OAAO,kBAAkB;AAAA,IACrC,OAAO;AAAA,IACP,UAAU,MAAM;AAAA,IAChB,UAAU,QAAQ;AAAA,IAClB,UAAU,SAAS;AAAA,IACnB,UAAU,YAAY;AAAA,IACtB,YAAY,UAAU,SAAS;AAAA,IAC/B,YAAY,UAAU,UAAU;AAAA,IAChC,UAAU,wBAAwB,KAAK,SAAS,qBAAqB,IAAI;AAAA,IACzE,SAAS,KAAK,OAAO,WAAW,IAAI;AAAA,IACpC,YAAY,QAAQ,mBAAmB;AAAA,IACvC,SAAS,KAAK,OAAO,MAAM,IAAI;AAAA,IAC/B,IAAI,OAAO,SAAS;AAAA,EACtB;AAAA;AAGF,SAAS,oBAAoB,CAAC,KAA2D;AAAA,EACvF,MAAM,WAAW,gBAAgB,GAAG;AAAA,EACpC,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,cAAc,UAAU,IAAI,aAAa;AAAA,OACrC,IAAI,gBAAgB,OAAO,CAAC,IAAI,EAAE,aAAa,UAAU,IAAI,WAAW,EAAE;AAAA,OAC1E,IAAI,0BAA0B,OAC9B,CAAC,IACD,EAAE,qBAAqB,IAAI,KAAK,IAAI,qBAAqB,EAAE;AAAA,IAC/D,QAAQ,UAAU,IAAI,MAAM;AAAA,IAC5B,UAAU,UAAU,IAAI,QAAQ;AAAA,IAChC,QAAQ,IAAI;AAAA,OACR,IAAI,yBAAyB,OAC7B,CAAC,IACD,EAAE,oBAAoB,IAAI,KAAK,IAAI,oBAAoB,EAAE;AAAA,IAC7D,UAAU,IAAI;AAAA,OACV,aAAa,YAAY,CAAC,IAAI,EAAE,oBAAoB,SAAS;AAAA,IACjE,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGF,SAAS,eAAe,CAAC,KAAsE;AAAA,EAC7F,IAAI,IAAI,gBAAgB;AAAA,IAAM;AAAA,EAC9B,MAAM,OAAO,UAAS,IAAI,eAAe,0BAA0B;AAAA,EACnE,MAAM,QAAQ,UAAS,IAAI,gBAAgB,2BAA2B;AAAA,EACtE,MAAM,oBACJ,IAAI,uBAAuB,OACvB,YACA;AAAA,IACE,aAAa,UAEX,IAAI,kBAAkB;AAAA,OACpB,IAAI,iCAAiC,OACrC,CAAC,IACD,EAAE,qBAAqB,IAAI,KAAK,IAAI,4BAA4B,EAAE;AAAA,IACtE,QAAQ,UACN,UAAS,IAAI,eAAe,0BAA0B,CACxD;AAAA,EACF;AAAA,EACN,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR;AAAA,IACA;AAAA,IACA,UAAU,UAAS,IAAI,oBAAoB,4BAA4B;AAAA,IACvE,WAAW,IAAI,KAAK,UAAS,IAAI,qBAAqB,4BAA4B,CAAC;AAAA,IACnF,YAAY,IAAI,KAAK,UAAS,IAAI,sBAAsB,8BAA8B,CAAC;AAAA,OACnF,IAAI,qCAAqC,OACzC,CAAC,IACD;AAAA,MACE,uBAAuB,UAA6B,IAAI,gCAAgC;AAAA,IAC1F;AAAA,OACA,sBAAsB,YAAY,CAAC,IAAI,EAAE,kBAAkB;AAAA,EACjE;AAAA;AAGF,SAAS,iBAAiB,CAAC,KAAqD;AAAA,EAC9E,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,iBAAiB,IAAI;AAAA,IACrB,OAAO,EAAE,MAAM,UAAU;AAAA,IACzB,MAAM,IAAI;AAAA,IACV,SAAS,UAAU,IAAI,OAAO;AAAA,IAC9B,QAAQ,IAAI;AAAA,OACR,IAAI,oBAAoB,OAAO,CAAC,IAAI,EAAE,gBAAgB,IAAI,KAAK,IAAI,eAAe,EAAE;AAAA,IACxF,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAYF,SAAS,wBAAwB,CAC/B,QAC2B;AAAA,EAC3B,QAAQ,WAAW,WAAW,mBAAmB,eAAe;AAAA,EAChE,OAAO;AAAA,OACF;AAAA,IACH,WAAW,IAAI,KAAK,SAAS;AAAA,IAC7B,WAAW,IAAI,KAAK,SAAS;AAAA,OACzB,mBAAmB,YAAY,CAAC,IAAI,EAAE,gBAAgB,IAAI,KAAK,cAAc,EAAE;AAAA,EACrF;AAAA;AAGF,SAAS,IAAI,CAAC,OAAwB;AAAA,EACpC,OAAO,KAAK,UAAU,KAAK;AAAA;AAG7B,SAAS,SAAY,CAAC,OAAkB;AAAA,EACtC,OAAO,KAAK,MAAM,KAAK;AAAA;AAGzB,SAAS,GAAG,CAAC,OAAqB;AAAA,EAChC,OAAO,MAAM,YAAY;AAAA;AAG3B,SAAS,WAAW,CAAC,OAAwC;AAAA,EAC3D,OAAO,OAAO,YAAY,KAAK;AAAA;AAGjC,SAAS,SAAW,CAAC,OAAiB,OAAkB;AAAA,EACtD,IAAI,UAAU;AAAA,IAAM,OAAO;AAAA,EAC3B,MAAM,IAAI,MAAM,uBAAuB,mBAAmB;AAAA;AAG5D,SAAS,kBAAkB,CAAC,OAAe,OAAuB;AAAA,EAChE,OAAO,IAAI,MAAM,uBAAuB,UAAU,OAAO,KAAK,gBAAgB;AAAA;AAGhF,SAAS,aAAa,CAAC,SAAiB,OAAe,IAAkB;AAAA,EACvE,IAAI,YAAY;AAAA,IAAG;AAAA,EACnB,MAAM,IAAI,MAAM,uBAAuB,UAAU,qBAAqB;AAAA;;;ACnsBxE;AAAA;AAAA;AAAA;AAAA;AAYA;AAAA;AAGO,MAAM,uBAAmD;AAAA,EAE3C;AAAA,EACA;AAAA,EACA;AAAA,EAHnB,WAAW,CACQ,IACA,MACA,eACjB;AAAA,IAHiB;AAAA,IACA;AAAA,IACA;AAAA;AAAA,OAGb,OAAM,CAAC,OAAuD;AAAA,IAClE,MAAM,SAAS,MAAM,uBAAuB,OAAO;AAAA,MACjD,MAAM,KAAK;AAAA,MACX,cAAc,CAAC,WAAW,KAAK,QAAQ,MAAM;AAAA,MAC7C,iBAAiB,CAAC,WAAW,KAAK,cAAc,QAAQ,MAAM;AAAA,IAChE,CAAC;AAAA,IACD,MAAM,MAAM,4BAA4B,MAAM;AAAA,IAE9C,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SA2BF,EACC,IACC,IAAI,WACJ,IAAI,IACJ,IAAI,cACJ,IAAI,YACJ,IAAI,YACJ,IAAI,UACJ,IAAI,mBACJ,IAAI,6BACJ,KAAK,UAAU,IAAI,iBAAiB,GACpC,IAAI,eACJ,IAAI,mBACJ,IAAI,eACJ,IAAI,iBACJ,IAAI,2BACJ,IAAI,oBACJ,IAAI,wBACJ,IAAI,wBACJ,IAAI,sBACJ,IAAI,0BACJ,IAAI,yBACJ,IAAI,uBACJ,IAAI,8BACJ,IAAI,UAAU,YAAY,CAC5B;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,0BAA0B,KAAK,GAAG;AAAA,QACpC,MAAM,IAAI,sBACR,uBACA,2BAA2B,OAAO,kCAAkC,OAAO,eAC3E,EAAE,OAAO,MAAM,CACjB;AAAA,MACF;AAAA,MACA,MAAM;AAAA;AAAA,IAGR,OAAO,8BAA8B,GAAG;AAAA;AAAA,OAGpC,QAAO,CAAC,QAGsB;AAAA,IAClC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA,OAKF,EACC,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,8BAA8B,aAAa,GAAG,CAAC,IAAI;AAAA;AAEpE;AAEA,SAAS,YAAY,CAAC,KAA8C;AAAA,EAClE,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,IAAI,IAAI;AAAA,IACR,cAAc,IAAI;AAAA,IAClB,YAAY,IAAI;AAAA,IAChB,YAAY,IAAI;AAAA,IAChB,UAAU,IAAI;AAAA,IACd,mBAAmB,IAAI;AAAA,IACvB,6BAA6B,IAAI;AAAA,IACjC,mBAAmB,KAAK,MAAM,IAAI,mBAAmB;AAAA,IACrD,eAAe,IAAI;AAAA,IACnB,mBAAmB,IAAI;AAAA,IACvB,eAAe,IAAI;AAAA,IACnB,iBAAiB,IAAI;AAAA,IACrB,2BAA2B,IAAI;AAAA,IAC/B,oBAAoB,IAAI;AAAA,IACxB,wBAAwB,IAAI;AAAA,IAC5B,wBAAwB,IAAI;AAAA,IAC5B,sBAAsB,IAAI;AAAA,IAC1B,0BAA0B,IAAI;AAAA,IAC9B,yBAAyB,IAAI;AAAA,IAC7B,uBAAuB,IAAI;AAAA,IAC3B,8BAA8B,IAAI;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGF,SAAS,yBAAyB,CAAC,OAAyB;AAAA,EAC1D,OACE,iBAAiB,SACjB,MAAM,QAAQ,SAAS,gEAAgE;AAAA;;;ACrJ3F;AAAA;AAAA;AAAA;AAAA;AAWO,MAAM,uCAAuC,0BAA0B;AAAA,EAC5E,WAAW,CAAC,YAAmC;AAAA,IAC7C,MAAM,IAAI,+BAA+B,WAAW,EAAE,CAAC;AAAA;AAE3D;AAAA;AAEA,MAAM,+BAA8E;AAAA,EAGrD;AAAA,EAFZ;AAAA,EAEjB,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA,IAC3B,KAAK,cAAc,IAAI,mCAAmC,EAAE;AAAA;AAAA,EAG9D,IAAO,CAAC,KAA4E;AAAA,IAClF,OAAO,IAAI,KAAK,WAAW;AAAA;AAAA,EAG7B,WAAc,CAAC,KAA4E;AAAA,IACzF,OAAO,6BAA6B,KAAK,IAAI,MAAM,IAAI,KAAK,WAAW,CAAC;AAAA;AAE5E;AAAA;AAEA,MAAM,mCAA2E;AAAA,EAClD;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,IAAG,GAAkB;AAAA,IACzB,MAAM,MAAM,KAAK,GAAG,MAAM,qDAAqD,EAAE,IAAI;AAAA,IAGrF,OAAO,IAAI,KAAK,IAAI,GAAG;AAAA;AAAA,OAGnB,OAAM,CAAC,SAA8C;AAAA,IACzD,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,6EAKF,EACC,IACC,QAAQ,IACR,QAAQ,WACR,QAAQ,UAAU,MAClB,QAAQ,UAAU,IAClB,QAAQ,UACR,QAAQ,QACR,QAAQ,YAAY,MACpB,QAAQ,aAAa,MACrB,QAAQ,eAAe,MACvB,QAAQ,qBAAqB,MAC7B,QAAQ,kBAAkB,MAC1B,GAAG,eAAe,OAAO,CAC3B;AAAA,MACF,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK;AAAA,QAAG,OAAO;AAAA,MAC3C,MAAM;AAAA;AAAA;AAAA,OAIJ,IAAG,CAAC,UAAqD;AAAA,IAC7D,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,6BAA6B,EAAE,IAAI,QAAQ;AAAA,IACxE,OAAO,MAAM,0BAA0B,GAA8B,IAAI;AAAA;AAAA,OAGrE,OAAM,CAAC,SAA2C;AAAA,IACtD,KAAK,GACF,MACC;AAAA;AAAA;AAAA,sBAIF,EACC,IAAI,QAAQ,QAAQ,GAAG,eAAe,OAAO,GAAG,QAAQ,EAAE;AAAA;AAAA,OAGzD,cAAa,CACjB,OACuC;AAAA,IACvC,MAAM,OAAO,KAAK,GACf,MACC,GAAG;AAAA;AAAA;AAAA;AAAA,iBAKL,EACC,IAAI,MAAM,WAAW,MAAM,IAAI,YAAY,GAAG,MAAM,KAAK;AAAA,IAC5D,OAAO,KAAK,IAAI,CAAC,QAAQ,0BAA0B,GAA8B,CAAC;AAAA;AAAA,OAG9E,eAAc,CAAC,KAA4B;AAAA,IAC/C,OAAO,KAAK,GACT,MAAM,6EAA6E,EACnF,IAAI,IAAI,YAAY,CAAC,EAAE;AAAA;AAE9B;AAEA,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWvB,SAAS,cAAc,CAAC,SAA4B;AAAA,EAClD,OAAO;AAAA,IACL,QAAQ,mBAAmB,YAAY,OAAO,KAAK,UAAU,QAAQ,cAAc;AAAA,IACnF,KAAK,UAAU,QAAQ,WAAW;AAAA,IAClC,QAAQ,YAAY,YAAY,OAAO,KAAK,UAAU,QAAQ,OAAO;AAAA,IACrE,QAAQ,UAAU,YAAY;AAAA,IAC9B,QAAQ,UAAU,YAAY;AAAA,IAC9B,QAAQ,aAAa,YAAY,KAAK;AAAA,IACtC,QAAQ,WAAW,YAAY,KAAK;AAAA,IACpC,wBAAwB,OAAO,GAAG,YAAY,KAAK;AAAA,EACrD;AAAA;;;ACrIF,6BAAS;;;ACDT;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACPO,SAAS,kBAAkB,CAAC,QAAuC;AAAA,EACxE,MAAM,QAAQ,IAAI,WAAW,OAAO,SAAS,CAAC;AAAA,EAC9C,MAAM,OAAO,IAAI,SAAS,MAAM,MAAM;AAAA,EACtC,SAAS,QAAQ,EAAG,QAAQ,OAAO,QAAQ,SAAS;AAAA,IAClD,KAAK,WAAW,QAAQ,GAAG,OAAO,QAAS,IAAI;AAAA,EACjD;AAAA,EACA,OAAO;AAAA;;;ADqFT,IAAM,oBAAoB;AAK1B,IAAM,2BAA2B;AAE1B,SAAS,kBAAkB,CAChC,WACA,OACA,UAAwE,CAAC,GACpD;AAAA,EACrB,IAAI,iBAAiB,KAAK,KAAK,CAAC,qBAAqB,KAAK,GAAG;AAAA,IAC3D,MAAM,IAAI,0BACR,kCACA,6GACF;AAAA,EACF;AAAA,EACA,MAAM,SAAS,QAAQ,UAAU;AAAA,EACjC,MAAM,MAAsB,EAAE,YAAY,QAAQ,iBAAiB,OAAO,OAAO;AAAA,EACjF,OAAO,OAAO,UAAU,2BAA2B,WAAW,OAAO,GAAG,CAAC;AAAA;AAmBpE,IAAM,8BAAuD;AAAA,EAClE,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,eAAe,CAAC,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,MAAM,CAAC,GAAG,IAAI,EAAE;AAAA,EAC3D,WAAW,CAAC,UAAU;AACxB;AAEA,SAAS,YAAY,CAAC,KAAqC;AAAA,EACzD,OAAO,IAAI,aAAa,KAAK,KAAK,YAAY,MAAM,IAAI;AAAA;AAG1D,SAAS,0BAA0B,CACjC,WACA,OACA,KACqB;AAAA,EACrB,QAAQ,MAAM;AAAA,SACP;AAAA,MACH,OAAO,aAAa,WAAW,OAAO,GAAG;AAAA,SACtC;AAAA,MACH,OAAO,YAAY,WAAW,OAAO,GAAG;AAAA,SACrC;AAAA,MACH,OAAO,cAAc,WAAW,MAAM,OAAO,MAAM,WAAW,GAAG;AAAA,SAC9D;AAAA,MACH,OAAO,YAAY,WAAW,MAAM,OAAO,MAAM,QAAQ,GAAG;AAAA,SACzD;AAAA,MACH,OAAO,aAAa,WAAW,MAAM,OAAO,MAAM,OAAO,GAAG;AAAA,SACzD;AAAA,MACH,OAAO,YAAY,WAAW,MAAM,OAAO,MAAM,UAAU,MAAM,WAAW,GAAG;AAAA,SAC5E;AAAA,MACH,OAAO,iBACL,WACA,MAAM,OACN,MAAM,QACN,MAAM,WACN,MAAM,oBACN,GACF;AAAA,SACG;AAAA,MACH,OAAO,WAAW,WAAW,MAAM,IAAI,MAAM,QAAQ,GAAG;AAAA,SACrD;AAAA,MACH,OAAO,eAAe,WAAW,MAAM,OAAO,MAAM,YAAY,GAAG;AAAA,SAChE;AAAA,MACH,OAAO,YACL,WACA,MAAM,OACN,MAAM,OACN,MAAM,QACN,MAAM,oBACN,GACF;AAAA,SACG;AAAA,MACH,OAAO,cAAc,WAAW,MAAM,OAAO,MAAM,YAAY,GAAG;AAAA,SAC/D;AAAA,MACH,OAAO,cAAc,WAAW,OAAO,GAAG;AAAA;AAAA;AAIhD,SAAS,aAAa,CACpB,WACA,OACA,KACqB;AAAA,EACrB,IACE,OAAO,MAAM,WAAW,YACxB,CAAC,qBAAqB,KAAK,KAC3B,CAAC,MAAM,iBACP,CAAC,OAAO,cAAc,MAAM,CAAC,KAC7B,MAAM,IAAI,KACV,MAAM,IAAI,QACV,MAAM,OAAO,SAAS,KACtB,MAAM,OAAO,SAAS,OACtB;AAAA,IACA,MAAM,IAAI,0BACR,wBACA,+CACF;AAAA,EACF;AAAA,EACA,MAAM,QAAQ,2BAA2B,WAAW,MAAM,OAAO,aAAa,GAAG,CAAC;AAAA,EAClF,MAAM,cAAc,IAAI,OAAO;AAAA,EAC/B,MAAM,iBAAiB,cACnB;AAAA;AAAA,aAEO;AAAA;AAAA;AAAA;AAAA,gEAKP;AAAA,EACJ,MAAM,aAAa,cACf;AAAA;AAAA;AAAA,OAIA;AAAA,EACJ,MAAM,aAAa,SAAS,MAAM;AAAA;AAAA;AAAA,MAG9B;AAAA;AAAA,8CAEwC;AAAA,EAC5C,MAAM,gBAAgB,CAAC,GAAG,MAAM,MAAM,MAAM,SAAU,MAAM,eAAe,MAAM,OAAO,MAAM;AAAA,EAE9F,MAAM,QAAQ,2BAA2B,MAAM,OAAO,MAAM;AAAA,EAC5D,MAAM,SAAS,gBAAgB,MAAM,QAAQ,MAAM,OAAO,MAAM;AAAA,EAChE,MAAM,QAAQ,aAAa;AAAA,IACzB,EAAE,MAAM,UAAU,QAAQ,iBAAiB,WAAW,OAAO;AAAA,IAC7D,GAAG,oBAAoB,EAAE,IAAI,CAAC,WAAW,KAAK,OAAO,QAAQ,KAAK,EAAE;AAAA,EACtE,CAAC;AAAA,EACD,MAAM,cAAc,aAAa,MAAM,QAAQ,QAAQ;AAAA,EAGvD,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iDAOmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eASlC,MAAM;AAAA,2BACM,IAAI,OAAO;AAAA;AAAA;AAAA,aAGzB,YAAY;AAAA,EACvB,MAAM,OAAO,CAAC,GAAG,eAAe,QAAQ,GAAG,OAAO,mBAAmB,MAAM,GAAG,MAAM,CAAC;AAAA,EACrF,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IAEA,UAAU,2CAA2C;AAAA,IACrD,WAAW,CAAC,GAAG,eAAe,MAAM,CAAC;AAAA,IACrC;AAAA,IACA,aAAa;AAAA,MACX,KAAK,2CAA2C;AAAA,MAChD,MAAM,CAAC,GAAG,eAAe,QAAQ,CAAC;AAAA,MAClC;AAAA,MACA,UAAU,MAAM;AAAA,MAChB,YAAY,MAAM;AAAA,IACpB;AAAA,IACA,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,IACV,eAAe,MAAG;AAAA,MAAG;AAAA;AAAA,EACvB;AAAA;AAGF,SAAS,YAAY,CACnB,WACA,OACA,KACqB;AAAA,EACrB,IAAI,MAAM,oBAAoB,MAAM;AAAA,IAClC,MAAM,IAAI,MAAM,qEAAqE;AAAA,EACvF;AAAA,EAEA,MAAM,QAAQ,aAAa,oBAAoB,CAAC;AAAA,EAChD,MAAM,MAAM;AAAA;AAAA,WAEH,IAAI,OAAO;AAAA;AAAA,eAEP,MAAM;AAAA;AAAA,EAEnB,MAAM,OAAO,CAAC,WAAW,MAAM,cAAc,GAAG,MAAM,IAAI;AAAA,EAE1D,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU,iCAAiC,IAAI,OAAO;AAAA,IACtD,WAAW,CAAC,WAAW,MAAM,YAAY;AAAA,IACzC;AAAA,IACA,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,IACV,eAAe,MAAG;AAAA,MAAG;AAAA;AAAA,EACvB;AAAA;AAGF,SAAS,WAAW,CAClB,WACA,OACA,KACqB;AAAA,EACrB,IAAI,MAAM,KAAK,WAAW,GAAG;AAAA,IAC3B,MAAM,IAAI,MAAM,wDAAwD;AAAA,EAC1E;AAAA,EAEA,MAAM,QAAQ,aAAa,oBAAoB,CAAC;AAAA,EAChD,MAAM,gBAAgB,aAAa,oBAAoB,GAAG,UAAU;AAAA,EACpE,MAAM,WAAW,KAAK,UAAU,MAAM,IAAI;AAAA,EAC1C,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlB,MAAM,MAAM;AAAA;AAAA,YAEF;AAAA,WACD,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA,eAIP,cAAc;AAAA;AAAA,EAG3B,OAAO;AAAA,IACL;AAAA,IACA,MAAM,CAAC,UAAU,WAAW,GAAG,cAAc,IAAI;AAAA,IACjD,UAAU;AAAA;AAAA,cAEA;AAAA,aACD,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKpB,WAAW,CAAC,UAAU,SAAS;AAAA,IAC/B;AAAA,IACA,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,IACV,eAAe,MAAG;AAAA,MAAG;AAAA;AAAA,EACvB;AAAA;AAGF,SAAS,aAAa,CACpB,WACA,YACA,eACA,KACqB;AAAA,EACrB,MAAM,YAAY,iBAAiB,aAAa;AAAA,EAChD,OAAO,aAAa,WAAW,YAAY,WAAW,GAAG;AAAA;AAG3D,SAAS,YAAY,CACnB,WACA,YACA,WACA,KACqB;AAAA,EACrB,MAAM,QAAQ,2BAA2B,WAAW,YAAY,aAAa,GAAG,CAAC;AAAA,EACjF,MAAM,MAAM;AAAA;AAAA,YAEF,MAAM;AAAA,YACN,UAAU;AAAA,eACP,MAAM,MAAM;AAAA;AAAA,EAGzB,OAAO;AAAA,IACL;AAAA,IACA,MAAM,CAAC,GAAG,MAAM,MAAM,GAAG,UAAU,MAAM,GAAG,MAAM,MAAM,IAAI;AAAA,IAC5D,UAAU;AAAA;AAAA,cAEA,MAAM;AAAA,cACN,UAAU;AAAA;AAAA,IAEpB,WAAW,CAAC,GAAG,MAAM,MAAM,GAAG,UAAU,IAAI;AAAA,IAC5C,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,IACb,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,IACV,eAAe,MAAG;AAAA,MAAG;AAAA;AAAA,EACvB;AAAA;AAGF,SAAS,WAAW,CAClB,WACA,YACA,OACA,QACA,oBACA,KACqB;AAAA,EACrB,MAAM,YACJ,UAAU,OAAO,SAAS,IACtB,qBAAqB,OAAO,MAAM,IAClC,2BAA2B,OAAO,kBAAkB;AAAA,EAE1D,IAAI,CAAC,WAAW;AAAA,IACd,MAAM,IAAI,MAAM,4EAA4E;AAAA,EAC9F;AAAA,EACA,OAAO,aAAa,WAAW,YAAY,WAAW,GAAG;AAAA;AAG3D,SAAS,WAAW,CAClB,WACA,YACA,QACA,KACqB;AAAA,EACrB,MAAM,QAAQ,2BAA2B,WAAW,YAAY,aAAa,GAAG,CAAC;AAAA,EACjF,MAAM,aACJ,IAAI,cAAc,gBAAgB,UAAU,IACxC,2BAA2B,WAAW,YAAY,GAAG,IACrD;AAAA,EACN,MAAM,QAAQ,aAAa,gBAAgB,MAAM,CAAC;AAAA,EAElD,OAAO;AAAA,IACL,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAUqB,MAAM,cAAc,0BAA0B;AAAA,cAC9D,MAAM;AAAA,iBACH,MAAM;AAAA;AAAA,IAEnB,MAAM,CAAC,GAAG,MAAM,MAAM,GAAG,MAAM,IAAI;AAAA,IACnC,UAAU,MAAM;AAAA,IAChB,WAAW,MAAM;AAAA,IACjB;AAAA,IACA,cAAc,aAAa,gBAAgB,UAAU,IAAI,MAAM;AAAA,IAC/D,SAAS,MAAM;AAAA,IACf,UAAU,MAAM;AAAA,IAChB,eAAe,MAAM;AAAA,EACvB;AAAA;AAGF,SAAS,YAAY,CACnB,WACA,YACA,UACA,KACqB;AAAA,EACrB,MAAM,QAAQ,2BAA2B,WAAW,YAAY,aAAa,GAAG,CAAC;AAAA,EACjF,MAAM,QAAQ,KAAK,IAAI,GAAG,QAAQ;AAAA,EAClC,MAAM,WAAW,IAAI,aAAa,QAAQ,IAAI;AAAA,EAE9C,OAAO;AAAA,IACL,KAAK;AAAA;AAAA,cAEK,MAAM;AAAA,iBACH,MAAM,MAAM;AAAA;AAAA;AAAA,IAGzB,MAAM,CAAC,GAAG,MAAM,MAAM,GAAG,MAAM,MAAM,MAAM,QAAQ;AAAA,IACnD,UAAU;AAAA;AAAA,cAEA,MAAM;AAAA;AAAA,IAEhB,WAAW,MAAM;AAAA,IACjB,aAAa,MAAM,cACf;AAAA,SACK,MAAM;AAAA,MACT,UAAU,KAAK,IAAI,MAAM,YAAY,UAAU,QAAQ;AAAA,MACvD,YAAY,MAAM,YAAY;AAAA,IAChC,IACA;AAAA,IACJ,OAAO,MAAM;AAAA,IACb,SAAS,CAAC,UAAU,UAClB,UAAU,YAAY,IAAI,cAAc,WAAW,QAAQ,QAAQ;AAAA,IACrE,UAAU,IAAI,aAAa,CAAC,SAAS,KAAK,MAAM,GAAG,KAAK,IAAI;AAAA,IAC5D,eAAe,MAAG;AAAA,MAAG;AAAA;AAAA,EACvB;AAAA;AAGF,SAAS,WAAW,CAClB,WACA,YACA,aACA,WACA,KACqB;AAAA,EACrB,MAAM,QAAQ,2BAA2B,WAAW,YAAY,aAAa,GAAG,CAAC;AAAA,EACjF,MAAM,WAAW,KAAK,IAAI,GAAG,WAAW;AAAA,EACxC,MAAM,SAAS,YAAY,gBAAgB,WAAW,MAAM,MAAM,MAAM,IAAI;AAAA,EAC5E,MAAM,kBAAkB,SACpB,uBAAuB,MAAM,MAAM,QAAQ,QAAQ,MAAM,MAAM,cAAc,IAC7E;AAAA,EACJ,MAAM,WAAW,kBAAkB,SAAS,gBAAgB,QAAQ;AAAA,EAEpE,OAAO;AAAA,IACL,KAAK;AAAA;AAAA,cAEK,MAAM;AAAA,QACZ;AAAA,iBACS,MAAM,MAAM;AAAA;AAAA;AAAA,IAGzB,MAAM,CAAC,GAAG,MAAM,MAAM,GAAI,iBAAiB,QAAQ,CAAC,GAAI,GAAG,MAAM,MAAM,MAAM,WAAW,CAAC;AAAA,IACzF,UAAU;AAAA;AAAA,cAEA,MAAM;AAAA;AAAA,IAEhB,WAAW,MAAM;AAAA,IACjB,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,IACb,SAAS,CAAC,aAAa,WAAW;AAAA,IAClC,UAAU,CAAC,SAAS,KAAK,MAAM,GAAG,QAAQ;AAAA,IAC1C,eAAe,CAAC,MAAM,aAAa;AAAA,MACjC,IAAI,YAAY,YAAY,KAAK,WAAW;AAAA,QAAG;AAAA,MAC/C,OAAO,gBAAgB,KAAK,KAAK,SAAS,IAAI,MAAM,MAAM,MAAM;AAAA;AAAA,EAEpE;AAAA;AAGF,SAAS,gBAAgB,CACvB,WACA,YACA,QACA,WACA,oBACA,KACqB;AAAA,EACrB,MAAM,QAAQ,2BAA2B,WAAW,YAAY,aAAa,GAAG,CAAC;AAAA,EACjF,MAAM,cAAc,cAAc,aAAa,kBAAkB;AAAA,EACjE,MAAM,UACJ,cAAc,aACV;AAAA,eACO,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,eAKX,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA,UAKlB;AAAA,eACO,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA,+BAIK,uBAAuB,YAAY,KAAK;AAAA;AAAA,eACxD,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxB,MAAM,QAAQ,aAAa,oBAAoB,CAAC;AAAA,EAChD,MAAM,iBAAiB,aAAa,oBAAoB,GAAG,WAAW;AAAA,EACtE,MAAM,MAAM;AAAA,sBACQ,kBAAkB;AAAA,YAC5B,MAAM;AAAA,MACZ;AAAA,eACS,eAAe;AAAA;AAAA,EAE5B,MAAM,OAAO;AAAA,IACX,GAAG,MAAM;AAAA,IACT;AAAA,IACA,GAAI,uBAAuB,YAAY,CAAC,IAAI,CAAC,kBAAkB;AAAA,IAC/D,GAAG,eAAe;AAAA,EACpB;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU,kCAAkC;AAAA,IAC5C,WAAW;AAAA,IACX;AAAA,IACA,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,IACV,eAAe,MAAG;AAAA,MAAG;AAAA;AAAA,EACvB;AAAA;AAeF,SAAS,aAAa,CACpB,WACA,YACA,YACA,KACqB;AAAA,EACrB,MAAM,QAAQ,2BAA2B,WAAW,YAAY,aAAa,GAAG,CAAC;AAAA,EACjF,MAAM,SAAS,wBACb,YACA,EAAE,SAAS,oBAAoB,MAAM,wBAAwB,IAAI,mBAAmB,GACpF,IACA,GACF;AAAA,EACA,MAAM,aAAa,aAAa,MAAM,MAAM,QAAQ,SAAS,0BAA0B;AAAA,EACvF,MAAM,MAAM;AAAA,sBACQ,OAAO;AAAA,YACjB,MAAM;AAAA,eACH,WAAW;AAAA;AAAA,EAGxB,OAAO;AAAA,IACL;AAAA,IACA,MAAM,CAAC,GAAG,OAAO,MAAM,GAAG,MAAM,MAAM,GAAG,WAAW,IAAI;AAAA,IACxD,UAAU,MAAM;AAAA,IAChB,WAAW,MAAM;AAAA,IACjB,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,IACb,cAAc,MAAM;AAAA,IACpB,SAAS,MAAM;AAAA,IACf,UAAU,MAAM;AAAA,IAChB,eAAe,MAAM;AAAA,EACvB;AAAA;AAQF,SAAS,uBAAuB,CAC9B,YACA,QACA,YACA,KACmB;AAAA,EACnB,MAAM,QAAkB,CAAC;AAAA,EACzB,MAAM,OAAsB,CAAC;AAAA,EAC7B,WAAW,QAAQ,CAAC,WAAW,UAAU;AAAA,IACvC,MAAM,OAAO,eAAe,KAAK,GAAG,UAAU,GAAG,cAAc;AAAA,IAC/D,MAAM,QAAQ,sBAAsB,WAAW,QAAQ,MAAM,GAAG;AAAA,IAChE,MAAM,KAAK,KAAK,QAAQ,MAAM,MAAM;AAAA,IACpC,KAAK,KAAK,UAAU,QAAQ,GAAG,MAAM,IAAI;AAAA,GAC1C;AAAA,EACD,OAAO,EAAE,KAAK,eAAe,MAAM,KAAK,IAAI,MAAM,KAAK;AAAA;AASzD,SAAS,qBAAqB,CAC5B,WACA,QACA,MACA,KACmB;AAAA,EACnB,MAAM,OAAO,QAAQ;AAAA,EACrB,MAAM,SAAS,OAAO;AAAA,EACtB,MAAM,SAAS,UAAU;AAAA,EACzB,MAAM,WAAW,UAAU,cAAc;AAAA,EAGzC,MAAM,eAAe,WAAW,GAAG,wBAAwB,GAAG;AAAA,EAC9D,MAAM,aAAa,WAAW,GAAG,mBAAmB,GAAG;AAAA,EACvD,MAAM,aAAa,WAAW,GAAG,wBAAwB,GAAG;AAAA,EAC5D,MAAM,WAAW,WAAW,GAAG,mBAAmB,GAAG;AAAA,EAErD,MAAM,QAAQ,0BAA0B,WAAW,MAAM,QAAQ,MAAM,GAAG;AAAA,EAC1E,MAAM,QAAQ,sBAAsB,WAAW,QAAQ,cAAc,UAAU;AAAA,EAE/E,MAAM,aAAa;AAAA,IACjB,GAAG,qBAAqB,OAAO;AAAA,IAC/B,GAAG,gBAAgB,OAAO;AAAA,IAC1B,GAAG,cAAc,OAAO;AAAA,IACxB,GAAG;AAAA,EACL;AAAA,EACA,MAAM,YAA2B,CAAC,UAAU,MAAM;AAAA,EAClD,IAAI,YAAY,UAAU,uBAAuB,WAAW;AAAA,IAC1D,WAAW,KAAK,GAAG,yBAAyB;AAAA,IAC5C,UAAU,KAAK,UAAU,kBAAkB;AAAA,EAC7C;AAAA,EAEA,MAAM,QAAQ;AAAA,aACH,MAAM,4CAA4C,MAAM;AAAA,WAC1D,IAAI,OAAO,iBAAiB;AAAA,WAC5B,IAAI,OAAO,mBAAmB;AAAA,WAC9B,uBAAuB;AAAA,WACvB,2BAA2B;AAAA,WAC3B,uBAAuB;AAAA,YACtB,WAAW,KAAK,OAAO;AAAA;AAAA,EAEjC,MAAM,YAAY,CAAC,GAAG,MAAM,MAAM,GAAG,MAAM,MAAM,GAAG,SAAS;AAAA,EAE7D,IAAI,UAAU,gBAAgB,OAAO;AAAA,IACnC,OAAO;AAAA,MACL,KAAK,WAAW,qBAAqB,aAAa,gBAAgB;AAAA,MAClE,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EAKA,MAAM,QAAQ,UAAU,SAAS;AAAA,EACjC,OAAO;AAAA,IACL,KAAK,0CAA0C,yBAAyB,sBAAsB,aAAa,gBAAgB;AAAA,IAC3H,MAAM,CAAC,GAAG,WAAW,KAAK;AAAA,EAC5B;AAAA;AAQF,SAAS,yBAAyB,CAChC,WACA,MACA,QACA,MACA,KACmB;AAAA,EACnB,MAAM,SAAS;AAAA,IACb,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,0BAA0B;AAAA,EAC5B;AAAA,EACA,MAAM,OAAsB,CAAC;AAAA,EAE7B,IAAI,UAAU,UAAU,UAAU,OAAO,SAAS,GAAG;AAAA,IACnD,MAAM,SAAS,wBACb,UAAU,QACV;AAAA,MACE,SAAS,GAAG;AAAA,MACZ,MAAM,GAAG;AAAA,MACT,IAAI,GAAG;AAAA,IACT,GACA,MACA,GACF;AAAA,IACA,OAAO,KAAK,YAAY,OAAO,KAAK;AAAA,IACpC,KAAK,KAAK,GAAG,OAAO,IAAI;AAAA,EAC1B;AAAA,EAEA,OAAO,EAAE,KAAK,eAAe,OAAO,KAAK,IAAI,MAAM,KAAK;AAAA;AAM1D,SAAS,qBAAqB,CAC5B,WACA,QACA,cACA,YACmB;AAAA,EACnB,MAAM,iBAAiB,GAAG;AAAA,EAC1B,MAAM,UAAoB,CAAC;AAAA,EAC3B,MAAM,OAAsB,CAAC;AAAA,EAE7B,WAAW,SAAS,UAAU,WAAW,CAAC,GAAG;AAAA,IAE3C,IAAI,MAAM,SAAS;AAAA,MAAY;AAAA,IAC/B,IAAI,MAAM,eAAe,WAAW;AAAA,MAClC,MAAM,IAAI,0BACR,+BACA,0EACA,kBACF;AAAA,IACF;AAAA,IACA,MAAM,YAAY,MAAM,cAAc,SAAS,SAAS;AAAA,IACxD,MAAM,OAAO,SAAS,MAAM,UAAU;AAAA,IACtC,QAAQ,KACN,aAAa,mBAAmB,cAAc,gBAAgB,mBAAmB,cAAc,oCAC/F,GAAG,oBAAoB,cAAc,KAAK,WAC5C;AAAA,IACA,KAAK,KAAK,MAAM,MAAM,IAAI;AAAA,EAC5B;AAAA,EAEA,QAAQ,KAAK,GAAG,oBAAoB,GAAG,gBAAgB;AAAA,EACvD,OAAO,EAAE,KAAK,QAAQ,KAAK,IAAI,GAAG,KAAK;AAAA;AAGzC,SAAS,UAAU,CACjB,WACA,IACA,QACA,KACqB;AAAA,EACrB,IAAI,OAAO,WAAW,GAAG;AAAA,IACvB,MAAM,QAAQ,aAAa,oBAAoB,CAAC;AAAA,IAChD,OAAO;AAAA,MACL,KAAK;AAAA;AAAA,eAEI,IAAI,OAAO;AAAA;AAAA,mBAEP,MAAM;AAAA;AAAA,MAEnB,MAAM,MAAM;AAAA,MACZ,UAAU;AAAA,MACV,WAAW,CAAC;AAAA,MACZ;AAAA,MACA,SAAS,MAAM;AAAA,MACf,UAAU;AAAA,MACV,eAAe,MAAG;AAAA,QAAG;AAAA;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,OAAO,IAAI,CAAC,UACjC,2BAA2B,WAAW,OAAO,aAAa,GAAG,CAAC,CAChE;AAAA,EACA,MAAM,aAAa,qBAAqB,IAAI,cAAc;AAAA,EAC1D,MAAM,QAAQ,aAAa,oBAAoB,CAAC;AAAA,EAChD,MAAM,gBAAgB,aAAa,oBAAoB,GAAG,UAAU;AAAA,EACpE,MAAM,MAAM;AAAA;AAAA,YAEF,WAAW;AAAA,WACZ,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA,eAIP,cAAc;AAAA;AAAA,EAE3B,MAAM,OAAO,CAAC,GAAG,WAAW,MAAM,WAAW,GAAG,cAAc,IAAI;AAAA,EAElE,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU,kCAAkC,WAAW;AAAA,IACvD,WAAW,WAAW;AAAA,IACtB;AAAA,IACA,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,IACV,eAAe,MAAG;AAAA,MAAG;AAAA;AAAA,EACvB;AAAA;AAGF,SAAS,cAAc,CACrB,WACA,YACA,YACA,KACqB;AAAA,EACrB,MAAM,QAAQ,2BAA2B,WAAW,YAAY,GAAG;AAAA,EACnE,IAAI,CAAC;AAAA,IAAY,OAAO;AAAA,EAExB,MAAM,aAAa,4BAA4B,UAAU;AAAA,EACzD,MAAM,aAAa,aAAa,MAAM,MAAM,QAAQ,SAAS,0BAA0B;AAAA,EACvF,MAAM,cAAc,aAAa,MAAM,MAAM,QAAQ,WAAW,oBAAoB;AAAA,EAEpF,OAAO;AAAA,IACL,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,UAKC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,8BAKS,MAAM,cAAc,yDAAyD;AAAA,cAC7F,MAAM;AAAA,iBACH,WAAW;AAAA;AAAA,IAExB,MAAM,CAAC,GAAG,WAAW,MAAM,GAAG,MAAM,MAAM,GAAG,WAAW,IAAI;AAAA,IAC5D,UAAU,MAAM;AAAA,IAChB,WAAW,MAAM;AAAA,IACjB,aAAa,MAAM;AAAA,IACnB,OAAO;AAAA,IACP,cAAc,MAAM;AAAA,IACpB,SAAS,MAAM;AAAA,IACf,UAAU,MAAM;AAAA,IAChB,eAAe,MAAM;AAAA,EACvB;AAAA;AAGF,SAAS,eAAe,CAAC,OAA6B;AAAA,EACpD,QAAQ,MAAM;AAAA,SACP;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,SACA;AAAA,MACH,OAAO,gBAAgB,MAAM,KAAK;AAAA;AAAA,MAElC,OAAO;AAAA;AAAA;AAIb,SAAS,eAAe,CAAC,UAAqD;AAAA,EAC5E,OACE,SAAS,gBAAgB;AAAA,IACvB,KAAK,SAAS;AAAA,IACd,MAAM,SAAS;AAAA,IACf,SAAS,CAAC,aAAa,SAAS,QAAQ,UAAU,SAAS;AAAA,EAC7D;AAAA;AAIJ,SAAS,oBAAoB,CAC3B,IACA,QACmB;AAAA,EACnB,MAAM,WAAW,OAAO,UAAU,UAAU,OAAO,cAAc,cAAc;AAAA,EAC/E,MAAM,eAAe,OAAO,IAC1B,CAAC,UAAU,2CAA2C,MAAM,eAC9D;AAAA,EAEA,OAAO;AAAA,IACL,KAAK,aAAa,KAAK,IAAI,WAAW;AAAA,IACtC,MAAM,OAAO,QAAQ,CAAC,UAAU,MAAM,IAAI;AAAA,EAC5C;AAAA;AAGF,SAAS,2BAA2B,CAAC,YAAkD;AAAA,EACrF,IAAI,WAAW,WAAW;AAAA,IAAG,OAAO,EAAE,KAAK,cAAc,MAAM,CAAC,EAAE;AAAA,EAElE,OAAO;AAAA,IACL,KAAK;AAAA;AAAA;AAAA,oDAG2C,oBAAoB,WAAW;AAAA;AAAA,oCAE/C,WAAW,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,IAKnE,MAAM,CAAC,GAAG,UAAU;AAAA,EACtB;AAAA;AAIK,SAAS,mBAAmB,CAAC,OAAuB;AAAA,EACzD,OAAO,QAAQ;AAAA;AAAA;AAAA,WAGN;AAAA;AAAA;AAIX,SAAS,gBAAgB,CAAC,WAAoD;AAAA,EAC5E,IACE,gBAAgB,aAChB,UAAU,eAAe,cACxB,UAAU,OAAO,QAChB,UAAU,OAAO,SACjB,UAAU,OAAO,QACjB,UAAU,OAAO,QACnB;AAAA,IACA,MAAM,IAAI,0BACR,+BACA,mEACA,aACF;AAAA,EACF;AAAA,EAEA,QAAQ,UAAU;AAAA,SACX;AAAA,SACA,MAAM;AAAA,MACT,MAAM,QAAQ,UAAU,MAAM,IAAI,gBAAgB;AAAA,MAClD,MAAM,SAAS,UAAU,OAAO,QAAQ,UAAU;AAAA,MAClD,OAAO;AAAA,QACL,KAAK,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE,KAAK,MAAM;AAAA,QAClD,MAAM,MAAM,QAAQ,CAAC,SAAS,KAAK,IAAI;AAAA,MACzC;AAAA,IACF;AAAA,SACK,OAAO;AAAA,MACV,MAAM,OAAO,iBAAiB,UAAU,IAAI;AAAA,MAC5C,OAAO,gBAAgB,IAAI;AAAA,IAC7B;AAAA,SACK;AAAA,MACH,OAAO,UAAU,eAAe,YAC5B,0BAA0B,UAAU,YAAY,CAAC,UAAU,KAAK,CAAC,IACjE,yBAAyB,UAAU,YAAY,MAAM,UAAU,KAAK;AAAA,SACrE;AAAA,MACH,OAAO,UAAU,eAAe,YAC5B,gBAAgB,0BAA0B,UAAU,YAAY,CAAC,UAAU,KAAK,CAAC,CAAC,IAClF,yBAAyB,UAAU,YAAY,OAAO,UAAU,KAAK;AAAA,SACtE;AAAA,SACA;AAAA,SACA;AAAA,SACA,OAAO;AAAA,MACV,MAAM,KAAK,sBAAsB,UAAU,EAAE;AAAA,MAC7C,OAAO;AAAA,QACL,KAAK,GAAG,oBAAoB,KAAK;AAAA,QACjC,MAAM,CAAC,SAAS,UAAU,UAAU,GAAG,SAAS,UAAU,KAAK,CAAC;AAAA,MAClE;AAAA,IACF;AAAA,SACK;AAAA,MACH,OAAO,UAAU,eAAe,YAC5B,0BAA0B,UAAU,YAAY,UAAU,MAAM,IAChE,mBAAmB,UAAU,YAAY,UAAU,MAAM;AAAA,SAC1D,UAAU;AAAA,MACb,MAAM,MAAM,GAAG,mBAAmB;AAAA,MAClC,MAAM,OAA0B,EAAE,KAAK,MAAM,CAAC,SAAS,UAAU,UAAU,CAAC,EAAE;AAAA,MAC9E,OAAO,UAAU,QAAQ,OAAO,gBAAgB,IAAI;AAAA,IACtD;AAAA,SACK;AAAA,MACH,OAAO,UAAU,eAAe,YAC5B,gCAAgC,UAAU,YAAY,UAAU,KAAK,IACrE,yBAAyB,UAAU,YAAY,UAAU,KAAK;AAAA;AAAA;AAQxE,SAAS,yBAAyB,CAChC,YACA,QACmB;AAAA,EACnB,MAAM,OAAO,SAAS,UAAU;AAAA,EAChC,MAAM,MAAM,OAAO,QAAQ,CAAC,UAAU;AAAA,IACpC,MAAM,KAAK,UAAU,KAAK;AAAA,IAC1B,OAAO,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE;AAAA,GACnC;AAAA,EACD,MAAM,UAAoB,CAAC;AAAA,EAC3B,MAAM,OAAsB,CAAC;AAAA,EAE7B,IAAI,OAAO,SAAS,IAAI,GAAG;AAAA,IACzB,QAAQ,KAAK,GAAG,mBAAmB,YAAY;AAAA,IAC/C,KAAK,KAAK,IAAI;AAAA,EAChB;AAAA,EACA,IAAI,IAAI,SAAS,GAAG;AAAA,IAClB,QAAQ,KACN,IAAI,oBAAoB,kBAAkB,oBAAoB,SAAS,IAAI,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,KACrG;AAAA,IACA,KAAK,KAAK,GAAG,aAAa,GAAG,WAAW,GAAG,GAAG;AAAA,EAChD;AAAA,EACA,IAAI,QAAQ,WAAW;AAAA,IAAG,OAAO,EAAE,KAAK,SAAS,MAAM,CAAC,EAAE;AAAA,EAE1D,OAAO,EAAE,KAAK,IAAI,QAAQ,KAAK,MAAM,MAAM,KAAK;AAAA;AAGlD,SAAS,+BAA+B,CAAC,YAAoB,OAAmC;AAAA,EAC9F,MAAM,KAAK,UAAU,KAAK;AAAA,EAC1B,IAAI,OAAO;AAAA,IAAW,OAAO,EAAE,KAAK,SAAS,MAAM,CAAC,EAAE;AAAA,EACtD,MAAM,OAAO,SAAS,UAAU;AAAA,EAChC,OAAO;AAAA,IACL,KAAK,IAAI,mBAAmB;AAAA,IAC5B,MAAM,CAAC,MAAM,MAAM,EAAE;AAAA,EACvB;AAAA;AAGF,SAAS,SAAS,CAAC,OAAoC;AAAA,EACrD,IAAI,OAAO,UAAU,YAAY,UAAU;AAAA,IAAM;AAAA,EACjD,QAAQ,MAAM,OAAO;AAAA,EACrB,OAAO,SAAS,UAAU,OAAO,OAAO,WAAW,KAAK;AAAA;AAG1D,SAAS,eAAe,CAAC,WAAiD;AAAA,EACxE,OAAO;AAAA,IACL,KAAK,kBAAkB,UAAU;AAAA,IACjC,MAAM,UAAU;AAAA,EAClB;AAAA;AAGF,SAAS,wBAAwB,CAC/B,YACA,IACA,OACmB;AAAA,EACnB,MAAM,OAAO,SAAS,UAAU;AAAA,EAChC,IAAI,UAAU,MAAM;AAAA,IAClB,MAAM,MAAM,GAAG,mBAAmB;AAAA,IAClC,MAAM,OAA0B,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE;AAAA,IACpD,OAAO,OAAO,OAAO,OAAO,gBAAgB,IAAI;AAAA,EAClD;AAAA,EAEA,IAAI,OAAO,MAAM;AAAA,IACf,OAAO;AAAA,MACL,KAAK,GAAG,oBAAoB;AAAA,MAC5B,MAAM,CAAC,MAAM,SAAS,KAAK,CAAC;AAAA,IAC9B;AAAA,EACF;AAAA,EAIA,OAAO;AAAA,IACL,KAAK,IAAI,mBAAmB,gBAAgB,mBAAmB,iBAAiB,oBAAoB;AAAA,IACpG,MAAM,CAAC,MAAM,MAAM,MAAM,SAAS,KAAK,CAAC;AAAA,EAC1C;AAAA;AAGF,SAAS,kBAAkB,CAAC,YAAoB,QAA+C;AAAA,EAC7F,IAAI,OAAO,WAAW;AAAA,IAAG,OAAO,EAAE,KAAK,SAAS,MAAM,CAAC,EAAE;AAAA,EAEzD,MAAM,OAAO,SAAS,UAAU;AAAA,EAChC,MAAM,gBAAgB,OAAO,OAAO,CAAC,UAAU,UAAU,IAAI;AAAA,EAC7D,MAAM,UAAoB,CAAC;AAAA,EAC3B,MAAM,OAAsB,CAAC;AAAA,EAE7B,IAAI,OAAO,WAAW,cAAc,QAAQ;AAAA,IAC1C,QAAQ,KAAK,GAAG,mBAAmB,YAAY;AAAA,IAC/C,KAAK,KAAK,IAAI;AAAA,EAChB;AAAA,EAEA,IAAI,cAAc,SAAS,GAAG;AAAA,IAC5B,QAAQ,KAAK,GAAG,oBAAoB,SAAS,cAAc,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,IACvF,KAAK,KAAK,MAAM,GAAG,cAAc,IAAI,QAAQ,CAAC;AAAA,EAChD;AAAA,EAEA,OAAO;AAAA,IACL,KAAK,IAAI,QAAQ,KAAK,MAAM;AAAA,IAC5B;AAAA,EACF;AAAA;AAGF,SAAS,wBAAwB,CAAC,YAAoB,OAAmC;AAAA,EACvF,MAAM,OAAO,SAAS,UAAU;AAAA,EAChC,MAAM,UAAoB,CAAC;AAAA,EAC3B,MAAM,OAAsB,CAAC;AAAA,EAE7B,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,QAAQ,KAAK,IAAI,mBAAmB,wBAAwB,oBAAoB,YAAY;AAAA,IAC5F,KAAK,KAAK,MAAM,MAAM,KAAK;AAAA,EAC7B;AAAA,EAEA,QAAQ,KACN,IAAI,mBAAmB,gGACzB;AAAA,EACA,KAAK,KAAK,MAAM,MAAM,SAAS,KAAK,CAAC;AAAA,EAErC,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,QAAQ,KACN,IAAI,mBAAmB,8FACzB;AAAA,IACA,KAAK,KAAK,MAAM,MAAM,KAAK;AAAA,EAC7B;AAAA,EAEA,OAAO,EAAE,KAAK,IAAI,QAAQ,KAAK,MAAM,MAAM,KAAK;AAAA;AAGlD,SAAS,oBAAoB,CAAC,OAAe,QAA8C;AAAA,EACzF,MAAM,QAAQ,SAAS,KAAK;AAAA,EAC5B,IAAI,MAAM,WAAW;AAAA,IAAG,OAAO,EAAE,KAAK,SAAS,MAAM,CAAC,EAAE;AAAA,EAExD,MAAM,UAAU,MAAM,IAAI,MAAM;AAAA,IAC9B,MAAM,eAAe,OAAO,IAC1B,MAAM,6BAA6B,oBAAoB,0BACzD;AAAA,IACA,OAAO,IAAI,aAAa,KAAK,MAAM;AAAA,GACpC;AAAA,EACD,MAAM,OAAO,MAAM,QAAQ,CAAC,SAAS,OAAO,QAAQ,CAAC,UAAU,CAAC,SAAS,KAAK,GAAG,IAAI,CAAC,CAAC;AAAA,EAEvF,OAAO,EAAE,KAAK,IAAI,QAAQ,KAAK,OAAO,MAAM,KAAK;AAAA;AAGnD,SAAS,0BAA0B,CACjC,OACA,oBAC0B;AAAA,EAC1B,MAAM,mBAAwC,CAAC;AAAA,EAE/C,YAAY,cAAc,WAAW,OAAO,QAAQ,sBAAsB,CAAC,CAAC,GAAG;AAAA,IAC7E,IAAI,OAAO,WAAW;AAAA,MAAG;AAAA,IACzB,MAAM,YAAY,qBAAqB,OAAO,MAAM;AAAA,IACpD,iBAAiB,KAAK;AAAA,MACpB,KAAK,2BAA2B,UAAU;AAAA,MAC1C,MAAM,CAAC,cAAc,GAAG,UAAU,IAAI;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,iBAAiB,WAAW;AAAA,IAAG,OAAO;AAAA,EAE1C,OAAO;AAAA,IACL,KAAK,IAAI,iBAAiB,IAAI,CAAC,cAAc,UAAU,GAAG,EAAE,KAAK,MAAM;AAAA,IACvE,MAAM,iBAAiB,QAAQ,CAAC,cAAc,UAAU,IAAI;AAAA,EAC9D;AAAA;AAGF,SAAS,YAAY,CACnB,QACA,WACA,iBAAiB,cACF;AAAA,EACf,MAAM,UAAoB,CAAC;AAAA,EAC3B,MAAM,OAAsB,CAAC;AAAA,EAE7B,WAAW,SAAS,QAAQ;AAAA,IAC1B,IAAI,MAAM,SAAS,UAAU;AAAA,MAC3B,QAAQ,KACN,GAAG,iBAAiB,MAAM,QAAQ,SAAS,IAAI,MAAM,SAAS,oBAAoB,MAAM,MAAM,UAAU,YAAY,GACtH;AAAA,MACA;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,MAAM,cAAc,SAAS,SAAS;AAAA,IACxD,MAAM,OAAO,SAAS,MAAM,UAAU;AAAA,IACtC,QAAQ,KACN,aAAa,mBAAmB,cAAc,gBAAgB,mBAAmB,cAAc,oCAC/F,GAAG,oBAAoB,cAAc,KAAK,WAC5C;AAAA,IACA,KAAK,KAAK,MAAM,MAAM,IAAI;AAAA,EAC5B;AAAA,EAEA,OAAO,EAAE,KAAK,QAAQ,KAAK,IAAI,GAAG,MAAM,QAAQ,eAAe;AAAA;AAGjE,SAAS,eAAe,CAAC,QAAwE;AAAA,EAC/F,MAAM,cAAoC,CAAC;AAAA,EAC3C,WAAW,SAAS,QAAQ;AAAA,IAC1B,IAAI,MAAM,SAAS,YAAY;AAAA,MAC7B,MAAM,IAAI,MAAM,iEAAiE;AAAA,IACnF;AAAA,IACA,IAAI,MAAM,eAAe,WAAW;AAAA,MAClC,MAAM,IAAI,0BACR,+BACA,gEACA,QACF;AAAA,IACF;AAAA,IAEA,YAAY,KAAK;AAAA,MACf,MAAM;AAAA,MACN,YAAY,MAAM;AAAA,MAClB,WAAW,MAAM,cAAc,SAAS,SAAS;AAAA,IACnD,CAAC;AAAA,EACH;AAAA,EACA,YAAY,KAAK,GAAG,oBAAoB,CAAC;AAAA,EACzC,OAAO;AAAA;AAGT,SAAS,mBAAmB,GAAkC;AAAA,EAC5D,OAAO;AAAA,IACL,EAAE,MAAM,UAAU,QAAQ,kBAAkB,WAAW,MAAM;AAAA,IAC7D,EAAE,MAAM,UAAU,QAAQ,cAAc,WAAW,MAAM;AAAA,EAC3D;AAAA;AAGF,SAAS,sBAAsB,CAC7B,QACA,QACA,iBAAiB,cACE;AAAA,EACnB,MAAM,YAAiC,CAAC;AAAA,EAExC,SAAS,QAAQ,EAAG,QAAQ,OAAO,QAAQ,SAAS,GAAG;AAAA,IACrD,MAAM,qBAAqB,OACxB,MAAM,GAAG,KAAK,EACd,IAAI,CAAC,OAAO,kBACX,qBAAqB,OAAO,OAAO,gBAAgB,cAAc,CACnE;AAAA,IACF,MAAM,mBAAmB,kBAAkB,OAAO,QAAQ,OAAO,QAAQ,cAAc;AAAA,IACvF,IAAI,CAAC;AAAA,MAAkB;AAAA,IAEvB,MAAM,QAAQ,CAAC,GAAG,oBAAoB,gBAAgB;AAAA,IACtD,UAAU,KAAK;AAAA,MACb,KAAK,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE,KAAK,OAAO;AAAA,MACnD,MAAM,MAAM,QAAQ,CAAC,SAAS,KAAK,IAAI;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,UAAU,WAAW;AAAA,IAAG,OAAO,EAAE,KAAK,SAAS,MAAM,CAAC,EAAE;AAAA,EAE5D,OAAO;AAAA,IACL,KAAK,IAAI,UAAU,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE,KAAK,MAAM;AAAA,IACtD,MAAM,UAAU,QAAQ,CAAC,SAAS,KAAK,IAAI;AAAA,EAC7C;AAAA;AAGF,SAAS,oBAAoB,CAC3B,OACA,QACA,iBAAiB,cACE;AAAA,EACnB,IAAI,MAAM,SAAS,UAAU;AAAA,IAC3B,OAAO;AAAA,MACL,KAAK,GAAG,iBAAiB,MAAM,MAAM;AAAA,MACrC,MAAM,CAAC,SAAS,OAAO,KAAK,CAAC;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,SAAS,MAAM,UAAU;AAAA,EACtC,IAAI,OAAO,SAAS;AAAA,IAClB,OAAO;AAAA,MACL,KAAK,IAAI,mBAAmB,cAAc,gBAAgB,mBAAmB,cAAc;AAAA,MAC3F,MAAM,CAAC,MAAM,IAAI;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,KAAK,IAAI,mBAAmB,cAAc,qBAAqB,mBAAmB,cAAc,mBAAmB,oBAAoB,cAAc;AAAA,IACrJ,MAAM,CAAC,MAAM,MAAM,MAAM,SAAS,OAAO,KAAK,CAAC;AAAA,EACjD;AAAA;AAGF,SAAS,iBAAiB,CACxB,OACA,QACA,iBAAiB,cACS;AAAA,EAC1B,IAAI,MAAM,SAAS,UAAU;AAAA,IAC3B,OAAO;AAAA,MACL,KAAK,GAAG,iBAAiB,MAAM,MAAM,KAAK,MAAM,cAAc,SAAS,MAAM;AAAA,MAC7E,MAAM,CAAC,SAAS,OAAO,KAAK,CAAC;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,IAAI,OAAO;AAAA,IAAS,OAAO;AAAA,EAE3B,MAAM,OAAO,SAAS,MAAM,UAAU;AAAA,EACtC,MAAM,UAAU,aAAa,mBAAmB,cAAc,gBAAgB,mBAAmB,cAAc;AAAA,EAC/G,MAAM,gBAAgB,MAAM,cAAc,SAAS,MAAM;AAAA,EAEzD,OAAO;AAAA,IACL,KAAK,IAAI,mBAAmB,mBAAmB,oBAAoB,cAAc,KAAK;AAAA,IACtF,MAAM,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS,OAAO,KAAK,CAAC;AAAA,EAC7D;AAAA;AAGF,SAAS,eAAe,CACtB,KACA,QACQ;AAAA,EACR,MAAM,aAAa,KAAK,MAAM,IAAI,sBAAsB,IAAI,UAAU;AAAA,EACtE,MAAM,QAA0B;AAAA,IAC9B,SAAS;AAAA,IACT,OAAO,OAAO,IAAI,aAAa;AAAA,IAC/B,QAAQ,OAAO,IAAI,CAAC,UAAU,oBAAoB,KAAK,YAAY,KAAK,CAAC;AAAA,EAC3E;AAAA,EACA,OAAO,GAAG,oBAAoB,OAAO,KAAK,KAAK,UAAU,KAAK,CAAC,EAAE,SAAS,WAAW;AAAA;AAGvF,SAAS,eAAe,CACtB,OACA,QAC+B;AAAA,EAC/B,IAAI,CAAC,MAAM,WAAW,iBAAiB,GAAG;AAAA,IACxC,sBAAsB,wCAAwC;AAAA,EAChE;AAAA,EAEA,MAAM,MAAM,MAAM,MAAM,kBAAkB,MAAM;AAAA,EAChD,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,UAAU,KAAK,MAAM,OAAO,KAAK,KAAK,WAAW,EAAE,SAAS,MAAM,CAAC;AAAA,IACnE,MAAM;AAAA,IACN,sBAAsB,wCAAwC;AAAA;AAAA,EAGhE,IAAI,CAAC,mBAAmB,OAAO,GAAG;AAAA,IAChC,sBAAsB,wCAAwC;AAAA,EAChE;AAAA,EAEA,MAAM,gBAAgB,OAAO,IAAI,aAAa;AAAA,EAC9C,IACE,QAAQ,MAAM,WAAW,cAAc,UACvC,QAAQ,MAAM,KAAK,CAAC,OAAO,UAAU,UAAU,cAAc,MAAM,GACnE;AAAA,IACA,sBAAsB,2DAA2D;AAAA,EACnF;AAAA,EAEA,OAAO,QAAQ;AAAA;AAGjB,SAAS,qBAAqB,CAAC,SAAwB;AAAA,EACrD,MAAM,IAAI,0BAA0B,sBAAsB,SAAS,aAAa;AAAA;AAGlF,SAAS,kBAAkB,CAAC,OAA2C;AAAA,EACrE,IAAI,CAAC,cAAc,KAAK;AAAA,IAAG,OAAO;AAAA,EAClC,IAAI,MAAM,YAAY;AAAA,IAAG,OAAO;AAAA,EAChC,IAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,KAAK,MAAM,MAAM,KAAK,CAAC,SAAS,OAAO,SAAS,QAAQ,GAAG;AAAA,IACvF,OAAO;AAAA,EACT;AAAA,EACA,IAAI,CAAC,MAAM,QAAQ,MAAM,MAAM;AAAA,IAAG,OAAO;AAAA,EACzC,OAAO,MAAM,OAAO,MAClB,CAAC,SACC,cAAc,IAAI,KAClB,OAAO,KAAK,YAAY,cACvB,KAAK,WAAW,OAAO,OAAO,MAAM,OAAO,EAChD;AAAA;AAGF,SAAS,mBAAmB,CAC1B,KACA,YACA,OACoB;AAAA,EACpB,MAAM,QACJ,MAAM,SAAS,WACX,MAAM,WAAW,mBACf,IAAI,iBACJ,IAAI,aACN,WAAW,MAAM;AAAA,EAEvB,OAAO,UAAU,QAAQ,UAAU,YAAY,EAAE,SAAS,KAAK,IAAI,EAAE,SAAS,OAAO,MAAM;AAAA;AAG7F,SAAS,aAAa,CAAC,OAAmC;AAAA,EACxD,OAAO,MAAM,SAAS,WAClB,UAAU,MAAM,UAAU,MAAM,cAChC,YAAY,MAAM,cAAc,MAAM;AAAA;AAG5C,SAAS,gBAAgB,CACvB,QACA,WACQ;AAAA,EACR,OAAO,YAAY,GAAG,aAAa,WAAW;AAAA;AAGhD,SAAS,mBAAmB,CAAC,SAAS,cAAsB;AAAA,EAC1D,OAAO,gBAAgB;AAAA;AAGzB,SAAS,kBAAkB,CAAC,SAAS,cAAsB;AAAA,EACzD,OAAO,aAAa;AAAA;AAGtB,SAAS,QAAQ,CAAC,YAA4B;AAAA,EAC5C,OAAO,MAAM,WAAW,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,MAAK;AAAA;AAGpE,SAAS,QAAQ,CAAC,OAA6B;AAAA,EAC7C,IAAI,iBAAiB;AAAA,IAAM,OAAO,MAAM,YAAY;AAAA,EACpD,IAAI,OAAO,UAAU;AAAA,IAAW,OAAO,QAAQ,IAAI;AAAA,EACnD,IACE,OAAO,UAAU,YACjB,OAAO,UAAU,YACjB,OAAO,UAAU,YACjB,UAAU,MACV;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,OAAO,KAAK,UAAU,KAAK;AAAA;AAG7B,SAAS,QAAQ,CAAC,OAAyB;AAAA,EACzC,OAAO,MACJ,KAAK,EACL,YAAY,EACZ,MAAM,KAAK,EACX,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AAAA;AAGrC,SAAS,qBAAqB,CAAC,IAA0D;AAAA,EACvF,QAAQ;AAAA,SACD;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA;AAAA;AAIb,SAAS,YAAe,CAAC,MAAkC;AAAA,EACzD,OAAO;AAAA;AAGT,SAAS,aAAa,CAAC,OAAkD;AAAA,EACvE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAAA;;;AE78C5E,sCAA2B;AAC3B,6BAAS;AAoBT;;;ACdO,SAAS,WAAW,CAAC,KAA6B;AAAA,EACvD,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,cAAc,IAAI;AAAA,IAClB,WAAW,IAAI;AAAA,IACf,YAAY,KAAK,MAAM,IAAI,UAAU;AAAA,IACrC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,SAAS,IAAI;AAAA,IACb,cAAc,IAAI;AAAA,EACpB;AAAA;AAIK,SAAS,gBAAgB,CAAC,KAAwC;AAAA,EACvE,MAAM,OAAO;AAAA,OACR,YAAY,GAAG;AAAA,OACd,IAAI,kBAAkB,YAAY,CAAC,IAAI,EAAE,OAAO,IAAI,cAAc;AAAA,EACxE;AAAA,EACA,MAAM,QAAQ,oBAAoB,kBAAkB,IAAI,OAAO,CAAC;AAAA,EAChE,OAAO,QAAQ,KAAK,MAAM,MAAM,IAAI;AAAA;AAG/B,SAAS,SAAS,CAAC,KAAqC;AAAA,EAC7D,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,cAAc,IAAI;AAAA,IAClB,UAAU,IAAI;AAAA,IACd,QAAQ,IAAI;AAAA,IACZ,cAAc,IAAI;AAAA,IAClB,UAAU,IAAI;AAAA,OACV,IAAI,eAAe,OAAO,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,IAAI,UAAU,EAAE;AAAA,IAC5E,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,cAAc,IAAI;AAAA,EACpB;AAAA;AAKF,SAAS,iBAAiB,CAAC,OAAyB;AAAA,EAClD,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,SAAS;AAAA,EAC/C,OAAO,KAAK,MAAM,KAAK;AAAA;AAGzB,SAAS,mBAAmB,CAAC,OAA4C;AAAA,EACvE,IAAI,CAAC,eAAc,KAAK;AAAA,IAAG;AAAA,EAC3B,MAAM,QAAwB,CAAC;AAAA,EAC/B,YAAY,QAAQ,QAAQ,OAAO,QAAQ,KAAK,GAAG;AAAA,IACjD,MAAM,UAAU,wBAAwB,GAAG;AAAA,EAC7C;AAAA,EACA,OAAO;AAAA;AAKT,SAAS,uBAAuB,CAAC,OAAmC;AAAA,EAClE,IAAI,UAAU,QAAQ,UAAU;AAAA,IAAW,OAAO;AAAA,EAClD,IAAI,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO,MAAM,IAAI,iBAAiB;AAAA,EAC5D,OAAO,kBAAkB,KAAK;AAAA;AAMhC,SAAS,iBAAiB,CAAC,OAAmC;AAAA,EAC5D,MAAM,MAAM,eAAc,KAAK,IAAI,QAAQ,CAAC;AAAA,EAC5C,MAAM,WAA8B;AAAA,IAClC,WAAW,OAAO,IAAI,SAAS;AAAA,IAC/B,cAAc,OAAO,IAAI,YAAY;AAAA,IACrC,WAAW,OAAO,IAAI,SAAS;AAAA,IAC/B,YAAY,eAAc,IAAI,UAAU,IAAI,IAAI,aAAa,CAAC;AAAA,IAC9D,WAAW,IAAI,KAAK,IAAI,SAAmB;AAAA,IAC3C,WAAW,IAAI,KAAK,IAAI,SAAmB;AAAA,IAC3C,SAAS,OAAO,IAAI,OAAO;AAAA,IAC3B,cAAc,OAAO,IAAI,YAAY;AAAA,EACvC;AAAA,EACA,IAAI,eAAc,IAAI,cAAc,KAAK,OAAO,KAAK,IAAI,cAAc,EAAE,SAAS,GAAG;AAAA,IACnF,SAAS,iBAAiB,IAAI;AAAA,EAChC;AAAA,EACA,MAAM,QAAQ,oBAAoB,IAAI,KAAK;AAAA,EAC3C,IAAI;AAAA,IAAO,SAAS,QAAQ;AAAA,EAC5B,OAAO;AAAA;AAGT,SAAS,cAAa,CAAC,OAAkD;AAAA,EACvE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAAA;;;AC7F5E,sCAAS;AACT;AAEA,IAAM,SAAS,IAAI;AAGZ,SAAS,wBAAwB,CAAC,IAAoB;AAAA,EAC3D,IAAI,OAAO,IAAI,EAAE;AAAA,IAAG;AAAA,EACpB,MAAM,UAAU,GAAG,MAAuC,wBAAwB,EAAE,IAAI;AAAA,EACxF,IAAI,QAAQ,KAAK,CAAC,WAAW,OAAO,oBAAoB,qBAAqB,GAAG;AAAA,IAC9E,MAAM,IAAI,2BACR,4BACA,uLACF;AAAA,EACF;AAAA,EACA,IAAI;AAAA,IACF,KAAK,EAAE;AAAA,IACP,OAAO,IAAI,EAAE;AAAA,IACb,OAAO,OAAO;AAAA,IACd,MAAM,IAAI,MACR,mHACA,EAAE,MAAM,CACV;AAAA;AAAA;;;AFkBG,MAAM,mBAAmB;AAAA,EAEX;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,IACA,QACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,EAGX,kBAAkB,CACxB,QACM;AAAA,IACN,IAAI,CAAC,kBAAiB,OAAO,KAAK;AAAA,MAAG;AAAA,IACrC,MAAM,WAAW,mBAAmB,OAAO,WAAW,OAAO,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC3F,IAAI,CAAC,SAAS;AAAA,MAAa;AAAA,IAC3B,yBAAyB,KAAK,EAAE;AAAA,IAChC,MAAM,QAAQ,SAAS;AAAA,IACvB,MAAM,MAAM,KAAK,GAAG,MAAwC,MAAM,GAAG,EAAE,IAAI,GAAG,MAAM,IAAI;AAAA,IACxF,2BAA2B,KAAK,OAAO,MAAM,KAAK;AAAA;AAAA,EAGpD,YAAY,CAAC,QAA+C;AAAA,IAC1D,MAAM,SAAS,KAAK;AAAA,IACpB,MAAM,WAAW,mBAAmB,OAAO,WAAW,OAAO,OAAO;AAAA,MAClE,cAAc,OAAO;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,MAAa,yBAAyB,KAAK,EAAE;AAAA,IAC1D,MAAM,gBACJ,OAAO,iBAAiB,SAAS,SAAS,cACtC,YACA,UAAU,KAAK,IAAI,QAAQ;AAAA,IACjC,MAAM,UAAU,KAAK,GAAG,MAAM,SAAS,GAAG,EAAE,IAAI,GAAG,SAAS,IAAI;AAAA,IAChE,MAAM,cAAc,KAAK,kBAAkB,UAAU,OAAO;AAAA,IAC5D,MAAM,QAAQ,OAAO,iBAAiB,QAAQ,YAAa,eAAe;AAAA,IAC1E,MAAM,OAAO,SAAS,SAAS,OAAO;AAAA,IACtC,MAAM,UACJ,UAAU,aAAa,SAAS,eAC5B,SAAS,aAAa,QACpB,KAAK,GAAG,MAAM,SAAS,aAAa,GAAG,EAAE,IAAI,GAAG,SAAS,aAAa,IAAI,EAAE,MAC9E,IACA,SAAS,QAAQ,QAAQ,QAAQ,KAAK;AAAA,IAE5C,OAAO;AAAA,MACL,SAAS,KAAK,IAAI,CAAC,QAAQ,iBAAiB,GAAG,CAAC;AAAA,MAChD;AAAA,MACA,eAAe,SAAS,cAAc,MAAM,QAAQ,MAAM;AAAA,SACtD,UAAU,YAAY,CAAC,IAAI,EAAE,MAAM;AAAA,IACzC;AAAA;AAAA,EAGM,iBAAiB,CACvB,UACA,MACoB;AAAA,IACpB,MAAM,QAAQ,SAAS;AAAA,IACvB,IAAI,CAAC;AAAA,MAAO;AAAA,IAIZ,IAAI,QAAQ,KAAK,IAAI;AAAA,IACrB,IAAI,KAAK,WAAW,GAAG;AAAA,MACrB,QACE,MAAM,aAAa,IACf,KAAK,GAAG,MAAwC,MAAM,GAAG,EAAE,IAAI,GAAG,MAAM,IAAI,GAAG,QAC/E;AAAA,IACR;AAAA,IACA,2BAA2B,OAAO,MAAM,KAAK;AAAA,IAC7C,OAAO,KAAK,IAAI,OAAO,MAAM,UAAU;AAAA;AAAA,EAGzC,YAAY,CAAC,QAA+C;AAAA,IAC1D,KAAK,mBAAmB,MAAM;AAAA,IAC9B,MAAM,SAAS,KAAK;AAAA,IACpB,OAAO;AAAA,MACL,OAAO,UACL,KAAK,IACL,mBAAmB,OAAO,WAAW,mBAAmB,OAAO,KAAK,GAAG;AAAA,QACrE;AAAA,MACF,CAAC,CACH;AAAA,IACF;AAAA;AAAA,EAGF,aAAa,CAAC,QAAiD;AAAA,IAC7D,KAAK,mBAAmB,MAAM;AAAA,IAC9B,MAAM,SAAS,KAAK;AAAA,IACpB,MAAM,WAAW,mBAAmB,OAAO,WAAW,iBAAiB,OAAO,KAAK,GAAG;AAAA,MACpF;AAAA,IACF,CAAC;AAAA,IACD,OAAO,EAAE,QAAQ,KAAK,GAAG,MAAM,SAAS,GAAG,EAAE,IAAI,GAAG,SAAS,IAAI,MAAM,KAAK;AAAA;AAAA,EAG9E,YAAY,CAAC,QAA+C;AAAA,IAC1D,KAAK,mBAAmB,MAAM;AAAA,IAC9B,MAAM,SAAS,KAAK;AAAA,IACpB,MAAM,WAAW,mBAAmB,OAAO,WAAW,mBAAmB,OAAO,KAAK,GAAG;AAAA,MACtF;AAAA,IACF,CAAC;AAAA,IACD,OAAO;AAAA,MACL,QAAQ,OAAO,OAAO,IAAI,CAAC,WAAW;AAAA,QACpC,YAAY,MAAM;AAAA,QAClB,SAAS,iBAAiB,KAAK,IAAI,UAAU,KAAK;AAAA,MACpD,EAAE;AAAA,IACJ;AAAA;AAAA,EAGF,cAAc,CAAC,QAIM;AAAA,IACnB,MAAM,SAAS,KAAK;AAAA,IACpB,MAAM,eAAe,OAAO;AAAA,IAC5B,MAAM,YAAY,OAAO,cACvB,iBAAiB,+EACjB,CAAC,OAAO,WAAW,OAAO,cAAc,OAAO,SAAS,CAC1D;AAAA,IACA,MAAM,MAAM,KAAK,GAAG,MAAM,UAAU,GAAG,EAAE,IAAI,GAAG,UAAU,IAAI;AAAA,IAE9D,OAAO,MAAM,YAAY,GAAG,IAAI;AAAA;AAAA,EAGlC,uBAAuB,CACrB,QACoB;AAAA,IACpB,MAAM,SAAS,KAAK;AAAA,IACpB,MAAM,SAAS,OAAO,MAAM,IAAI,MAAM,KAAK;AAAA,IAC3C,IAAI,OAAO,MAAM,WAAW;AAAA,MAAG,OAAO;AAAA,IAEtC,MAAM,QAAQ,OAAO,MAAM,IAAI,CAAC,MAAM,gBAAgB,KAAK,MAAM,WAAW,EAAE;AAAA,IAC9E,MAAM,gBAAgB;AAAA,IACtB,MAAM,cAAc;AAAA,IACpB,MAAM,oBAAoB;AAAA,IAC1B,MAAM,WAAW,oCAAoC;AAAA,IACrD,MAAM,cAAc,WAAW,OAAO,iCAAiC,OAAO;AAAA,IAC9E,MAAM,eAAe,WAAW,4BAA4B,sBAAsB;AAAA,IAClF,MAAM,YAAY,OAAO,cACvB;AAAA;AAAA,cAEQ;AAAA;AAAA,sCAEwB;AAAA,kCACJ;AAAA,UACxB;AAAA,qCAEJ,CAAC,KAAK,UAAU,KAAK,GAAG,OAAO,SAAS,CAC1C;AAAA,IACA,MAAM,OAAO,KAAK,GACf,MAAM,UAAU,GAAG,EACnB,IAAI,GAAG,UAAU,IAAI;AAAA,IACxB,WAAW,OAAO;AAAA,MAAM,OAAO,IAAI,gBAAgB;AAAA,IACnD,OAAO;AAAA;AAAA,EAGT,SAAS,CAAC,QAMmB;AAAA,IAC3B,MAAM,SAAS,KAAK;AAAA,IACpB,MAAM,YAAY,OAAO,aAAa;AAAA,IACtC,MAAM,iBACJ,cAAc,aACV,yCACA,cAAc,SACZ,uFACA;AAAA,IACR,IAAI,QAAQ,iBAAiB,OAAO,uCAAuC;AAAA,IAC3E,MAAM,OACJ,cAAc,SACV;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT,IACA,CAAC,OAAO,WAAW,OAAO,cAAc,OAAO,QAAQ;AAAA,IAE7D,IAAI,OAAO,QAAQ;AAAA,MACjB,SAAS;AAAA,MACT,KAAK,KAAK,OAAO,MAAM;AAAA,IACzB;AAAA,IAEA,MAAM,YAAY,OAAO,cAAc,OAAO,IAAI;AAAA,IAClD,MAAM,OAAO,KAAK,GAAG,MAAM,UAAU,GAAG,EAAE,IAAI,GAAG,UAAU,IAAI;AAAA,IAE/D,OAAO,KAAK,IAAI,CAAC,QAAQ,UAAU,GAAG,CAAC;AAAA;AAAA,EAGzC,mBAAmB,CAAC,QAGe;AAAA,IACjC,MAAM,SAAS,KAAK;AAAA,IACpB,MAAM,SAAS,IAAI;AAAA,IACnB,IAAI,OAAO,MAAM,WAAW;AAAA,MAAG,OAAO;AAAA,IAEtC,MAAM,QAAQ,OAAO,MAAM,IAAI,CAAC,MAAM,gBAAgB,KAAK,MAAM,WAAW,EAAE;AAAA,IAC9E,MAAM,YAAY,OAAO,cACvB;AAAA;AAAA;AAAA;AAAA;AAAA,eAKS,OAAO;AAAA;AAAA;AAAA;AAAA,SAKhB,CAAC,KAAK,UAAU,KAAK,GAAG,OAAO,SAAS,CAC1C;AAAA,IACA,MAAM,OAAO,KAAK,GAAG,MAAM,UAAU,GAAG,EAAE,IAAI,GAAG,UAAU,IAAI;AAAA,IAC/D,MAAM,cAAc,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC;AAAA,IACtE,YAAY,OAAO,SAAS,OAAO,MAAM,QAAQ,GAAG;AAAA,MAClD,MAAM,MAAM,YAAY,IAAI,KAAK;AAAA,MACjC,IAAI;AAAA,QAAK,OAAO,IAAI,eAAe,KAAK,cAAc,KAAK,SAAS,GAAG,YAAY,GAAG,CAAC;AAAA,IACzF;AAAA,IACA,OAAO;AAAA;AAAA,EAGT,cAAc,CAAC,QAIwB;AAAA,IACrC,MAAM,SAAS,KAAK;AAAA,IACpB,MAAM,SAAS,IAAI;AAAA,IACnB,IAAI,OAAO,MAAM,WAAW;AAAA,MAAG,OAAO;AAAA,IAEtC,MAAM,YAAY,OAAO,aAAa;AAAA,IACtC,MAAM,gBAAgB;AAAA,IACtB,MAAM,cAAc;AAAA,IACpB,MAAM,gBAAgB;AAAA,IACtB,MAAM,WAAW,2BAA2B,wCAAwC;AAAA,IACpF,MAAM,WAAW,2BAA2B,wCAAwC;AAAA,IACpF,MAAM,gBACJ,cAAc,SACV,KAAK,iBAAiB,eACtB,cAAc,aACZ,WACA;AAAA,IACR,MAAM,QAAQ,OAAO,MAAM,IAAI,CAAC,MAAM,gBAAgB,KAAK,MAAM,WAAW,EAAE;AAAA,IAC9E,MAAM,YAAY,OAAO,cACvB;AAAA;AAAA;AAAA;AAAA,eAIS,OAAO;AAAA;AAAA,eAEP;AAAA,gCACiB;AAAA;AAAA;AAAA,SAI1B,CAAC,KAAK,UAAU,KAAK,GAAG,OAAO,SAAS,CAC1C;AAAA,IACA,MAAM,OAAO,KAAK,GAAG,MAAM,UAAU,GAAG,EAAE,IAAI,GAAG,UAAU,IAAI;AAAA,IAC/D,MAAM,cAAc,OAAO,MAAM,IAAI,MAAM,IAAI,GAA4B;AAAA,IAC3E,WAAW,OAAO,MAAM;AAAA,MACtB,MAAM,OAAO,UAAU,GAAG;AAAA,MAC1B,YAAY,IAAI,eAAe,IAAI,iBAAiB,IAAI,GAAG,IAAI;AAAA,IACjE;AAAA,IACA,YAAY,OAAO,SAAS,OAAO,MAAM,QAAQ,GAAG;AAAA,MAClD,MAAM,QAAQ,CAAC,GAAI,YAAY,QAAQ,OAAO,KAAK,CAAC,CAAE;AAAA,MACtD,IAAI,MAAM,SAAS,GAAG;AAAA,QACpB,OAAO,IAAI,aAAa,KAAK,cAAc,KAAK,UAAU,KAAK,MAAM,GAAG,KAAK;AAAA,MAC/E;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGT,UAAU,CAAC,QAAuD;AAAA,IAChE,MAAM,SAAS,KAAK;AAAA,IACpB,IAAI,OAAO,WAAW,WAAW,KAAK,OAAO,uBAAuB,WAAW,GAAG;AAAA,MAChF,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,MAAM;AAAA,IACrC;AAAA,IAEA,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMlB,MAAM,aAAa,OAAO;AAAA,IAC1B,MAAM,aAAa;AAAA;AAAA,aAEV;AAAA,cACC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKV,MAAM,aAAa;AAAA;AAAA,aAEV;AAAA,cACC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKV,MAAM,cACJ,OAAO,cAAc,aACjB,aACA,OAAO,cAAc,aACnB,aACA,GAAG,oBAAoB;AAAA,IAC/B,MAAM,gBAAgB,KAAK,UAAU,OAAO,UAAU;AAAA,IACtD,MAAM,OACJ,OAAO,cAAc,SACjB,CAAC,eAAe,OAAO,WAAW,eAAe,OAAO,SAAS,IACjE,CAAC,eAAe,OAAO,SAAS;AAAA,IAEtC,MAAM,aAAuB,CAAC;AAAA,IAC9B,IAAI,OAAO,WAAW,WAAW;AAAA,MAC/B,WAAW,KAAK,aAAa;AAAA,MAC7B,KAAK,KAAK,OAAO,MAAM;AAAA,IACzB;AAAA,IACA,IAAI,OAAO,0BAA0B,WAAW;AAAA,MAC9C,MAAM,eAAe,KAAK,UAAU,CAAC,GAAG,IAAI,IAAI,OAAO,qBAAqB,CAAC,CAAC;AAAA,MAC9E,WAAW,KACT,sDACA,oDACF;AAAA,MACA,KAAK,KAAK,cAAc,YAAY;AAAA,IACtC;AAAA,IACA,IAAI,OAAO,OAAO;AAAA,MAChB,WAAW,KACT,mFACF;AAAA,MACA,KAAK,KAAK,GAAG,OAAO,KAAK;AAAA,IAC3B;AAAA,IACA,KAAK,KAAK,OAAO,QAAQ,CAAC;AAAA,IAE1B,MAAM,WAAW,WAAW,SAAS,IAAI,SAAS,WAAW,KAAK,OAAO,MAAM;AAAA,IAC/E,MAAM,YAAY,OAAO,cACvB;AAAA;AAAA,gBAEU;AAAA,UACN;AAAA;AAAA;AAAA,SAIJ,IACF;AAAA,IACA,MAAM,OAAO,KAAK,GAAG,MAAM,UAAU,GAAG,EAAE,IAAI,GAAG,UAAU,IAAI;AAAA,IAE/D,OAAO;AAAA,MACL,OAAO,KAAK,MAAM,GAAG,OAAO,KAAK,EAAE,IAAI,CAAC,QAAQ,UAAU,GAAG,CAAC;AAAA,MAC9D,SAAS,KAAK,SAAS,OAAO;AAAA,IAChC;AAAA;AAAA,EAGF,IAAI,CAAC,QAIH;AAAA,IACA,MAAM,SAAS,KAAK;AAAA,IACpB,IAAI,QAAQ,iBAAiB,OAAO;AAAA,IACpC,MAAM,OAAmC,CAAC,OAAO,SAAS;AAAA,IAE1D,IAAI,OAAO,cAAc;AAAA,MACvB,IAAI,OAAO,OAAO,iBAAiB,UAAU;AAAA,QAC3C,SAAS;AAAA,QACT,KAAK,KAAK,OAAO,YAAY;AAAA,MAC/B,EAAO;AAAA,QACL,SAAS,2BAA2B,OAAO,aAAa,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,QAChF,KAAK,KAAK,GAAG,OAAO,YAAY;AAAA;AAAA,IAEpC;AAAA,IAEA,IAAI,OAAO,iBAAiB;AAAA,MAC1B,SAAS;AAAA,MACT,KAAK,KAAK,GAAG,OAAO,kBAAkB;AAAA,IACxC;AAAA,IAEA,IAAI,OAAO,iBAAiB;AAAA,MAC1B,SAAS;AAAA,MACT,KAAK,KAAK,IAAI,OAAO,iBAAiB;AAAA,IACxC;AAAA,IAEA,IAAI,OAAO,cAAc;AAAA,MACvB,SAAS;AAAA,MACT,KAAK,KAAK,OAAO,aAAa,YAAY,CAAC;AAAA,IAC7C;AAAA,IAEA,IAAI,OAAO,eAAe;AAAA,MACxB,SAAS;AAAA,MACT,KAAK,KAAK,OAAO,cAAc,YAAY,CAAC;AAAA,IAC9C;AAAA,IAEA,IAAI,OAAO,cAAc;AAAA,MACvB,SAAS;AAAA,MACT,KAAK,KAAK,OAAO,aAAa,YAAY,CAAC;AAAA,IAC7C;AAAA,IAEA,IAAI,OAAO,eAAe;AAAA,MACxB,SAAS;AAAA,MACT,KAAK,KAAK,OAAO,cAAc,YAAY,CAAC;AAAA,IAC9C;AAAA,IAGA,MAAM,iBAAiB,OAAO,cAC5B,kCAAkC,8BAClC,IACF;AAAA,IACA,MAAM,cAAc,KAAK,GAAG,MAAM,eAAe,GAAG,EAAE,IAAI,GAAG,eAAe,IAAI;AAAA,IAGhF,MAAM,QAAQ,YAAY;AAAA,IAE1B,MAAM,SAAS,OAAO,UAAU;AAAA,IAChC,MAAM,QAAQ,OAAO,SAAS;AAAA,IAC9B,IAAI,UAAU;AAAA,MAAG,OAAO,EAAE,SAAS,CAAC,GAAG,SAAS,SAAS,OAAO,MAAM;AAAA,IAGtE,MAAM,UAAU,OAAO,WAAW;AAAA,IAClC,MAAM,QAAQ,OAAO,SAAS;AAAA,IAC9B,MAAM,cACJ,YAAY,cAAc,eAAe,YAAY,cAAc,eAAe;AAAA,IACpF,SAAS,aAAa,eAAe,MAAM,YAAY;AAAA,IAGvD,SAAS;AAAA,IACT,KAAK,KAAK,QAAQ,GAAG,MAAM;AAAA,IAE3B,MAAM,gBAAgB,OAAO,cAAc,OAAO,IAAI;AAAA,IACtD,MAAM,OAAO,KAAK,GAAG,MAAM,cAAc,GAAG,EAAE,IAAI,GAAG,cAAc,IAAI;AAAA,IACvE,MAAM,UAAU,KAAK,SAAS;AAAA,IAC9B,MAAM,UAAU,KAAK,MAAM,GAAG,KAAK,EAAE,IAAI,CAAC,QAAQ,YAAY,GAAG,CAAC;AAAA,IAElE,OAAO,EAAE,SAAS,SAAS,MAAM;AAAA;AAErC;AAEA,SAAS,gBAAgB,CAAC,MAA6B;AAAA,EACrD,OAAO,KAAK,UAAU;AAAA,IACpB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP,CAAC;AAAA;AAGI,SAAS,oBAAoB,CAAC,OAAqB;AAAA,EACxD,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,SAAS,GAAG;AAAA,IAC9C,MAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AAAA;AAGF,SAAS,SAAS,CAAC,IAAc,UAAuC;AAAA,EACtE,MAAM,MAAM,GAAG,MAAM,SAAS,QAAQ,EAAE,IAAI,GAAG,SAAS,SAAS;AAAA,EACjE,OAAO,IAAI;AAAA;AAGb,SAAS,gBAAgB,CACvB,IACA,UACA,OACqC;AAAA,EACrC,MAAM,OAAO,eAAe,MAAM,UAAU;AAAA,EAC5C,MAAM,OAAO,GACV,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,cAKQ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,KAMnB,EACC,IAAI,MAAM,MAAM,GAAG,SAAS,MAAM,MAAM,MAAM,KAAK;AAAA,EAEtD,OAAO,KAAK,IAAI,CAAC,SAAS;AAAA,IACxB,OAAO,iBAAiB,IAAI,YAAY,IAAI,KAAK;AAAA,IACjD,OAAO,OAAO,IAAI,KAAK;AAAA,EACzB,EAAE;AAAA;AAGJ,SAAS,cAAc,CAAC,YAA4B;AAAA,EAClD,OAAO,MAAM,WAAW,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,MAAK;AAAA;AAGpE,SAAS,gBAAgB,CAAC,WAA0B,OAAyB;AAAA,EAC3E,IAAI,cAAc;AAAA,IAAQ,OAAO;AAAA,EACjC,IAAI,cAAc;AAAA,IAAS,OAAO;AAAA,EAClC,IAAI,cAAc;AAAA,IAAQ,OAAO;AAAA,EAEjC,KAAK,cAAc,YAAY,cAAc,YAAY,OAAO,UAAU,UAAU;AAAA,IAClF,OAAO,KAAK,MAAM,KAAK;AAAA,EACzB;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,0BAA0B,CAAC,OAAgB,OAAwC;AAAA,EAC1F,IAAI,OAAO,UAAU,YAAY,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAAG;AAAA,IAC1E,MAAM,IAAI,2BACR,kCACA,wDACF;AAAA,EACF;AAAA,EACA,IAAI,QAAQ,OAAO;AAAA,IACjB,MAAM,IAAI,2BACR,8BACA,wCAAwC,qEAC1C;AAAA,EACF;AAAA;AAGF,SAAS,gBAAgB,CAAC,OAAiC;AAAA,EACzD,OAAO,EAAE,MAAM,SAAS,OAAO,GAAG,OAAO,mBAAmB,KAAK,EAAE;AAAA;AAGrE,SAAS,kBAAkB,CAAC,OAAiC;AAAA,EAC3D,QAAQ,MAAM;AAAA,SACP;AAAA,SACA;AAAA,SACA;AAAA,SACA;AAAA,MACH,OAAO,mBAAmB,MAAM,KAAK;AAAA;AAAA,MAErC,OAAO;AAAA;AAAA;;;AGjjBb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACoBO,SAAS,qCAAqC,CACnD,WACA,OACA,mBACgC;AAAA,EAChC,MAAM,YAAY,KAAK,UAAU;AAAA,IAC/B,OAAO,MAAM;AAAA,IACb,SAAS,MAAM;AAAA,IACf,OAAO,MAAM;AAAA,EACf,CAAC;AAAA,EACD,MAAM,WAAW,4BAA4B,WAAW,SAAS;AAAA,EACjE,MAAM,gBAAgB,CAAC,KAAa,OAA+B,CAAC,OAAO;AAAA,IACzE,KAAK,GAAG,SAAS;AAAA,EAAQ;AAAA,IACzB,MAAM,CAAC,GAAG,SAAS,MAAM,GAAG,IAAI;AAAA,EAClC;AAAA,EAEA,OAAO,OAAO,OAAO;AAAA,IACnB,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,gCAAgC;AAAA,IAChC;AAAA,IACA,WAAW,CAAC,WAAqD;AAAA,SAC5D;AAAA,SACA,cAAc,MAAM,KAAK,MAAM,IAAI;AAAA,MACtC,aAAa,MAAM,cACf,KAAK,MAAM,gBAAgB,cAAc,MAAM,YAAY,KAAK,MAAM,YAAY,IAAI,EAAE,IACxF;AAAA,MACJ,UAAU,GAAG,SAAS;AAAA,EAAQ,MAAM;AAAA,MACpC,WAAW,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,SAAS;AAAA,SAC5C,MAAM,eACN;AAAA,QACE,cAAc;AAAA,aACT,MAAM;AAAA,aACN,cAAc,MAAM,aAAa,KAAK,MAAM,aAAa,IAAI;AAAA,QAClE;AAAA,MACF,IACA,CAAC;AAAA,IACP;AAAA,IACA,gBAAgB,cACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAcA,CAAC,OAAO,iBAAiB,IAAI,EAAE,CACjC;AAAA,EACF,CAAC;AAAA;AAQH,SAAS,2BAA2B,CAAC,WAAmB,WAAyC;AAAA,EAC/F,OAAO;AAAA,IACL,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDAqG4C,oBAAoB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yDAkG1B,oBAAoB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA2BnF,MAAM,CAAC,WAAW,SAAS;AAAA,EAC7B;AAAA;;;ADzSK,SAAS,0BAA0B,CACxC,IACA,QAKA,mBACmB;AAAA,EACnB,MAAM,YAAY,OAAO;AAAA,EACzB,MAAM,SAAS,kCAAkC,OAAO,MAAM;AAAA,EAC9D,MAAM,SAAS,sCACb,WACA,OAAO,OACP,OAAO,iBACT;AAAA,EACA,MAAM,SAAS,IAAI,mBAAmB,IAAI,MAAM;AAAA,EAChD,MAAM,gBAAgB,CAAC,oBACrB,0BAA0B,WAAW,eAAe;AAAA,EACtD,MAAM,OAAO,CAAI,QACf,2BAA2B,IAAI,MAAM;AAAA,IACnC,sBAAsB,IAAI,QAAQ,OAAO,iBAAiB;AAAA,IAC1D,MAAM,QAAQ,IAAI;AAAA,IAClB,kCAAkC,OAAO,MAAM;AAAA,IAC/C,OAAO;AAAA,GACR;AAAA,EACH,MAAM,UAAU,CAAe,QAC7B,2BAA2B,IAAI,MAAM;AAAA,IACnC,sBAAsB,IAAI,QAAQ,OAAO,iBAAiB;AAAA,IAC1D,MAAM,QAAQ,IAAI;AAAA,IAClB,kCAAkC,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,MAAM;AAAA,IAC9D,OAAO;AAAA,GACR;AAAA,EAEH,OAAO,OAAO,OAAO;AAAA,IACnB;AAAA,IACA,cAAc,OAAO,UAAU;AAAA,MAC7B,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,KAAK,MAAM,OAAO,aAAa,KAAK,CAAC;AAAA;AAAA,IAE9C,cAAc,OAAO,UAAU;AAAA,MAC7B,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,KAAK,MAAM,OAAO,aAAa,KAAK,CAAC;AAAA;AAAA,IAE9C,eAAe,OAAO,UAAU;AAAA,MAC9B,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,KAAK,MAAM,OAAO,cAAc,KAAK,CAAC;AAAA;AAAA,IAE/C,cAAc,OAAO,UAAU;AAAA,MAC7B,cAAc,MAAM,SAAS;AAAA,MAC7B,2BAA2B,MAAM,OAAO,MAAM;AAAA,MAC9C,OAAO,KAAK,MAAM,OAAO,aAAa,KAAK,CAAC;AAAA;AAAA,IAE9C,gBAAgB,OAAO,UAAU;AAAA,MAC/B,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,KAAK,MAAM,OAAO,eAAe,KAAK,CAAC;AAAA;AAAA,IAEhD,yBAAyB,OAAO,UAAU;AAAA,MACxC,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,KAAK,MAAM,OAAO,wBAAwB,KAAK,CAAC;AAAA;AAAA,IAEzD,WAAW,OAAO,UAAU;AAAA,MAC1B,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,KAAK,MAAM,OAAO,UAAU,KAAK,CAAC;AAAA;AAAA,IAE3C,qBAAqB,OAAO,UAAU;AAAA,MACpC,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,QAAQ,MAAM,OAAO,oBAAoB,KAAK,CAAC;AAAA;AAAA,IAExD,gBAAgB,OAAO,UAAU;AAAA,MAC/B,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,QAAQ,MAAM,OAAO,eAAe,KAAK,CAAC;AAAA;AAAA,IAEnD,YAAY,OAAO,UAAU;AAAA,MAC3B,cAAc,MAAM,SAAS;AAAA,MAC7B,qBAAqB,MAAM,KAAK;AAAA,MAChC,OAAO,KAAK,MAAM,OAAO,WAAW,KAAK,CAAC;AAAA;AAAA,IAE5C,MAAM,OAAO,UAAU;AAAA,MACrB,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,KAAK,MAAM,OAAO,KAAK,KAAK,CAAC;AAAA;AAAA,EAExC,CAA6B;AAAA;AAG/B,SAAS,qBAAqB,CAC5B,IACA,QACA,mBACM;AAAA,EACN,MAAM,MAAM,GAAG,MAAM,OAAO,eAAe,GAAG,EAAE,IAAI,GAAG,OAAO,eAAe,IAAI;AAAA,EAGjF,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,iBAAiB,GAAG;AAAA,IACjD,MAAM,IAAI,6BAA6B,kBAAkB,iBAAiB;AAAA,EAC5E;AAAA;;;AN1EF,IAAM,mCAA4D;AAAA,EAChE,cAAc;AAAA,EACd,cAAc;AAAA,EACd,eAAe;AAAA,EACf,cAAc;AAAA,EACd,OAAO;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,IACV,KAAK;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,cAAc;AAAA,IACZ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA,qBAAqB;AAAA,IACnB,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,EACZ;AAAA,EACA,kBAAkB;AAAA,IAChB,QAAQ,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IACzC,MAAM,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IACvC,SAAS,EAAE,UAAU,KAAK;AAAA,IAC1B,SAAS,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IAC1C,QAAQ,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IACzC,SAAS,EAAE,UAAU,KAAK;AAAA,IAC1B,MAAM,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IACvC,WAAW,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IAC5C,SAAS,EAAE,UAAU,KAAK;AAAA,EAC5B;AAAA,EACA,QAAQ;AAAA,IACN,YAAY;AAAA,IACZ,kBAAkB;AAAA,EACpB;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAAA;AAQO,MAAM,oBAA6C;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,UAAsC,CAAC,GAAG;AAAA,IACpD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,KAAK,SAAS,IAAI,mBAAmB,KAAK,IAAI,2BAA2B;AAAA,IAEzE,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA;AAAA,EAGF,iBAAiB,GAA4B;AAAA,IAC3C,OAAO;AAAA;AAAA,EAGT,uBAAuB,CAAC,QAIF;AAAA,IACpB,OAAO,2BAA2B,KAAK,IAAI,QAAQ,MAAM,KAAK,kBAAkB,CAAC;AAAA;AAAA,OAG7E,aAAY,CAAC,QAAwD;AAAA,IACzE,IAAI,kBAAiB,OAAO,KAAK;AAAA,MAC/B,OAAO,2BAA2B,KAAK,IAAI,MAAM,KAAK,OAAO,aAAa,MAAM,CAAC;AAAA,IACnF,OAAO,KAAK,OAAO,aAAa,MAAM;AAAA;AAAA,OAGlC,aAAY,CAAC,QAAwD;AAAA,IACzE,IAAI,kBAAiB,OAAO,KAAK;AAAA,MAC/B,OAAO,2BAA2B,KAAK,IAAI,MAAM,KAAK,OAAO,aAAa,MAAM,CAAC;AAAA,IACnF,OAAO,KAAK,OAAO,aAAa,MAAM;AAAA;AAAA,OAGlC,cAAa,CAAC,QAA0D;AAAA,IAC5E,IAAI,kBAAiB,OAAO,KAAK;AAAA,MAC/B,OAAO,2BAA2B,KAAK,IAAI,MAAM,KAAK,OAAO,cAAc,MAAM,CAAC;AAAA,IACpF,OAAO,KAAK,OAAO,cAAc,MAAM;AAAA;AAAA,OAGnC,aAAY,CAAC,QAAwD;AAAA,IACzE,IAAI,kBAAiB,OAAO,KAAK;AAAA,MAC/B,OAAO,2BAA2B,KAAK,IAAI,MAAM,KAAK,OAAO,aAAa,MAAM,CAAC;AAAA,IACnF,OAAO,KAAK,OAAO,aAAa,MAAM;AAAA;AAAA,OAGlC,eAAc,CAAC,QAIS;AAAA,IAC5B,OAAO,KAAK,OAAO,eAAe,MAAM;AAAA;AAAA,OAGpC,wBAAuB,CAC3B,QAC6B;AAAA,IAC7B,OAAO,KAAK,OAAO,wBAAwB,MAAM;AAAA;AAAA,OAG7C,UAAS,CAAC,QAMsB;AAAA,IACpC,OAAO,KAAK,OAAO,UAAU,MAAM;AAAA;AAAA,OAG/B,oBAAmB,CAAC,QAGkB;AAAA,IAC1C,OAAO,KAAK,OAAO,oBAAoB,MAAM;AAAA;AAAA,OAGzC,eAAc,CAAC,QAI2B;AAAA,IAC9C,OAAO,KAAK,OAAO,eAAe,MAAM;AAAA;AAAA,OAGpC,WAAU,CAAC,QAAgE;AAAA,IAC/E,qBAAqB,OAAO,KAAK;AAAA,IACjC,OAAO,KAAK,OAAO,WAAW,MAAM;AAAA;AAAA,OAGhC,uBAAsB,CAAC,QAGS;AAAA,IACpC,IAAI,OAAO,MAAM,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAEvC,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAqBF,EACC,IAAI,KAAK,UAAU,OAAO,KAAK,GAAG,OAAO,WAAW,OAAO,SAAS;AAAA,IAEvE,OAAO,KAAK,IAAI,CAAC,QAAQ,UAAU,GAAG,CAAC;AAAA;AAAA,OAGnC,oBAAmB,CAAC,QAK6C;AAAA,IACrE,8BAA8B,OAAO,KAAK;AAAA,IAC1C,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAOF,EACC,IACC,OAAO,WACP,OAAO,cACP,OAAO,kBAAkB,MACzB,OAAO,kBAAkB,MACzB,OAAO,QAAQ,CACjB;AAAA,IACF,MAAM,UAAU,KAAK,SAAS,OAAO;AAAA,IACrC,MAAM,UAAU,KAAK,MAAM,GAAG,OAAO,KAAK,EAAE,IAAI,CAAC,QAAQ,YAAY,GAAG,CAAC;AAAA,IACzE,MAAM,OAAO,QAAQ,GAAG,EAAE;AAAA,IAC1B,OAAO;AAAA,MACL;AAAA,SACI,WAAW,OAAO,EAAE,eAAe,KAAK,UAAU,IAAI,CAAC;AAAA,IAC7D;AAAA;AAAA,OAGI,KAAI,CAAC,QAaqE;AAAA,IAC9E,OAAO,KAAK,OAAO,KAAK,MAAM;AAAA;AAAA,EAIhC,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAE9C;AAEA,SAAS,6BAA6B,CAAC,OAAqB;AAAA,EAC1D,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,SAAS,GAAG;AAAA,IAC9C,MAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AAAA;;AQjTF,6BAAS;AACT;AACA;AAAA;AAAA;AAAA;AAYA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiGO,SAAS,UAAY,CAAC,OAAkB;AAAA,EAC7C,OAAO,KAAK,MAAM,KAAK;AAAA;AAGlB,SAAS,YAAY,CAAC,KAAoD;AAAA,EAC/E,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,QAAQ,EAAE,cAAc,IAAI,UAAU;AAAA,IACtC,mBAAmB,IAAI;AAAA,IACvB,iBAAiB,IAAI;AAAA,IACrB,gBAAgB,IAAI;AAAA,IACpB,UAAU,IAAI;AAAA,IACd,QAAQ,IAAI;AAAA,IACZ,gBAAgB,IAAI;AAAA,IACpB,gBAAgB;AAAA,MACd,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,IACjB;AAAA,IACA,oBAAoB,IAAI;AAAA,IACxB,eAAe,IAAI;AAAA,IACnB,kBAAkB,IAAI;AAAA,OAClB,IAAI,4BAA4B,OAChC,CAAC,IACD;AAAA,MACE,MAAM;AAAA,QACJ,mBAAmB,IAAI;AAAA,QACvB,cAAc,IAAI;AAAA,MACpB;AAAA,IACF;AAAA,IACJ,WAAW,IAAI;AAAA,IACf,gBAAgB,IAAI;AAAA,IACpB,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,aAAa,IAAI;AAAA,IACjB,YAAY,IAAI;AAAA,IAChB,cAAc,IAAI;AAAA,IAClB,WAAW,IAAI;AAAA,EACjB;AAAA;AAGK,SAAS,eAAe,CAAC,KAA6D;AAAA,EAC3F,OAAO;AAAA,IACL,MAAM,oBAAoB,IAAI,QAAQ;AAAA,IACtC,WAAW,2BACT,KACA,IAAI,YAAY,OAAO,OAAO,WAAmB,IAAI,OAAO,CAC9D;AAAA,IACA,gBAAgB,IAAI;AAAA,EACtB;AAAA;AAGK,SAAS,YAAY,CAAC,KAAoD;AAAA,EAC/E,MAAM,OAAO;AAAA,IACX,WAAW,IAAI;AAAA,IACf,IAAI,IAAI;AAAA,IACR,gBAAgB,IAAI;AAAA,IACpB,aAAa,IAAI;AAAA,IACjB,aAAa,IAAI;AAAA,IACjB,QAAQ,WAAyC,IAAI,MAAM;AAAA,OACvD,IAAI,iBAAiB,OACrB,CAAC,IACD;AAAA,MACE,aAAa,WAA2D,IAAI,YAAY;AAAA,IAC1F;AAAA,IACJ,UAAU,WAA2C,IAAI,QAAQ;AAAA,IACjE,kBAAkB,IAAI;AAAA,OAClB,IAAI,wBAAwB,OAAO,CAAC,IAAI,EAAE,oBAAoB,IAAI,oBAAoB;AAAA,OACtF,IAAI,mBAAmB,OAAO,CAAC,IAAI,EAAE,eAAe,IAAI,eAAe;AAAA,IAC3E,aAAa,IAAI;AAAA,EACnB;AAAA,EACA,MAAM,SAAS,WAAyC,IAAI,MAAM;AAAA,EAClE,MAAM,SAAS,WAA0C,IAAI,MAAM;AAAA,EACnE,OAAO,KAAK,MAAM,QAAQ,OAAO;AAAA;AAG5B,SAAS,YAAY,CAAC,KAAoD;AAAA,EAC/E,OAAO;AAAA,IACL,UAAU,WAA4C,IAAI,QAAQ;AAAA,IAClE,aAAa,IAAI;AAAA,IACjB,UAAU,IAAI;AAAA,IACd,SAAS,IAAI;AAAA,IACb,gBAAgB,IAAI;AAAA,IACpB,aAAa,IAAI;AAAA,IACjB,aACE,IAAI,iBAAiB,OACjB,OACA,kBAAiB,IAAI,cAAc,6BAA6B;AAAA,IACtE,WAAW,IAAI;AAAA,EACjB;AAAA;AAGK,SAAS,yBAAyB,CACvC,IACA,OAOM;AAAA,EACN,MAAM,MAAM,GACT,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOF,EACC,IAAI,MAAM,WAAW,MAAM,eAAe;AAAA,EAa7C,IAAI,CAAC,OAAO,IAAI,WAAW,WAAW;AAAA,IACpC,MAAM,IAAI,6BACR,mBACA,mBAAmB,MAAM,gDAC3B;AAAA,EACF;AAAA,EACA,IAAI,IAAI,kBAAkB,MAAM,YAAY,IAAI,6BAA6B,eAAe;AAAA,IAC1F,MAAM,IAAI,6BACR,mBACA,mBAAmB,MAAM,qDAAqD,MAAM,YACtF;AAAA,EACF;AAAA,EACA,IAAI,IAAI,oBAAoB,MAAM,gBAAgB;AAAA,IAChD,MAAM,IAAI,6BACR,kBACA,mBAAmB,MAAM,4CAC3B;AAAA,EACF;AAAA,EACA,MAAM,WAAW,MAAM;AAAA,EACvB,IACE,aACC,IAAI,oBAAoB,SAAS,kBAChC,IAAI,6BAA6B,SAAS,YAC1C,IAAI,eAAe,SAAS,eAAe,aAC3C,IAAI,uBAAuB,SAAS,eAAe,aACnD,IAAI,+BAA+B,SAAS,eAAe,aAC3D,IAAI,sBAAsB,SAAS,oBACnC,IAAI,wBAAwB,SAAS,sBACrC,IAAI,mBAAmB,SAAS,gBAClC;AAAA,IACA,MAAM,IAAI,6BACR,mBACA,mBAAmB,MAAM,4DAC3B;AAAA,EACF;AAAA;AAGK,SAAS,cAAc,CAC5B,SACA,MACA,SACM;AAAA,EACN,IAAI,YAAY;AAAA,IAAG,MAAM,IAAI,6BAA6B,MAAM,OAAO;AAAA;AAGlE,SAAS,uBAAuB,CAAC,OAAyB;AAAA,EAC/D,IAAI,EAAE,iBAAiB;AAAA,IAAQ,OAAO;AAAA,EACtC,MAAM,UAAU;AAAA,EAChB,IAAI,OAAO,QAAQ,SAAS,UAAU;AAAA,IACpC,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,SAAS,QAAQ,IAAI;AAAA,EACzB;AAAA,EACA,OAAO,QAAQ,UAAU;AAAA;;;ACrRpB,MAAM,4BAA6D;AAAA,EAErD;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,IACA,kBACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,OAGb,oBAAmB,CACvB,OACsC;AAAA,IACtC,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,4BAA4B;AAAA,MAC5D,eAAe,MAAM,gBAAgB,iCAAiC;AAAA,MACtE,OAAO,KAAK,QACV,0CACA,MAAM,WACN,MAAM,cACR;AAAA,KACD;AAAA;AAAA,OAGG,QAAO,CAAC,OAAyE;AAAA,IACrF,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,4BAA4B;AAAA,MAC5D,eAAe,MAAM,IAAI,oBAAoB;AAAA,MAC7C,OAAO,KAAK,QAAQ,6BAA6B,MAAM,WAAW,MAAM,EAAE;AAAA,KAC3E;AAAA;AAAA,OAGG,YAAW,CAAC,OAA6E;AAAA,IAC7F,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,4BAA4B;AAAA,MAC5D,MAAM,SAAS,YAAY,MAAM,MAAM;AAAA,MACvC,eAAe,OAAO,OAAO,+BAA+B;AAAA,MAC5D,IAAI,OAAO,iBAAiB,MAAM;AAAA,QAChC,yBAAyB,OAAO,cAAc,yCAAyC;AAAA,MACzF;AAAA,MACA,OAAO,OAAO,iBAAiB,OAC3B,KAAK,QACH,6FACA,MAAM,WACN,OAAO,MACP,OAAO,KACT,IACA,KAAK,QACH,yFACA,MAAM,WACN,OAAO,MACP,OAAO,OACP,OAAO,YACT;AAAA,KACL;AAAA;AAAA,OAGG,KAAI,CAAC,OAAqE;AAAA,IAC9E,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,4BAA4B;AAAA,MAC5D,IAAI,MAAM;AAAA,QAAK,eAAe,MAAM,IAAI,IAAI,wBAAwB;AAAA,MACpE,MAAM,SAAS,MAAM,UAAU;AAAA,MAC/B,MAAM,QAAQ,MAAM,SAAS;AAAA,MAC7B,yBAAyB,QAAQ,6BAA6B;AAAA,MAC9D,IAAI,UAAU;AAAA,QAAI,yBAAyB,OAAO,4BAA4B;AAAA,MAC9E,MAAM,UAAU,CAAC,gBAAgB;AAAA,MACjC,MAAM,SAA8B,CAAC,MAAM,SAAS;AAAA,MACpD,IAAI,MAAM,KAAK,SAAS,UAAU;AAAA,QAChC,QAAQ,KAAK,8CAA8C;AAAA,QAC3D,OAAO,KAAK,MAAM,IAAI,EAAE;AAAA,MAC1B,EAAO,SAAI,MAAM,KAAK,SAAS,cAAc;AAAA,QAC3C,QAAQ,KAAK,kEAAkE;AAAA,QAC/E,OAAO,KAAK,MAAM,IAAI,EAAE;AAAA,MAC1B;AAAA,MACA,MAAM,QAAQ,QAAQ,KAAK,OAAO;AAAA,MAClC,MAAM,WAAW,KAAK,GACnB,MAAM,wDAAwD,OAAO,EACrE,IAAI,GAAG,MAAM;AAAA,MAChB,MAAM,YAAY,MAAM,UAAU,SAAS,SAAS;AAAA,MACpD,MAAM,QACJ,MAAM,KAAK,SAAS,eAChB,6EAA6E,2BAA2B,iBAAiB,cACzH,gBAAgB,iBAAiB;AAAA,MACvC,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA,oBAEU;AAAA,uBACG;AAAA;AAAA,WAGf,EACC,IAAI,GAAG,QAAQ,OAAO,MAAM;AAAA,MAC/B,MAAM,UAAU,KAAK,IAAI,YAAY;AAAA,MACrC,OAAO;AAAA,QACL;AAAA,QACA,OAAO,SAAS;AAAA,QAChB,SAAS,SAAS,QAAQ,SAAS,SAAS;AAAA,MAC9C;AAAA,KACD;AAAA;AAAA,EAGK,OAAO,CACb,UACG,QAC0B;AAAA,IAC7B,MAAM,MAAM,KAAK,GACd,MAAM,wCAAwC,OAAO,EACrD,IAAI,GAAG,MAAM;AAAA,IAChB,OAAO,MAAM,aAAa,GAAG,IAAI;AAAA;AAErC;;;AC7HA;AAAA;AAAA,gBAEE;AAAA;AAAA,sBAEA;AAAA,kCACA;AAAA,oCACA;AAAA,kBACA;AAAA;AAAA,uBAEA;AAAA,2BACA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAUE;AAAA,2BACA;AAAA;AAAA;;;ACvBF;AAAA,kCAEE;AAAA;AAEF;AAAA;AAAA,kCAEE;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEF;AAAA;AAAA;AAAA,kCAGE;AAAA;AAAA,yBAEA;AAAA;AAAA;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACfA;AAAA,kCACE;AAAA;AAAA;AAAA;AAIF;AAAA;AAAA;AAAA;AAiBA,IAAM,YAAY;AAGX,IAAM,2BAA2B;AAAA;AAAA;AAAA;AAUjC,IAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA,6BAIR;AAG7B,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASrB,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUzB,SAAS,eAAe,CAAC,KAA0B;AAAA,EACjD,MAAM,MAAM,oBAAoB,GAAG;AAAA,EACnC,OAAO;AAAA,IACL,YAAY,IAAI;AAAA,OACb,oBAAoB,GAAG;AAAA,IAC1B,UACE,IAAI,SAAS,WACT,CAAC,GAAG,IACJ,CAAC,KAAK,oBAAoB,EAAE,MAAM,UAAU,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC;AAAA,EAC1E;AAAA;AAGF,SAAS,eAAe,CACtB,IACA,OAKe;AAAA,EACf,MAAM,UAAU,GACb,MAAM;AAAA,wEAC6D,EACnE,IAAI,MAAM,WAAW,MAAM,UAAU,MAAM,iBAAiB;AAAA,EAG/D,OAAO,SAAS,cAAc;AAAA;AAIzB,SAAS,qBAAqB,CACnC,IACA,OAMgF;AAAA,EAChF,MAAM,UAAU,gBAAgB,IAAI,KAAK;AAAA,EACzC,MAAM,OAAO;AAAA,wDACyC;AAAA,EACtD,MAAM,WAAW,MAAM,cACnB;AAAA;AAAA;AAAA;AAAA,yCAImC,SACnC;AAAA;AAAA,0CAEoC;AAAA,EACxC,OAAO;AAAA,IACL,KAAK;AAAA;AAAA;AAAA;AAAA,4BAImB;AAAA;AAAA,IAExB,QAAQ,CAAC,SAAS,MAAM,WAAW,GAAI,MAAM,cAAc,CAAC,OAAO,IAAI,CAAC,GAAI,MAAM,QAAQ;AAAA,EAC5F;AAAA;AAGK,SAAS,gBAAgB,CAC9B,IACA,UACA,OACM;AAAA,EACN,MAAM,QAAQ,iBAAiB,SAAS,iBAAiB,KAAK;AAAA,EAC9D,IAAI,CAAC,SAAS,2BAA2B,MAAM,KAAK,CAAC,SAAS,KAAK,OAAO,GAAG;AAAA,IAC3E,MAAM,IAAI,+BAA+B,6CAA6C;AAAA,EACxF;AAAA,EACA,MAAM,WAAW,GAAG,MAAM;AAAA,0CACc;AAAA,EACxC,MAAM,SAAS,GAAG,MAAM;AAAA;AAAA,+DAEqC;AAAA,EAC7D,WAAW,QAAQ,OAAO;AAAA,IACxB,MAAM,WAAW,OAAO,IACtB,SAAS,YACT,MAAM,WACN,KAAK,SACL,KAAK,gBACL,OAAO,KAAK,OAAO,CACrB;AAAA,IACA,IAAI;AAAA,MAAU;AAAA,IACd,MAAM,WAAW,SAAS,IAAI,SAAS,YAAY,KAAK,OAAO;AAAA,IAI/D,IACE,CAAC,YACD,SAAS,oBAAoB,KAAK,kBAClC,QAAQ,SAAS,OAAO,MAAM,KAAK,SACnC;AAAA,MACA,MAAM,IAAI,+BACR,+EACF;AAAA,IACF;AAAA,EACF;AAAA;AAIK,SAAS,mBAAmB,CACjC,IACA,WACA,WACA,YACM;AAAA,EACN,IACE,UAAU,4BAA4B,SACrC,UAAU,4BAA4B,WAAW,SAAS,2BACzD,UAAU,mBAAmB,WAAW,SAAS;AAAA,IAEnD,MAAM,IAAI,8BACR,oBACA,8CACF;AAAA,EACF,IAAI,UAAU,4BAA4B,QAAQ,UAAU,eAAe;AAAA,IAAG;AAAA,EAC9E,MAAM,QAAQ,UAAU,4BAA4B;AAAA,EACpD,GAAG,MAAM;AAAA;AAAA;AAAA,+DAGoD;AAAA,QAEvD,QACI;AAAA,4EAEA,IACJ,EAAE,IACN,WAAW,WACX,WACA,WAAW,OAAO,cAClB,GAAI,QAAQ,CAAC,WAAW,UAAU,UAAU,IAAI,CAAC,CACnD;AAAA,EAEA,GAAG,MAAM;AAAA,yCAC8B,EAAE,IAAI,WAAW,WAAW,UAAU,UAAU;AAAA;AAGlF,SAAS,wBAAwB,CAAC,IAAc,UAAyC;AAAA,EAC9F,MAAM,UAAU,GACb,MAAM;AAAA;AAAA;AAAA;AAAA,gBAIK,EACX,IAAI,SAAS,UAAU;AAAA,EAC1B,IAAI;AAAA,IACF,MAAM,IAAI,+BACR,iFACF;AAAA;AAIG,SAAS,gBAAgB,CAC9B,IACA,WACA,MACoC;AAAA,EACpC,MAAM,YAAY,KAAK,QAAQ,CAAC,QAAQ;AAAA,IACtC,QAAQ,aAAa,WAAW,gBAAgB,GAAG;AAAA,IACnD,OAAO,SAAS,IAAI,CAAC,aAAa,KAAK,QAAQ,QAAQ,EAAE;AAAA,GAC1D;AAAA,EACD,OAAO,GACJ,MAAM;AAAA,oEACyD;AAAA;AAAA,aAEvD;AAAA;AAAA;AAAA;AAAA,+BAIkB;AAAA,6EAC8C,cAAc,EACtF,IAAI,cAAc,SAAS,GAAG,SAAS;AAAA;AAIrC,SAAS,wBAAwB,CACtC,IACA,OAQoC;AAAA,EACpC,MAAM,UAAU,gBAAgB,IAAI,KAAK;AAAA,EACzC,MAAM,WAAW,CAAC,MAAM,kBACpB,KACA;AAAA,aACO;AAAA;AAAA;AAAA;AAAA;AAAA,0DAK6C;AAAA,6EACmB;AAAA,MAEvE,CAAC,MAAM,cACH,KACA;AAAA;AAAA,EAGR,OAAO,GACJ,MAAM;AAAA,sBACW;AAAA;AAAA,aAET;AAAA;AAAA;AAAA;AAAA,6EAIgE;AAAA,MACvE,UAAU,EACX,IACC,cAAc,MAAM,KAAK,IAAI,eAAe,CAAC,GAC7C,SACA,GAAI,MAAM,kBACN,CAAC,MAAM,WAAW,MAAM,UAAU,GAAI,MAAM,cAAc,CAAC,OAAO,IAAI,CAAC,CAAE,IACzE,CAAC,CACP;AAAA;;;ADrOG,IAAM,oCAAoC;AAC1C,IAAM,gCAAgC;AAsC7C,SAAS,oBAAoB,CAC3B,QACQ;AAAA,EACR,OAAO,cACL,OAAO,IAAI,GAAG,QAAQ,cAAc;AAAA,IAClC,cAAc,iBAAiB,QAAQ,MAAM;AAAA,IAC7C,cAAc,OAAO;AAAA,IACrB,UAAU,OAAO;AAAA,IACjB;AAAA,EACF,EAAE,CACJ;AAAA;AAAA;AAqEK,MAAM,iCAAiC;AAAA,EAEzB;AAAA,EACR;AAAA,EAFX,WAAW,CACQ,IACR,WACT;AAAA,IAFiB;AAAA,IACR;AAAA;AAAA,EAGX,WAAW,CAAC,KAAoD;AAAA,IAC9D,OAAO,KAAK,aAAa,CAAC,GAAG,CAAC,EAAE;AAAA;AAAA,EAGlC,YAAY,CAAC,MAA2E;AAAA,IACtF,IAAI,KAAK,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAC/B,MAAM,YAAY,cAChB,KAAK,IAAI,CAAC,SAAS,EAAE,cAAc,IAAI,cAAc,WAAW,IAAI,UAAU,EAAE,CAClF;AAAA,IACA,MAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA,IAQzB,MAAM,gBAAgB,KAAK,GACxB,MACC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,wDAMxB,EACC,IAAI,WAAW,KAAK,SAAS;AAAA,IAChC,MAAM,aAAa,iBACjB,KAAK,IACL,KAAK,WACL,KAAK,IAAI,CAAC,SAAS,EAAE,MAAM,UAAU,IAAI,EAAE,CAC7C;AAAA,IACA,MAAM,eAAe,KAAK,GACvB,MACC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,0DAMxB,EACC,IAAI,WAAW,KAAK,SAAS;AAAA,IAChC,MAAM,gBAAgB,KAAK,GACxB,MACC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6CAcxB,EACC,IAAI,WAAW,KAAK,SAAS;AAAA,IAEhC,MAAM,YAAY,IAAI,IACpB,cAAc,IAAI,CAAC,QAAQ,CAAC,aAAa,qBAAqB,GAAG,CAAC,GAAG,GAAG,CAAU,CACpF;AAAA,IACA,MAAM,UAAU,gBAAgB,UAAU;AAAA,IAC1C,MAAM,YAAY,IAAI,IACpB,aAAa,IACX,CAAC,QAAQ,CAAC,aAAa,qBAAqB,GAAG,CAAC,GAAG,qBAAqB,GAAG,CAAC,CAC9E,CACF;AAAA,IACA,MAAM,YAAY,IAAI;AAAA,IACtB,WAAW,OAAO,eAAe;AAAA,MAC/B,MAAM,MAAM,aAAa,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,UAAU,CAAC;AAAA,MACvF,MAAM,SAAS,UAAU,IAAI,GAAG,KAAK,CAAC;AAAA,MACtC,OAAO,KAAK,YAAY,GAAG,CAAC;AAAA,MAC5B,UAAU,IAAI,KAAK,MAAM;AAAA,IAC3B;AAAA,IACA,WAAW,UAAU,UAAU,OAAO,GAAG;AAAA,MACvC,OAAO,KAAK,CAAC,MAAM,UACjB,sBAAsB,KAAK,QAAQ,KAAK,EAAE,EAAE,cAC1C,sBAAsB,MAAM,QAAQ,MAAM,EAAE,CAC9C,CACF;AAAA,IACF;AAAA,IAEA,OAAO,KAAK,IAAI,CAAC,QAAQ;AAAA,MACvB,MAAM,MAAM,aAAa,GAAG;AAAA,MAC5B,MAAM,eAAe,UAAU,IAAI,GAAG;AAAA,MACtC,OAAO;AAAA,QACL,KAAK,gBAAgB,GAAG;AAAA,QACxB,QAAQ,aAAa,QAAQ,IAAI,qBAAoB,EAAE,MAAM,UAAU,IAAI,CAAC,CAAC,CAAC;AAAA,QAC9E,UAAU,UAAU,IAAI,GAAG,KAAK;AAAA,QAChC,WAAW,eAAe,wBAAwB,YAAY,IAAI;AAAA,QAClE,iBAAiB,UAAU,IAAI,GAAG,KAAK,CAAC;AAAA,MAC1C;AAAA,KACD;AAAA;AAAA,EAGH,SAAS,CAAC,KAAgD;AAAA,IACxD,OAAO,KAAK,WAAW,CAAC,GAAG,CAAC,EAAE;AAAA;AAAA,EAGhC,UAAU,CAAC,MAAuE;AAAA,IAChF,IAAI,KAAK,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAC/B,MAAM,YAAY,cAChB,KAAK,IAAI,CAAC,SAAS;AAAA,MACjB,cAAc,IAAI,OAAO;AAAA,MACzB,UAAU,IAAI,OAAO;AAAA,MACrB,QAAQ,IAAI;AAAA,MACZ,cAAc,IAAI,OAAO;AAAA,MACzB,UAAU,IAAI,OAAO;AAAA,IACvB,EAAE,CACJ;AAAA,IACA,MAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQzB,MAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQtB,MAAM,gBAAgB,KAAK,GACxB,MACC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oDASxB,EACC,IAAI,WAAW,KAAK,SAAS;AAAA,IAChC,MAAM,aAAa,iBACjB,KAAK,IACL,KAAK,WACL,KAAK,IAAI,CAAC,SAAS,EAAE,MAAM,QAAQ,IAAI,EAAE,CAC3C;AAAA,IACA,MAAM,eAAe,KAAK,GACvB,MACC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wEAUxB,EACC,IAAI,WAAW,KAAK,SAAS;AAAA,IAChC,MAAM,mBAAmB,KAAK,GAC3B,MACC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oDAQxB,EACC,IAAI,WAAW,KAAK,SAAS;AAAA,IAChC,MAAM,YAAY,IAAI,IACpB,cAAc,IAAI,CAAC,QAAQ,CAAC,WAAW,mBAAmB,GAAG,CAAC,GAAG,GAAG,CAAU,CAChF;AAAA,IACA,MAAM,UAAU,gBAAgB,UAAU;AAAA,IAC1C,MAAM,YAAY,IAAI,IACpB,aAAa,IACX,CAAC,QAAQ,CAAC,WAAW,2BAA2B,GAAG,CAAC,GAAG,mBAAmB,GAAG,CAAC,CAChF,CACF;AAAA,IACA,MAAM,gBAAgB,IAAI,IACxB,iBAAiB,IAAI,CAAC,QAAQ;AAAA,MAC5B,MAAM,SAAS,uBAAuB,GAAG;AAAA,MACzC,OAAO,CAAC,iBAAiB,OAAO,IAAI,QAAQ,OAAO,IAAI,MAAM,GAAG,MAAM;AAAA,KACvE,CACH;AAAA,IACA,OAAO,KAAK,IAAI,CAAC,QAAQ;AAAA,MACvB,MAAM,MAAM,WAAW,GAAG;AAAA,MAC1B,MAAM,eAAe,UAAU,IAAI,GAAG;AAAA,MACtC,OAAO;AAAA,QACL,KAAK,gBAAgB,GAAG;AAAA,QACxB,QAAQ,WAAW,QAAQ,IAAI,qBAAoB,EAAE,MAAM,QAAQ,IAAI,CAAC,CAAC,CAAC;AAAA,QAC1E,UAAU,UAAU,IAAI,GAAG,KAAK;AAAA,QAChC,cAAc,cAAc,IAAI,iBAAiB,IAAI,QAAQ,IAAI,MAAM,CAAC,KAAK;AAAA,QAC7E,WAAW,eAAe,sBAAsB,YAAY,IAAI;AAAA,MAClE;AAAA,KACD;AAAA;AAAA,EAGH,UAAU,CAAC,QAA4B,IAAyC;AAAA,IAC9E,OAAO,KAAK,YAAY,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,MAAM;AAAA;AAAA,EAGlD,WAAW,CACT,QACiC;AAAA,IACjC,IAAI,OAAO,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IACjC,MAAM,YAAY,cAChB,OAAO,IAAI,GAAG,QAAQ,UAAU;AAAA,MAC9B,cAAc,OAAO,OAAO;AAAA,MAC5B,UAAU,OAAO,OAAO;AAAA,MACxB,YAAY,OAAO;AAAA,MACnB;AAAA,IACF,EAAE,CACJ;AAAA,IACA,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2CAcF,EACC,IAAI,WAAW,KAAK,SAAS;AAAA,IAChC,MAAM,QAAQ,IAAI,IAChB,KAAK,IAAI,CAAC,QAAQ;AAAA,MAChB,MAAM,QAAQ,YAAY,GAAG;AAAA,MAC7B,OAAO,CAAC,sBAAsB,MAAM,QAAQ,MAAM,EAAE,GAAG,KAAK;AAAA,KAC7D,CACH;AAAA,IACA,OAAO,OAAO,QAAQ,CAAC,UAAU;AAAA,MAC/B,MAAM,SAAS,MAAM,IAAI,sBAAsB,MAAM,QAAQ,MAAM,EAAE,CAAC;AAAA,MACtE,OAAO,SAAS,CAAC,MAAM,IAAI,CAAC;AAAA,KAC7B;AAAA;AAAA,EAGH,kBAAkB,CAChB,QAC6C;AAAA,IAC7C,IAAI,OAAO,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IACjC,OAAO,KAAK,wBAAwB,QAAQ,qBAAqB,MAAM,CAAC,EAAE;AAAA;AAAA,EAG5E,cAAc,CACZ,QAC0C;AAAA,IAC1C,IAAI,OAAO,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IACjC,MAAM,gBAAgB,qBAAqB,MAAM;AAAA,IACjD,MAAM,aAAa,KAAK,GACrB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAOU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAMP,uBACL,EACC,IAAI,eAAe,KAAK,SAAS;AAAA,IACpC,MAAM,mBAAmB,KAAK,GAC3B,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oDAcF,EACC,IAAI,eAAe,KAAK,SAAS;AAAA,IACpC,MAAM,UAAU,qBAAqB,UAAU;AAAA,IAC/C,MAAM,YAAY,IAAI,IACpB,iBAAiB,IAAI,CAAC,QAAQ;AAAA,MAC5B,MAAM,SAAS,uBAAuB,GAAG;AAAA,MACzC,OAAO,CAAC,iBAAiB,OAAO,IAAI,QAAQ,OAAO,IAAI,MAAM,GAAG,MAAM;AAAA,KACvE,CACH;AAAA,IACA,QAAQ,WAAW,cAAc,KAAK,wBAAwB,QAAQ,aAAa;AAAA,IACnF,OAAO,OAAO,IAAI,GAAG,QAAQ,UAAU,UAAU;AAAA,MAC/C,MAAM,MAAM,iBAAiB,QAAQ,MAAM;AAAA,MAC3C,OAAO;AAAA,WACF,UAAU;AAAA,QACb,iBAAiB,QAAQ,IAAI,GAAG,KAAK;AAAA,QACrC,UAAU,UAAU,IAAI,GAAG,KAAK;AAAA,QAChC,WAAW,UAAU,IAAI,GAAG,KAAK;AAAA,MACnC;AAAA,KACD;AAAA;AAAA,EAGK,uBAAuB,CAC7B,QACA,eAIA;AAAA,IACA,MAAM,eAAe,IAAI,IACvB,OAAO,IAAI,GAAG,QAAQ,aAAa;AAAA,MACjC,MAAM,MAAM,iBAAiB,QAAQ,MAAM;AAAA,MAC3C,OAAO,CAAC,KAAK,sBAAsB,QAAQ,MAAM,CAAC;AAAA,KACnD,CACH;AAAA,IACA,MAAM,YAAY,IAAI;AAAA,IACtB,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+CAgBuC,mBAAmB,OAAO;AAAA,SAEnE,EACC,QAAQ,eAAe,KAAK,SAAS;AAAA,IACxC,WAAW,OAAO,MAAM;AAAA,MACtB,MAAM,cAAc,aAAa,IAAI,IAAI,cAAc;AAAA,MACvD,IAAI,CAAC,aAAa;AAAA,QAChB,MAAM,IAAI,8BACR,mBACA,0BAA0B,IAAI,sCAChC;AAAA,MACF;AAAA,MACA,MAAM,WAAW,sBAAsB,GAAG;AAAA,MAC1C,oBAAoB,aAAa,QAAQ;AAAA,MACzC,UAAU,IAAI,IAAI,gBAAgB,YAAY,mBAAmB,IAAI,WAAW,IAAI;AAAA,IACtF;AAAA,IACA,OAAO;AAAA,MACL,WAAW,OAAO,IAAI,GAAG,QAAQ,aAC/B,uBAAuB,aAAa,IAAI,iBAAiB,QAAQ,MAAM,CAAC,CAAE,CAC5E;AAAA,MACA;AAAA,IACF;AAAA;AAAA,GAGD,aAAa,CACZ,SACA,UAC6B;AAAA,IAC7B,IAAI,QAAQ,WAAW;AAAA,MAAG;AAAA,IAC1B,MAAM,SAAS,QAAQ,IAAI,MAAM,QAAQ,EAAE,KAAK,IAAI;AAAA,IACpD,MAAM,OAAO,QAAQ,QAAQ,CAAC,QAAQ,CAAC,IAAI,cAAc,IAAI,SAAS,CAAC;AAAA,IACvE,IAAI,SAAwB;AAAA,IAC5B,OAAO,MAAM;AAAA,MACX,MAAM,OAAO,KAAK,GACf,MACC;AAAA,oEAC0D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAYpD;AAAA;AAAA;AAAA;AAAA,kBAIE,mBAAmB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAepC,EACC,IACC,GAAG,MACH,KAAK,WACL,KAAK,WACL,KAAK,WACL,QACA,QACA,QACF;AAAA,MACF,IAAI,KAAK,WAAW;AAAA,QAAG;AAAA,MACvB,MAAM,KAAK,IAAI,kBAAkB;AAAA,MACjC,SAAS,KAAK,KAAK,SAAS,IAAI,YAAY;AAAA,IAC9C;AAAA;AAAA,GAGD,qBAAqB,CAAC,OAAkE;AAAA,IACvF,KAAK,6BAA6B,KAAK;AAAA,IACvC,IAAI,SAAmC;AAAA,IACvC,OAAO,MAAM;AAAA,MACX,MAAM,OAAO,KAAK,gBAAgB,OAAO,MAAM;AAAA,MAC/C,IAAI,KAAK,WAAW;AAAA,QAAG;AAAA,MACvB,MAAM,KAAK,IAAI,mBAAmB;AAAA,MAClC,IAAI,KAAK,SAAS,MAAM;AAAA,QAAU;AAAA,MAClC,MAAM,OAAO,KAAK,KAAK,SAAS;AAAA,MAChC,SAAS,EAAE,SAAS,KAAK,UAAU,aAAa,KAAK,aAAa;AAAA,IACpE;AAAA;AAAA,EAGF,uBAAuB,CACrB,UACA,4BACA,MACyC;AAAA,IACzC,MAAM,OAAO,KAAK,aAAa,IAAI;AAAA,IACnC,MAAM,aAAa,KAAK,mBACtB,UACA,CAAC,0BAA0B,GAC3B,KAAK,IAAI,CAAC,SAAS,EAAE,MAAM,UAAmB,IAAI,EAAE,CACtD;AAAA,IACA,OAAO,KAAK,IAAI,CAAC,WAAW;AAAA,MAC1B,KAAK,MAAM;AAAA,MACX,iBAAiB,aACf,WAAW,kBACR,IAAI,0BAA0B,GAC7B,IAAI,qBAAoB,EAAE,MAAM,UAAU,KAAK,MAAM,IAAI,CAAC,CAAC,CACjE;AAAA,MACA,UAAU,MAAM;AAAA,MAChB,WAAW,MAAM;AAAA,MACjB,iBAAiB,MAAM;AAAA,IACzB,EAAE;AAAA;AAAA,EAGJ,qBAAqB,CACnB,UACA,4BACA,oBACA,YACA,cAAc,OACyB;AAAA,IACvC,MAAM,OAAO,WAAW,IAAI,CAAC,aAAa,SAAS,GAAG;AAAA,IACtD,MAAM,OAAO,KAAK,WAAW,IAAI;AAAA,IACjC,MAAM,eAAe,KAAK,mBACxB,UACA,oBACA,KAAK,IAAI,CAAC,SAAS,EAAE,MAAM,QAAiB,IAAI,EAAE,GAClD,WACF;AAAA,IACA,MAAM,YAAY,aAAa,kBAAkB,IAAI,0BAA0B;AAAA,IAC/E,OAAO,KAAK,IAAI,CAAC,OAAO,UAAU;AAAA,MAChC,MAAM,MAAM,qBAAoB,EAAE,MAAM,QAAQ,KAAK,MAAM,IAAI,CAAC;AAAA,MAChE,OAAO;AAAA,QACL,KAAK,MAAM;AAAA,QACX,iBAAiB,aAAa,MAAM,IAAI,GAAG,IACvC,WAAW,WAAW,IAAI,GAAG,CAAC,IAC9B,MAAM;AAAA,QACV,UAAU,MAAM;AAAA,QAChB,cAAc,MAAM;AAAA,QACpB,WAAW,MAAM;AAAA,QACjB,cAAc,WAAW,OAAQ;AAAA,MACnC;AAAA,KACD;AAAA;AAAA,EAGH,uBAAuB,CAAC,KAGf;AAAA,IACP,MAAM,MAAM,KAAK,GACd,MACC;AAAA,wEAEF,EACC,IAAI,KAAK,WAAW,IAAI,cAAc,IAAI,SAAS;AAAA,IAItD,OAAO,MAAM,EAAE,SAAS,IAAI,SAAS,cAAc,IAAI,eAAe,IAAI;AAAA;AAAA,EAG5E,uBAAuB,CAAC,KAAiD;AAAA,IACvE,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IACC,KAAK,WACL,IAAI,OAAO,cACX,IAAI,OAAO,WACX,IAAI,QACJ,IAAI,OAAO,cACX,IAAI,OAAO,SACb;AAAA,IACF,OAAO,MAAM,IAAI,iBAAiB;AAAA;AAAA,EAG5B,kBAAkB,CACxB,UACA,oBACA,MACA,cAAc,OACM;AAAA,IACpB,IAAI,mBAAmB,WAAW,KAAK,KAAK,WAAW,GAAG;AAAA,MACxD,OAAO,EAAE,OAAO,IAAI,KAAO,mBAAmB,IAAI,IAAM;AAAA,IAC1D;AAAA,IACA,MAAM,OAAO,yBAAyB,KAAK,IAAI;AAAA,MAC7C,WAAW,KAAK;AAAA,MAChB;AAAA,MACA,mBAAmB,mBAAmB;AAAA,MACtC;AAAA,MACA,iBAAiB,mBAAmB,SAAS;AAAA,MAC7C;AAAA,IACF,CAAC;AAAA,IACD,MAAM,QAAQ,IAAI;AAAA,IAClB,MAAM,oBAAoB,IAAI;AAAA,IAC9B,WAAW,OAAO,MAAM;AAAA,MACtB,MAAM,SAAS,aAAa,GAAG;AAAA,MAC/B,MAAM,MAAM,qBAAoB,OAAO,SAAS;AAAA,MAChD,MAAM,IAAI,GAAG;AAAA,MACb,MAAM,kBAAkB,kBAAkB,IAAI,IAAI,kBAAkB,KAAK,IAAI;AAAA,MAC7E,gBAAgB,IAAI,KAAK,MAAM;AAAA,MAC/B,kBAAkB,IAAI,IAAI,oBAAoB,eAAe;AAAA,IAC/D;AAAA,IACA,OAAO,EAAE,OAAO,kBAAkB;AAAA;AAAA,EAG5B,4BAA4B,CAAC,OAAuC;AAAA,IAC1E,IAAI,MAAM,SAAS,UAAU;AAAA,MAC3B,KAAK,0BAA0B,KAAK;AAAA,MACpC;AAAA,IACF;AAAA,IACA,KAAK,wBAAwB,KAAK;AAAA;AAAA,EAG5B,yBAAyB,CAAC,OAAuC;AAAA,IACvE,MAAM,OAAO,sBAAsB,KAAK,IAAI;AAAA,MAC1C,WAAW,KAAK;AAAA,MAChB,UAAU,MAAM;AAAA,MAChB,mBAAmB,MAAM;AAAA,MACzB,aAAa,MAAM,eAAe;AAAA,IACpC,CAAC;AAAA,IACD,KAAK,GACF,MACC;AAAA,wBACgB;AAAA;AAAA;AAAA;AAAA,cAIV,qBAAqB;AAAA,kBACjB,KAAK;AAAA;AAAA;AAAA,SAIjB,EACC,IAAI,MAAM,WAAW,GAAG,KAAK,MAAM;AAAA;AAAA,EAGhC,uBAAuB,CAAC,OAAuC;AAAA,IACrE,MAAM,OAAO,sBAAsB,KAAK,IAAI;AAAA,MAC1C,WAAW,KAAK;AAAA,MAChB,UAAU,MAAM;AAAA,MAChB,mBAAmB,MAAM;AAAA,MACzB,aAAa,MAAM,eAAe;AAAA,IACpC,CAAC;AAAA,IACD,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,mBAKW;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKC,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cA8CX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBA0BE,mBAAmB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,wBAKtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQlB,EACC,IACC,MAAM,WACN,GAAG,KAAK,QACR,KAAK,WACL,KAAK,WACL,KAAK,WACL,KAAK,WACL,KAAK,WACL,KAAK,WACL,KAAK,WACL,KAAK,WACL,MAAM,SACR;AAAA;AAAA,EAGI,eAAe,CACrB,OACA,QACsB;AAAA,IACtB,OAAO,KAAK,GACT,MACC;AAAA;AAAA,iBAES;AAAA;AAAA;AAAA;AAAA;AAAA,SAMX,EACC,IACC,MAAM,WACN,MAAM,MACN,QAAQ,WAAW,MACnB,QAAQ,WAAW,MACnB,QAAQ,eAAe,MACvB,MAAM,QACR;AAAA;AAEN;AAEA,SAAS,mBAAmB,CAAC,KAA8C;AAAA,EACzE,MAAM,QAAQ,WAAoB,IAAI,YAAY;AAAA,EAClD,IAAI,IAAI,gBAAgB,UAAU;AAAA,IAChC,OAAO;AAAA,MACL,MAAM;AAAA,MACN,KAAK,EAAE,cAAc,MAAM,IAAK,WAAW,MAAM,GAAI;AAAA,MACrD,SAAS,IAAI;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,MACH,QAAQ,EAAE,cAAc,MAAM,IAAK,WAAW,MAAM,GAAI;AAAA,MACxD,QAAQ,MAAM;AAAA,MACd,QAAQ,EAAE,cAAc,MAAM,IAAK,WAAW,MAAM,GAAI;AAAA,IAC1D;AAAA,IACA,SAAS,IAAI;AAAA,IACb,cAAc,IAAI,kBAAkB;AAAA,EACtC;AAAA;AAGF,SAAS,eAAe,CACtB,MAC4C;AAAA,EAC5C,MAAM,SAAS,IAAI;AAAA,EACnB,WAAW,OAAO,MAAM;AAAA,IACtB,MAAM,SAAS,aAAa,GAAG;AAAA,IAC/B,MAAM,MAAM,qBAAoB,OAAO,SAAS;AAAA,IAChD,IAAI,OAAO,IAAI,GAAG,GAAG;AAAA,MACnB,MAAM,IAAI,8BACR,0BACA,kCAAkC,MACpC;AAAA,IACF;AAAA,IACA,OAAO,IAAI,KAAK,MAAM;AAAA,EACxB;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,oBAAoB,CAC3B,MACgD;AAAA,EAChD,MAAM,SAAS,IAAI;AAAA,EACnB,WAAW,OAAO,MAAM;AAAA,IACtB,MAAM,SAAS,WAAW,aAAa,GAAG,CAAC;AAAA,IAC3C,IAAI,CAAC;AAAA,MAAQ;AAAA,IACb,MAAM,MAAM,OAAO,UAAU;AAAA,IAC7B,MAAM,MAAM,iBAAiB,IAAI,QAAQ,IAAI,MAAM;AAAA,IACnD,IAAI,OAAO,IAAI,GAAG,GAAG;AAAA,MACnB,MAAM,IAAI,8BACR,0BACA,4DAA4D,MAC9D;AAAA,IACF;AAAA,IACA,OAAO,IAAI,KAAK,MAAM;AAAA,EACxB;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,YAAY,CACnB,QACoC;AAAA,EACpC,OAAO,QAAQ,UAAU,SAAS,WAAY,SAAyC;AAAA;AAGzF,SAAS,UAAU,CAAC,QAA6E;AAAA,EAC/F,OAAO,QAAQ,UAAU,SAAS,SAAU,SAAuC;AAAA;AAGrF,SAAS,oBAAoB,CAAC,KAA8C;AAAA,EAC1E,MAAM,MAAM,qBAAqB,GAAG;AAAA,EACpC,OAAO;AAAA,IACL;AAAA,IACA,OAAO,WAAyC,IAAI,KAAK;AAAA,IACzD,UAAU,WAA4C,IAAI,SAAS;AAAA,IACnE,cAAc,IAAI;AAAA,IAClB,WAAW,IAAI;AAAA,EACjB;AAAA;AAGF,SAAS,kBAAkB,CAAC,KAA0C;AAAA,EACpE,MAAM,MAAM,2BAA2B,GAAG;AAAA,EAC1C,OAAO;AAAA,IACL;AAAA,IACA,OAAO,WAAuC,IAAI,KAAK;AAAA,IACvD,cAAc,IAAI;AAAA,IAClB,WAAW,IAAI;AAAA,EACjB;AAAA;AAGF,SAAS,sBAAsB,CAAC,KAAkD;AAAA,EAChF,MAAM,MAAM;AAAA,IACV,QAAQ,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,kBAAkB;AAAA,IAC7E,QAAQ,IAAI;AAAA,EACd;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA,OAAO,sBAAsB,WAAmB,IAAI,KAAK,GAAG,eAAe,GAAG,CAAC;AAAA,IAC/E,cAAc,IAAI;AAAA,IAClB,WAAW,IAAI;AAAA,EACjB;AAAA;AAGF,SAAS,0BAA0B,CAAC,KAAuC;AAAA,EACzE,OAAO;AAAA,IACL,QAAQ,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,kBAAkB;AAAA,IAC7E,QAAQ,IAAI;AAAA,IACZ,QAAQ,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,kBAAkB;AAAA,EAC/E;AAAA;AAGF,SAAS,cAAc,CAAC,OAGb;AAAA,EACT,OAAO,KAAK,UAAU,CAAC,MAAM,OAAO,cAAc,MAAM,OAAO,WAAW,MAAM,MAAM,CAAC;AAAA;AAGzF,SAAS,YAAY,CAAC,KAA8D;AAAA,EAClF,OAAO;AAAA,IACL,QAAQ,EAAE,cAAc,IAAI,UAAU;AAAA,IACtC,mBAAmB,IAAI;AAAA,OACpB,gBAAgB,GAAG;AAAA,EACxB;AAAA;AAGF,SAAS,uBAAuB,CAAC,KAAkD;AAAA,EACjF,IAAI,CAAC,IAAI,gBAAgB;AAAA,IACvB,MAAM,IAAI,8BACR,mBACA,oBAAoB,IAAI,kBAAkB,IAAI,2CAChD;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,KAAK,qBAAqB,GAAG;AAAA,IAC7B,YAAY,WAAiD,IAAI,UAAU;AAAA,IAC3E,SAAS,IAAI;AAAA,IACb,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,IACf,cAAc,IAAI;AAAA,EACpB;AAAA;AAGF,SAAS,qBAAqB,CAAC,KAA8C;AAAA,EAC3E,IAAI,CAAC,IAAI,gBAAgB;AAAA,IACvB,MAAM,IAAI,8BACR,mBACA,kBAAkB,WAAW,mBAAmB,GAAG,CAAC,kCACtD;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,KAAK,mBAAmB,GAAG;AAAA,OACvB,IAAI,eAAe,OACnB,CAAC,IACD;AAAA,MACE,YAAY,WAA4D,IAAI,UAAU;AAAA,IACxF;AAAA,IACJ,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,IACf,cAAc,IAAI;AAAA,EACpB;AAAA;AAGF,SAAS,WAAW,CAAC,KAAyC;AAAA,EAC5D,IAAI,CAAC,IAAI,gBAAgB;AAAA,IACvB,MAAM,IAAI,8BACR,oBACA,mBAAmB,sBACjB;AAAA,MACE,QAAQ,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,UAAU;AAAA,MACrE,YAAY,IAAI;AAAA,IAClB,GACA,IAAI,EACN,kCACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,QAAQ,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,UAAU;AAAA,MACrE,YAAY,IAAI;AAAA,IAClB;AAAA,IACA,OAAO,WAAyC,IAAI,KAAK;AAAA,OACrD,IAAI,SAAS,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK;AAAA,IAC9C,IAAI,IAAI;AAAA,IACR,cAAc,IAAI;AAAA,EACpB;AAAA;AAGF,SAAS,oBAAoB,CAAC,OAAwB;AAAA,EACpD,MAAM,SAAS,QAAQ,GAAG,WAAW;AAAA,EACrC,OAAO,6BAA6B,yBAAyB;AAAA;AAGxD,SAAS,kBAAkB,CAAC,OAAwB;AAAA,EACzD,MAAM,SAAS,QAAQ,GAAG,WAAW;AAAA,EACrC,OAAO,6BAA6B,yBAAyB,oBAAoB,kBAAkB,yBAAyB;AAAA;;;ADthCvH,MAAM,0CAA0C,oCAAoC;AAAA,EACzF,oBAAuC;AAAA,EACvC,qBAAwC;AAAA,EAC/B,UAAuB,iBAAiB;AACnD;AAAA;AAEO,MAAM,8BAA8B;AAAA,EAKtB;AAAA,EACA;AAAA,EALF,WAAW,IAAI;AAAA,EACf,OAAO,IAAI;AAAA,EAE5B,WAAW,CACQ,IACA,SACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,EAGnB,MAAM,CAAC,QAAsE;AAAA,IAC3E,IAAI,CAAC,KAAK,SAAS,QAAQ;AAAA,MACzB,MAAM,IAAI,8BACR,mBACA,iEACF;AAAA,IACF;AAAA,IACA,KAAK,aAAa;AAAA,IAClB,MAAM,UAAU,IAAI,kCAAkC,gBAAgB,MAAM,GAAG,KAAK,QAAQ,EAAE;AAAA,IAC9F,KAAK,SAAS,IAAI,QAAQ,eAAe,OAAO;AAAA,IAChD,KAAK,KAAK,IAAI,OAAO;AAAA,IACrB,KAAK,QAAQ,iBAAiB,SAAS,QAAQ,aAAa;AAAA,IAC5D,OAAO;AAAA;AAAA,EAGT,OAAO,CAAC,SAAoE;AAAA,IAC1E,MAAM,QAAQ,KAAK,SAAS,IAAI,QAAQ,aAAa;AAAA,IACrD,IACE,CAAC,SACD,CAAC,MAAM,UACP,CAAC,KAAK,SAAS,UACf,MAAM,kBAAkB,KAAK,QAAQ,IACrC;AAAA,MACA,MAAM,IAAI,8BACR,mBACA,sCACF;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGT,OAAO,CAAC,SAAkD;AAAA,IACxD,IAAI,CAAC,QAAQ;AAAA,MAAQ;AAAA,IACrB,QAAQ,SAAS;AAAA,IACjB,QAAQ,cAAc;AAAA,IACtB,KAAK,KAAK,OAAO,OAAO;AAAA,IAIxB,IAAI,KAAK,KAAK,SAAS;AAAA,MAAG,KAAK,eAAe;AAAA,IACzC;AAAA,WAAK,WAAW,QAAQ,EAAE;AAAA,IAC/B,KAAK,SAAS,iBAAiB,SAAS,QAAQ,aAAa;AAAA;AAAA,EAG/D,aAAa,GAAS;AAAA,IACpB,WAAW,WAAW,KAAK;AAAA,MAAM,KAAK,QAAQ,OAAO;AAAA;AAAA,EAGvD,KAAK,CAAC,OAA4C;AAAA,IAChD,MAAM,UAAU,KAAK,QAAQ,MAAM,OAAO;AAAA,IAC1C,MAAM,UAAU,2BAA2B,SAAS,KAAK;AAAA,IACzD,IAAI,QAAQ,WAAW;AAAA,MAAG;AAAA,IAC1B,MAAM,SAAS,KAAK,GAAG,MACrB;AAAA,sBACgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OASlB;AAAA,IACA,KAAK,GAAG,IAAI,oCAAoC;AAAA,IAChD,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,aAAa,QAAQ,WAAW,aAAa,SAAS;AAAA,QACpD,mBAAmB,OAAO;AAAA,QAC1B,MAAM,iBAAiB,OAAO,SAAS,mBAAmB,SAAS;AAAA,QACnE,MAAM,cAAc,OAAO,SAAS,gBAAgB,SAAS;AAAA,QAC7D,OAAO,IACL,QAAQ,IACR,OAAO,WACP,WACA,OAAO,MACP,QAAQ,MACR,QAAQ,YACR,QAAQ,YACR,QAAQ,SACR,QAAQ,SACR,gBAAgB,cAAc,MAC9B,gBAAgB,eAAe,MAC/B,aAAa,QAAQ,MACrB,cAAc,OAAO,YAAY,QAAQ,IAAI,MAC7C,aAAa,IAAI,OAAO,gBAAgB,MACxC,aAAa,IAAI,OAAO,aAAa,MACrC,aAAa,IAAI,UAAU,MAC3B,aAAa,IAAI,OAAO,gBAAgB,MACxC,aAAa,IAAI,OAAO,aAAa,MACrC,cAAc,MAAM,CACtB;AAAA,MACF;AAAA,MACA,KAAK,GAAG,IAAI,4CAA4C;AAAA,MACxD,OAAO,OAAO;AAAA,MACd,KAAK,GAAG,IAAI,gDAAgD;AAAA,MAC5D,KAAK,GAAG,IAAI,4CAA4C;AAAA,MACxD,IAAI,wBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,cAAc,gBAAgB;AAAA,MACtC;AAAA,MACA,MAAM;AAAA;AAAA,IAER,WAAW,YAAY;AAAA,MACrB,cAAc,QAAQ,SAAS,SAAS,QAAQ,SAAS,OAAO;AAAA;AAAA,SAG7D,MAAM,CAAC,OAA+E;AAAA,IAC3F,MAAM,UAAU,KAAK,QAAQ,MAAM,OAAO;AAAA,IAC1C,MAAM,SAAS,QAAQ,YAAY,MAAM;AAAA,IACzC,IAAI,OAAO,SAAS;AAAA,MAClB,MAAM,IAAI,8BACR,mBACA,mBAAmB,MAAM,mDAC3B;AAAA,IACF;AAAA,IACA,OAAO,UAAU;AAAA,IACjB,QAAQ,aAAa;AAAA,IACrB,IAAI,SAA4B;AAAA,IAChC,OAAO,MAAM;AAAA,MACX,KAAK,QAAQ,MAAM,OAAO;AAAA,MAC1B,MAAM,OAAO,KAAK,SAAS,MAAM,OAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA,MAC1E,IAAI,KAAK,WAAW;AAAA,QAAG;AAAA,MACvB,MAAM,UAAU,KAAK,IAAI,CAAC,QACxB,WAAqC,IAAI,OAAO,CAClD;AAAA,MACA,SAAS,WAAW,KAAK,KAAK,SAAS,EAAG;AAAA,MAC1C,OAAO,gBAAgB,QAAQ;AAAA,MAC/B,MAAM,EAAE,QAAQ;AAAA,IAClB;AAAA,IACA,KAAK,QAAQ,MAAM,OAAO;AAAA,IAC1B,OAAO,YAAY;AAAA;AAAA,EAGrB,mBAAmB,CACjB,SACA,MAIE;AAAA,IACF,MAAM,SAAS,KAAK,GAAG,MACrB;AAAA,8BACwB;AAAA;AAAA,OAG1B;AAAA,IACA,OAAO,KAAK,QAAQ,CAAC,QAAQ;AAAA,MAC3B,MAAM,MAAM,oBAAoB,KAAK,UAAU,CAAC,IAAI,cAAc,IAAI,SAAS,CAAC;AAAA,MAChF,MAAM,MAAM,OAAO,IAAI,QAAQ,IAAI,GAAG;AAAA,MACtC,IAAI,CAAC;AAAA,QAAK,OAAO,CAAC;AAAA,MAClB,MAAM,SAAS,WAEb,IAAI,OAAO;AAAA,MACb,OAAO,CAAC,EAAE,KAAK,OAAO,KAAK,QAAQ,OAAO,OAAO,CAAC;AAAA,KACnD;AAAA;AAAA,EAGH,oBAAoB,CAClB,SACA,OAC6B;AAAA,IAC7B,MAAM,QAAQ,yBAAyB,KAAK;AAAA,IAC5C,MAAM,WAAW,KAAK,SAAS,SAAS,QAAQ,IAAI,QAAQ,mBAAmB,MAAM,MAAM;AAAA,IAC3F,MAAM,gBAAgB,SAAS,IAAI,CAAC,QAAQ;AAAA,MAC1C,MAAM,SAAS,WACb,IAAI,OACN;AAAA,MACA,OAAO,OAAO;AAAA,KACf;AAAA,IACD,MAAM,YAAY,KAAK,SACrB,SACA,QAAQ,IACR,QAAQ,oBACR,MAAM,OAAO,MACf;AAAA,IACA,MAAM,iBAAiB,UAAU,IAAI,CAAC,QACpC,WAA0C,IAAI,OAAO,CACvD;AAAA,IACA,MAAM,WAAW,8BACf,SACA,OACA,OACA,eACA,cACF;AAAA,IACA,OAAO;AAAA,SACF;AAAA,MACH,mBACE,SAAS,WAAW,IAChB,QAAQ,oBACR,WAAW,SAAS,SAAS,SAAS,EAAG;AAAA,MAC/C,oBACE,UAAU,WAAW,IACjB,QAAQ,qBACR,WAAW,UAAU,UAAU,SAAS,EAAG;AAAA,IACnD;AAAA;AAAA,EAGF,mBAAmB,CACjB,SACA,UACM;AAAA,IACN,QAAQ,mBAAmB,SAAS;AAAA,IACpC,QAAQ,qBAAqB,SAAS;AAAA,IACtC,QAAQ,oBAAoB,SAAS;AAAA,IACrC,QAAQ,qBAAqB,SAAS;AAAA;AAAA,EAGxC,UAAU,CAAC,SAIT;AAAA,IACA,OAAO;AAAA,MACL,OAAO,QAAQ,QAAQ;AAAA,MACvB,aAAa,QAAQ,QAAQ;AAAA,MAC7B,OAAO,QAAQ,QAAQ;AAAA,IACzB;AAAA;AAAA,EAGF,gBAAgB,CAAC,SAAmE;AAAA,IAClF,MAAM,UAAU,QAAQ;AAAA,IACxB,OAAO;AAAA,MACL,gBAAgB,QAAQ;AAAA,MACxB,gBAAgB,QAAQ;AAAA,MACxB,gBAAgB,QAAQ;AAAA,MACxB,kBACE,QAAQ,wBACR,QAAQ,iBACR,QAAQ,iBACR,QAAQ;AAAA,MACV,cAAc,QAAQ;AAAA,MACtB,cAAc,QAAQ;AAAA,MACtB,cAAc,QAAQ;AAAA,MACtB,gBACE,QAAQ,sBACR,QAAQ,eACR,QAAQ,eACR,QAAQ;AAAA,IACZ;AAAA;AAAA,EAGF,gBAAgB,CAAC,SAA4C,YAAoB;AAAA,IAC/E,MAAM,UAAU,QAAQ;AAAA,IACxB,OAAO;AAAA,MACL,kBAAkB,QAAQ;AAAA,MAC1B,QAAQ;AAAA,QACN,eAAe,QAAQ;AAAA,QACvB,eAAe,QAAQ;AAAA,QACvB,iBAAiB,aAAa,QAAQ,gBAAgB,QAAQ;AAAA,QAC9D,sBAAsB,QAAQ;AAAA,MAChC;AAAA,IACF;AAAA;AAAA,EAGF,4BAA4B,CAAC,SAAkD;AAAA,IAC7E,IAAI,CAAC,QAAQ;AAAA,MAAa;AAAA,IAC1B,MAAM,iBAAiB,QAAQ,YAAY,mBAAmB,WAAW,IAAI;AAAA,IAC7E,MAAM,WAAW,KAAK,GACnB,MACC;AAAA;AAAA;AAAA,mBAGW;AAAA;AAAA;AAAA;AAAA,gCAIa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAOb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCASe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAW5B,EACC,IAAI,QAAQ,IAAI,gBAAgB,QAAQ,IAAI,cAAc;AAAA,IAC7D,IAAI,UAAU;AAAA,MACZ,mBACE,mFACF;AAAA,IACF;AAAA;AAAA,EAGM,QAAQ,CACd,MACA,WACA,QACA,OACmB;AAAA,IACnB,IAAI,UAAU;AAAA,MAAG,OAAO,CAAC;AAAA,IACzB,MAAM,WAAW;AAAA,IACjB,IAAI,CAAC,QAAQ;AAAA,MACX,OAAO,KAAK,GACT,MACC,UAAU,iBAAiB;AAAA;AAAA;AAAA,mBAI7B,EACC,IAAI,WAAW,MAAM,KAAK;AAAA,IAC/B;AAAA,IACA,OAAO,KAAK,GACT,MACC,UAAU,iBAAiB;AAAA;AAAA;AAAA;AAAA,iBAK7B,EACC,IACC,WACA,MACA,OAAO,YACP,OAAO,YACP,OAAO,SACP,OAAO,SACP,OAAO,WACP,KACF;AAAA;AAAA,EAGI,YAAY,GAAS;AAAA,IAC3B,KAAK,GAAG,IAAI;AAAA,wCACwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAwB3B;AAAA;AAAA;AAAA,wCAG2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAS3B;AAAA;AAAA;AAAA,KAGR;AAAA;AAAA,EAGK,UAAU,CAAC,WAAyB;AAAA,IAC1C,KAAK,GACF,MAAM,eAAe,wDAAwD,EAC7E,IAAI,SAAS;AAAA,IAChB,KAAK,GACF,MAAM,eAAe,oDAAoD,EACzE,IAAI,SAAS;AAAA;AAAA,EAGV,cAAc,GAAS;AAAA,IAC7B,KAAK,GAAG,IAAI;AAAA,6BACa;AAAA,6BACA;AAAA,KACxB;AAAA;AAEL;AAEA,SAAS,UAAU,CAAC,KAAkC;AAAA,EACpD,OAAO;AAAA,IACL,YAAY,IAAI;AAAA,IAChB,YAAY,IAAI;AAAA,IAChB,SAAS,IAAI;AAAA,IACb,SAAS,IAAI;AAAA,IACb,WAAW,IAAI;AAAA,EACjB;AAAA;AAGF,SAAS,gBAAgB,GAAgB;AAAA,EACvC,OAAO;AAAA,IACL,OAAO;AAAA,IACP,aAAa;AAAA,IACb,OAAO;AAAA,IACP,uBAAuB;AAAA,IACvB,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,cAAc;AAAA,IACd,cAAc;AAAA,IACd,eAAe;AAAA,IACf,eAAe;AAAA,IACf,sBAAsB;AAAA,EACxB;AAAA;AAGF,SAAS,aAAa,CACpB,SACA,QACA,SACM;AAAA,EACN,IAAI,QAAQ,SAAS;AAAA,IAAQ,QAAQ,QAAQ,SAAS;AAAA,EAEtD,IAAI,OAAO,SAAS,kBAAkB;AAAA,IACpC,IAAI,OAAO,eAAe;AAAA,MAAU,QAAQ,yBAAyB;AAAA,IACrE,IAAI,OAAO,eAAe;AAAA,MAAQ,QAAQ,uBAAuB;AAAA,IACjE,IAAI,OAAO,eAAe;AAAA,MAAS,QAAQ,wBAAwB;AAAA,IACnE;AAAA,EACF;AAAA,EACA,IAAI,OAAO,SAAS;AAAA,IAAQ;AAAA,EAE5B,QAAQ,OAAO,KAAK;AAAA,SACb;AAAA,MACH,QAAQ,wBAAwB;AAAA,MAChC,IAAI,OAAO,KAAK,MAAM,SAAS;AAAA,QAAQ,QAAQ,kBAAkB;AAAA,MAC5D;AAAA,gBAAQ,kBAAkB;AAAA,MAC/B;AAAA,SACG;AAAA,MACH,QAAQ,kBAAkB;AAAA,MAC1B;AAAA,SACG;AAAA,MACH,IAAI,OAAO,KAAK,MAAM,SAAS;AAAA,QAAQ,QAAQ,gBAAgB;AAAA,MAC1D;AAAA,gBAAQ,gBAAgB;AAAA,MAC7B;AAAA,SACG;AAAA,MACH,QAAQ,gBAAgB;AAAA,MACxB;AAAA,SACG;AAAA,MACH,IAAI,OAAO,KAAK,MAAM,SAAS,iBAAiB;AAAA,QAAM,QAAQ,iBAAiB;AAAA,MAC1E;AAAA,gBAAQ,iBAAiB;AAAA,MAC9B;AAAA,SACG;AAAA,SACA;AAAA,SACA;AAAA,SACA;AAAA,MACH;AAAA;AAAA;;;AGnjBN;AAAA,gBACE;AAAA,kCACA;AAAA,kBACA;AAAA;AAAA;AAGF;AAQA,SAAS,2BAA2B,CAAC,cAAuC;AAAA,EAC1E,OAAO,iBAAiB,SACpB,yCACA;AAAA;AAGN,SAAS,oBAAoB,CAAC,cAA6D;AAAA,EACzF,OAAO,kBAAkB,4BAA4B,YAAY,CAAC;AAAA;AAAA;AAI7D,MAAM,4BAA4B;AAAA,EACV;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,EAE7B,KAAK,CAAC,WAAmB,UAAkB,OAAuC;AAAA,IAChF,KAAK,eAAe,WAAW,KAAK;AAAA,IACpC,KAAK,eAAe,WAAW,KAAK;AAAA,IACpC,KAAK,gBAAgB,WAAW,KAAK;AAAA,IACrC,KAAK,YAAY,WAAW,UAAU,KAAK;AAAA;AAAA,EAGrC,cAAc,CAAC,WAAmB,OAAuC;AAAA,IAC/E,WAAW,QAAQ,MAAM,UAAU,QAAQ,SAAS;AAAA,MAClD,IAAI,KAAK,yBAAyB,MAAM;AAAA,QACtC,IAAI;AAAA,UACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA,0DAIF,EACC,IACC,WACA,KAAK,IAAI,cACT,KAAK,IAAI,WACT,cAAc,KAAK,KAAK,GACxB,cAAc,KAAK,QAAQ,GAC3B,KAAK,cACL,KAAK,SACP;AAAA,UACF,OAAO,OAAO;AAAA,UACd,IAAI,wBAAwB,KAAK,GAAG;AAAA,YAClC,MAAM,kBAAkB,mCAAmC;AAAA,UAC7D;AAAA,UACA,MAAM;AAAA;AAAA,QAER;AAAA,MACF;AAAA,MACA,eACE,KAAK,GACF,MACC;AAAA;AAAA;AAAA,sCAIF,EACC,IACC,cAAc,KAAK,KAAK,GACxB,cAAc,KAAK,QAAQ,GAC3B,KAAK,cACL,KAAK,WACL,WACA,KAAK,IAAI,cACT,KAAK,IAAI,WACT,KAAK,oBACP,EAAE,SACJ,mBACA,mCACF;AAAA,IACF;AAAA,IACA,WAAW,QAAQ,MAAM,UAAU,QAAQ,SAAS;AAAA,MAClD,eACE,KAAK,GACF,MACC;AAAA;AAAA,sCAGF,EACC,IAAI,WAAW,KAAK,IAAI,cAAc,KAAK,IAAI,WAAW,KAAK,oBAAoB,EACnF,SACH,mBACA,mCACF;AAAA,IACF;AAAA,IAEA,MAAM,aAAa,CACjB,cACA,aACA,KAKA,SAGS;AAAA,MACT,IAAI,KAAK,yBAAyB,MAAM;AAAA,QACtC,IAAI;AAAA,UACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,sEAKF,EACC,IACC,WACA,cACA,aACA,IAAI,OAAO,cACX,IAAI,OAAO,WACX,IAAI,QACJ,IAAI,OAAO,cACX,IAAI,OAAO,WACX,cAAc,KAAK,KAAK,GACxB,KAAK,cACL,KAAK,SACP;AAAA,UACF,OAAO,OAAO;AAAA,UACd,IAAI,wBAAwB,KAAK,GAAG;AAAA,YAClC,MAAM,qBAAqB,YAAY;AAAA,UACzC;AAAA,UACA,MAAM;AAAA;AAAA,QAER;AAAA,MACF;AAAA,MACA,eACE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,sCAKF,EACC,IACC,IAAI,OAAO,cACX,IAAI,OAAO,WACX,cAAc,KAAK,KAAK,GACxB,KAAK,cACL,KAAK,WACL,WACA,cACA,aACA,KAAK,oBACP,EAAE,SACJ,mBACA,4BAA4B,YAAY,CAC1C;AAAA;AAAA,IAGF,WAAW,QAAQ,MAAM,UAAU,MAAM,MAAM,SAAS;AAAA,MACtD,WAAW,QAAQ,YAAW,KAAK,GAAG,GAAG,KAAK,KAAK,IAAI;AAAA,IACzD;AAAA,IACA,WAAW,QAAQ,MAAM,UAAU,MAAM,MAAM,SAAS;AAAA,MACtD,WACE,QACA,KAAK,UAAU,CAAC,KAAK,IAAI,OAAO,cAAc,KAAK,IAAI,OAAO,WAAW,KAAK,IAAI,MAAM,CAAC,GACzF,EAAE,QAAQ,KAAK,IAAI,QAAQ,QAAQ,KAAK,IAAI,QAAQ,QAAQ,KAAK,MAAM,OAAO,GAC9E,IACF;AAAA,IACF;AAAA,IAEA,MAAM,aAAa,CACjB,cACA,aACA,yBACS;AAAA,MACT,eACE,KAAK,GACF,MACC;AAAA;AAAA,sCAGF,EACC,IAAI,WAAW,cAAc,aAAa,oBAAoB,EAAE,SACnE,mBACA,4BAA4B,YAAY,CAC1C;AAAA;AAAA,IAEF,WAAW,QAAQ,MAAM,UAAU,MAAM,MAAM,SAAS;AAAA,MACtD,WAAW,QAAQ,YAAW,KAAK,GAAG,GAAG,KAAK,oBAAoB;AAAA,IACpE;AAAA,IACA,WAAW,QAAQ,MAAM,UAAU,MAAM,MAAM,SAAS;AAAA,MACtD,WACE,QACA,KAAK,UAAU,CAAC,KAAK,IAAI,OAAO,cAAc,KAAK,IAAI,OAAO,WAAW,KAAK,IAAI,MAAM,CAAC,GACzF,KAAK,oBACP;AAAA,IACF;AAAA;AAAA,EAGM,cAAc,CAAC,WAAmB,OAAuC;AAAA,IAC/E,WAAW,QAAQ,MAAM,UAAU,aAAa;AAAA,MAC9C,eACE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,aAKF,EACC,IACC,WACA,KAAK,IAAI,OAAO,cAChB,KAAK,IAAI,OAAO,WAChB,KAAK,IAAI,QACT,KAAK,IAAI,OAAO,cAChB,KAAK,IAAI,OAAO,WAChB,KAAK,SAAS,YAChB,EAAE,SACJ,mBACA,iBAAiB,YAAW,KAAK,GAAG,YACtC;AAAA,IACF;AAAA,IACA,WAAW,QAAQ,MAAM,UAAU,eAAe;AAAA,MAChD,eACE,KAAK,GACF,MACC;AAAA;AAAA,sDAGF,EACC,IACC,WACA,KAAK,IAAI,cACT,KAAK,IAAI,WACT,KAAK,SAAS,SACd,KAAK,SAAS,YAChB,EAAE,SACJ,mBACA,mBAAmB,cAAa,KAAK,GAAG,YAC1C;AAAA,IACF;AAAA,IACA,WAAW,QAAQ,MAAM,UAAU;AAAA,MAAe,KAAK,YAAY,WAAW,IAAI;AAAA,IAClF,WAAW,QAAQ,MAAM,UAAU;AAAA,MAAa,KAAK,UAAU,WAAW,IAAI;AAAA;AAAA,EAGxE,WAAW,CAAC,WAAmB,MAAuC;AAAA,IAC5E,QAAQ,KAAK,aAAa;AAAA,IAC1B,IAAI,CAAC,SAAS,QAAQ;AAAA,MACpB,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,aAMF,EACC,IACC,WACA,IAAI,IAAI,cACR,IAAI,IAAI,WACR,cAAc,IAAI,UAAU,GAC5B,IAAI,WACJ,IAAI,WACJ,IAAI,SACJ,IAAI,YACN;AAAA,QACF,OAAO,OAAO;AAAA,QACd,IAAI,wBAAwB,KAAK,GAAG;AAAA,UAClC,MAAM,kBAAkB,mBAAmB,cAAa,IAAI,GAAG,iBAAiB;AAAA,QAClF;AAAA,QACA,MAAM;AAAA;AAAA,MAER;AAAA,IACF;AAAA,IACA,eACE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IACC,cAAc,IAAI,UAAU,GAC5B,IAAI,WACJ,IAAI,WACJ,IAAI,SACJ,IAAI,cACJ,WACA,IAAI,IAAI,cACR,IAAI,IAAI,WACR,SAAS,SACT,SAAS,YACX,EAAE,SACJ,mBACA,mBAAmB,cAAa,IAAI,GAAG,YACzC;AAAA;AAAA,EAGM,SAAS,CAAC,WAAmB,MAAqC;AAAA,IACxE,QAAQ,KAAK,aAAa;AAAA,IAC1B,IAAI,CAAC,SAAS,QAAQ;AAAA,MACpB,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,aAMF,EACC,IACC,WACA,IAAI,IAAI,OAAO,cACf,IAAI,IAAI,OAAO,WACf,IAAI,IAAI,QACR,IAAI,IAAI,OAAO,cACf,IAAI,IAAI,OAAO,WACf,IAAI,eAAe,YAAY,OAAO,cAAc,IAAI,UAAU,GAClE,IAAI,WACJ,IAAI,WACJ,IAAI,YACN;AAAA,QACF,OAAO,OAAO;AAAA,QACd,IAAI,wBAAwB,KAAK,GAAG;AAAA,UAClC,MAAM,kBAAkB,iBAAiB,YAAW,IAAI,GAAG,iBAAiB;AAAA,QAC9E;AAAA,QACA,MAAM;AAAA;AAAA,MAER;AAAA,IACF;AAAA,IACA,eACE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IACC,IAAI,eAAe,YAAY,OAAO,cAAc,IAAI,UAAU,GAClE,IAAI,WACJ,IAAI,WACJ,IAAI,cACJ,WACA,IAAI,IAAI,OAAO,cACf,IAAI,IAAI,OAAO,WACf,IAAI,IAAI,QACR,IAAI,IAAI,OAAO,cACf,IAAI,IAAI,OAAO,WACf,SAAS,YACX,EAAE,SACJ,mBACA,iBAAiB,YAAW,IAAI,GAAG,YACrC;AAAA;AAAA,EAGM,eAAe,CAAC,WAAmB,OAAuC;AAAA,IAChF,WAAW,QAAQ,MAAM,WAAW,cAAc;AAAA,MAChD,QAAQ,OAAO,aAAa;AAAA,MAC5B,IAAI,SAAS,iBAAiB,MAAM;AAAA,QAClC,IAAI;AAAA,UACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,eAMF,EACC,IACC,WACA,MAAM,OAAO,OAAO,cACpB,MAAM,OAAO,OAAO,WACpB,MAAM,OAAO,YACb,cAAc,MAAM,KAAK,GACzB,MAAM,QAAQ,MACd,MAAM,IACN,MAAM,YACR;AAAA,UACF,OAAO,OAAO;AAAA,UACd,IAAI,wBAAwB,KAAK,GAAG;AAAA,YAClC,MAAM,IAAI,8BACR,oBACA,mBAAmB,kBAAkB,MAAM,QAAQ,MAAM,EAAE,YAC7D;AAAA,UACF;AAAA,UACA,MAAM;AAAA;AAAA,MAEV,EAAO;AAAA,QACL,eACE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,eAMF,EACC,IACC,cAAc,MAAM,KAAK,GACzB,MAAM,QAAQ,MACd,MAAM,cACN,WACA,MAAM,OAAO,OAAO,cACpB,MAAM,OAAO,OAAO,WACpB,MAAM,OAAO,YACb,MAAM,IACN,SAAS,YACX,EAAE,SACJ,oBACA,mBAAmB,kBAAkB,MAAM,QAAQ,MAAM,EAAE,YAC7D;AAAA;AAAA,IAEJ;AAAA;AAAA,EAGM,WAAW,CAAC,WAAmB,UAAkB,OAAuC;AAAA,IAC9F,MAAM,SAAS,KAAK,GAAG,MACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOF;AAAA,IACA,WAAW,QAAQ,MAAM,QAAQ;AAAA,MAC/B,gBAAgB,KAAK,aAAa,oBAAoB;AAAA,MACtD,gBAAgB,KAAK,WAAW,kBAAkB;AAAA,MAClD,IAAI;AAAA,QACF,OAAO,IACL,WACA,KAAK,SAAS,IACd,UACA,KAAK,SAAS,eACd,cAAc,KAAK,QAAQ,GAC3B,KAAK,aACL,KAAK,SACP;AAAA,QACA,OAAO,OAAO;AAAA,QACd,IAAI,wBAAwB,KAAK,GAAG;AAAA,UAClC,MAAM,kBAAkB,2BAA2B,KAAK,SAAS,MAAM;AAAA,QACzE;AAAA,QACA,MAAM;AAAA;AAAA,IAEV;AAAA;AAEJ;;;AJlZO,MAAM,qCAA+E;AAAA,EAKvE;AAAA,EAJF;AAAA,EACA;AAAA,EAEjB,WAAW,CACQ,IACjB,SACA;AAAA,IAFiB;AAAA,IAGjB,KAAK,WAAW,IAAI,8BAA8B,IAAI,OAAO;AAAA,IAC7D,KAAK,SAAS,IAAI,4BAA4B,EAAE;AAAA;AAAA,EAGlD,mBAAmB,CAAC,SAAiC,WAAmB,UAAyB;AAAA,IAC/F,MAAM,SAAS,KAAK,SAAS,QAAQ,OAAO;AAAA,IAC5C,IACE,OAAO,OAAO,OAAO,cAAc,aAClC,aAAa,aAAa,OAAO,OAAO,OAAO,OAAO,UACvD;AAAA,MACA,MAAM,IAAI,gCACR,kEACF;AAAA,IACF;AAAA;AAAA,OAGI,MAAK,CAAC,OAAmE;AAAA,IAC7E,4BAA4B,KAAK;AAAA,IACjC,MAAM,UAAU,KAAK,SAAS,OAAO,KAAK;AAAA,IAC1C,IAAI;AAAA,MACF,KAAK,mBAAmB,KAAK;AAAA,MAC7B,MAAM,SAAS,IAAI,iCAAiC,KAAK,IAAI,MAAM,OAAO,SAAS;AAAA,MACnF,WAAW,YAAY,MAAM,SAAS;AAAA,QACpC,KAAK,aAAa,UAAU,MAAM,OAAO,SAAS;AAAA,MACpD,WAAW,YAAY,MAAM,SAAS,SAAS;AAAA,QAC7C,6BAA6B,OAAO,wBAAwB,SAAS,GAAG,GAAG,QAAQ;AAAA,MACrF;AAAA,MACA,WAAW,YAAY,MAAM,SAAS,OAAO;AAAA,QAC3C,2BAA2B,OAAO,wBAAwB,SAAS,GAAG,GAAG,QAAQ;AAAA,MACnF;AAAA,MACA,MAAM,qBAAqB,OAAO,mBAAmB,MAAM,SAAS,UAAU;AAAA,MAC9E,YAAY,OAAO,aAAa,MAAM,SAAS,WAAW,QAAQ,GAAG;AAAA,QACnE,gCAAgC,mBAAmB,QAAQ,aAAa,QAAQ;AAAA,MAClF;AAAA,MACA,WAAW,YAAY,MAAM,SAAS,QAAQ;AAAA,QAC5C,MAAM,QAAQ,OAAO,WAAW,SAAS,QAAQ,SAAS,EAAE;AAAA,QAC5D,KAAK,OAAO,gBAAgB,UAAU,SAAS,cAAc;AAAA,UAC3D,MAAM,IAAI,8BACR,oBACA,mBAAmB,mBAAkB,SAAS,QAAQ,SAAS,EAAE,YACnE;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,QAAQ,cAAc;AAAA,MAC7B,OAAO,OAAO;AAAA,MACd,KAAK,SAAS,QAAQ,OAAO;AAAA,MAC7B,MAAM;AAAA;AAAA;AAAA,SAIH,WAAW,CAChB,OACyC;AAAA,IACzC,MAAM,UAAU,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,IACnD,eAAe,MAAM,QAAQ;AAAA,IAC7B,MAAM,SAAS,IAAI,iCAAiC,KAAK,IAAI,QAAQ,OAAO,OAAO,SAAS;AAAA,IAC5F,iBAAiB,WAAW,MAAM,UAAU;AAAA,MAC1C,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,MACnC,MAAM,UAAU,aAAa,QAAQ,SAAS,eAAc,gBAAgB;AAAA,MAC5E,SAAS,SAAS,EAAG,SAAS,QAAQ,QAAQ,UAAU,MAAM,UAAU;AAAA,QACtE,MAAM,OAAO,OAAO,aAAa,QAAQ,MAAM,QAAQ,SAAS,MAAM,QAAQ,CAAC;AAAA,QAC/E,MAAM,EAAE,SAAS,MAAM,OAAO,CAAC,GAAG,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,MAC/D;AAAA,MACA,MAAM,QAAQ,aAAa,QAAQ,OAAO,aAAY,cAAc;AAAA,MACpE,SAAS,SAAS,EAAG,SAAS,MAAM,QAAQ,UAAU,MAAM,UAAU;AAAA,QACpE,MAAM,OAAO,OAAO,WAAW,MAAM,MAAM,QAAQ,SAAS,MAAM,QAAQ,CAAC;AAAA,QAC3E,MAAM,EAAE,SAAS,CAAC,GAAG,OAAO,MAAM,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,MAC/D;AAAA,MACA,WAAW,QAAQ,OAAO,cAAc,QAAQ,iBAAiB,MAAM,QAAQ,GAAG;AAAA,QAChF,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,QACnC,MAAM;AAAA,UACJ,SAAS,CAAC;AAAA,UACV,OAAO,OAAO,WAAW,IAAI;AAAA,UAC7B,YAAY,CAAC;AAAA,UACb,QAAQ,CAAC;AAAA,QACX;AAAA,MACF;AAAA,MACA,MAAM,SAAS,aACb,QAAQ,YACR,CAAC,UACC,KAAK,UAAU,CAAC,MAAM,OAAO,cAAc,MAAM,OAAO,WAAW,MAAM,MAAM,CAAC,GAClF,CAAC,UAAU,kBAAiB,MAAM,QAAQ,MAAM,MAAM,CACxD;AAAA,MACA,SAAS,SAAS,EAAG,SAAS,OAAO,QAAQ,UAAU,MAAM,UAAU;AAAA,QACrE,MAAM;AAAA,UACJ,SAAS,CAAC;AAAA,UACV,OAAO,CAAC;AAAA,UACR,YAAY,OAAO,eAAe,OAAO,MAAM,QAAQ,SAAS,MAAM,QAAQ,CAAC;AAAA,UAC/E,QAAQ,CAAC;AAAA,QACX;AAAA,MACF;AAAA,MACA,MAAM,SAAS,aACb,QAAQ,QACR,CAAC,UAAU,mBAAkB,MAAM,QAAQ,MAAM,EAAE,GACnD,CAAC,UAAU,uBAAsB,MAAM,QAAQ,MAAM,EAAE,CACzD;AAAA,MACA,SAAS,SAAS,EAAG,SAAS,OAAO,QAAQ,UAAU,MAAM,UAAU;AAAA,QACrE,MAAM,OAAO,OAAO,YAAY,OAAO,MAAM,QAAQ,SAAS,MAAM,QAAQ,CAAC;AAAA,QAC7E,IAAI,KAAK,SAAS;AAAA,UAAG,MAAM,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,GAAG,YAAY,CAAC,GAAG,QAAQ,KAAK;AAAA,MACpF;AAAA,IACF;AAAA;AAAA,SAGK,4BAA4B,CACjC,OAC2C;AAAA,IAC3C,MAAM,UAAU,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,IACnD,eAAe,MAAM,QAAQ;AAAA,IAC7B,MAAM,cAAc,KAAK,mBAAmB,SAAS,KAAK;AAAA,IAC1D,MAAM,SAAS,IAAI,iCAAiC,KAAK,IAAI,QAAQ,OAAO,OAAO,SAAS;AAAA,IAC5F,IAAI,MAAM,eAAe,UAAU;AAAA,MACjC,IAAI,YAAY,mBAAmB,UAAU;AAAA,QAC3C,MAAM,IAAI,8BACR,0BACA,yDACF;AAAA,MACF;AAAA,MACA,IAAI,YAAY,qBAAqB;AAAA,QACnC,MAAM,IAAI,8BACR,mBACA,iEACF;AAAA,MACF;AAAA,MACA,YAAY,sBAAsB;AAAA,MAClC,WAAW,cAAc,OAAO,sBAAsB;AAAA,QACpD,WAAW,QAAQ;AAAA,QACnB,UAAU,YAAY;AAAA,QACtB,4BAA4B,YAAY;AAAA,QACxC,2BAA2B,YAAY;AAAA,QACvC,aAAa,YAAY;AAAA,QACzB,MAAM;AAAA,QACN,UAAU,MAAM;AAAA,MAClB,CAAC,GAAG;AAAA,QACF,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,QACnC,MAAM,OAAO,WAAW,IAAI,CAAC,aAAa;AAAA,UACxC,IAAI,SAAS,SAAS,UAAU;AAAA,YAC9B,oBAAmB,8CAA8C;AAAA,UACnE;AAAA,UACA,OAAO,SAAS;AAAA,SACjB;AAAA,QACD,MAAM,UAAU,OAAO,wBACrB,YAAY,UACZ,YAAY,4BACZ,IACF;AAAA,QACA,MAAM,EAAE,SAAS,OAAO,CAAC,EAAE;AAAA,MAC7B;AAAA,MACA,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,MACnC,YAAY,wBAAwB;AAAA,MACpC;AAAA,IACF;AAAA,IAEA,IAAI,YAAY,mBAAmB,YAAY,CAAC,YAAY,uBAAuB;AAAA,MACjF,MAAM,IAAI,8BACR,mBACA,iFACF;AAAA,IACF;AAAA,IACA,IAAI,YAAY,mBAAmB;AAAA,MACjC,MAAM,IAAI,8BACR,mBACA,+DACF;AAAA,IACF;AAAA,IACA,YAAY,oBAAoB;AAAA,IAChC,MAAM,qBAAqB;AAAA,MACzB,YAAY;AAAA,MACZ,GAAI,YAAY,4BAA4B,CAAC,YAAY,yBAAyB,IAAI,CAAC;AAAA,IACzF;AAAA,IACA,WAAW,cAAc,OAAO,sBAAsB;AAAA,MACpD,WAAW,QAAQ;AAAA,MACnB,UAAU,YAAY;AAAA,MACtB,4BAA4B,YAAY;AAAA,MACxC,2BAA2B,YAAY;AAAA,MACvC,aAAa,YAAY;AAAA,MACzB,MAAM;AAAA,MACN,UAAU,MAAM;AAAA,IAClB,CAAC,GAAG;AAAA,MACF,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,MACnC,MAAM,iBAAiB,WAAW,IAAI,CAAC,aAAa;AAAA,QAClD,IAAI,SAAS,SAAS,QAAQ;AAAA,UAC5B,oBAAmB,+CAA+C;AAAA,QACpE;AAAA,QACA,OAAO;AAAA,OACR;AAAA,MACD,MAAM,QAAQ,OAAO,sBACnB,YAAY,UACZ,YAAY,4BACZ,oBACA,gBACA,YAAY,WACd;AAAA,MACA,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM;AAAA,IAC7B;AAAA,IACA,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,IACnC,YAAY,sBAAsB;AAAA;AAAA,OAG9B,UAAS,CAAC,OAAqD;AAAA,IACnE,KAAK,SAAS,MAAM,KAAK;AAAA,IACzB,MAAM,qBAAqB;AAAA;AAAA,EAG7B,UAAU,CAAC,OAA+E;AAAA,IACxF,eAAe,MAAM,QAAQ;AAAA,IAC7B,OAAO,KAAK,SAAS,OAAO,KAAK;AAAA;AAAA,OAG7B,oBAAmB,CACvB,OACoD;AAAA,IACpD,MAAM,UAAU,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,IACnD,OAAO,KAAK,SAAS,oBAAoB,SAAS,MAAM,IAAI;AAAA;AAAA,OAGxD,WAAU,CAAC,OAAsD;AAAA,IACrE,MAAM,UAAU,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,IACnD,QAAQ,WAAW,QAAQ;AAAA,IAC3B,4BAA4B,MAAM,OAAO,MAAM;AAAA,IAC/C,MAAM,WAAW,KAAK,SAAS,qBAAqB,SAAS,MAAM,KAAK;AAAA,IACxE,KAAK,GAAG,IAAI,qCAAqC;AAAA,IACjD,IAAI;AAAA,MACF,KAAK,OAAO,MAAM,OAAO,WAAW,OAAO,IAAI,MAAM,KAAK;AAAA,MAC1D,KAAK,GAAG,IAAI,6CAA6C;AAAA,MACzD,KAAK,SAAS,oBAAoB,SAAS,QAAQ;AAAA,MACnD,OAAO,OAAO;AAAA,MACd,KAAK,GAAG,IAAI,iDAAiD;AAAA,MAC7D,KAAK,GAAG,IAAI,6CAA6C;AAAA,MACzD,MAAM;AAAA;AAAA,IAER,MAAM,qBAAqB;AAAA;AAAA,OAGvB,SAAQ,CAAC,OAA0E;AAAA,IACvF,MAAM,UAAU,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,IACnD,KAAK,mBAAmB,QAAQ,MAAM;AAAA,IACtC,MAAM,KAAK,mBAAmB,SAAS,KAAK;AAAA,IAC5C,WAAW,cAAc,MAAM,aAAa,mBAAmB;AAAA,MAC7D,KAAK,eAAe,SAAS,UAAU;AAAA,IACzC;AAAA,IACA,MAAM,SAAS,KAAK,aAAa,QAAQ,QAAQ,KAAK;AAAA,IACtD,KAAK,SAAS,QAAQ,OAAO;AAAA,IAC7B,OAAO,EAAE,QAAQ,OAAO;AAAA;AAAA,EAG1B,kBAAkB,GAAS;AAAA,IACzB,KAAK,SAAS,cAAc;AAAA;AAAA,EAGtB,kBAAkB,CACxB,SACA,OAC+D;AAAA,IAC/D,IAAI,QAAQ,aAAa;AAAA,MACvB,IACE,QAAQ,YAAY,aAAa,MAAM,OAAO,gBAC9C,QAAQ,YAAY,+BAA+B,MAAM,4BACzD;AAAA,QACA,MAAM,IAAI,8BACR,0BACA,iEACF;AAAA,MACF;AAAA,MACA,OAAO,QAAQ;AAAA,IACjB;AAAA,IACA,MAAM,YAAY,QAAQ,OAAO,OAAO;AAAA,IACxC,MAAM,YAAY,KAAK,UACrB,WACA,MAAM,OAAO,cACb,MAAM,0BACR;AAAA,IACA,IAAI,CAAC,aAAa,UAAU,WAAW,WAAW,UAAU,oBAAoB,MAAM;AAAA,MACpF,MAAM,IAAI,8BACR,0BACA,qCAAqC,MAAM,yDAC7C;AAAA,IACF;AAAA,IACA,0BAA0B,KAAK,IAAI;AAAA,MACjC;AAAA,MACA,UAAU,MAAM,OAAO;AAAA,MACvB,iBAAiB,UAAU;AAAA,MAC3B,gBAAgB,UAAU;AAAA,IAC5B,CAAC;AAAA,IACD,MAAM,WAAW,KAAK,gBAAgB,WAAW,MAAM,OAAO,YAAY;AAAA,IAC1E,IACE,UAAU,aAAa,iBACtB,aACE,SAAS,aAAa,UAAU,YAC/B,SAAS,oBAAoB,UAAU,kBAC3C;AAAA,MACA,MAAM,IAAI,8BACR,0BACA,gFACF;AAAA,IACF;AAAA,IACA,QAAQ,cAAc;AAAA,MACpB,UAAU,MAAM,OAAO;AAAA,MACvB,4BAA4B,MAAM;AAAA,MAClC,2BAA2B,UAAU,sBAAsB;AAAA,MAC3D,aAAa,UAAU,4BAA4B;AAAA,MACnD,gBAAgB,UAAU;AAAA,MAC1B,qBAAqB;AAAA,MACrB,uBAAuB;AAAA,MACvB,mBAAmB;AAAA,MACnB,qBAAqB;AAAA,IACvB;AAAA,IACA,OAAO,QAAQ;AAAA;AAAA,EAGT,kBAAkB,CAAC,QAAyC;AAAA,IAClE,MAAM,SAAS,cAAc,OAAO,OAAO,MAAM;AAAA,IACjD,MAAM,YAAY,KAAK,GACpB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAeF,EACC,IACC,OAAO,OAAO,IACd,OAAO,OAAO,gBACd,OAAO,OAAO,WACd,OAAO,OAAO,IACd,OAAO,OAAO,gBACd,OAAO,OACP,OAAO,MACP,OAAO,OACP,OAAO,cACP,OAAO,YACT;AAAA,IACF,IAAI,CAAC;AAAA,MAAW;AAAA,IAChB,IAAI,UAAU,cAAc,UAAU;AAAA,MACpC,MAAM,IAAI,8BACR,mBACA,6DACF;AAAA,IACF;AAAA,IACA,MAAM,IAAI,8BACR,eACA,UAAU,cAAc,OACpB,oBAAoB,OAAO,OAAO,wBAClC,0CACN;AAAA;AAAA,EAGM,YAAY,CAClB,UACA,WACM;AAAA,IACN,MAAM,SAAS,KAAK,gBAAgB,WAAW,SAAS,OAAO,YAAY;AAAA,IAC3E,KACG,QAAQ,sBAAsB,UAAU,SAAS,4BACjD,QAAQ,kBAAkB,UAAU,SAAS,cAC9C;AAAA,MACA,MAAM,IAAI,8BACR,oBACA,WAAW,SAAS,OAAO,wBAC7B;AAAA,IACF;AAAA;AAAA,OAGY,mBAAkB,CAC9B,SACA,OACe;AAAA,IACf,QAAQ,WAAW,QAAQ;AAAA,IAC3B,QAAQ,WAAW,MAAM;AAAA,IACzB,6CAA6C,SAAS,KAAK;AAAA,IAC3D,MAAM,aAAa,KAAK,SAAS,WAAW,OAAO;AAAA,IACnD,oCAAoC,SAAS,UAAU;AAAA,IACvD,KAAK,uBAAuB,OAAO;AAAA,IACnC,MAAM,qBAAqB;AAAA,IAC3B,MAAM,aAAa,WAAW;AAAA,IAC9B,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA,SAIF,EACC,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAKlC,IACE,OAAO,UAAU,cAChB,aAAa,MAAM,OAAO,YAAY,KAAK,OAAO,YAAY,aAAa,IAC5E;AAAA,MACA,oBAAmB,qDAAqD;AAAA,IAC1E;AAAA,IACA,MAAM,qBAAqB;AAAA,IAE3B,IAAI,OAAO,OAAO,SAAS,aAAa;AAAA,MACtC,MAAM,UAAU,KAAK,SAAS,iBAAiB,SAAS,OAAO,OAAO,UAAU;AAAA,MAChF,MAAM,qBAAqB;AAAA,MAC3B,IAAI,QAAQ,qBAAqB,OAAO,OAAO,YAAY;AAAA,QACzD,oBACE,2EACF;AAAA,MACF;AAAA,MACA,IAAI,OAAO,SAAS,eAAe,CAAC,WAAW,QAAQ,QAAQ,MAAM,GAAG;AAAA,QACtE,oBAAmB,+DAA+D;AAAA,MACpF;AAAA,IACF;AAAA,IACA,IAAI,OAAO,OAAO,SAAS,cAAc;AAAA,MACvC,IAAI,OAAO,SAAS;AAAA,QAAc;AAAA,MAClC,KAAK,SAAS,6BAA6B,OAAO;AAAA,MAClD,MAAM,qBAAqB;AAAA,MAC3B,MAAM,SAAS,KAAK,SAAS,iBAAiB,OAAO;AAAA,MACrD,MAAM,qBAAqB;AAAA,MAC3B,IAAI,CAAC,WAAW,OAAO,QAAQ,MAAM,GAAG;AAAA,QACtC,oBAAmB,gEAAgE;AAAA,MACrF;AAAA,IACF;AAAA;AAAA,EAGM,sBAAsB,CAAC,SAAkD;AAAA,IAC/E,MAAM,YAAY,KAAK,GACpB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAWW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SA4Bb,EACC,IAAI,QAAQ,IAAI,QAAQ,OAAO,OAAO,SAAS;AAAA,IAGlD,IAAI,WAAW,WAAW,aAAa;AAAA,MACrC,oBAAmB,4DAA4D;AAAA,IACjF;AAAA,IACA,IAAI,WAAW;AAAA,MACb,oBACE,iFACF;AAAA,IACF;AAAA;AAAA,EAGM,cAAc,CACpB,SACA,YACM;AAAA,IACN,QAAQ,WAAW,QAAQ;AAAA,IAC3B,kCAAkC,SAAS,UAAU;AAAA,IACrD,MAAM,YAAY,KAAK,UACrB,OAAO,WACP,WAAW,OAAO,cAClB,WAAW,iBACb;AAAA,IACA,IAAI,CAAC,aAAa,UAAU,WAAW,WAAW,UAAU,oBAAoB,MAAM;AAAA,MACpF,MAAM,IAAI,8BACR,0BACA,yDACF;AAAA,IACF;AAAA,IACA,0BAA0B,KAAK,IAAI;AAAA,MACjC,WAAW,OAAO;AAAA,MAClB,UAAU,WAAW,OAAO;AAAA,MAC5B,iBAAiB,WAAW,UAAU;AAAA,MACtC,gBAAgB,WAAW,UAAU;AAAA,IACvC,CAAC;AAAA,IACD,IACE,UAAU,sBAAsB,WAAW,UAAU,mBACrD,UAAU,oBAAoB,WAAW,UAAU,kBACnD,UAAU,oBAAoB,WAAW,kBACzC,UAAU,aAAa,WAAW,YAClC,UAAU,eAAe,WAAW,eAAe,aACnD,UAAU,uBAAuB,WAAW,eAAe,aAC3D,UAAU,+BAA+B,WAAW,eAAe,aACnE,UAAU,wBAAwB,WAAW,sBAC7C,UAAU,mBAAmB,WAAW,iBACxC,UAAU,sBAAsB,WAAW,oBAC3C,UAAU,aAAa,QACvB,WAAW,YAAY,UAAU,UACjC;AAAA,MACA,oBAAmB,gEAAgE;AAAA,IACrF;AAAA,IACA,KAAK,aAAa,WAAW,UAAU,OAAO,SAAS;AAAA,IACvD,oBAAoB,KAAK,IAAI,OAAO,WAAW,WAAW,UAAU;AAAA,IACpE,MAAM,WAAW,KAAK,gBAAgB,OAAO,WAAW,WAAW,OAAO,YAAY;AAAA,IACtF,IAAI,UAAU;AAAA,MACZ,6BACE;AAAA,QACE,WAAW,SAAS;AAAA,QACpB,WAAW,SAAS;AAAA,QACpB,WAAW,SAAS;AAAA,MACtB,GACA,WAAW,gBACX,mBACF;AAAA,MACA,IAAI,WAAW,YAAY,SAAS,YAAY;AAAA,QAC9C,oBAAmB,qEAAqE;AAAA,MAC1F;AAAA,MACA,eACE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,aAMF,EACC,IACC,WAAW,WACX,WAAW,WACX,OAAO,WACP,WAAW,OAAO,cAClB,SAAS,oBACT,WAAW,SAAS,YACtB,EAAE,SACJ,oBACA,WAAW,WAAW,OAAO,wBAC/B;AAAA,IACF;AAAA,IACA,eACE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IACC,WAAW,WACX,WAAW,cACX,WAAW,WACX,OAAO,WACP,WAAW,OAAO,cAClB,WAAW,mBACX,WAAW,UAAU,cACvB,EAAE,SACJ,0BACA,sCACF;AAAA;AAAA,EAGM,YAAY,CAClB,QACA,OACsB;AAAA,IACtB,QAAQ,WAAW;AAAA,IACnB,MAAM,SAAS,cAAc,OAAO,MAAM;AAAA,IAC1C,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAUF,EACC,IACC,OAAO,WACP,OAAO,IACP,OAAO,gBACP,OAAO,aACP,OAAO,aACP,OAAO,MACP,OAAO,OACP,OAAO,cACP,cAAc,OAAO,MAAM,GAC3B,OAAO,gBAAgB,YAAY,OAAO,cAAc,OAAO,WAAW,GAC1E,cAAc,OAAO,QAAQ,GAC7B,OAAO,kBACP,OAAO,sBAAsB,MAC7B,OAAO,iBAAiB,MACxB,cAAc,OAAO,MAAM,GAC3B,cAAc,MAAM,aAAa,MAAM,GACvC,OAAO,WACT;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,wBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,IAAI,8BACR,eACA,0CACF;AAAA,MACF;AAAA,MACA,MAAM;AAAA;AAAA,IAER,MAAM,MAAM,KAAK,GACd,MAAM,gEAAgE,EACtE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAClC,OAAO,aAAa,GAAG;AAAA;AAAA,EAGjB,eAAe,CAAC,WAAmB,UAAkD;AAAA,IAC3F,OAAO,KAAK,GACT,MACC;AAAA,sEAEF,EACC,IAAI,WAAW,QAAQ;AAAA;AAAA,EAGpB,SAAS,CACf,WACA,UACA,mBACgC;AAAA,IAChC,OAAO,KAAK,GACT,MACC;AAAA,2EAEF,EACC,IAAI,WAAW,UAAU,iBAAiB;AAAA;AAEjD;;;AKjuBA,iCAAS;AACT;AAAA,kCACE;AAAA,oCACA;AAAA;AAYF,0CAAS;AAUF,MAAM,4BAA6D;AAAA,EAErD;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,IACA,kBACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,OAGb,MAAK,CAAC,OAA+E;AAAA,IACzF,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,4BAA4B;AAAA,MAC5D,sBAAsB,MAAM,OAAO,uBAAuB;AAAA,MAC1D,MAAM,MAAM,gBAAgB,MAAM,KAAK,4BAA4B;AAAA,MACnE,MAAM,cAAc,gBAAgB,MAAM,gBAAgB,8BAA8B;AAAA,MACxF,eAAe,MAAM,SAAS,0BAA0B;AAAA,MACxD,IAAI,eAAe,KAAK;AAAA,QACtB,MAAM,IAAI,gCACR,iEACF;AAAA,MACF;AAAA,MAIA,MAAM,WAAW,KAAK,GACnB,MACC;AAAA;AAAA;AAAA;AAAA,mBAKF,EACC,IAAI,MAAM,WAAW,MAAM,KAAK,MAAM,KAAK,MAAM,QAAQ,CAAC;AAAA,MAC7D,IAAI,SAAS,WAAW;AAAA,QAAG,OAAO,CAAC;AAAA,MACnC,MAAM,WACJ,SAAS,UAAU,MAAM,QACrB,WACC,KAAK,GACH,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,yBAMF,EACC,IAAI,MAAM,WAAW,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK;AAAA,MAC/D,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IACC,MAAM,SACN,MAAM,gBACN,KAAK,UAAU,SAAS,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,CACjD;AAAA,MACF,OAAO,KACJ,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC,EAC9B,KACC,CAAC,MAAM,UACL,KAAK,UAAU,cAAc,MAAM,SAAS,KAC5C,KAAK,SAAS,GAAG,cAAc,MAAM,SAAS,EAAE,CACpD,EACC,IAAI,CAAC,WAAW;AAAA,QACf,IAAI,OAAO,YAAY,QAAQ,OAAO,mBAAmB,MAAM;AAAA,UAC7D,MAAM,IAAI,8BACR,gBACA,mDACF;AAAA,QACF;AAAA,QACA,OAAO,KAAK,QAAQ,SAAS,OAAO,SAAS,gBAAgB,OAAO,eAAe;AAAA,OACpF;AAAA,KACJ;AAAA;AAAA,OAGG,cAAa,CAAC,OAAwD;AAAA,IAC1E,MAAM,KAAK,iBAAiB,MAAM;AAAA,MAChC,iBAAiB,KAAK;AAAA,MACtB,gBAAgB,MAAM,aAAa,6BAA6B;AAAA,MAChE,MAAM,MAAM,iBAAiB,MAAM,GAAG;AAAA,MACtC,MAAM,UAAU,KAAK,GAClB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAiBF,EACC,IACC,KAAK,UAAU,GAAG,GAClB,MAAM,WACN,MAAM,SACN,IAAI,QACJ,MAAM,aACN,MAAM,WACN,MAAM,OACR,EAAE;AAAA,MACJ,IAAI,YAAY,IAAI;AAAA,QAAQ,MAAM,cAAc;AAAA,KACjD;AAAA;AAAA,OAGG,WAAU,CAAC,OAA0D;AAAA,IACzE,MAAM,KAAK,iBAAiB,MAAM;AAAA,MAChC,iBAAiB,KAAK;AAAA,MACtB,gBAAgB,MAAM,aAAa,6BAA6B;AAAA,MAChE,MAAM,MAAM,iBAAiB,MAAM,GAAG;AAAA,MACtC,MAAM,UACJ,MAAM,YAAY,YACd,OACA,sBAAqB,MAAM,SAAS,8BAA6B;AAAA,MACvE,MAAM,UAAU,KAAK,GAClB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAkBF,EACC,IACC,KAAK,UAAU,GAAG,GAClB,MAAM,WACN,MAAM,SACN,IAAI,QACJ,MAAM,aACN,SACA,MAAM,WACN,MAAM,OACR,EAAE;AAAA,MACJ,IAAI,YAAY,IAAI;AAAA,QAAQ,MAAM,cAAc;AAAA,KACjD;AAAA;AAAA,OAGG,eAAc,CAAC,OAA2D;AAAA,IAC9E,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,4BAA4B;AAAA,MAC5D,sBAAsB,MAAM,OAAO,uBAAuB;AAAA,MAC1D,gBAAgB,MAAM,iBAAiB,8BAA8B;AAAA,MACrE,OAAO,KAAK,GACT,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WASF,EACC,IAAI,MAAM,WAAW,MAAM,iBAAiB,MAAM,KAAK,EAAE;AAAA,KAC7D;AAAA;AAAA,OAGG,UAAS,CAAC,OAAqE;AAAA,IACnF,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,4BAA4B;AAAA,MAC5D,MAAM,UAAU,KAAK,GAClB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAQF,EACC,IAAI,MAAM,SAAS;AAAA,MAMtB,OAAO;AAAA,QACL,cAAc,QAAQ;AAAA,QACtB,iBAAiB,QAAQ;AAAA,QACzB,eAAe,QAAQ,kBAAkB;AAAA,QACzC,aAAa,QAAQ;AAAA,MACvB;AAAA,KACD;AAAA;AAEL;AAEA,SAAS,gBAAgB,CAAC,KAAkC;AAAA,EAC1D,MAAM,OAAO,IAAI;AAAA,EACjB,WAAW,MAAM,KAAK;AAAA,IACpB,eAAe,IAAI,0BAA0B;AAAA,IAC7C,IAAI,KAAK,IAAI,EAAE,GAAG;AAAA,MAChB,MAAM,IAAI,gCAA+B,8CAA8C,MAAM;AAAA,IAC/F;AAAA,IACA,KAAK,IAAI,EAAE;AAAA,EACb;AAAA,EACA,OAAO,CAAC,GAAG,IAAI;AAAA;AAGjB,SAAS,gBAAgB,CAAC,OAIjB;AAAA,EACP,eAAe,MAAM,WAAW,4BAA4B;AAAA,EAC5D,eAAe,MAAM,SAAS,0BAA0B;AAAA;AAG1D,SAAS,aAAa,GAAiC;AAAA,EACrD,OAAO,IAAI,8BAA6B,gBAAgB,uCAAuC;AAAA;;;AClQjG,2CAAS;AACT;AAAA,4BACE;AAAA,mCACA;AAAA,yBACA;AAAA;AAAA,+BAEA;AAAA,yBACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACIK,SAAS,4BAA4B,CAC1C,IACA,OAC6C;AAAA,EAC7C,IAAI,YAAY,MAAM;AAAA,EACtB,IAAI,cAAc;AAAA,EAClB,IAAI,0BAA0B;AAAA,EAC9B,MAAM,gBAAgB,GAAG,MAAM;AAAA;AAAA;AAAA;AAAA,GAI9B;AAAA,EACD,MAAM,aAAa,GAAG,MAAM;AAAA;AAAA;AAAA,wCAGU;AAAA,EACtC,MAAM,cAAc,GAAG,MAAM;AAAA,uEACwC;AAAA,EACrE,MAAM,iBAAiB,GAAG,MACxB,4EACF;AAAA,EACA,OAAO,YAAY,GAAG;AAAA,IACpB,MAAM,YAAY,cAAc,IAAI,MAAM,SAAS;AAAA,IACnD,IAAI,CAAC;AAAA,MAAW;AAAA,IAChB,MAAM,OAAO,WAAW,IAAI,UAAU,YAAY,SAAS,EAAE;AAAA,IAC7D,eAAe;AAAA,IACf,aAAa;AAAA,IACb,IAAI,cAAc;AAAA,MAAG;AAAA,IACrB,MAAM,QAAQ,YAAY,IAAI,UAAU,YAAY,SAAS,EAAE;AAAA,IAC/D,eAAe;AAAA,IACf,aAAa;AAAA,IACb,IAAI,cAAc;AAAA,MAAG;AAAA,IACrB,MAAM,WAAW,eAAe,IAAI,UAAU,UAAU,EAAE;AAAA,IAC1D,IAAI,aAAa;AAAA,MAAG;AAAA,IACpB,2BAA2B;AAAA,IAC3B,aAAa;AAAA,EACf;AAAA,EACA,OAAO,EAAE,aAAa,wBAAwB;AAAA;AAGzC,SAAS,qBAAqB,CACnC,IACA,OAC6C;AAAA,EAC7C,IAAI,YAAY,MAAM;AAAA,EACtB,MAAM,UAAU;AAAA,EAChB,IAAI,cAAc,GACf,MAAM;AAAA;AAAA;AAAA;AAAA,YAIC;AAAA;AAAA;AAAA,IAGR,EACC,IAAI,MAAM,WAAW,MAAM,gBAAgB,SAAS,EAAE;AAAA,EACzD,aAAa;AAAA,EACb,IAAI,YAAY,GAAG;AAAA,IACjB,MAAM,UAAU,GACb,MAAM;AAAA;AAAA;AAAA,cAGC;AAAA;AAAA;AAAA,MAGR,EACC,IAAI,MAAM,WAAW,MAAM,gBAAgB,SAAS,EAAE;AAAA,IACzD,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AAAA,EACA,MAAM,0BACJ,cAAc,IACV,IACA,GACG,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMb,EACO,IAAI,MAAM,WAAW,MAAM,gBAAgB,SAAS,EAAE;AAAA,EAC/D,OAAO,EAAE,aAAa,wBAAwB;AAAA;;;ADnCzC,MAAM,4BAA6D;AAAA,EAErD;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,IACA,kBACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,OAGb,qBAAoB,CACxB,OAC+B;AAAA,IAC/B,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,iBAAiB,KAAK;AAAA,MACtB,KAAK,gBAAgB,OAAO,8BAA8B,KAAK,CAAC;AAAA,MAChE,MAAM,WAAW,KAAK,YACpB,MAAM,WACN,MAAM,OAAO,cACb,MAAM,iBACR;AAAA,MACA,IAAI,UAAU;AAAA,QACZ,IAAI,uBAAuB,aAAa,QAAQ,GAAG,KAAK;AAAA,UAAG,OAAO,aAAa,QAAQ;AAAA,QACvF,MAAM,eACJ,2BAA2B,MAAM,qEACnC;AAAA,MACF;AAAA,MAEA,MAAM,YAAY,KAAK,GACpB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IAAI,MAAM,WAAW,MAAM,UAAU,eAAe;AAAA,MACvD,IAAI,WAAW;AAAA,QACb,MAAM,eACJ,mBAAmB,MAAM,UAAU,uGACrC;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAWF,EACC,IACC,MAAM,WACN,MAAM,OAAO,cACb,MAAM,mBACN,MAAM,UAAU,iBAChB,MAAM,gBACN,MAAM,UAAU,gBAChB,MAAM,eAAe,WACrB,MAAM,eAAe,WACrB,MAAM,eAAe,WACrB,MAAM,oBACN,MAAM,eACN,MAAM,kBACN,MAAM,WACN,MAAM,WACN,MAAM,MAAM,qBAAqB,MACjC,MAAM,MAAM,gBAAgB,IAC9B;AAAA,MACF,OAAO,aACL,KAAK,gBAAgB,MAAM,WAAW,MAAM,OAAO,cAAc,MAAM,iBAAiB,CAC1F;AAAA,KACD;AAAA;AAAA,OAGG,UAAS,CAAC,OAA6D;AAAA,IAC3E,MAAM,SAAS,MAAM,KAAK,iBAAiB,MAAM;AAAA,MAC/C,oBAAoB,KAAK;AAAA,MACzB,KAAK,gBAAgB,KAAK;AAAA,MAC1B,MAAM,WAAW,KAAK,gBACpB,MAAM,WACN,MAAM,OAAO,cACb,MAAM,iBACR;AAAA,MACA,2BAA2B,aAAa,QAAQ,GAAG,MAAM,SAAS;AAAA,MAClE,IAAI,SAAS,WAAW,WAAW;AAAA,QACjC,MAAM,eACJ,2BAA2B,MAAM,0BAA0B,SAAS,iCACtE;AAAA,MACF;AAAA,MAEA,MAAM,OAAO,gBAAgB,SAAS,iBAAiB,MAAM,IAAI;AAAA,MACjE,MAAM,WAAW,KAAK,cAAc,UAAU,IAAI;AAAA,MAClD,QAAQ,SAAS,cAAc,yBAAyB,MAAM,QAAQ;AAAA,MACtE,iBAAiB,KAAK,IAAI,UAAU,KAAK;AAAA,MACzC,KAAK,gBAAgB,UAAU,OAAO;AAAA,MACtC,OAAO,EAAE,UAAU,QAAQ,QAAQ,UAAU;AAAA,KAC9C;AAAA,IACD,MAAM,qBAAqB;AAAA,IAC3B,OAAO;AAAA;AAAA,OAGH,UAAS,CAAC,OAA2E;AAAA,IACzF,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,oBAAoB,KAAK;AAAA,MACzB,gBAAgB,MAAM,SAAS,kBAAkB,IAAI;AAAA,MACrD,yBAAyB,MAAM,WAAW,mBAAmB;AAAA,MAC7D,yBAAyB,MAAM,gBAAgB,wBAAwB;AAAA,MACvE,KAAK,gBAAgB,KAAK;AAAA,MAC1B,MAAM,WAAW,KAAK,gBACpB,MAAM,WACN,MAAM,OAAO,cACb,MAAM,iBACR;AAAA,MACA,2BAA2B,aAAa,QAAQ,GAAG,MAAM,SAAS;AAAA,MAClE,IAAI,SAAS,WAAW,SAAS;AAAA,QAC/B,IACE,SAAS,eAAe,MAAM,aAC9B,SAAS,oBAAoB,MAAM,kBACnC,SAAS,aAAa,MAAM,SAC5B;AAAA,UACA,OAAO,aAAa,QAAQ;AAAA,QAC9B;AAAA,QACA,MAAM,eACJ,2BAA2B,MAAM,oEACnC;AAAA,MACF;AAAA,MACA,IAAI,SAAS,WAAW,WAAW;AAAA,QACjC,MAAM,eACJ,2BAA2B,MAAM,8CAA8C,SAAS,qBAC1F;AAAA,MACF;AAAA,MACA,IAAI,MAAM,UAAU,SAAS,YAAY;AAAA,QACvC,MAAM,IAAI,gCAA+B,iDAAiD;AAAA,MAC5F;AAAA,MACA,KAAK,iBAAiB,UAAU,MAAM,WAAW,MAAM,cAAc;AAAA,MACrE,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,WAMF,EACC,IACC,MAAM,WACN,MAAM,gBACN,MAAM,SACN,MAAM,SACN,MAAM,WACN,MAAM,OAAO,cACb,MAAM,mBACN,MAAM,UAAU,cAClB;AAAA,MACF,IAAI,OAAO,YAAY,GAAG;AAAA,QACxB,MAAM,eAAe,2BAA2B,MAAM,6BAA6B;AAAA,MACrF;AAAA,MACA,OAAO,aACL,KAAK,gBAAgB,MAAM,WAAW,MAAM,OAAO,cAAc,MAAM,iBAAiB,CAC1F;AAAA,KACD;AAAA;AAAA,OAGG,UAAS,CAAC,OAA2E;AAAA,IACzF,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,uBAAuB,KAAK;AAAA,MAC5B,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA,WAIF,EACC,IAAI,MAAM,WAAW,MAAM,OAAO,YAAY;AAAA,MACjD,OAAO,MAAM,aAAa,GAAG,IAAI;AAAA,KAClC;AAAA;AAAA,OAGG,MAAK,CACT,OAC8C;AAAA,IAC9C,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,uBAAuB,KAAK;AAAA,MAC5B,wBAAwB,MAAM,UAAU,iBAAiB,MAAM,UAAU,cAAc;AAAA,MACvF,gBAAgB,MAAM,WAAW,oBAAoB,IAAI;AAAA,MACzD,KAAK,gBAAgB,KAAK;AAAA,MAC1B,MAAM,YAAY,KAAK,iBAAiB,KAAK;AAAA,MAC7C,IAAI,CAAC;AAAA,QAAW,OAAO;AAAA,MAEvB,MAAM,UAAU,KAAK,GAClB,MACC;AAAA;AAAA;AAAA;AAAA,WAKF,EACC,IACC,MAAM,UAAU,gBAChB,MAAM,WACN,UAAU,YACV,UAAU,WACV,UAAU,kBACZ,EAAE;AAAA,MACJ,IAAI,YAAY,GAAG;AAAA,QACjB,MAAM,eAAe,2BAA2B,UAAU,8BAA8B;AAAA,MAC1F;AAAA,MACA,MAAM,UAAU,KAAK,gBACnB,UAAU,YACV,UAAU,WACV,UAAU,kBACZ;AAAA,MACA,OAAO;AAAA,QACL,QAAQ,aAAa,OAAO;AAAA,QAC5B,sBACE,QAAQ,WAAW,UAAU,OAAO,QAAQ,UAAU,IAAI,KAAK,kBAAkB,OAAO;AAAA,MAC5F;AAAA,KACD;AAAA;AAAA,OAKG,QAAO,CAAC,OAAgF;AAAA,IAC5F,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,uBAAuB,KAAK;AAAA,MAC5B,wBAAwB,MAAM,UAAU,iBAAiB,MAAM,UAAU,cAAc;AAAA,MACvF,gBAAgB,MAAM,aAAa,sBAAsB,IAAI;AAAA,MAC7D,KAAK,gBAAgB,KAAK;AAAA,MAC1B,IAAI,MAAM,SAAS;AAAA,QAAa,OAAO,KAAK,iBAAiB,KAAK;AAAA,MAClE,MAAM,YAAY,KAAK,iBAAiB,KAAK;AAAA,MAC7C,OAAO,YAAY,KAAK,sBAAsB,WAAW,MAAM,WAAW,IAAI;AAAA,KAC/E;AAAA;AAAA,OAGG,gBAAe,CACnB,OACsD;AAAA,IACtD,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,oCAAoC;AAAA,MACpE,gBAAgB,MAAM,gBAAgB,kCAAkC,IAAI;AAAA,MAC5E,sBAAsB,MAAM,OAAO,+BAA+B;AAAA,MAClE,OAAO,sBAAsB,KAAK,IAAI,KAAK;AAAA,KAC5C;AAAA;AAAA,OAGG,eAAc,CAClB,OACsD;AAAA,IACtD,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,mCAAmC;AAAA,MACnE,sBAAsB,MAAM,OAAO,8BAA8B;AAAA,MACjE,OAAO,6BAA6B,KAAK,IAAI,KAAK;AAAA,KACnD;AAAA;AAAA,OAGG,kBAAiB,CACrB,OAC+C;AAAA,IAC/C,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,oCAAoC;AAAA,MACpE,MAAM,UAAU,KAAK,GAClB,MACC;AAAA;AAAA;AAAA;AAAA,WAKF,EACC,IAAI,MAAM,SAAS;AAAA,MAItB,OAAO;AAAA,QACL,OAAO,QAAQ;AAAA,QACf,kBAAkB,QAAQ;AAAA,MAC5B;AAAA,KACD;AAAA;AAAA,EAGK,gBAAgB,CACtB,OACsB;AAAA,IACtB,MAAM,WAAW,KAAK,gBACpB,MAAM,WACN,MAAM,OAAO,cACb,MAAM,iBACR;AAAA,IACA,IAAI,SAAS,WAAW,aAAa;AAAA,MACnC,IACE,SAAS,sBAAsB,MAAM,UAAU,mBAC/C,SAAS,gBAAgB,MAAM,aAC/B;AAAA,QACA,OAAO,aAAa,QAAQ;AAAA,MAC9B;AAAA,MACA,MAAM,eACJ,2BAA2B,MAAM,2EACnC;AAAA,IACF;AAAA,IACA,2BAA2B,aAAa,QAAQ,GAAG,MAAM,SAAS;AAAA,IAClE,OAAO,KAAK,sBAAsB,UAAU,MAAM,WAAW;AAAA;AAAA,EAIvD,gBAAgB,CAAC,OAIU;AAAA,IACjC,MAAM,aAAa,KAAK,GACrB,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IACC,MAAM,WACN,MAAM,OAAO,cACb,MAAM,UAAU,eAClB;AAAA,IACF,IAAI,WAAW,SAAS,GAAG;AAAA,MACzB,MAAM,eACJ,mBAAmB,MAAM,UAAU,oEACrC;AAAA,IACF;AAAA,IACA,OAAO,WAAW,MAAM;AAAA;AAAA,EAGlB,iBAAiB,CAAC,UAA2C;AAAA,IACnE,MAAM,OAAO,KAAK,GACf,MACC,wFACF,EACC,IAAI,SAAS,UAAU;AAAA,IAG1B,OAAO,MAAM,WAAW;AAAA;AAAA,EAGlB,qBAAqB,CAC3B,UACA,aACsB;AAAA,IACtB,IACE,cAAc,SAAS,cACtB,SAAS,aAAa,QAAQ,cAAc,SAAS,UACtD;AAAA,MACA,MAAM,IAAI,gCACR,iEACF;AAAA,IACF;AAAA,IACA,MAAM,UAAU,KAAK,GAClB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IACC,aACA,aACA,SAAS,YACT,SAAS,WACT,SAAS,kBACX,EAAE;AAAA,IACJ,IAAI,YAAY,GAAG;AAAA,MACjB,MAAM,eACJ,2BAA2B,SAAS,uDACtC;AAAA,IACF;AAAA,IAEA,OAAO,aACL,KAAK,gBAAgB,SAAS,YAAY,SAAS,WAAW,SAAS,kBAAkB,CAC3F;AAAA;AAAA,EAGM,gBAAgB,CACtB,UACA,WACA,gBACM;AAAA,IACN,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IAAI,SAAS,UAAU;AAAA,IAO1B,IACE,OAAO,eAAe,kBACtB,OAAO,UAAU,aACjB,OAAO,aAAa,aACnB,YAAY,MAAM,OAAO,gBAAgB,KAAK,OAAO,gBAAgB,YAAY,IAClF;AAAA,MACA,MAAM,IAAI,gCACR,mEACF;AAAA,IACF;AAAA,IACA,yBAAyB,KAAK,IAAI,QAAQ;AAAA,IAE1C,MAAM,UAAU,KAAK,GAClB,MACC,SAAS,oBAAoB,SACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAgBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAwBN,EACC,IAAI,SAAS,UAAU;AAAA,IAC1B,IAAI,SAAS;AAAA,MACX,MAAM,IAAI,gCACR,SAAS,oBAAoB,SACzB,8EACA,iHACN;AAAA,IACF;AAAA;AAAA,EAIM,aAAa,CACnB,UACA,MAC2B;AAAA,IAC3B,IAAI,KAAK,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAC/B,MAAM,WAAW,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;AAAA,IAC5D,MAAM,WAAW,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,cAAc,CAAC,CAAC;AAAA,IAEvE,MAAM,WAAW,KAAK,GACnB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAUW;AAAA;AAAA;AAAA;AAAA,SAKb,EACC,IACC,SAAS,YACT,KAAK,UAAU,QAAQ,GACvB,KAAK,UAAU,QAAQ,CACzB;AAAA,IACF,OAAO,SAAS,IAAI,CAAC,QAAQ,eAAe,gBAAgB,GAAG,CAAC,CAAC;AAAA;AAAA,EAG3D,eAAe,CACrB,UACA,MACM;AAAA,IACN,IAAI,KAAK,WAAW;AAAA,MAAG;AAAA,IACvB,MAAM,UAAU,KAAK,IAAI,GAAG,SAAS,UAAU;AAAA,MAC7C,MAAM,SAAS,cAAc,IAAI,SAAS;AAAA,MAC1C,OAAO;AAAA,QACL;AAAA,QACA,YAAY,IAAI,UAAU;AAAA,QAC1B,cAAc,OAAO;AAAA,QACrB,WAAW,OAAO;AAAA,QAClB,cAAc,OAAO;AAAA,QACrB,iBAAiB,OAAO;AAAA,QACxB,QAAQ,OAAO;AAAA,QACf,cAAc,OAAO;AAAA,QACrB,iBAAiB,OAAO;AAAA,QACxB,SAAS,uBAAuB,IAAI,SAAS;AAAA,MAC/C;AAAA,KACD;AAAA,IACD,MAAM,WAAW,KAAK,GACnB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAeF,EACC,IAAI,cAAc,OAAO,GAAG,SAAS,UAAU,EAAE;AAAA,IACpD,IAAI,aAAa,KAAK,QAAQ;AAAA,MAC5B,MAAM,eAAe,wDAAwD;AAAA,IAC/E;AAAA;AAAA,EAGM,eAAe,CACrB,OAKA,UACM;AAAA,IACN,0BAA0B,KAAK,IAAI;AAAA,MACjC,WAAW,MAAM;AAAA,MACjB,UAAU,MAAM,OAAO;AAAA,MACvB,iBAAiB,MAAM,UAAU;AAAA,MACjC,gBAAgB,MAAM,UAAU;AAAA,SAC5B,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,IACjC,CAAC;AAAA;AAAA,EAGK,WAAW,CACjB,WACA,UACA,mBACgC;AAAA,IAChC,OAAO,KAAK,GACT,MACC;AAAA;AAAA;AAAA,SAIF,EACC,IAAI,WAAW,UAAU,iBAAiB;AAAA;AAAA,EAGvC,eAAe,CACrB,WACA,UACA,mBACyB;AAAA,IACzB,MAAM,MAAM,KAAK,YAAY,WAAW,UAAU,iBAAiB;AAAA,IACnE,IAAI,CAAC;AAAA,MAAK,MAAM,eAAe,2BAA2B,oCAAoC;AAAA,IAC9F,OAAO;AAAA;AAEX;;;AE5oBA,6BAAS;AACT;AAAA;AAAA;AAAA;AAiBO,MAAM,4BAAqE;AAAA,EAE7D;AAAA,EACA;AAAA,EACA;AAAA,EAHnB,WAAW,CACQ,IACA,KACA,eACjB;AAAA,IAHiB;AAAA,IACA;AAAA,IACA;AAAA;AAAA,OAEb,SAAQ,CAAC,OAAiE;AAAA,IAC9E,KAAK,cAAc,MAAM,SAAS,MAAM,SAAS;AAAA,IACjD,WAAW,OAAO,MAAM;AAAA,MACtB,KAAK,GACF,MACC,mGACF,EACC,IAAI,MAAM,WAAW,IAAI,cAAc,IAAI,SAAS;AAAA,IACzD,MAAM,SACJ,KAAK,GAAG,MAAM;AAAA;AAAA,6RAEyQ;AAAA,IACzR,aAAa,YAAY,aAAa,MAAM;AAAA,MAC1C,OAAO,IACL,MAAM,WACN,QAAQ,IACR,QAAQ,IAAI,cACZ,QAAQ,IAAI,WACZ,QAAQ,SACR,WAAW,MACX,KAAK,UAAU,OAAO,GACtB,MAAM,aACN,MAAM,WACR;AAAA;AAAA,OAEE,SAAQ,CAAC,OAAiE;AAAA,IAC9E,KAAK,cAAc,MAAM,SAAS,MAAM,SAAS;AAAA,IACjD,MAAM,SAAS,KAAK,GAAG,MACrB,yNACF;AAAA,IACA,WAAW,SAAS,MAAM,SAAS;AAAA,MACjC,OAAO,IACL,MAAM,WACN,MAAM,IAAI,cACV,MAAM,IAAI,WACV,MAAM,SACN,MAAM,eACN,MAAM,iBACR;AAAA,IACF;AAAA;AAAA,OAGI,WAAU,CAAC,OAAmE;AAAA,IAClF,MAAM,KAAK,IAAI,MAAM;AAAA,MACnB,MAAM,SAAS,KAAK,GAAG,MACrB,mFACF;AAAA,MACA,WAAW,MAAM,MAAM;AAAA,QAAK,OAAO,IAAI,MAAM,gBAAgB,MAAM,WAAW,EAAE;AAAA,KACjF;AAAA;AAAA,OAEG,IAAG,CAAC,OAA4D;AAAA,IACpE,OAAO,KAAK,IAAI,MAAM;AAAA,MACpB,MAAM,MAAM,KAAK,GACd,MACC,gIACF,EACC,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAChC,OAAO,MAAM,OAAO,GAAG,IAAI;AAAA,KAC5B;AAAA;AAAA,OAEG,SAAQ,CAAC,OAAiE;AAAA,IAC9E,OAAO,KAAK,IAAI,MACd,KAAK,GACF,MAAiC;AAAA;AAAA,wDAEc,EAC/C,IAAI,MAAM,WAAW,MAAM,OAAO,EAClC,IAAI,MAAM,CACf;AAAA;AAAA,OAGI,eAAc,CAAC,OAAuE;AAAA,IAC1F,OAAO,KAAK,IAAI,MAAM;AAAA,MACpB,MAAM,MAAM,KAAK,GACd,MAAyD;AAAA;AAAA;AAAA,4DAGN,EACnD,IACC,MAAM,WACN,MAAM,IAAI,cACV,MAAM,IAAI,WACV,MAAM,SACN,MAAM,OACR;AAAA,MACF,OAAO,MAAM,OAAO,GAAG,IAAI;AAAA,KAC5B;AAAA;AAAA,OAGG,YAAW,CAAC,OAAoE;AAAA,IACpF,OAAO,KAAK,IAAI,MACd,KAAK,GAAG,YAAY,MAAM;AAAA,MACxB,MAAM,SAAS,KAAK,GAAG,MACrB,2EACF;AAAA,MACA,IACE,MAAM,cACN,MAAM,QAAQ,KACZ,CAAC,WAAW,OAAO,IAAI,MAAM,WAAW,OAAO,EAAE,GAAG,WAAW,OAAO,cACxE;AAAA,QAEA,OAAO;AAAA,MACT,MAAM,YAAY,KAAK,GAAG,MAAM;AAAA;AAAA,uDAEe;AAAA,MAC/C,WAAW,UAAU,MAAM;AAAA,QACzB,UAAU,IACR,OAAO,QACP,OAAO,aACP,OAAO,SAAS,KAAK,UAAU,OAAO,MAAM,IAAI,MAChD,OAAO,QAAQ,KAAK,UAAU,OAAO,KAAK,IAAI,MAC9C,MAAM,WACN,OAAO,IACP,OAAO,cACT;AAAA,MACF,OAAO;AAAA,KACR,EAAE,CACL;AAAA;AAAA,OAGI,QAAO,CAAC,OAAgE;AAAA,IAC5E,OAAO,KAAK,IAAI,MACd,KAAK,GACF,MACC,0MACF,EACC,IAAI,MAAM,WAAW,MAAM,KAAK,MAAM,KAAK,EAC3C,IAAI,MAAM,CACf;AAAA;AAAA,OAEI,OAAM,CAAC,OAA+D;AAAA,IAC1E,OAAO,KAAK,IACV,MACE,KAAK,GACF,MACC,kKACF,EACC,IACC,MAAM,QACN,MAAM,aACN,MAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,MAC9C,MAAM,QAAQ,KAAK,UAAU,MAAM,KAAK,IAAI,MAC5C,MAAM,WACN,MAAM,IACN,MAAM,cACR,EAAE,YAAY,CACpB;AAAA;AAAA,OAEI,OAAM,CAAC,OAA+D;AAAA,IAC1E,MAAM,KAAK,IAAI,MAAM;AAAA,MACnB,KAAK,GACF,MAAM,oEAAoE,EAC1E,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,KACjC;AAAA;AAEL;AACA,SAAS,MAAM,CAAC,KAAkC;AAAA,EAChD,MAAM,UAAU,KAAK,MAAM,IAAI,OAAO;AAAA,EACtC,OAAO;AAAA,OACF;AAAA,OACC,IAAI,WAAW,EAAE,SAAS,IAAI,SAAS,IAAI,CAAC;AAAA,IAChD,QAAQ,IAAI;AAAA,IACZ,aAAa,IAAI;AAAA,OACb,IAAI,cAAc,EAAE,QAAQ,KAAK,MAAM,IAAI,WAAW,EAAc,IAAI,CAAC;AAAA,OACzE,IAAI,QACJ;AAAA,MACE,OAAO,kBAAiB,IAAI,OAAO,6BAA6B;AAAA,IAClE,IACA,CAAC;AAAA,EACP;AAAA;;;ACjMF,yCAAS;AAiBF,MAAM,4BAA6D;AAAA,EAErD;AAAA,EACA;AAAA,EACA;AAAA,EAHnB,WAAW,CACQ,IACA,kBACA,eAKjB;AAAA,IAPiB;AAAA,IACA;AAAA,IACA;AAAA;AAAA,OAOb,KAAI,CACR,OACuC;AAAA,IACvC,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,OAAO,KAAK,GACf,MAAmD;AAAA;AAAA;AAAA;AAAA;AAAA,OAKrD,EACE,IAAI,MAAM,WAAW,MAAM,IAAI,cAAc,MAAM,IAAI,SAAS;AAAA,MACnE,OAAO,KAAK,IAAI,CAAC,SAAS;AAAA,QACxB,KAAK,KAAK,MAAM,IAAI;AAAA,QACpB,SAAS,IAAI;AAAA,QACb,eAAe,IAAI;AAAA,QACnB,QAAQ,KAAK,MAAM,IAAI,MAAM;AAAA,QAC7B,mBAAmB,IAAI;AAAA,QACvB,cAAc,IAAI;AAAA,MACpB,EAAE;AAAA,KACH;AAAA;AAAA,OAGG,UAAS,CACb,OACuC;AAAA,IACvC,IAAI,CAAC,MAAM,KAAK;AAAA,MAAQ,OAAO,CAAC;AAAA,IAChC,OAAO,KAAK,iBAAiB,MAAM;AAAA,MAEjC,MAAM,OAAO,KAAK,GACf,MAGC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAWH,EACE,IAAI,KAAK,UAAU,MAAM,IAAI,GAAG,MAAM,SAAS;AAAA,MAClD,OAAO,KAAK,IAAI,CAAC,SAAS;AAAA,QACxB,KAAK,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,WAAW;AAAA,QACnE,SAAS,IAAI;AAAA,QACb,eAAe,IAAI;AAAA,QACnB,QAAQ,KAAK,MAAM,IAAI,MAAM;AAAA,QAC7B,mBAAmB,IAAI;AAAA,QACvB,cAAc,IAAI;AAAA,MACpB,EAAE;AAAA,KACH;AAAA;AAAA,OAGG,YAAW,CAAC,OAA2E;AAAA,IAC3F,KAAK,cAAc,MAAM,SAAS,MAAM,SAAS;AAAA,IACjD,IAAI,CAAC,MAAM,QAAQ;AAAA,MAAQ;AAAA,IAC3B,QAAQ,YAAY,KAAK,GACtB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAQR,EACE,IAAI,KAAK,UAAU,MAAM,OAAO,GAAG,MAAM,SAAS;AAAA,IACrD,IAAI,YAAY,MAAM,QAAQ;AAAA,MAAQ,MAAM,eAAe;AAAA;AAAA,OAGvD,MAAK,CAAC,OAAqE;AAAA,IAC/E,QAAQ,UAAU;AAAA,IAClB,KAAK,cAAc,MAAM,SAAS,MAAM,WAAW,MAAM,YAAY;AAAA,IAErE,MAAM,YAAY,mBAAmB,MAAM,MAAM;AAAA,IACjD,MAAM,UACJ,MAAM,qBAAqB,OACvB,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAMV,EACI,IACC,MAAM,WACN,MAAM,IAAI,cACV,MAAM,IAAI,WACV,MAAM,SACN,MAAM,eACN,KAAK,UAAU,MAAM,MAAM,GAC3B,MAAM,mBACN,WACA,MAAM,YACR,EAAE,UACJ,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,SAKV,EACI,IACC,MAAM,eACN,KAAK,UAAU,MAAM,MAAM,GAC3B,MAAM,mBACN,WACA,MAAM,cACN,MAAM,WACN,MAAM,IAAI,cACV,MAAM,IAAI,WACV,MAAM,SACN,MAAM,gBACR,EAAE;AAAA,IACV,IAAI,YAAY;AAAA,MAAG,MAAM,eAAe;AAAA;AAAA,OAGpC,WAAU,CAAC,OAA0E;AAAA,IACzF,WAAW,SAAS,MAAM,SAAS;AAAA,MACjC,MAAM,KAAK,MAAM,EAAE,SAAS,MAAM,SAAS,WAAW,MAAM,cAAc,MAAM,CAAC;AAAA,IACnF;AAAA;AAAA,OAGI,OAAM,CAAC,OAAsE;AAAA,IACjF,KAAK,cAAc,MAAM,SAAS,MAAM,SAAS;AAAA,IACjD,QAAQ,YAAY,KAAK,GACtB,MAAM;AAAA;AAAA;AAAA;AAAA,KAIR,EACE,IACC,MAAM,WACN,MAAM,IAAI,cACV,MAAM,IAAI,WACV,MAAM,SACN,MAAM,gBACR;AAAA,IACF,IAAI,YAAY;AAAA,MAAG,MAAM,eAAe;AAAA;AAE5C;AAEA,SAAS,cAAc,GAAiC;AAAA,EACtD,OAAO,IAAI,8BACT,mBACA,uCACF;AAAA;;;ACxKK,MAAM,sBAAiD;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,WAAW,CAAC,OAIT;AAAA,IACD,KAAK,UAAU,IAAI,4BAA4B,MAAM,IAAI,MAAM,gBAAgB;AAAA,IAC/E,KAAK,UAAU,IAAI,4BAA4B,MAAM,IAAI,MAAM,gBAAgB;AAAA,IAC/E,KAAK,mBAAmB,IAAI,qCAC1B,MAAM,IACN,MAAM,kBACR;AAAA,IACA,KAAK,iBAAiB,IAAI,4BACxB,MAAM,IACN,MAAM,kBACN,CAAC,SAAS,cAAc,KAAK,iBAAiB,oBAAoB,SAAS,SAAS,CACtF;AAAA,IACA,KAAK,UAAU,IAAI,4BACjB,MAAM,IACN,MAAM,kBACN,CAAC,SAAS,WAAW,aACnB,KAAK,iBAAiB,oBAAoB,SAAS,WAAW,QAAQ,CAC1E;AAAA,IACA,KAAK,SAAS,IAAI,4BAA4B,MAAM,IAAI,MAAM,gBAAgB;AAAA;AAAA,EAGhF,kBAAkB,GAAS;AAAA,IACzB,KAAK,iBAAiB,mBAAmB;AAAA;AAE7C;;;AC/CA,6BAAS,2CAAkB;AAC3B;AACA;AAmBA;;;ACbO,SAAS,wBAA8B,CAC5C,OAQiB;AAAA,EACjB,MAAM,WAAW,CAAC,GAAG,IAAI,IAAI,MAAM,QAAQ,CAAC;AAAA,EAC5C,IAAI,SAAS,WAAW,GAAG;AAAA,IACzB,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,MAAM,eAAe,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,EACtD,MAAM,eAAe,MAAM,mBAAmB,YAAY,KAAK;AAAA,EAC/D,MAAM,aAAa,MAAM,mBAAmB,YAAY,CAAC,IAAI,CAAC,MAAM,cAAc;AAAA,EAClF,MAAM,cACJ,MAAM,cAAc,eACpB,MAAM,cAAc,mBACpB,MAAM,cAAc,oBAChB,oCACA;AAAA,EACN,MAAM,OAAO,MAAM,GAChB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAMuB,MAAM;AAAA,yBACV;AAAA;AAAA,iBAER,MAAM;AAAA,qCACc,MAAM,mBAAmB,gBAAgB;AAAA;AAAA;AAAA,OAI1E,EACC,IAAI,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU;AAAA,EAIlD,MAAM,kBAAkB,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,WAAW,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,EAE/E,OAAO,SAAS,QAAQ,CAAC,YAAY;AAAA,IACnC,MAAM,MAAM,gBAAgB,IAAI,OAAO;AAAA,IACvC,OAAO,MAAM,CAAC,GAAG,IAAI,CAAC;AAAA,GACvB;AAAA;;;ADZI,MAAM,yBAAuD;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,SAA0C;AAAA,IACpD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,KAAK,aAAa,QAAQ;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA;AAAA,OAGI,MAAK,CAAC,OAA0D;AAAA,IACpE,MAAM,WAAW,MAAM,YAAY,IAAI;AAAA,IACvC,MAAM,2BAA2B;AAAA,MAC/B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,YAAY,MAAM;AAAA,IACpB,CAAC;AAAA,IAED,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAWF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,aACN,MAAM,YACN,UACA,SAAS,YAAY,CACvB;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,OAAO,KAAK,2BAA2B,OAAO,QAAQ;AAAA,MACxD;AAAA,MAEA,MAAM;AAAA;AAAA,IAGR,MAAM,SAAS,MAAM,KAAK,QAAQ,EAAE,WAAW,MAAM,WAAW,IAAI,MAAM,GAAG,CAAC;AAAA,IAC9E,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,iBACR,6CAA6C,MAAM,oBAAoB,MAAM,aAC/E;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,OAGK,2BAA0B,CACtC,OACA,UAC4B;AAAA,IAC5B,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAChC,IACE,CAAC,YACD,CAAC,yCAAyC,uBAAuB,QAAQ,GAAG,KAAK,GACjF;AAAA,QACA,MAAM,IAAI,iBACR,8BAA8B,MAAM,mCAAmC,MAAM,aAC/E;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IAAI,UAAU,SAAS,YAAY,GAAG,MAAM,WAAW,MAAM,EAAE;AAAA,MAElE,MAAM,UAAU,KAAK,GAClB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAChC,OAAO,uBAAuB,OAAO;AAAA,KACtC,EAAE;AAAA;AAAA,OAGC,MAAK,CAAC,OAA0D;AAAA,IACpE,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA,OAKF,EACC,IACC,YACC,MAAM,aAAa,IAAI,MAAQ,YAAY,GAC5C,MAAM,WACN,MAAM,IACN,QACF;AAAA,IACF,IAAI,OAAO,UAAU,GAAG;AAAA,MACtB,MAAM,SAAS,MAAM,KAAK,QAAQ,EAAE,WAAW,MAAM,WAAW,IAAI,MAAM,GAAG,CAAC;AAAA,MAC9E,IAAI;AAAA,QAAQ,OAAO;AAAA,IACrB;AAAA,IAEA,MAAM,WAAW,MAAM,KAAK,QAAQ,EAAE,WAAW,MAAM,WAAW,IAAI,MAAM,GAAG,CAAC;AAAA,IAChF,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,iBACR,8BAA8B,MAAM,8BAA8B,MAAM,aAC1E;AAAA,IACF;AAAA,IACA,MAAM,IAAI,iBACR,8BAA8B,MAAM,iCAAiC,SAAS,UAChF;AAAA;AAAA,OAGI,OAAM,CAAC,OAA2D;AAAA,IACtE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,iBACR,8BAA8B,MAAM,8BAA8B,MAAM,aAC1E;AAAA,MACF;AAAA,MAEA,MAAM,iBACJ,MAAM,WAAW,YAAY,MAAM,MAAM,SAAS;AAAA,MACpD,IACG,kBAAkB,SAAS,WAAW,YACtC,CAAC,kBAAkB,SAAS,WAAW,WACxC;AAAA,QACA,MAAM,IAAI,iBACR,8BAA8B,MAAM,kCAAkC,SAAS,UACjF;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUF,EACC,IACC,MAAM,SACL,MAAM,cAAc,IAAI,MAAQ,YAAY,GAC7C,MAAM,WAAW,cAAe,MAAM,QAAQ,aAAa,OAAQ,MACnE,MAAM,WAAW,cAAe,MAAM,QAAQ,aAAa,OAAQ,MACnE,MAAM,WAAW,eAAe,MAAM,UAAU,YAC5C,OACA,sBAAqB,MAAM,OAAO,0BAA0B,GAChE,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,uBAAuB,OAAO;AAAA,KACtC,EAAE;AAAA;AAAA,OAGC,UAAS,CAAC,OAAkE;AAAA,IAChF,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,cAAc,KAAK,GACtB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,aAAa;AAAA,MAE3C,IAAI,CAAC,aAAa;AAAA,QAChB,MAAM,IAAI,iBACR,8BAA8B,MAAM,yCAAyC,MAAM,aACrF;AAAA,MACF;AAAA,MAEA,IAAI,YAAY,WAAW,WAAW;AAAA,QACpC,MAAM,IAAI,iBACR,8BAA8B,MAAM,+BAA+B,MAAM,iCAC3E;AAAA,MACF;AAAA,MAEA,IAAI,YAAY,gBAAgB,MAAM,YAAY;AAAA,QAChD,MAAM,IAAI,iBACR,mCAAmC,MAAM,iBAAiB,MAAM,4CAA4C,MAAM,4BAA4B,YAAY,eAC5J;AAAA,MACF;AAAA,MAEA,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,MAEzC,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAcF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,eACN,MAAM,YACN,MAAM,QACN,MAAM,WACN,MAAM,MACN,WACA,UAAU,YAAY,GACtB,4BAA4B,MAAM,MAAM,CAC1C;AAAA,QACF,OAAO,OAAO;AAAA,QACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,UAClC,MAAM,IAAI,iBACR,mCAAmC,MAAM,mCAAmC,MAAM,aACpF;AAAA,QACF;AAAA,QAEA,MAAM;AAAA;AAAA,MAGR,MAAM,MAAM,KAAK,GACd,MAAM,kEAAkE,EACxE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,KAAK;AAAA,QACR,MAAM,IAAI,iBACR,kDAAkD,MAAM,oBAAoB,MAAM,aACpF;AAAA,MACF;AAAA,MAEA,OAAO,2BAA2B,GAAG;AAAA,KACtC,EAAE;AAAA;AAAA,OAGC,WAAU,CAAC,OAAmE;AAAA,IAClF,iCAAiC,MAAM,aAAa,aAAa;AAAA,IAEjE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,kEAAkE,EACxE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,iBACR,mCAAmC,MAAM,8BAA8B,MAAM,aAC/E;AAAA,MACF;AAAA,MAEA,IAAI,SAAS,WAAW,WAAW;AAAA,QACjC,MAAM,IAAI,iBACR,mCAAmC,MAAM,oBAAoB,MAAM,iCACrE;AAAA,MACF;AAAA,MAEA,IAAI,MAAM,WAAW,eAAe,MAAM,OAAO,cAAc,SAAS,YAAY;AAAA,QAClF,MAAM,IAAI,iBACR,mCAAmC,MAAM,uBAAuB,MAAM,OAAO,8BAA8B,SAAS,cACtH;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUF,EACC,IACC,MAAM,SACL,MAAM,cAAc,IAAI,MAAQ,YAAY,GAC7C,MAAM,WAAW,cAAc,MAAM,OAAO,YAAY,MACxD,MAAM,eAAe,SAAS,gBAAgB,MAC9C,MAAM,WAAW,eAAe,MAAM,UAAU,YAC5C,OACA,sBAAqB,MAAM,OAAO,0BAA0B,GAChE,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,kEAAkE,EACxE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,2BAA2B,OAAO;AAAA,KAC1C,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAA8E;AAAA,IAC1F,MAAM,MAAM,KAAK,GACd,MAAM,6DAA6D,EACnE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,uBAAuB,GAAG,IAAI;AAAA;AAAA,OAGvC,KAAI,CAAC,OAA+D;AAAA,IACxE,IAAI,iBAAiB,KAAK,KAAK,MAAM,aAAa,WAAW,GAAG;AAAA,MAC9D,OAAO;AAAA,QACL,MAAM,CAAC;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,YAAY;AAAA,MACpB,aAAa,KAAK,iBAAiB;AAAA,MACnC,KAAK,KAAK,MAAM,UAAU;AAAA,IAC5B;AAAA,IAEA,IAAI,MAAM,aAAa;AAAA,MACrB,aAAa,KAAK,mBAAmB,MAAM,YAAY,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MACnF,KAAK,KAAK,GAAG,MAAM,WAAW;AAAA,IAChC;AAAA,IAEA,qBAAqB,cAAc,MAAM,OAAO,iCAAiC;AAAA,IAEjF,QAAQ,MAAM,OAAO,YAAY,aAAqC;AAAA,MACpE,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,sBAAsB;AAAA,MACrC;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAGI,wBAAuB,CAC3B,OACuC;AAAA,IACvC,MAAM,OAAO,yBAAiD;AAAA,MAC5D,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX,aAAa;AAAA,MACb,UAAU,MAAM;AAAA,MAChB,WAAW,MAAM;AAAA,MACjB,YAAY,CAAC,QAAQ,IAAI;AAAA,IAC3B,CAAC;AAAA,IAED,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,sBAAsB;AAAA,IACvC;AAAA;AAAA,OAGI,UAAS,CAAC,OAAuE;AAAA,IACrF,IAAI,iBAAiB,KAAK,GAAG;AAAA,MAC3B,OAAO;AAAA,QACL,OAAO,CAAC;AAAA,QACR,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,eAAe;AAAA,MACvB,aAAa,KAAK,qBAAqB;AAAA,MACvC,KAAK,KAAK,MAAM,aAAa;AAAA,IAC/B;AAAA,IAEA,IAAI,MAAM,YAAY;AAAA,MACpB,aAAa,KAAK,iBAAiB;AAAA,MACnC,KAAK,KAAK,MAAM,UAAU;AAAA,IAC5B;AAAA,IAEA,IAAI,MAAM,QAAQ;AAAA,MAChB,aAAa,KAAK,aAAa;AAAA,MAC/B,KAAK,KAAK,MAAM,MAAM;AAAA,IACxB;AAAA,IAEA,IAAI,MAAM,WAAW;AAAA,MACnB,aAAa,KAAK,gBAAgB;AAAA,MAClC,KAAK,KAAK,MAAM,SAAS;AAAA,IAC3B;AAAA,IAEA,qBAAqB,cAAc,MAAM,KAAK;AAAA,IAE9C,QAAQ,MAAM,OAAO,YAAY,aAAyC;AAAA,MACxE,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,OAAO;AAAA,MACL,OAAO,KAAK,IAAI,0BAA0B;AAAA,MAC1C;AAAA,MACA;AAAA,IACF;AAAA;AAAA,EAGF,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAE9C;AAEA,SAAS,2BAA2B,CAAC,MAA4C;AAAA,EAC/E,OAAO,KAAK,UAAU,IAAI;AAAA;AAG5B,SAAS,uBAAuB,CAAC,OAA6C;AAAA,EAC5E,OAAO,KAAK,MAAM,KAAK;AAAA;AAGzB,SAAS,sBAAsB,CAAC,KAAgD;AAAA,EAC9E,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,YAAY,IAAI;AAAA,IAChB,QAAQ,IAAI;AAAA,IACZ,UAAU,IAAI,KAAK,IAAI,SAAS;AAAA,IAChC,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,IACvD,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,QACE,IAAI,qBAAqB,IAAI,oBACzB;AAAA,MACE,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,IACjB,IACA;AAAA,IACN,OAAO,IAAI,UAAU,OAAO,YAAY,kBAAiB,IAAI,OAAO,0BAA0B;AAAA,EAChG;AAAA;AAGF,SAAS,0BAA0B,CAAC,KAAwD;AAAA,EAC1F,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,eAAe,IAAI;AAAA,IACnB,YAAY,IAAI;AAAA,IAChB,QAAQ,IAAI;AAAA,IACZ,WAAW,IAAI;AAAA,IACf,MAAM,IAAI;AAAA,IACV,QAAQ,IAAI;AAAA,IACZ,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,QAAQ,wBAAwB,IAAI,MAAM;AAAA,IAC1C,QAAQ,IAAI,oBACR;AAAA,MACE,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,IACjB,IACA;AAAA,IACJ,aAAa,IAAI,gBAAgB;AAAA,IACjC,OAAO,IAAI,UAAU,OAAO,YAAY,kBAAiB,IAAI,OAAO,0BAA0B;AAAA,EAChG;AAAA;AAGF,SAAS,gCAAgC,CAAC,OAA2B,WAAyB;AAAA,EAC5F,IAAI,UAAU,cAAc,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,IAAI;AAAA,IAClE,MAAM,IAAI,iBACR,6BAA6B,2CAC/B;AAAA,EACF;AAAA;;;AE1iBF;AACA,iCAAS;AACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqDA;AAmBO,MAAM,2BAA2D;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,SAA4C;AAAA,IACtD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,KAAK,aAAa,QAAQ;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA;AAAA,OAGI,MAAK,CAAC,OAA8D;AAAA,IACxE,8BAA8B,KAAK;AAAA,IACnC,MAAM,oCAAoC;AAAA,MACxC,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,cAAc,MAAM,SAAS;AAAA,MAC7B,WAAW,MAAM,SAAS,eAAe;AAAA,MACzC,kBAAkB,MAAM,SAAS,eAAe;AAAA,IAClD,CAAC;AAAA,IAED,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,KAAK,gCAAgC,KAAK;AAAA,MAC1C,MAAM,WAAW,KAAK,QAAQ,MAAM,WAAW,MAAM,EAAE;AAAA,MACvD,IAAI,UAAU;AAAA,QACZ,MAAM,WAAW,wBAAwB,QAAQ;AAAA,QACjD,IAAI,CAAC,2CAA2C,UAAU,KAAK,GAAG;AAAA,UAChE,MAAM,uBAAuB,KAAK;AAAA,QACpC;AAAA,QACA,MAAM,WAAW,MAAM,YAAY,IAAI;AAAA,QACvC,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAWF,EACC,IACC,SAAS,YAAY,GACrB,MAAM,mBAAmB,YAAY,OAAO,GAC5C,MAAM,mBAAmB,YAAY,OAAO,GAC5C,MAAM,mBAAmB,YAAY,OAAO,GAC5C,MAAM,WACN,MAAM,EACR;AAAA,QACF,IAAI,OAAO,YAAY;AAAA,UAAG,MAAM,uBAAuB,KAAK;AAAA,QAC5D,OAAO,yBAAyB,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,MAC5E;AAAA,MAEA,MAAM,SAAS,0BAA0B,KAAK;AAAA,MAC9C,IAAI;AAAA,QACF,KAAK,aAAa,MAAM;AAAA,QACxB,OAAO,OAAO;AAAA,QACd,IAAI,yBAAwB,KAAK;AAAA,UAAG,MAAM,uBAAuB,KAAK;AAAA,QACtE,MAAM;AAAA;AAAA,MAER,OAAO,yBAAyB,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,KAC3E;AAAA;AAAA,OAGG,eAAc,CAAC,OAAsE;AAAA,IACzF,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,8BAA8B,KAAK;AAAA,MAEnC,MAAM,mBAAmB,KAAK,GAC3B,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,SAAS,eAAe,WAC9B,MAAM,SAAS,eAAe,WAC9B,MAAM,SAAS,eAAe,SAChC;AAAA,MACF,IAAI,kBAAkB;AAAA,QACpB,MAAM,gCAAgC,MAAM,QAAQ;AAAA,MACtD;AAAA,MAEA,MAAM,WAAW,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,MAC1D,MAAM,iBAAiB,wBAAwB,QAAQ;AAAA,MACvD,MAAM,UAAU,yBAAyB,gBAAgB,KAAK,EAAE;AAAA,MAEhE,MAAM,iBAAiB,0BAA0B,SAAS,eAAe;AAAA,MACzE,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAUF,EACC,KACE,MAAM,aAAa,IAAI,MAAQ,YAAY,GAC5C,SACA,gBACA,MAAM,WACN,MAAM,IACN,SAAS,eACX;AAAA,MACF,IAAI,OAAO,YAAY;AAAA,QAAG,MAAM,4BAA4B,MAAM,EAAE;AAAA,MAEpE,OAAO,mBAAmB,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,KACrE;AAAA;AAAA,OAGG,YAAW,CAAC,OAAoE;AAAA,IACpF,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,WAAW,wBAAwB,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,MACnF,MAAM,SAAS,yBAAyB,UAAU,KAAK;AAAA,MACvD,IAAI,CAAC,OAAO,cAAc,CAAC,OAAO,OAAO;AAAA,QACvC,MAAM,IAAI,mBAAmB,gCAAgC,MAAM,qBAAqB;AAAA,MAC1F;AAAA,MACA,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA,WAKF,EACC,IACC,OAAO,WAAW,YAAY,GAC9B,sBAAqB,OAAO,OAAO,4BAA4B,GAC/D,MAAM,WACN,MAAM,EACR;AAAA,MACF,IAAI,OAAO,YAAY;AAAA,QAAG,MAAM,uBAAuB,KAAK;AAAA,MAC5D,OAAO,yBAAyB,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,KAC3E;AAAA;AAAA,OAGG,uBAAsB,CAC1B,OAC8B;AAAA,IAC9B,OAAO,yBAAyB,KAAK,gCAAgC,KAAK,CAAC;AAAA;AAAA,OAGvE,OAAM,CAAC,OAA+D;AAAA,IAC1E,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,cAAc,KAAK,gCAAgC,KAAK;AAAA,MAC9D,MAAM,WAAW,wBAAwB,WAAW;AAAA,MACpD,6CAA6C,UAAU,MAAM,QAAQ;AAAA,MACrE,MAAM,WAAW,2BAA2B,SAAS,UAAU,MAAM,QAAQ;AAAA,MAC7E,MAAM,SAAS,KAAK,eAAe,aAAa,UAAU,MAAM,cAAc;AAAA,MAC9E,IAAI,WAAW;AAAA,QAAG,MAAM,4BAA4B,MAAM,EAAE;AAAA,MAC5D,OAAO,yBAAyB,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,KAC3E;AAAA;AAAA,OAGG,qBAAoB,CACxB,OAC8B;AAAA,IAC9B,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,cAAc,KAAK,gCAAgC,KAAK;AAAA,MAC9D,MAAM,QAAQ,8BAA8B,wBAAwB,WAAW,GAAG,MAAM,KAAK;AAAA,MAC7F,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IACC,sBAAqB,OAAO,4BAA4B,GACxD,MAAM,WACN,MAAM,IACN,MAAM,cACR;AAAA,MACF,IAAI,OAAO,YAAY;AAAA,QAAG,MAAM,4BAA4B,MAAM,EAAE;AAAA,MACpE,OAAO,yBAAyB,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,KAC3E;AAAA;AAAA,OAGG,OAAM,CAAC,OAA+D;AAAA,IAC1E,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,cAAc,KAAK,gCAAgC,KAAK;AAAA,MAC9D,MAAM,OAAO,wBAAwB,wBAAwB,WAAW,GAAG,KAAK;AAAA,MAChF,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAaF,EACC,IACC,MAAM,QACN,KAAK,WAAW,YAAY,GAC5B,KAAK,SAAS,gBACd,KAAK,SAAS,mBACd,KAAK,SAAS,qBAAqB,MACnC,KAAK,iBAAiB,IAAI,YAAY,iBACtC,KAAK,UAAU,YACX,OACA,sBAAqB,KAAK,OAAO,4BAA4B,GACjE,MAAM,WACN,MAAM,IACN,MAAM,cACR;AAAA,MACF,IAAI,OAAO,YAAY;AAAA,QAAG,MAAM,4BAA4B,MAAM,EAAE;AAAA,MACpE,OAAO,yBAAyB,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,KAC3E;AAAA;AAAA,OAGG,2BAA0B,CAC9B,OACuC;AAAA,IACvC,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,WAAW,KAAK,gCAAgC,KAAK;AAAA,MAC3D,MAAM,UAAU,2BAA2B,wBAAwB,QAAQ,GAAG,KAAK;AAAA,MACnF,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAeF,EACC,IACC,QAAQ,WAAW,kBACnB,QAAQ,WAAW,eACnB,QAAQ,WAAW,iBAAiB,IAAI,GACxC,QAAQ,SAAS,gBACjB,QAAQ,SAAS,mBACjB,MAAM,WACN,MAAM,IACN,MAAM,gBACN,MAAM,YACR;AAAA,MACF,IAAI,OAAO,YAAY;AAAA,QAAG,MAAM,4BAA4B,MAAM,EAAE;AAAA,MACpE,OAAO,kCAAkC,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,KACpF;AAAA;AAAA,OAGG,oBAAmB,CACvB,OACuC;AAAA,IACvC,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,WAAW,KAAK,gCAAgC,KAAK;AAAA,MAC3D,MAAM,gBAAgB,8BACpB,8BAA8B,wBAAwB,QAAQ,CAAC,GAC/D,MAAM,aACR;AAAA,MACA,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUF,EACC,IACC,cAAc,cACd,cAAc,UACd,cAAc,cACd,cAAc,YAAY,YAAY,GACtC,MAAM,WACN,MAAM,IACN,MAAM,gBACN,cAAc,YAChB;AAAA,MACF,IAAI,OAAO,YAAY;AAAA,QAAG,MAAM,4BAA4B,MAAM,EAAE;AAAA,MACpE,OAAO,kCAAkC,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,KACpF;AAAA;AAAA,OAGG,QAAO,CAAC,QAAgF;AAAA,IAC5F,MAAM,MAAM,KAAK,QAAQ,OAAO,WAAW,OAAO,EAAE;AAAA,IACpD,OAAO,MAAM,yBAAyB,GAAG,IAAI;AAAA;AAAA,OAGzC,KAAI,CAAC,OAAmE;AAAA,IAC5E,4BAA4B,MAAM,WAAW,WAAW;AAAA,IAExD,IAAI,MAAM,YAAY,MAAM,SAAS,WAAW,GAAG;AAAA,MACjD,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IAC9C;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAA4B,CAAC,MAAM,SAAS;AAAA,IAElD,IAAI,MAAM,cAAc;AAAA,MACtB,aAAa,KAAK,mBAAmB;AAAA,MACrC,KAAK,KAAK,MAAM,YAAY;AAAA,IAC9B;AAAA,IACA,IAAI,MAAM,gBAAgB;AAAA,MACxB,aAAa,KAAK,qBAAqB;AAAA,MACvC,KAAK,KAAK,MAAM,cAAc;AAAA,IAChC;AAAA,IACA,IAAI,MAAM,WAAW;AAAA,MACnB,aAAa,KAAK,gBAAgB;AAAA,MAClC,KAAK,KAAK,MAAM,SAAS;AAAA,IAC3B;AAAA,IACA,IAAI,MAAM,kBAAkB;AAAA,MAC1B,aAAa,KAAK,wBAAwB;AAAA,MAC1C,KAAK,KAAK,MAAM,gBAAgB;AAAA,IAClC;AAAA,IACA,IAAI,MAAM,eAAe;AAAA,MACvB,IAAI,MAAM,cAAc,WAAW,GAAG;AAAA,QACpC,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,MAC9C;AAAA,MACA,MAAM,eAAe,MAAM,cAAc,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,MACjE,aAAa,KACX,uBAAuB,kBACrB,kCAAkC,kBAClC,kCAAkC,iBACtC;AAAA,MACA,KAAK,KAAK,GAAG,MAAM,eAAe,GAAG,MAAM,eAAe,GAAG,MAAM,aAAa;AAAA,IAClF;AAAA,IACA,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,cAAc,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,QAAQ;AAAA,IAC7B;AAAA,IACA,IAAI,MAAM,cAAc;AAAA,MACtB,aAAa,KAAK,sCAAsC;AAAA,MACxD,KAAK,KAAK,MAAM,aAAa,YAAY,CAAC;AAAA,IAC5C;AAAA,IACA,IAAI,MAAM,eAAe;AAAA,MACvB,aAAa,KAAK,sCAAsC;AAAA,MACxD,KAAK,KAAK,MAAM,cAAc,YAAY,CAAC;AAAA,IAC7C;AAAA,IAEA,MAAM,QAAQ,SAAS,aAAa,KAAK,OAAO;AAAA,IAChD,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ;AAAA,IAC9C,MAAM,SAAS,MAAM,UAAU;AAAA,IAC/B,MAAM,QAAQ,MAAM;AAAA,IAEpB,MAAM,WAAW,KAAK,GACnB,MAAM,iDAAiD,OAAO,EAC9D,IAAI,GAAG,IAAI;AAAA,IAEd,IAAI,QAAQ;AAAA;AAAA,QAER;AAAA,iDACyC,aAAa;AAAA;AAAA,IAE1D,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,IAE1B,IAAI,UAAU,WAAW;AAAA,MACvB,8BAA8B,OAAO,OAAO;AAAA,MAC5C,8BAA8B,QAAQ,QAAQ;AAAA,MAC9C,SAAS;AAAA,MACT,UAAU,KAAK,OAAO,MAAM;AAAA,IAC9B,EAAO,SAAI,SAAS,GAAG;AAAA,MACrB,8BAA8B,QAAQ,QAAQ;AAAA,MAC9C,SAAS;AAAA,MACT,UAAU,KAAK,MAAM;AAAA,IACvB;AAAA,IAEA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,IAClD,MAAM,OAAO,KAAK,IAAI,wBAAwB;AAAA,IAC9C,OAAO,EAAE,MAAM,SAAS,SAAS,KAAK,SAAS,SAAS,OAAO,OAAO,SAAS,MAAM;AAAA;AAAA,OAGjF,mBAAkB,CACtB,OACqC;AAAA,IACrC,MAAM,MAAM,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,IACrD,IAAI,IAAI,6BAA6B;AAAA,MAAe,OAAO;AAAA,IAG3D,MAAM,WAAW;AAAA,IACjB,MAAM,QAAQ,KAAK,GAChB,MACC;AAAA;AAAA;AAAA,6BAGqB,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA,SAKxD,EACC,IACC,MAAM,WACN,IAAI,eACJ,GAAG,UACH,IAAI,0BACN;AAAA,IACF,OAAO,QAAQ,yBAAyB,KAAK,IAAI;AAAA;AAAA,OAG7C,0BAAyB,CAC7B,OACyC;AAAA,IACzC,MAAM,OAAO,yBAAsC;AAAA,MACjD,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX,aAAa;AAAA,MACb,UAAU,MAAM;AAAA,MAChB,WAAW,MAAM;AAAA,MACjB,YAAY,CAAC,QAAQ,IAAI;AAAA,MACzB,gBAAgB;AAAA,IAClB,CAAC;AAAA,IACD,OAAO,EAAE,MAAM,KAAK,IAAI,wBAAwB,EAAE;AAAA;AAAA,EAGpD,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,+BAA+B,CAAC,OAAsC;AAAA,IAC5E,MAAM,WAAW,KAAK,GACnB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,SAAS,eAAe,WAC9B,MAAM,SAAS,eAAe,WAC9B,MAAM,SAAS,eAAe,SAChC;AAAA,IACF,IAAI;AAAA,MAAU,MAAM,gCAAgC,MAAM,QAAQ;AAAA;AAAA,EAG5D,YAAY,CAAC,QAAmC;AAAA,IACtD,MAAM,aAAa,OAAO;AAAA,IAC1B,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAcF,EACC,IACC,OAAO,WACP,OAAO,IACP,OAAO,aACP,OAAO,SAAS,cAChB,OAAO,SAAS,gBAChB,OAAO,SAAS,UAChB,OAAO,SAAS,eAAe,WAC/B,OAAO,SAAS,eAAe,WAC/B,OAAO,SAAS,eAAe,WAC/B,OAAO,SAAS,kBAChB,OAAO,SAAS,oBAChB,OAAO,SAAS,eAChB,kBAAkB,OAAO,SAAS,OAAO,OAAO,eAAe,MAC/D,wBAAwB,OAAO,SAAS,OAAO,OAAO,qBAAqB,MAC3E,wBAAwB,OAAO,SAAS,OAAO,OAAO,qBAAqB,MAC3E,OAAO,SAAS,YAAY,GAC5B,YAAY,kBAAkB,MAC9B,YAAY,oBAAoB,MAChC,YAAY,iBAAiB,MAC7B,eAAe,YAAY,OAAO,WAAW,iBAAiB,IAAI,CACpE;AAAA;AAAA,EAGI,cAAc,CACpB,UACA,UACA,gBACQ;AAAA,IACR,MAAM,OAAmC;AAAA,MACvC,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS,qBAAqB;AAAA,MAC9B,SAAS;AAAA,MACT,SAAS;AAAA,MACT;AAAA,IACF;AAAA,IACA,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OASF,EACC,IAAI,GAAG,IAAI;AAAA,IACd,OAAO,OAAO;AAAA;AAAA,EAGR,+BAA+B,CACrC,OACa;AAAA,IACb,MAAM,MAAM,KAAK,eAAe,MAAM,WAAW,MAAM,EAAE;AAAA,IACzD,2BAA2B,wBAAwB,GAAG,GAAG,KAAK;AAAA,IAC9D,OAAO;AAAA;AAAA,EAGD,cAAc,CAAC,WAAmB,IAAyB;AAAA,IACjE,MAAM,MAAM,KAAK,WAAW,WAAW,EAAE;AAAA,IACzC,2BAA2B,wBAAwB,GAAG,CAAC;AAAA,IACvD,OAAO;AAAA;AAAA,EAGD,OAAO,CAAC,WAAmB,IAAgC;AAAA,IACjE,OAAO,KAAK,GACT,MAAM,+DAA+D,EACrE,IAAI,WAAW,EAAE;AAAA;AAAA,EAGd,UAAU,CAAC,WAAmB,IAAyB;AAAA,IAC7D,4BAA4B,WAAW,WAAW;AAAA,IAClD,4BAA4B,IAAI,IAAI;AAAA,IACpC,MAAM,MAAM,KAAK,QAAQ,WAAW,EAAE;AAAA,IACtC,IAAI,CAAC;AAAA,MAAK,MAAM,sBAAsB,WAAW,EAAE;AAAA,IACnD,OAAO;AAAA;AAEX;AAEA,SAAS,yBAAyB,CAAC,UAAiC;AAAA,EAClE,IAAI,QAAQ,WAAW;AAAA,EACvB,OAAO,UAAU;AAAA,IAAU,QAAQ,WAAW;AAAA,EAC9C,OAAO;AAAA;AAGT,SAAS,wBAAwB,CAAC,KAAuC;AAAA,EACvE,OAAO,0BAA0B,wBAAwB,GAAG,CAAC;AAAA;AAG/D,SAAS,uBAAuB,CAAC,KAA6C;AAAA,EAC5E,MAAM,YAA0C;AAAA,IAC9C,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,cAAc,IAAI;AAAA,IAClB,gBAAgB,IAAI;AAAA,IACpB,UAAU,IAAI,4BAA4B;AAAA,IAC1C,WAAW,IAAI;AAAA,IACf,kBAAkB,IAAI;AAAA,IACtB,yBAAyB,IAAI,8BAA8B;AAAA,IAC3D,kBAAkB,IAAI,qBAAqB;AAAA,IAC3C,oBAAoB,IAAI,uBAAuB;AAAA,IAC/C,eAAe,IAAI,kBAAkB;AAAA,IACrC,cAAc,IAAI,kBAAkB;AAAA,IACpC,oBAAoB,IAAI,yBAAyB;AAAA,IACjD,oBAAoB,IAAI,yBAAyB;AAAA,IACjD,QAAQ,IAAI;AAAA,IACZ,UAAU,IAAI,KAAK,IAAI,SAAS;AAAA,IAChC,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,IACvD,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,SAAS,oBAAoB,IAAI,SAAS,SAAS;AAAA,IACnD,gBAAgB,IAAI,mBAAmB;AAAA,IACvC,gBAAgB,4BAA4B,IAAI,kBAAkB,gBAAgB;AAAA,IAClF,kBAAkB,4BAA4B,IAAI,oBAAoB,kBAAkB;AAAA,IACxF,eAAe,4BAA4B,IAAI,iBAAiB,eAAe;AAAA,IAC/E,gBAAgB,IAAI,oBAAoB,OAAO,YAAY,IAAI,oBAAoB;AAAA,IACnF,2BAA2B,IAAI,iCAAiC;AAAA,IAChE,uBAAuB,IAAI,4BAA4B;AAAA,IACvD,2BAA2B,4BACzB,IAAI,8BACJ,2BACF;AAAA,IACA,0BAA0B,IAAI,+BAC1B,IAAI,KAAK,IAAI,4BAA4B,IACzC;AAAA,IACJ,UAAU;AAAA,MACR,gBAAgB,oBAAoB,IAAI,kBAAkB,gBAAgB;AAAA,MAC1E,mBAAmB,oBAAoB,IAAI,qBAAqB,mBAAmB;AAAA,SAC/E,IAAI,uBAAuB,OAC3B,CAAC,IACD,EAAE,mBAAmB,oBAAoB,IAAI,qBAAqB,mBAAmB,EAAE;AAAA,IAC7F;AAAA,IACA,OAAO,IAAI,SAAS;AAAA,EACtB;AAAA,EACA,OAAO,qBAAqB,SAAS;AAAA;AAGvC,SAAS,kBAAkB,CAAC,KAAsC;AAAA,EAChE,OAAO,yBAAyB,wBAAwB,GAAG,CAAC;AAAA;AAG9D,SAAS,iCAAiC,CAAC,KAAgD;AAAA,EACzF,OAAO,8BAA8B,yBAAyB,GAAG,CAAC;AAAA;AAGpE,SAAS,2BAA2B,CAAC,OAAsB,WAAuC;AAAA,EAChG,OAAO,UAAU,OAAO,YAAY,oBAAoB,OAAO,SAAS;AAAA;AAG1E,SAAS,mBAAmB,CAAC,OAAe,WAA2B;AAAA,EACrE,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAAG;AAAA,IAC7C,MAAM,IAAI,mBACR,yCAAyC,+CAC3C;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,wBAAuB,CAAC,OAAyB;AAAA,EACxD,OAAO,iBAAiB,SAAS,MAAM,QAAQ,SAAS,0BAA0B;AAAA;AAuCpF,SAAS,sBAAsB,CAAC,OAA4D;AAAA,EAC1F,OAAO,IAAI,mBACT,gCAAgC,MAAM,mCAAmC,MAAM,aACjF;AAAA;;;ACpuBK,MAAM,mBAA2C;AAAA,EACrC;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,UAAqC,CAAC,GAAG;AAAA,IACnD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA;AAAA,OAGI,UAAS,CAAC,QAIoB;AAAA,IAClC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAeF,EACC,IACC,OAAO,WACP,OAAO,QACP,OAAO,QAAQ,MACf,OAAO,QAAQ,cACf,OAAO,QAAQ,SACjB;AAAA,IAEF,OAAO,MAAM,qBAAqB,GAAG,IAAI;AAAA;AAAA,OAGrC,eAAc,CAAC,QAMmB;AAAA,IACtC,IAAI,OAAO,MAAM,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IACvC,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAeF,EACC,IAAI,KAAK,UAAU,OAAO,KAAK,GAAG,OAAO,SAAS;AAAA,IACrD,OAAO,KAAK,IAAI,oBAAoB;AAAA;AAAA,OAGhC,WAAU,CAAC,OAAuE;AAAA,IACtF,IAAI,MAAM,eAAe,WAAW,GAAG;AAAA,MACrC,OAAO,EAAE,QAAQ,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IAChD;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAA4B,CAAC,MAAM,SAAS;AAAA,IAElD,IAAI,MAAM,QAAQ;AAAA,MAChB,aAAa,KAAK,aAAa;AAAA,MAC/B,KAAK,KAAK,MAAM,MAAM;AAAA,IACxB;AAAA,IAEA,IAAI,MAAM,cAAc;AAAA,MACtB,aAAa,KAAK,oBAAoB;AAAA,MACtC,KAAK,KAAK,MAAM,YAAY;AAAA,IAC9B;AAAA,IAEA,IAAI,MAAM,eAAe;AAAA,MACvB,aAAa,KAAK,sBAAsB,MAAM,cAAc,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MACxF,KAAK,KAAK,GAAG,MAAM,aAAa;AAAA,IAClC;AAAA,IAEA,IAAI,MAAM,WAAW;AAAA,MACnB,aAAa,KAAK,gBAAgB;AAAA,MAClC,KAAK,KAAK,MAAM,SAAS;AAAA,IAC3B;AAAA,IAEA,MAAM,QAAQ,SAAS,aAAa,KAAK,OAAO;AAAA,IAChD,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ;AAAA,IAC9C,MAAM,SAAS,MAAM,UAAU;AAAA,IAC/B,MAAM,QAAQ,MAAM;AAAA,IACpB,MAAM,WAAW,KAAK,GACnB,MAAM,6CAA6C,OAAO,EAC1D,IAAI,GAAG,IAAI;AAAA,IAEd,IAAI,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASR;AAAA,8BACsB,kBAAkB,yBAAyB,qBAAqB;AAAA;AAAA,IAE1F,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,IAE1B,IAAI,UAAU,WAAW;AAAA,MACvB,SAAS;AAAA,MACT,UAAU,KAAK,OAAO,MAAM;AAAA,IAC9B,EAAO,SAAI,SAAS,GAAG;AAAA,MACrB,SAAS;AAAA,MACT,UAAU,KAAK,MAAM;AAAA,IACvB;AAAA,IAEA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,IAClD,MAAM,SAAS,KAAK,IAAI,oBAAoB;AAAA,IAE5C,OAAO;AAAA,MACL;AAAA,MACA,SAAS,SAAS,OAAO,SAAS,SAAS;AAAA,MAC3C,OAAO,SAAS;AAAA,IAClB;AAAA;AAAA,OAGI,uBAAsB,CAC1B,OACiD;AAAA,IACjD,oBAAoB,MAAM,KAAK;AAAA,IAC/B,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAWF,EACC,IACC,MAAM,WACN,MAAM,OAAO,UAAU,MACvB,MAAM,OAAO,UAAU,MACvB,MAAM,OAAO,gBAAgB,MAC7B,MAAM,OAAO,aAAa,MAC1B,MAAM,QAAQ,CAChB;AAAA,IACF,OAAO,mBAAmB,MAAM,MAAM,KAAK;AAAA;AAAA,OAGvC,eAAc,CAAC,OAAgD;AAAA,IACnE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAYF,EACC,IACC,MAAM,WACN,MAAM,QAAQ,QACd,MAAM,QAAQ,QAAQ,MACtB,MAAM,QAAQ,QAAQ,cACtB,MAAM,QAAQ,QAAQ,WACtB,MAAM,QAAQ,WAChB;AAAA;AAAA,OAGE,cAAa,CAAC,OAA+C;AAAA,IACjE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQF,EACC,IACC,MAAM,WACN,MAAM,QAAQ,QACd,MAAM,QAAQ,QAAQ,MACtB,MAAM,QAAQ,QAAQ,cACtB,MAAM,QAAQ,QAAQ,SACxB;AAAA;AAAA,OAGE,iBAAgB,CAAC,QAA4D;AAAA,IACjF,IAAI,OAAO,WAAW;AAAA,MAAG;AAAA,IACzB,MAAM,OAAO,OAAO,IAAI,aAAa;AAAA,IAErC,wBAAwB,KAAK,IAAI,MAAM;AAAA,MACrC,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAqBF,EACC,IAAI,KAAK,UAAU,IAAI,CAAC;AAAA,MAE3B,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAsBF,EACC,IAAI,KAAK,UAAU,IAAI,CAAC;AAAA,KAC5B;AAAA;AAAA,EAGH,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAE9C;AAEA,SAAS,aAAa,CAAC,OAAiC;AAAA,EACtD,OAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,WAAW,MAAM;AAAA,IACjB,QAAQ,MAAM,QAAQ;AAAA,IACtB,aAAa,MAAM,QAAQ,QAAQ;AAAA,IACnC,cAAc,MAAM,QAAQ,QAAQ;AAAA,IACpC,WAAW,MAAM,QAAQ,QAAQ;AAAA,IACjC,cACE,MAAM,SAAS,mBAAmB,MAAM,QAAQ,cAAc,MAAM,QAAQ;AAAA,EAChF;AAAA;AAGF,SAAS,kBAAkB,CACzB,MACA,OACwC;AAAA,EACxC,MAAM,UAAU,KAAK,SAAS;AAAA,EAC9B,MAAM,SAAS,KAAK,MAAM,GAAG,KAAK,EAAE,IAAI,oBAAoB;AAAA,EAC5D,MAAM,OAAO,OAAO,GAAG,EAAE;AAAA,EACzB,OAAO;AAAA,IACL;AAAA,OACI,WAAW,OACX;AAAA,MACE,MAAM;AAAA,QACJ,QAAQ,KAAK;AAAA,QACb,cAAc,KAAK,QAAQ;AAAA,QAC3B,WAAW,KAAK,QAAQ;AAAA,MAC1B;AAAA,IACF,IACA,CAAC;AAAA,EACP;AAAA;AAGF,SAAS,mBAAmB,CAAC,OAAqB;AAAA,EAChD,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,SAAS,GAAG;AAAA,IAC9C,MAAM,IAAI,MAAM,kEAAkE;AAAA,EACpF;AAAA;AAYF,SAAS,oBAAoB,CAAC,KAA0C;AAAA,EACtE,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,QAAQ,IAAI;AAAA,IACZ,SAAS;AAAA,MACP,MAAM,IAAI;AAAA,MACV,cAAc,IAAI;AAAA,MAClB,WAAW,IAAI;AAAA,IACjB;AAAA,IACA,aAAa,IAAI;AAAA,EACnB;AAAA;;;ACpXF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AAeO,MAAM,wBAAqD;AAAA,EAC/C;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,UAA0C,CAAC,GAAG;AAAA,IACxD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,IAAI,KAAK,WAAW;AAAA,MAAoB,yBAAyB,KAAK,EAAE;AAAA;AAAA,OAGpE,OAAM,CAAC,OAAyD;AAAA,IACpE,MAAM,SAAS,0BAA0B,KAAK;AAAA,IAC9C,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IACC,OAAO,WACP,OAAO,IACP,OAAO,cACP,OAAO,OAAO,cACd,OAAO,OAAO,WACd,OAAO,SAAS,MAChB,OAAO,SAAS,IAChB,OAAO,kBAAkB,SACzB,KAAK,UAAU,OAAO,iBAAiB,GACvC,OAAO,iBACP,OAAO,WACP,OAAO,iBACP,OAAO,UAAU,YAAY,GAC7B,OAAO,UAAU,YAAY,CAC/B;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,IAAI,uBACR,aACA,6BAA6B,OAAO,0CACpC,EAAE,OAAO,MAAM,CACjB;AAAA,MACF;AAAA,MACA,MAAM;AAAA;AAAA,IAER,OAAO,KAAK,QAAQ,OAAO,WAAW,OAAO,IAAI,QAAQ;AAAA;AAAA,OAGrD,QAAO,CAAC,OAAiE;AAAA,IAC7E,MAAM,aAAa,gCAAgC,KAAK;AAAA,IACxD,OAAO,KAAK,OAAO,WAAW,WAAW,WAAW,EAAE;AAAA;AAAA,OAGlD,KAAI,CAAC,OAA6D;AAAA,IACtE,MAAM,aAAa,8BAA8B,KAAK;AAAA,IACtD,MAAM,QAAQ,CAAC,gBAAgB;AAAA,IAC/B,MAAM,OAA4B,CAAC,WAAW,SAAS;AAAA,IACvD,IAAI,WAAW,iBAAiB,WAAW;AAAA,MACzC,MAAM,KAAK,mBAAmB;AAAA,MAC9B,KAAK,KAAK,WAAW,YAAY;AAAA,IACnC;AAAA,IACA,IAAI,WAAW,WAAW,WAAW;AAAA,MACnC,MAAM,KAAK,6BAA6B,uBAAuB;AAAA,MAC/D,KAAK,KAAK,WAAW,OAAO,cAAc,WAAW,OAAO,SAAS;AAAA,IACvE;AAAA,IACA,IAAI,CAAC,WAAW;AAAA,MAAgB,MAAM,KAAK,oBAAoB;AAAA,IAC/D,IAAI,CAAC,WAAW,gBAAgB;AAAA,MAC9B,MAAM,KAAK,gBAAgB;AAAA,MAC3B,KAAK,KAAK,WAAW,IAAI,YAAY,CAAC;AAAA,IACxC;AAAA,IAEA,MAAM,YAAY,MAAM,KAAK,OAAO;AAAA,IACpC,MAAM,WAAW,KAAK,GACnB,MAAM,oDAAoD,WAAW,EACrE,IAAI,GAAG,IAAI;AAAA,IACd,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA,kBAEU;AAAA;AAAA;AAAA,SAIZ,EACC,IAAI,GAAG,MAAM,WAAW,OAAO,WAAW,MAAM;AAAA,IACnD,MAAM,SAAS,KAAK,IAAI,WAAW;AAAA,IACnC,OAAO;AAAA,MACL;AAAA,MACA,OAAO,SAAS;AAAA,MAChB,SAAS,WAAW,SAAS,OAAO,SAAS,SAAS;AAAA,IACxD;AAAA;AAAA,OAGI,OAAM,CAAC,OAAgE;AAAA,IAC3E,MAAM,aAAa,+BAA+B,KAAK;AAAA,IACvD,MAAM,UAAU,KAAK,OAAO,WAAW,WAAW,WAAW,EAAE;AAAA,IAC/D,IAAI,CAAC,WAAW,QAAQ;AAAA,MAAW,OAAO;AAAA,IAE1C,MAAM,aAAa,+BAA+B,YAAY,QAAQ,SAAS;AAAA,IAC/E,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IACC,WAAW,UAAU,YAAY,GACjC,WAAW,UAAU,MACrB,WAAW,UAAU,IACrB,WAAW,WACX,WAAW,EACb;AAAA,IACF,OAAO,KAAK,QAAQ,WAAW,WAAW,WAAW,IAAI,QAAQ;AAAA;AAAA,EAGnE,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,MAAM,CAAC,WAAmB,IAAqC;AAAA,IACrE,MAAM,MAAM,KAAK,GACd,MAAM,4DAA4D,EAClE,IAAI,WAAW,EAAE;AAAA,IACpB,OAAO,MAAM,YAAY,GAAG,IAAI;AAAA;AAAA,EAG1B,OAAO,CAAC,WAAmB,IAAY,WAAqC;AAAA,IAClF,MAAM,SAAS,KAAK,OAAO,WAAW,EAAE;AAAA,IACxC,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,uBACR,kBACA,6BAA6B,yBAAyB,YACxD;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAEX;AAsBA,SAAS,WAAW,CAAC,KAA4C;AAAA,EAC/D,MAAM,oBAAoB,gBAAgB,IAAI,oBAAoB,oBAAoB;AAAA,EACtF,IACE,OAAO,IAAI,sBAAsB,YACjC,CAAC,SAAS,iBAAiB,KAC3B,kBAAkB,YAAY,IAAI,mBAClC;AAAA,IACA,MAAM,cAAc,sDAAsD;AAAA,EAC5E;AAAA,EAEA,MAAM,eAAe,IAAI,eAAe;AAAA,EACxC,MAAM,eAAe,IAAI,oBAAoB,QAAQ,IAAI,kBAAkB;AAAA,EAC3E,IAAI,iBAAiB,cAAc;AAAA,IACjC,MAAM,cAAc,0DAA0D;AAAA,EAChF;AAAA,EAEA,OAAO,sBAAsB;AAAA,IAC3B,WAAW,IAAI;AAAA,IACf,IAAI,IAAI;AAAA,IACR,cAAc,IAAI;AAAA,IAClB,QAAQ;AAAA,MACN,cAAc,IAAI;AAAA,MAClB,WAAW,IAAI;AAAA,IACjB;AAAA,IACA,UAAU,EAAE,MAAM,IAAI,gBAAgB,IAAI,IAAI,aAAa;AAAA,IAC3D;AAAA,IACA,iBAAiB,IAAI;AAAA,IACrB,WAAW,IAAI;AAAA,IACf,iBAAiB,IAAI;AAAA,IACrB,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,OACX,eAAe,EAAE,WAAW,IAAI,WAAW,IAAI,CAAC;AAAA,OAChD,eAAe,EAAE,WAAW,EAAE,MAAM,IAAI,iBAAiB,IAAI,IAAI,cAAc,EAAE,IAAI,CAAC;AAAA,EAC5F,CAAC;AAAA;AAGH,SAAS,eAAe,CAAC,OAAgB,OAAwB;AAAA,EAC/D,IAAI,OAAO,UAAU;AAAA,IAAU,MAAM,cAAc,SAAS,oCAAoC;AAAA,EAChG,IAAI;AAAA,IACF,OAAO,KAAK,MAAM,KAAK;AAAA,IACvB,OAAO,OAAO;AAAA,IACd,MAAM,IAAI,uBACR,kBACA,sBAAsB,gCACtB,EAAE,MAAM,CACV;AAAA;AAAA;AAIJ,SAAS,QAAQ,CAAC,OAAkD;AAAA,EAClE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAAA;AAG5E,SAAS,aAAa,CAAC,SAAyC;AAAA,EAC9D,OAAO,IAAI,uBAAuB,kBAAkB,gBAAgB,SAAS;AAAA;;;ACzP/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAeO,MAAM,0BAAyD;AAAA,EACnD;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,UAA4C,CAAC,GAAG;AAAA,IAC1D,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,IAAI,KAAK,WAAW;AAAA,MAAoB,yBAAyB,KAAK,EAAE;AAAA;AAAA,OAGpE,OAAM,CAAC,OAA6D;AAAA,IACxE,MAAM,SAAS,4BAA4B,KAAK;AAAA,IAChD,IAAI;AAAA,MACF,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IACC,OAAO,WACP,OAAO,IACP,OAAO,SACP,OAAO,WACP,OAAO,UAAU,YAAY,GAC7B,OAAO,UAAU,YAAY,GAC7B,OAAO,kBAAkB,YAAY,CACvC;AAAA,MACF,IAAI,CAAC;AAAA,QAAK,MAAM,eAAc,kBAAkB,OAAO,+BAA+B;AAAA,MACtF,OAAO,aAAY,GAAG;AAAA,MACtB,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,IAAI,yBACR,aACA,+BAA+B,OAAO,0CACtC,EAAE,OAAO,MAAM,CACjB;AAAA,MACF;AAAA,MACA,IAAI,4BAA4B,KAAK,GAAG;AAAA,QACtC,MAAM,IAAI,yBACR,iBACA,6BAA6B,OAAO,uCAAuC,OAAO,eAClF,EAAE,OAAO,MAAM,CACjB;AAAA,MACF;AAAA,MACA,MAAM;AAAA;AAAA;AAAA,OAIJ,QAAO,CAAC,OAAqE;AAAA,IACjF,MAAM,aAAa,kCAAkC,KAAK;AAAA,IAC1D,OAAO,KAAK,OAAO,WAAW,WAAW,WAAW,EAAE;AAAA;AAAA,OAGlD,aAAY,CAAC,OAA0E;AAAA,IAC3F,MAAM,aAAa,uCAAuC,KAAK;AAAA,IAC/D,MAAM,kBAAkB,WAAW,UAAU,YAAY;AAAA,IACzD,MAAM,MAAM,WAAW,IAAI,YAAY;AAAA,IACvC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAiBF,EACC,IACC,iBACA,iBACA,iBACA,WAAW,WACX,WAAW,IACX,WAAW,SACX,WAAW,WACX,KACA,KACA,GACF;AAAA,IACF,OAAO,MAAM,aAAY,GAAG,IAAI;AAAA;AAAA,OAG5B,OAAM,CAAC,OAAoE;AAAA,IAC/E,MAAM,aAAa,iCAAiC,KAAK;AAAA,IACzD,MAAM,UAAU,KAAK,OAAO,WAAW,WAAW,WAAW,EAAE;AAAA,IAC/D,IAAI,CAAC,WAAW,QAAQ;AAAA,MAAW,OAAO;AAAA,IAC1C,MAAM,aAAa,iCAAiC,YAAY,QAAQ,SAAS;AAAA,IACjF,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IACC,WAAW,UAAU,YAAY,GACjC,WAAW,WACX,WAAW,EACb;AAAA,IACF,OAAO,MAAM,aAAY,GAAG,IAAI,KAAK,OAAO,WAAW,WAAW,WAAW,EAAE;AAAA;AAAA,EAGjF,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,MAAM,CAAC,WAAmB,IAAuC;AAAA,IACvE,MAAM,MAAM,KAAK,GACd,MAAM,8DAA8D,EACpE,IAAI,WAAW,EAAE;AAAA,IACpB,OAAO,MAAM,aAAY,GAAG,IAAI;AAAA;AAEpC;AAaA,SAAS,YAAW,CAAC,KAAgD;AAAA,EACnE,OAAO,wBAAwB;AAAA,IAC7B,WAAW,IAAI;AAAA,IACf,IAAI,IAAI;AAAA,IACR,SAAS,IAAI;AAAA,IACb,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,IACf,mBAAmB,IAAI;AAAA,OACnB,IAAI,eAAe,OAAO,CAAC,IAAI,EAAE,WAAW,IAAI,WAAW;AAAA,EACjE,CAAC;AAAA;AAGH,SAAS,cAAa,CAAC,SAA2C;AAAA,EAChE,OAAO,IAAI,yBAAyB,kBAAkB,gBAAgB,SAAS;AAAA;;;ACzLjF,6BAAS,2CAAkB;AAC3B;AACA;AAaA;AAwBO,MAAM,qBAA+C;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,SAAsC;AAAA,IAChD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,KAAK,aAAa,QAAQ;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA;AAAA,OAGI,MAAK,CAAC,OAAkD;AAAA,IAC5D,MAAM,WAAW,MAAM,YAAY,IAAI;AAAA,IACvC,MAAM,uBAAuB;AAAA,MAC3B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAeF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,aACN,MAAM,QACN,MAAM,WACN,MAAM,MACN,UACA,SAAS,YAAY,GACrB,MAAM,2BAA2B,MACjC,MAAM,iBAAiB,IACzB;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,OAAO,KAAK,2BAA2B,OAAO,QAAQ;AAAA,MACxD;AAAA,MAEA,MAAM;AAAA;AAAA,IAGR,MAAM,SAAS,MAAM,KAAK,QAAQ,EAAE,WAAW,MAAM,WAAW,IAAI,MAAM,GAAG,CAAC;AAAA,IAC9E,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,aACR,yCAAyC,MAAM,oBAAoB,MAAM,aAC3E;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,OAGK,2BAA0B,CACtC,OACA,UACwB;AAAA,IACxB,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,yDAAyD,EAC/D,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAChC,IAAI,CAAC,YAAY,CAAC,qCAAqC,mBAAmB,QAAQ,GAAG,KAAK,GAAG;AAAA,QAC3F,MAAM,IAAI,aACR,0BAA0B,MAAM,mCAAmC,MAAM,aAC3E;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IAAI,UAAU,SAAS,YAAY,GAAG,MAAM,WAAW,MAAM,EAAE;AAAA,MAElE,MAAM,UAAU,KAAK,GAClB,MAAM,yDAAyD,EAC/D,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAChC,OAAO,mBAAmB,OAAO;AAAA,KAClC,EAAE;AAAA;AAAA,OAGC,MAAK,CAAC,OAAkD;AAAA,IAC5D,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA,OAKF,EACC,IACC,YACC,MAAM,aAAa,IAAI,MAAQ,YAAY,GAC5C,MAAM,WACN,MAAM,IACN,QACF;AAAA,IACF,IAAI,OAAO,UAAU,GAAG;AAAA,MACtB,MAAM,SAAS,MAAM,KAAK,QAAQ,EAAE,WAAW,MAAM,WAAW,IAAI,MAAM,GAAG,CAAC;AAAA,MAC9E,IAAI;AAAA,QAAQ,OAAO;AAAA,IACrB;AAAA,IAEA,MAAM,WAAW,MAAM,KAAK,QAAQ,EAAE,WAAW,MAAM,WAAW,IAAI,MAAM,GAAG,CAAC;AAAA,IAChF,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,aACR,0BAA0B,MAAM,8BAA8B,MAAM,aACtE;AAAA,IACF;AAAA,IACA,MAAM,IAAI,aACR,0BAA0B,MAAM,iCAAiC,SAAS,UAC5E;AAAA;AAAA,OAGI,OAAM,CAAC,OAAmD;AAAA,IAC9D,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,yDAAyD,EAC/D,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,aACR,0BAA0B,MAAM,8BAA8B,MAAM,aACtE;AAAA,MACF;AAAA,MAEA,MAAM,iBACJ,MAAM,WAAW,YAAY,MAAM,MAAM,SAAS;AAAA,MACpD,IACG,kBAAkB,SAAS,WAAW,YACtC,CAAC,kBAAkB,SAAS,WAAW,WACxC;AAAA,QACA,MAAM,IAAI,aACR,0BAA0B,MAAM,kCAAkC,SAAS,UAC7E;AAAA,MACF;AAAA,MAEA,IAAI,MAAM,WAAW,aAAa;AAAA,QAChC,IAAI,MAAM,UAAU,MAAM,OAAO,cAAc,SAAS,YAAY;AAAA,UAClE,MAAM,IAAI,aACR,0BAA0B,MAAM,uBAAuB,MAAM,OAAO,8BAA8B,SAAS,cAC7G;AAAA,QACF;AAAA,QACA,IAAI,CAAC,MAAM,UAAU,MAAM,aAAa,KAAK,SAAS,SAAS,SAAS;AAAA,UACtE,MAAM,IAAI,aACR,0BAA0B,MAAM,yEAClC;AAAA,QACF;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAWF,EACC,IACC,MAAM,SACL,MAAM,cAAc,IAAI,MAAQ,YAAY,GAC7C,MAAM,WAAW,cACb,MAAM,WACL,MAAM,YAAY,SAAS,aAAa,MAC7C,MAAM,WAAW,cAAe,MAAM,QAAQ,aAAa,OAAQ,MACnE,MAAM,WAAW,eAAe,MAAM,UAAU,YAC5C,OACA,sBAAqB,MAAM,OAAO,sBAAsB,GAC5D,MAAM,WAAW,cAAc,oBAAoB,MAAM,UAAU,IAAI,MACvE,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,yDAAyD,EAC/D,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,mBAAmB,OAAO;AAAA,KAClC,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAA0E;AAAA,IACtF,MAAM,MAAM,KAAK,GACd,MAAM,yDAAyD,EAC/D,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,mBAAmB,GAAG,IAAI;AAAA;AAAA,OAGnC,KAAI,CAAC,OAAuD;AAAA,IAChE,IAAI,iBAAiB,KAAK,KAAK,MAAM,SAAS,WAAW,GAAG;AAAA,MAC1D,OAAO;AAAA,QACL,MAAM,CAAC;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,QAAQ;AAAA,MAChB,aAAa,KAAK,aAAa;AAAA,MAC/B,KAAK,KAAK,MAAM,MAAM;AAAA,IACxB;AAAA,IAEA,IAAI,MAAM,SAAS;AAAA,MACjB,aAAa,KAAK,eAAe,MAAM,QAAQ,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,OAAO;AAAA,IAC5B;AAAA,IAEA,IAAI,MAAM,WAAW;AAAA,MACnB,aAAa,KAAK,gBAAgB;AAAA,MAClC,KAAK,KAAK,MAAM,SAAS;AAAA,IAC3B;AAAA,IAEA,qBAAqB,cAAc,MAAM,OAAO,iCAAiC;AAAA,IAEjF,QAAQ,MAAM,OAAO,YAAY,aAA0B;AAAA,MACzD,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,kBAAkB;AAAA,MACjC;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAGI,oBAAmB,CAAC,OAAmE;AAAA,IAC3F,MAAM,OAAO,yBAAsC;AAAA,MACjD,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX,aAAa;AAAA,MACb,UAAU,MAAM;AAAA,MAChB,WAAW,MAAM;AAAA,MACjB,YAAY,CAAC,QAAQ,IAAI;AAAA,IAC3B,CAAC;AAAA,IAED,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,kBAAkB;AAAA,IACnC;AAAA;AAAA,EAGF,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAE9C;AAEA,SAAS,mBAAmB,CAAC,YAAkD;AAAA,EAC7E,OAAO,eAAe,YAAY,KAAK,UAAU,UAAU,IAAI;AAAA;AAGjE,SAAS,eAAe,CAAC,OAAyD;AAAA,EAChF,OAAO,SAAS,OAAQ,KAAK,MAAM,KAAK,IAAkB;AAAA;AAG5D,SAAS,kBAAkB,CAAC,KAAiC;AAAA,EAC3D,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,QAAQ,IAAI;AAAA,IACZ,WAAW,IAAI;AAAA,IACf,MAAM,IAAI;AAAA,IACV,QAAQ,IAAI;AAAA,IACZ,UAAU,IAAI,KAAK,IAAI,SAAS;AAAA,IAChC,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,IACvD,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,UAAU,IAAI,aAAa;AAAA,IAC3B,QAAQ,IAAI,oBACR;AAAA,MACE,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,IACjB,IACA;AAAA,IACJ,yBAAyB,IAAI,8BAA8B;AAAA,IAC3D,eAAe,IAAI,kBAAkB;AAAA,IACrC,OAAO,IAAI,UAAU,OAAO,YAAY,kBAAiB,IAAI,OAAO,sBAAsB;AAAA,IAC1F,YAAY,gBAAgB,IAAI,UAAU;AAAA,EAC5C;AAAA;AAGF,SAAS,wBAAuB,CAAC,OAAyB;AAAA,EACxD,OAAO,iBAAiB,SAAS,MAAM,QAAQ,SAAS,0BAA0B;AAAA;;;ACrWpF,IAAM,WAAW,IAAI;AAEd,SAAS,mCAAmC,CACjD,SACA,gCACM;AAAA,EACN,SAAS,IAAI,SAAS;AAAA,IACpB;AAAA,EACF,CAAC;AAAA;;;ACcI,MAAM,wBAAqD;AAAA,EAC/C;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,UAA0C,CAAC,GAAG;AAAA,IACxD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA;AAAA,OAGI,WAAU,CAAC,QASuB;AAAA,IACtC,IAAI,QAAQ;AAAA;AAAA;AAAA;AAAA,IAIZ,MAAM,OAAmC;AAAA,MACvC,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,OAAO,MAAM;AAAA,MACf,SAAS;AAAA,MACT,KAAK,KAAK,OAAO,KAAK,YAAY,CAAC;AAAA,IACrC;AAAA,IAEA,IAAI,OAAO,IAAI;AAAA,MACb,SAAS;AAAA,MACT,KAAK,KAAK,OAAO,GAAG,YAAY,CAAC;AAAA,IACnC;AAAA,IAEA,SAAS,gBAAgB,OAAO,UAAU,SAAS,SAAS;AAAA,IAE5D,IAAI,OAAO,UAAU,WAAW;AAAA,MAC9B,SAAS;AAAA,MACT,KAAK,KAAK,OAAO,KAAK;AAAA,IACxB;AAAA,IAEA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,IAAI;AAAA,IAE7C,OAAO,KAAK,IAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,CAAC;AAAA;AAAA,OAGzC,gBAAe,CACnB,OACkD;AAAA,IAClD,IAAI,MAAM,OAAO,WAAW,GAAG;AAAA,MAC7B,OAAO,CAAC;AAAA,IACV;AAAA,IAEA,MAAM,QAAQ,MAAM,UAAU,SAAS,SAAS;AAAA,IAChD,MAAM,SAAS,MAAM,OAAO,IAAI,MAAM,cAAc,EAAE,KAAK,IAAI;AAAA,IAC/D,MAAM,OAAmC,CAAC;AAAA,IAE1C,MAAM,OAAO,QAAQ,CAAC,QAAQ,UAAU;AAAA,MACtC,KAAK,KAAK,OAAO,OAAO,cAAc,OAAO,UAAU,OAAO,UAAU;AAAA,KACzE;AAAA,IAED,IAAI,QAAQ;AAAA;AAAA,iBAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qCAQoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUjC,KAAK,KAAK,MAAM,SAAS;AAAA,IAEzB,IAAI,MAAM,MAAM;AAAA,MACd,SAAS;AAAA,MACT,KAAK,KAAK,MAAM,KAAK,YAAY,CAAC;AAAA,IACpC;AAAA,IAEA,IAAI,MAAM,IAAI;AAAA,MACZ,SAAS;AAAA,MACT,KAAK,KAAK,MAAM,GAAG,YAAY,CAAC;AAAA,IAClC;AAAA,IAEA,SAAS;AAAA;AAAA;AAAA,IAET,IAAI,MAAM,mBAAmB,WAAW;AAAA,MACtC,SAAS;AAAA,MACT,KAAK,KAAK,KAAK,IAAI,GAAG,MAAM,cAAc,CAAC;AAAA,IAC7C;AAAA,IAEA,SAAS,kCAAkC;AAAA,IAE3C,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,IAAI;AAAA,IAI7C,MAAM,UAAU,MAAM,OAAO,IAAI,CAAC,YAAY;AAAA,SACzC;AAAA,MACH,QAAQ,CAAC;AAAA,IACX,EAAE;AAAA,IAEF,WAAW,OAAO,MAAM;AAAA,MACtB,MAAM,SAAS,QAAQ,IAAI;AAAA,MAC3B,IAAI,QAAQ;AAAA,QACV,OAAO,OAAO,KAAK,KAAK,WAAW,GAAG,CAAC;AAAA,MACzC;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,OAGH,UAAS,CAAC,QAKoB;AAAA,IAClC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,OAMF,EACC,IACC,OAAO,WACP,OAAO,cACP,OAAO,UACP,OAAO,UACT;AAAA,IAEF,OAAO,MAAM,KAAK,WAAW,GAAG,IAAI;AAAA;AAAA,EAE9B,UAAU,CAAC,KAAmC;AAAA,IACpD,OAAO;AAAA,MACL,WAAW,IAAI;AAAA,MACf,cAAc,IAAI;AAAA,MAClB,UAAU,IAAI;AAAA,MACd,YAAY,IAAI;AAAA,MAChB,OAAO,KAAK,MAAM,IAAI,KAAK;AAAA,MAC3B,MAAM,IAAI,QAAQ;AAAA,MAClB,IAAI,IAAI,KAAK,IAAI,EAAE;AAAA,MACnB,cAAc,IAAI;AAAA,IACpB;AAAA;AAAA,EAMF,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAE9C;;;ACvMA,6BAAS,2CAAkB;AAC3B;AAYA;AAwBO,MAAM,wBAAqD;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,SAAyC;AAAA,IACnD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,KAAK,aAAa,QAAQ;AAAA,IAE1B,IAAI,KAAK,WAAW;AAAA,MAAoB,yBAAyB,KAAK,EAAE;AAAA;AAAA,OAGpE,MAAK,CAAC,OAAwD;AAAA,IAClE,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,IACzC,MAAM,0BAA0B;AAAA,MAC9B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,IACf,CAAC;AAAA,IAED,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,aACN,MAAM,aACN,MAAM,WACN,WACA,MAAM,QACN,MAAM,OACN,UAAU,YAAY,GACtB,MAAM,kBACN,MAAM,mBACN,MAAM,kBAAkB,IAC1B;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,IAAI,gBACR,6BAA6B,MAAM,mDAAmD,MAAM,eAC5F,eACF;AAAA,MACF;AAAA,MACA,MAAM;AAAA;AAAA,IAGR,OAAO,KAAK,kBAAkB,MAAM,WAAW,MAAM,EAAE;AAAA;AAAA,OAGnD,QAAO,CAAC,OAA0D;AAAA,IACtE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,iBAAiB,MAAM,WAAW,MAAM,EAAE;AAAA,MAChE,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,gBACR,6BAA6B,MAAM,8BAA8B,MAAM,eACvE,WACF;AAAA,MACF;AAAA,MACA,IAAI,CAAC,mBAAmB,sBAAsB,QAAQ,CAAC,GAAG;AAAA,QACxD,MAAM,IAAI,gBACR,6BAA6B,MAAM,mCAAmC,SAAS,YAC/E,oBACF;AAAA,MACF;AAAA,MAEA,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,KAAK,MAAM,aAAa,IAAI,MAAQ,YAAY,GAAG,MAAM,WAAW,MAAM,EAAE;AAAA,MAC/E,IAAI,OAAO,YAAY,GAAG;AAAA,QACxB,MAAM,IAAI,gBACR,6BAA6B,MAAM,iCACnC,oBACF;AAAA,MACF;AAAA,MACA,OAAO,KAAK,kBAAkB,MAAM,WAAW,MAAM,EAAE;AAAA,KACxD,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAAyD;AAAA,IACpE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,iBAAiB,MAAM,WAAW,MAAM,EAAE;AAAA,MAChE,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,gBACR,6BAA6B,MAAM,8BAA8B,MAAM,eACvE,WACF;AAAA,MACF;AAAA,MACA,IAAI,SAAS,WAAW,WAAW;AAAA,QACjC,MAAM,IAAI,gBACR,6BAA6B,MAAM,oBAAoB,MAAM,mCAC7D,oBACF;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IACC,MAAM,SACL,MAAM,cAAc,IAAI,MAAQ,YAAY,GAC7C,MAAM,kBAAkB,MACxB,MAAM,WAAW,cACb,OACA,sBAAqB,MAAM,OAAO,yBAAyB,GAC/D,MAAM,WACN,MAAM,EACR;AAAA,MACF,OAAO,KAAK,kBAAkB,MAAM,WAAW,MAAM,EAAE;AAAA,KACxD,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAA6E;AAAA,IACzF,MAAM,MAAM,KAAK,iBAAiB,OAAO,WAAW,OAAO,EAAE;AAAA,IAC7D,OAAO,MAAM,sBAAsB,GAAG,IAAI;AAAA;AAAA,OAGtC,cAAa,CAAC,OAAuE;AAAA,IACzF,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA,OAIF,EACC,IACC,MAAM,WACN,MAAM,aACN,MAAM,WACN,MAAM,cACR;AAAA,IACF,OAAO,MAAM,sBAAsB,GAAG,IAAI;AAAA;AAAA,OAGtC,KAAI,CAAC,OAA6D;AAAA,IACtE,IAAI,iBAAiB,KAAK;AAAA,MAAG,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IAEzE,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAC5C,IAAI,MAAM,aAAa;AAAA,MACrB,aAAa,KAAK,kBAAkB;AAAA,MACpC,KAAK,KAAK,MAAM,WAAW;AAAA,IAC7B;AAAA,IACA,IAAI,MAAM,WAAW;AAAA,MACnB,aAAa,KAAK,gBAAgB;AAAA,MAClC,KAAK,KAAK,MAAM,SAAS;AAAA,IAC3B;AAAA,IACA,IAAI,MAAM,gBAAgB;AAAA,MACxB,aAAa,KAAK,qBAAqB;AAAA,MACvC,KAAK,KAAK,MAAM,cAAc;AAAA,IAChC;AAAA,IACA,qBAAqB,cAAc,MAAM,KAAK;AAAA,IAE9C,QAAQ,MAAM,OAAO,YAAY,aAAoC;AAAA,MACnE,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IACD,OAAO,EAAE,MAAM,KAAK,IAAI,qBAAqB,GAAG,SAAS,MAAM;AAAA;AAAA,EAGjE,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,gBAAgB,CAAC,WAAmB,IAA0C;AAAA,IACpF,OAAO,KAAK,GACT,MAAM,4DAA4D,EAClE,IAAI,WAAW,EAAE;AAAA;AAAA,EAGd,iBAAiB,CAAC,WAAmB,IAA8B;AAAA,IACzE,MAAM,MAAM,KAAK,iBAAiB,WAAW,EAAE;AAAA,IAC/C,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,gBACR,4CAA4C,oBAAoB,eAChE,WACF;AAAA,IACF;AAAA,IACA,OAAO,sBAAsB,GAAG;AAAA;AAEpC;AAEA,SAAS,qBAAqB,CAAC,KAA8C;AAAA,EAC3E,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,aAAa,IAAI;AAAA,IACjB,WAAW,IAAI;AAAA,IACf,QAAQ,IAAI;AAAA,IACZ,QAAQ,IAAI;AAAA,IACZ,OAAO,IAAI;AAAA,IACX,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,kBAAkB,IAAI;AAAA,IACtB,mBAAmB,IAAI;AAAA,IACvB,gBAAgB,IAAI,mBAAmB;AAAA,IACvC,gBAAgB,IAAI,mBAAmB;AAAA,IACvC,OAAO,IAAI,UAAU,OAAO,YAAY,kBAAiB,IAAI,OAAO,yBAAyB;AAAA,EAC/F;AAAA;;;AC3PF;AAgBO,MAAM,kCAAyE;AAAA,EACnE;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,UAAoD,CAAC,GAAG;AAAA,IAClE,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA;AAAA,OAGI,OAAM,CAAC,OAA6E;AAAA,IACxF,yBAAyB,MAAM,WAAW,WAAW;AAAA,IAErD,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAkBF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,YACN,MAAM,eACN,MAAM,WACN,MAAM,WACN,MAAM,QACN,MAAM,SACN,MAAM,gBACN,gBAAgB,MAAM,KAAK,GAC3B,gBAAgB,MAAM,eAAe,GACrC,YACC,MAAM,eAAe,IAAI,MAAQ,YAAY,GAC9C,MAAM,WAAW,YAAY,KAAK,IACpC;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,IAAI,0BACR,uCAAuC,MAAM,mCAAmC,MAAM,aACxF;AAAA,MACF;AAAA,MAEA,MAAM;AAAA;AAAA,IAGR,OAAO,KAAK,oBAAoB,MAAM,WAAW,MAAM,EAAE;AAAA;AAAA,OAGrD,OAAM,CAAC,OAA6E;AAAA,IACxF,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,2BAA2B,MAAM,WAAW,MAAM,EAAE;AAAA,MAE1E,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IACC,cACC,MAAM,eAAe,IAAI,MAAQ,YAAY,GAC9C,mBAAmB,MAAM,WAAW,GACpC,gBAAgB,MAAM,QAAQ,GAC9B,SAAS,YACT,SAAS,EACX;AAAA,MAEF,OAAO,KAAK,oBAAoB,MAAM,WAAW,MAAM,EAAE;AAAA,KAC1D,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAA6E;AAAA,IACxF,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,2BAA2B,MAAM,WAAW,MAAM,EAAE;AAAA,MAE1E,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQF,EACC,IACC,cACC,MAAM,eAAe,IAAI,MAAQ,YAAY,GAC9C,mBAAmB,MAAM,WAAW,GACpC,SAAS,YACT,SAAS,EACX;AAAA,MAEF,OAAO,KAAK,oBAAoB,MAAM,WAAW,MAAM,EAAE;AAAA,KAC1D,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAA6E;AAAA,IACxF,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,2BAA2B,MAAM,WAAW,MAAM,EAAE;AAAA,MAE1E,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAOF,EACC,IACC,YACC,MAAM,aAAa,IAAI,MAAQ,YAAY,GAC5C,SAAS,YACT,SAAS,EACX;AAAA,MAEF,OAAO,KAAK,oBAAoB,MAAM,WAAW,MAAM,EAAE;AAAA,KAC1D,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAGiC;AAAA,IAC7C,MAAM,MAAM,KAAK,GACd,MAAM,sEAAsE,EAC5E,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,gCAAgC,GAAG,IAAI;AAAA;AAAA,OAGhD,KAAI,CAAC,OAAiF;AAAA,IAC1F,IAAK,MAAM,YAAY,MAAM,SAAS,WAAW,KAAM,MAAM,aAAa,WAAW,GAAG;AAAA,MACtF,OAAO;AAAA,QACL,eAAe,CAAC;AAAA,QAChB,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,cAAc,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,QAAQ;AAAA,IAC7B;AAAA,IAEA,IAAI,MAAM,YAAY;AAAA,MACpB,aAAa,KAAK,iBAAiB;AAAA,MACnC,KAAK,KAAK,MAAM,UAAU;AAAA,IAC5B;AAAA,IAEA,IAAI,MAAM,aAAa;AAAA,MACrB,aAAa,KAAK,mBAAmB,MAAM,YAAY,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MACnF,KAAK,KAAK,GAAG,MAAM,WAAW;AAAA,IAChC;AAAA,IAEA,IAAI,MAAM,eAAe;AAAA,MACvB,aAAa,KAAK,qBAAqB;AAAA,MACvC,KAAK,KAAK,MAAM,aAAa;AAAA,IAC/B;AAAA,IAEA,IAAI,MAAM,WAAW;AAAA,MACnB,aAAa,KAAK,iBAAiB;AAAA,MACnC,KAAK,KAAK,MAAM,SAAS;AAAA,IAC3B;AAAA,IAEA,IAAI,MAAM,QAAQ;AAAA,MAChB,aAAa,KAAK,aAAa;AAAA,MAC/B,KAAK,KAAK,MAAM,MAAM;AAAA,IACxB;AAAA,IAEA,IAAI,MAAM,SAAS;AAAA,MACjB,aAAa,KAAK,cAAc;AAAA,MAChC,KAAK,KAAK,MAAM,OAAO;AAAA,IACzB;AAAA,IAEA,IAAI,MAAM,gBAAgB;AAAA,MACxB,aAAa,KAAK,qBAAqB;AAAA,MACvC,KAAK,KAAK,MAAM,cAAc;AAAA,IAChC;AAAA,IAEA,IAAI,MAAM,gBAAgB;AAAA,MACxB,aAAa,KAAK,mBAAmB;AAAA,MACrC,KAAK,KAAK,MAAM,eAAe,YAAY,CAAC;AAAA,IAC9C;AAAA,IAEA,IAAI,MAAM,iBAAiB;AAAA,MACzB,aAAa,KAAK,mBAAmB;AAAA,MACrC,KAAK,KAAK,MAAM,gBAAgB,YAAY,CAAC;AAAA,IAC/C;AAAA,IAEA,MAAM,QAAQ,SAAS,aAAa,KAAK,OAAO;AAAA,IAChD,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ;AAAA,IAC9C,MAAM,SAAS,MAAM,UAAU;AAAA,IAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,wDAAwD,OAAO,EACrE,IAAI,GAAG,IAAI;AAAA,IAEd,IAAI,QAAQ;AAAA;AAAA,QAER;AAAA,8BACsB,aAAa;AAAA;AAAA,IAEvC,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,IAE1B,IAAI,MAAM,UAAU,WAAW;AAAA,MAC7B,SAAS;AAAA,MACT,UAAU,KAAK,MAAM,OAAO,MAAM;AAAA,IACpC,EAAO,SAAI,SAAS,GAAG;AAAA,MACrB,SAAS;AAAA,MACT,UAAU,KAAK,MAAM;AAAA,IACvB;AAAA,IAEA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,IAElD,OAAO;AAAA,MACL,eAAe,KAAK,IAAI,+BAA+B;AAAA,MACvD,SAAS,SAAS,KAAK,SAAS,SAAS;AAAA,MACzC,OAAO,SAAS;AAAA,IAClB;AAAA;AAAA,EAGF,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,0BAA0B,CAChC,WACA,IACiC;AAAA,IACjC,MAAM,MAAM,KAAK,GACd,MAAM,sEAAsE,EAC5E,IAAI,WAAW,EAAE;AAAA,IAEpB,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,0BACR,uCAAuC,8BAA8B,aACvE;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,WAAW,WAAW;AAAA,MAC5B,MAAM,IAAI,0BACR,uCAAuC,oBAAoB,4BAC7D;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,mBAAmB,CAAC,WAAmB,IAAwC;AAAA,IACrF,MAAM,MAAM,KAAK,GACd,MAAM,sEAAsE,EAC5E,IAAI,WAAW,EAAE;AAAA,IAEpB,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,0BACR,sDAAsD,oBAAoB,aAC5E;AAAA,IACF;AAAA,IAEA,OAAO,gCAAgC,GAAG;AAAA;AAE9C;AAIA,SAAS,eAAe,CAAC,OAAmC;AAAA,EAC1D,OAAO,KAAK,UAAU,KAAK;AAAA;AAG7B,SAAS,WAAW,CAAC,OAAmC;AAAA,EACtD,OAAO,KAAK,MAAM,KAAK;AAAA;AAGzB,SAAS,kBAAkB,CAAC,WAAiD;AAAA,EAC3E,OAAO,YAAY,KAAK,UAAU,SAAS,IAAI;AAAA;AAGjD,SAAS,cAAc,CAAC,OAA6C;AAAA,EACnE,OAAO,QAAS,KAAK,MAAM,KAAK,IAAkB;AAAA;AAGpD,SAAS,+BAA+B,CACtC,KAC4B;AAAA,EAC5B,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,YAAY,IAAI;AAAA,IAChB,eAAe,IAAI;AAAA,IACnB,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,IACf,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI;AAAA,IACb,gBAAgB,IAAI;AAAA,IACpB,OAAO,YAAY,IAAI,KAAK;AAAA,IAC5B,iBAAiB,YAAY,IAAI,gBAAgB;AAAA,IACjD,QAAQ,IAAI;AAAA,IACZ,aAAa,IAAI,KAAK,IAAI,YAAY;AAAA,IACtC,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,IACvD,aAAa,IAAI,eAAe,IAAI,KAAK,IAAI,YAAY,IAAI;AAAA,IAC7D,aAAa,eAAe,IAAI,YAAY;AAAA,IAC5C,UAAU,IAAI,WAAW,YAAY,IAAI,QAAQ,IAAI;AAAA,IACrD,aAAa,IAAI,eAAe,IAAI,KAAK,IAAI,YAAY,IAAI;AAAA,IAC7D,aAAa,eAAe,IAAI,YAAY;AAAA,IAC5C,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,EACzD;AAAA;AAGF,SAAS,wBAAwB,CAAC,OAAe,WAAyB;AAAA,EACxE,IAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AAAA,IACzC,MAAM,IAAI,0BACR,sCAAsC,2CACxC;AAAA,EACF;AAAA;;;ACpXF,6BAAS,2CAAkB;AAC3B;AAAA;AAAA;AAAA;AAsCA;AAAA,6BACE;AAAA;AAAA;AAAA;AA4BK,MAAM,yBAAuD;AAAA,EACzD;AAAA,EACA;AAAA,EAEQ;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,SAA0C;AAAA,IACpD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,KAAK,aAAa,QAAQ;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA,IAEA,KAAK,QAAQ,IAAI,6BAA6B,KAAK,EAAE;AAAA,IACrD,KAAK,aAAa,IAAI,kCAAkC,KAAK,IAAI,KAAK,UAAU;AAAA;AAAA,OAG5E,MAAK,CAAC,OAA0D;AAAA,IACpE,MAAM,WAAW,MAAM,YAAY,IAAI;AAAA,IACvC,MAAM,2BAA2B;AAAA,MAC/B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,YAAY,MAAM;AAAA,IACpB,CAAC;AAAA,IAED,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAaF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,aACN,MAAM,YACN,UACA,iBAAgB,MAAM,KAAK,GAC3B,SAAS,YAAY,GACrB,SAAS,YAAY,GACrB,CACF;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,IAAI,iBACR,8BAA8B,MAAM,qBAAqB,MAAM,+CAA+C,MAAM,aACtH;AAAA,MACF;AAAA,MAEA,MAAM;AAAA;AAAA,IAGR,OAAO,KAAK,mBAAmB,MAAM,WAAW,MAAM,EAAE;AAAA;AAAA,OAGpD,MAAK,CAAC,OAA0D;AAAA,IACpE,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,IAEzC,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,YAAY,SAAS,WAAW,UAAU;AAAA,QAC7C,MAAM,IAAI,iBACR,WACI,8BAA8B,MAAM,iCAAiC,SAAS,aAC9E,8BAA8B,MAAM,8BAA8B,MAAM,aAC9E;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAWF,EACC,IACC,WACA,UAAU,YAAY,GACtB,MAAM,WAAW,SAAS,MAC1B,MAAM,WAAW,oBAAoB,YAAY,KAAK,MACtD,MAAM,WACN,MAAM,EACR;AAAA,MAEF,OAAO,KAAK,mBAAmB,MAAM,WAAW,MAAM,EAAE;AAAA,KACzD,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,OAA4D;AAAA,IACxE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,cAAc,MAAM,WAAW,MAAM,IAAI,SAAS;AAAA,MACnE,KAAK,GACF,MAAM;AAAA;AAAA;AAAA,OAGR,EACE,IACC,IAAI,UAAU,GACd,MAAM,UAAU,OAChB,MAAM,UAAU,oBAAoB,YAAY,GAChD,MAAM,WACN,MAAM,EACR;AAAA,MACF,OAAO,KAAK,mBAAmB,MAAM,WAAW,MAAM,EAAE;AAAA,KACzD,EAAE;AAAA;AAAA,OAGC,0BAAyB,CAC7B,OAC4B;AAAA,IAC5B,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,cAAc,MAAM,WAAW,MAAM,IAAI,SAAS;AAAA,MACnE,iCAAiC,KAAK,MAAM,cAAc;AAAA,MAC1D,MAAM,UAAU,IAAI,mCAChB,IAAI,KAAK,IAAI,gCAAgC,IAC7C,MAAM;AAAA,MACV,KAAK,GACF,MAAM;AAAA;AAAA;AAAA,OAGR,EACE,IACC,IAAI,KAAK,KAAK,IAAI,QAAQ,QAAQ,GAAG,MAAM,oBAAoB,QAAQ,CAAC,CAAC,EAAE,YAAY,GACvF,MAAM,WACN,MAAM,EACR;AAAA,MACF,OAAO,KAAK,mBAAmB,MAAM,WAAW,MAAM,EAAE;AAAA,KACzD,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAA2D;AAAA,IACtE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,iBACR,8BAA8B,MAAM,8BAA8B,MAAM,aAC1E;AAAA,MACF;AAAA,MAEA,IAAI,CAAC,qBAAqB,SAAS,QAAQ,MAAM,MAAM,GAAG;AAAA,QACxD,MAAM,IAAI,iBACR,8BAA8B,MAAM,oBAAoB,MAAM,8CAA8C,SAAS,UACvH;AAAA,MACF;AAAA,MACA,iCAAiC,UAAU,MAAM,cAAc;AAAA,MAE/D,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAWF,EACC,IACC,MAAM,SACL,MAAM,cAAc,IAAI,MAAQ,YAAY,GAC7C,MAAM,WAAW,cAAc,iBAAgB,MAAM,MAAM,IAAI,MAC/D,MAAM,WAAW,eAAe,MAAM,UAAU,YAC5C,OACA,sBAAqB,MAAM,OAAO,0BAA0B,GAChE,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,uBAAuB,OAAO;AAAA,KACtC,EAAE;AAAA;AAAA,OAGC,KAAI,CAAC,OAAyD;AAAA,IAClE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,iBACR,8BAA8B,MAAM,8BAA8B,MAAM,aAC1E;AAAA,MACF;AAAA,MAEA,IAAI,SAAS,WAAW,WAAW;AAAA,QACjC,MAAM,IAAI,iBACR,8BAA8B,MAAM,oBAAoB,MAAM,6BAChE;AAAA,MACF;AAAA,MACA,iCAAiC,UAAU,MAAM,cAAc;AAAA,MAE/D,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,MAE3C,OAAO,KAAK,mBAAmB,MAAM,WAAW,MAAM,EAAE;AAAA,KACzD,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAA2D;AAAA,IACtE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,iBACR,8BAA8B,MAAM,8BAA8B,MAAM,aAC1E;AAAA,MACF;AAAA,MAEA,IAAI,SAAS,WAAW,WAAW;AAAA,QACjC,MAAM,IAAI,iBACR,8BAA8B,MAAM,oBAAoB,MAAM,6BAChE;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IACC,WACA,MAAM,WAAW,SAAS,MAC1B,MAAM,WAAW,oBAAoB,YAAY,KAAK,MACtD,MAAM,WACN,MAAM,EACR;AAAA,MAEF,OAAO,KAAK,mBAAmB,MAAM,WAAW,MAAM,EAAE;AAAA,KACzD,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAA8E;AAAA,IAC1F,MAAM,MAAM,KAAK,GACd,MAAM,6DAA6D,EACnE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,uBAAuB,GAAG,IAAI;AAAA;AAAA,OAGvC,KAAI,CAAC,OAA+D;AAAA,IACxE,IAAI,iBAAiB,KAAK,KAAK,MAAM,aAAa,WAAW,GAAG;AAAA,MAC9D,OAAO;AAAA,QACL,MAAM,CAAC;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,YAAY;AAAA,MACpB,aAAa,KAAK,iBAAiB;AAAA,MACnC,KAAK,KAAK,MAAM,UAAU;AAAA,IAC5B;AAAA,IAEA,IAAI,MAAM,aAAa;AAAA,MACrB,aAAa,KAAK,mBAAmB,MAAM,YAAY,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MACnF,KAAK,KAAK,GAAG,MAAM,WAAW;AAAA,IAChC;AAAA,IAEA,qBAAqB,cAAc,MAAM,KAAK;AAAA,IAE9C,QAAQ,MAAM,OAAO,YAAY,aAAqC;AAAA,MACpE,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,sBAAsB;AAAA,MACrC;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAGI,wBAAuB,CAC3B,OACuC;AAAA,IACvC,MAAM,OAAO,yBAAiD;AAAA,MAC5D,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX,aAAa;AAAA,MACb,UAAU,MAAM;AAAA,MAChB,WAAW,MAAM;AAAA,MACjB,YAAY,CAAC,QAAQ,IAAI;AAAA,IAC3B,CAAC;AAAA,IAED,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,sBAAsB;AAAA,IACvC;AAAA;AAAA,EAGF,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,kBAAkB,CAAC,WAAmB,IAA+B;AAAA,IAC3E,MAAM,SAAS,KAAK,GACjB,MAAM,6DAA6D,EACnE,IAAI,WAAW,EAAE;AAAA,IAEpB,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,iBACR,6CAA6C,oBAAoB,aACnE;AAAA,IACF;AAAA,IAEA,OAAO,uBAAuB,MAAM;AAAA;AAAA,EAG9B,aAAa,CACnB,WACA,IACA,QACwB;AAAA,IACxB,MAAM,MAAM,KAAK,GACd,MAAM,6DAA6D,EACnE,IAAI,WAAW,EAAE;AAAA,IACpB,IAAI,CAAC;AAAA,MAAK,MAAM,IAAI,iBAAiB,8BAA8B,gBAAgB;AAAA,IACnF,IAAI,IAAI,WAAW,QAAQ;AAAA,MACzB,MAAM,IAAI,iBACR,8BAA8B,eAAe,mBAAmB,IAAI,WACtE;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAEX;AAAA;AAEO,MAAM,kCAAyE;AAAA,EAEjE;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,IACA,YACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,OAGb,OAAM,CAAC,OAA6E;AAAA,IACxF,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAUF,EACC,IAAI,MAAM,WAAW,MAAM,SAAS;AAAA,IACvC,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,iBACR,yCAAyC,MAAM,2BACjD;AAAA,IACF;AAAA,IACA,MAAM,oCAAoC;AAAA,MACxC,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,WAAW,MAAM;AAAA,MACjB,SAAS,MAAM;AAAA,MACf,qBAAqB,OAAO;AAAA,IAC9B,CAAC;AAAA,IAED,IAAI;AAAA,MACF,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA,SAIN,EACA,IACC,MAAM,WACN,MAAM,WACN,MAAM,aACN,MAAM,SACN,UACA,MAAM,QACN,IACC,MAAM,aAAa,IAAI,MAAQ,YAAY,CAC9C;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,IAAI,iBACR,sEAAsE,MAAM,aAC9E;AAAA,MACF;AAAA,MACA,MAAM;AAAA;AAAA,IAER,OAAO,KAAK,QAAQ,MAAM,WAAW,MAAM,SAAS;AAAA;AAAA,OAGhD,MAAK,CAAC,OAA4E;AAAA,IACtF,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,KAAK,cAAc,MAAM,WAAW,MAAM,WAAW,QAAQ;AAAA,MAC7D,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,OAKR,EACE,IACC,WACA,MAAM,WAAW,MACjB,MAAM,UAAU,OAChB,MAAM,UAAU,oBAAoB,YAAY,IAC/C,MAAM,aAAa,IAAI,MAAQ,YAAY,GAC5C,MAAM,WACN,MAAM,SACR;AAAA,MACF,OAAO,KAAK,QAAQ,MAAM,WAAW,MAAM,SAAS;AAAA,KACrD,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,OAA8E;AAAA,IAC1F,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,cAAc,MAAM,WAAW,MAAM,WAAW,SAAS;AAAA,MAC1E,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA,OAIR,EACE,IACC,OAAO,IAAI,OAAO,IAAI,GACtB,MAAM,UAAU,OAChB,MAAM,UAAU,oBAAoB,YAAY,GAChD,MAAM,WACN,MAAM,SACR;AAAA,MACF,OAAO,KAAK,QAAQ,MAAM,WAAW,MAAM,SAAS;AAAA,KACrD,EAAE;AAAA;AAAA,OAGC,0BAAyB,CAC7B,OACqC;AAAA,IACrC,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,cAAc,MAAM,WAAW,MAAM,WAAW,SAAS;AAAA,MAC1E,uCAAuC,KAAK,MAAM,cAAc;AAAA,MAChE,MAAM,UAAU,IAAI,mCAChB,IAAI,KAAK,IAAI,gCAAgC,IAC7C,MAAM;AAAA,MACV,KAAK,GACF,MAAM;AAAA;AAAA;AAAA,OAGR,EACE,IACC,IAAI,KAAK,KAAK,IAAI,QAAQ,QAAQ,GAAG,MAAM,oBAAoB,QAAQ,CAAC,CAAC,EAAE,YAAY,GACvF,MAAM,WACN,MAAM,SACR;AAAA,MACF,OAAO,KAAK,QAAQ,MAAM,WAAW,MAAM,SAAS;AAAA,KACrD,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAA6E;AAAA,IACxF,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,cAAc,MAAM,WAAW,MAAM,WAAW,SAAS;AAAA,MAC1E,uCAAuC,KAAK,MAAM,cAAc;AAAA,MAChE,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAMR,EACE,IACC,MAAM,QACN,MAAM,WAAW,MACjB,MAAM,gBAAgB,MACtB,MAAM,QAAQ,KAAK,UAAU,MAAM,KAAK,IAAI,MAC5C,MAAM,cAAc,KAAK,UAAU,MAAM,WAAW,IAAI,MACxD,MAAM,WAAW,eAAe,MAAM,UAAU,YAC5C,OACA,sBAAqB,MAAM,OAAO,wBAAuB,IAC5D,MAAM,eAAe,IAAI,MAAQ,YAAY,GAC9C,MAAM,WACN,MAAM,SACR;AAAA,MACF,OAAO,KAAK,QAAQ,MAAM,WAAW,MAAM,SAAS;AAAA,KACrD,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAA6E;AAAA,IACxF,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,QAAQ,MAAM,WAAW,MAAM,SAAS;AAAA,MACzD,IAAI,IAAI,WAAW,YAAY,IAAI,WAAW,WAAW;AAAA,QACvD,MAAM,IAAI,iBACR,yCAAyC,MAAM,+CAA+C,IAAI,UACpG;AAAA,MACF;AAAA,MACA,KAAK,GACF,MACC;AAAA;AAAA,oDAGF,EACC,IACC,aACA,MAAM,UAAU,YACZ,OACA,sBAAqB,MAAM,OAAO,wBAAuB,IAC5D,MAAM,eAAe,IAAI,MAAQ,YAAY,GAC9C,MAAM,WACN,MAAM,SACR;AAAA,MACF,OAAO,KAAK,QAAQ,MAAM,WAAW,MAAM,SAAS;AAAA,KACrD,EAAE;AAAA;AAAA,OAGC,eAAc,CAAC,QAG0B;AAAA,IAC7C,MAAM,MAAM,KAAK,GACd,MAAM,iFAAiF,EACvF,IAAI,OAAO,WAAW,OAAO,SAAS;AAAA,IACzC,OAAO,MAAM,gCAAgC,GAAG,IAAI;AAAA;AAAA,OAGhD,KAAI,CAAC,OAAiF;AAAA,IAC1F,IAAI,iBAAiB,KAAK;AAAA,MAAG,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,GAAG,SAAS,MAAM;AAAA,IACzE,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAC5C,IAAI,MAAM,SAAS;AAAA,MACjB,aAAa,KAAK,cAAc;AAAA,MAChC,KAAK,KAAK,MAAM,OAAO;AAAA,IACzB;AAAA,IACA,qBAAqB,cAAc,MAAM,KAAK;AAAA,IAC9C,MAAM,SAAS,aAA8C;AAAA,MAC3D,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IACD,OAAO,KAAK,QAAQ,MAAM,OAAO,KAAK,IAAI,+BAA+B,EAAE;AAAA;AAAA,EAGrE,OAAO,CAAC,WAAmB,WAA+C;AAAA,IAChF,MAAM,MAAM,KAAK,GACd,MAAM,iFAAiF,EACvF,IAAI,WAAW,SAAS;AAAA,IAC3B,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,iBACR,yCAAyC,qCAAqC,aAChF;AAAA,IACF;AAAA,IACA,OAAO,gCAAgC,GAAG;AAAA;AAAA,EAGpC,aAAa,CACnB,WACA,WACA,QACiC;AAAA,IACjC,MAAM,MAAM,KAAK,GACd,MAAM,iFAAiF,EACvF,IAAI,WAAW,SAAS;AAAA,IAC3B,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,iBACR,yCAAyC,qCAAqC,aAChF;AAAA,IACF;AAAA,IACA,IAAI,IAAI,WAAW,QAAQ;AAAA,MACzB,MAAM,IAAI,iBACR,yCAAyC,sBAAsB,mBAAmB,IAAI,WACxF;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAEX;AAAA;AAEO,MAAM,6BAA+D;AAAA,EAC7C;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,MAAK,CAAC,OAAkE;AAAA,IAC5E,0BAAyB,MAAM,WAAW,WAAW;AAAA,IAErD,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,cAAc,KAAK,GACtB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,aAAa;AAAA,MAE3C,IAAI,CAAC,aAAa;AAAA,QAChB,MAAM,IAAI,iBACR,8BAA8B,MAAM,yCAAyC,MAAM,aACrF;AAAA,MACF;AAAA,MAEA,IAAI,YAAY,WAAW,WAAW;AAAA,QACpC,MAAM,IAAI,iBACR,8BAA8B,MAAM,+BAA+B,MAAM,6BAC3E;AAAA,MACF;AAAA,MACA,iCAAiC,aAAa,MAAM,cAAc;AAAA,MAElE,IAAI,YAAY,gBAAgB,MAAM,YAAY;AAAA,QAChD,MAAM,IAAI,iBACR,mCAAmC,MAAM,iBAAiB,MAAM,4CAA4C,MAAM,4BAA4B,YAAY,eAC5J;AAAA,MACF;AAAA,MAEA,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,MAEzC,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAeF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,eACN,MAAM,YACN,MAAM,WACN,MAAM,UACN,MAAM,QACN,MAAM,SACN,WACA,iBAAgB,MAAM,KAAK,GAC3B,UAAU,YAAY,CACxB;AAAA,QACF,OAAO,OAAO;AAAA,QACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,UAClC,MAAM,IAAI,iBACR,mCAAmC,MAAM,mCAAmC,MAAM,aACpF;AAAA,QACF;AAAA,QAEA,MAAM;AAAA;AAAA,MAGR,MAAM,MAAM,KAAK,GACd,MAAM,kEAAkE,EACxE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,KAAK;AAAA,QACR,MAAM,IAAI,iBACR,kDAAkD,MAAM,oBAAoB,MAAM,aACpF;AAAA,MACF;AAAA,MAEA,OAAO,2BAA2B,GAAG;AAAA,KACtC,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAAmE;AAAA,IAC9E,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,kEAAkE,EACxE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,iBACR,mCAAmC,MAAM,8BAA8B,MAAM,aAC/E;AAAA,MACF;AAAA,MACA,KAAK,0BAA0B,UAAU,MAAM,cAAc;AAAA,MAE7D,IAAI,SAAS,WAAW,aAAa,SAAS,WAAW,WAAW;AAAA,QAClE,MAAM,IAAI,iBACR,mCAAmC,MAAM,oBAAoB,MAAM,iCACrE;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IACC,MAAM,SACL,MAAM,cAAc,IAAI,MAAQ,YAAY,GAC7C,MAAM,WAAW,eAAe,MAAM,SAAS,iBAAgB,MAAM,MAAM,IAAI,MAC/E,MAAM,WAAW,eAAe,MAAM,UAAU,YAC5C,OACA,sBAAqB,MAAM,OAAO,0BAA0B,GAChE,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,kEAAkE,EACxE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,2BAA2B,OAAO;AAAA,KAC1C,EAAE;AAAA;AAAA,OAGC,KAAI,CAAC,OAAiE;AAAA,IAC1E,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,kEAAkE,EACxE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,iBACR,mCAAmC,MAAM,8BAA8B,MAAM,aAC/E;AAAA,MACF;AAAA,MACA,KAAK,0BAA0B,UAAU,MAAM,cAAc;AAAA,MAE7D,IAAI,SAAS,WAAW,WAAW;AAAA,QACjC,MAAM,IAAI,iBACR,mCAAmC,MAAM,oBAAoB,MAAM,6BACrE;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,MAE3C,MAAM,UAAU,KAAK,GAClB,MAAM,kEAAkE,EACxE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,2BAA2B,OAAO;AAAA,KAC1C,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAAkF;AAAA,IAC9F,MAAM,MAAM,KAAK,GACd,MAAM,kEAAkE,EACxE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,2BAA2B,GAAG,IAAI;AAAA;AAAA,OAG3C,KAAI,CAAC,OAAuE;AAAA,IAChF,IAAI,iBAAiB,KAAK,GAAG;AAAA,MAC3B,OAAO;AAAA,QACL,OAAO,CAAC;AAAA,QACR,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,eAAe;AAAA,MACvB,aAAa,KAAK,qBAAqB;AAAA,MACvC,KAAK,KAAK,MAAM,aAAa;AAAA,IAC/B;AAAA,IAEA,IAAI,MAAM,YAAY;AAAA,MACpB,aAAa,KAAK,iBAAiB;AAAA,MACnC,KAAK,KAAK,MAAM,UAAU;AAAA,IAC5B;AAAA,IAEA,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,eAAe;AAAA,MACjC,KAAK,KAAK,MAAM,QAAQ;AAAA,IAC1B;AAAA,IAEA,IAAI,MAAM,QAAQ;AAAA,MAChB,aAAa,KAAK,aAAa;AAAA,MAC/B,KAAK,KAAK,MAAM,MAAM;AAAA,IACxB;AAAA,IAEA,IAAI,MAAM,SAAS;AAAA,MACjB,aAAa,KAAK,cAAc;AAAA,MAChC,KAAK,KAAK,MAAM,OAAO;AAAA,IACzB;AAAA,IAEA,qBAAqB,cAAc,MAAM,KAAK;AAAA,IAE9C,QAAQ,MAAM,OAAO,YAAY,aAAyC;AAAA,MACxE,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,OAAO;AAAA,MACL,OAAO,KAAK,IAAI,0BAA0B;AAAA,MAC1C;AAAA,MACA;AAAA,IACF;AAAA;AAAA,EAGM,yBAAyB,CAAC,MAAkC,OAAsB;AAAA,IACxF,MAAM,MAAM,KAAK,GACd,MAAM,6DAA6D,EACnE,IAAI,KAAK,YAAY,KAAK,eAAe;AAAA,IAC5C,IAAI,CAAC;AAAA,MAAK,MAAM,IAAI,iBAAiB,iDAAiD;AAAA,IACtF,iCAAiC,KAAK,KAAK;AAAA;AAE/C;AAEA,SAAS,gBAAe,CAAC,OAAmC;AAAA,EAC1D,OAAO,KAAK,UAAU,KAAK;AAAA;AAG7B,SAAS,YAAW,CAAC,OAAmC;AAAA,EACtD,OAAO,KAAK,MAAM,KAAK;AAAA;AAGzB,SAAS,sBAAsB,CAAC,KAAgD;AAAA,EAC9E,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,YAAY,IAAI;AAAA,IAChB,QAAQ,IAAI;AAAA,IACZ,OAAO,aAAY,IAAI,KAAK;AAAA,IAC5B,QAAQ,IAAI,SAAS,aAAY,IAAI,MAAM,IAAI;AAAA,IAC/C,UAAU,IAAI,YAAY,IAAI,KAAK,IAAI,SAAS,IAAI;AAAA,IACpD,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,OAAO,IAAI,UAAU,OAAO,YAAY,kBAAiB,IAAI,OAAO,0BAA0B;AAAA,IAC9F,SAAS,IAAI;AAAA,OACT,IAAI,mBAAmB,IAAI,mCAC3B;AAAA,MACE,WAAW;AAAA,QACT,OAAO,IAAI;AAAA,QACX,qBAAqB,IAAI,KAAK,IAAI,gCAAgC;AAAA,MACpE;AAAA,IACF,IACA,CAAC;AAAA,EACP;AAAA;AAGF,SAAS,0BAA0B,CAAC,KAAwD;AAAA,EAC1F,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,eAAe,IAAI;AAAA,IACnB,YAAY,IAAI;AAAA,IAChB,WAAW,IAAI;AAAA,IACf,UAAU,IAAI;AAAA,IACd,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,OAAO,aAAY,IAAI,KAAK;AAAA,IAC5B,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,QAAQ,IAAI,SAAS,aAAY,IAAI,MAAM,IAAI;AAAA,IAC/C,OAAO,IAAI,UAAU,OAAO,YAAY,kBAAiB,IAAI,OAAO,0BAA0B;AAAA,EAChG;AAAA;AAGF,SAAS,yBAAwB,CAAC,OAAe,WAAyB;AAAA,EACxE,IAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AAAA,IACzC,MAAM,IAAI,iBACR,6BAA6B,2CAC/B;AAAA,EACF;AAAA;AAGF,SAAS,oBAAoB,CAC3B,SACA,MACS;AAAA,EACT,OACE,YAAY,aACX,YAAY,aAAa,SAAS,eAClC,YAAY,YAAY,SAAS;AAAA;AA0DtC,SAAS,sCAAsC,CAC7C,KACA,OACM;AAAA,EACN,IAAI,IAAI,oBAAoB,OAAO;AAAA,IACjC,MAAM,IAAI,iBACR,iFAAiF,IAAI,eACvF;AAAA,EACF;AAAA;AAGF,SAAS,+BAA+B,CACtC,KAC4B;AAAA,EAC5B,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,QAAQ,IAAI;AAAA,OACR,IAAI,WAAW,EAAE,SAAS,IAAI,SAAS,IAAI,CAAC;AAAA,OAC5C,IAAI,gBAAgB,EAAE,cAAc,IAAI,cAAc,IAAI,CAAC;AAAA,OAC3D,IAAI,QAAQ,EAAE,OAAO,KAAK,MAAM,IAAI,KAAK,EAAE,IAAI,CAAC;AAAA,OAChD,IAAI,cAAc,EAAE,aAAa,KAAK,MAAM,IAAI,WAAW,EAAE,IAAI,CAAC;AAAA,OAClE,IAAI,QAAQ,EAAE,OAAO,kBAAiB,IAAI,OAAO,wBAAuB,EAAE,IAAI,CAAC;AAAA,IACnF,SAAS,IAAI;AAAA,OACT,IAAI,mBAAmB,IAAI,mCAC3B;AAAA,MACE,WAAW;AAAA,QACT,OAAO,IAAI;AAAA,QACX,qBAAqB,IAAI,KAAK,IAAI,gCAAgC;AAAA,MACpE;AAAA,IACF,IACA,CAAC;AAAA,IACL,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,OAC9B,IAAI,aAAa,EAAE,WAAW,IAAI,KAAK,IAAI,UAAU,EAAE,IAAI,CAAC;AAAA,OAC5D,IAAI,eAAe,EAAE,aAAa,IAAI,KAAK,IAAI,YAAY,EAAE,IAAI,CAAC;AAAA,EACxE;AAAA;AAGF,SAAS,gCAAgC,CAAC,KAA6B,OAAsB;AAAA,EAC3F,IAAI,IAAI,qBAAqB,SAAS,OAAO;AAAA,IAC3C,MAAM,IAAI,iBACR,sEAAsE,IAAI,MAC5E;AAAA,EACF;AAAA;;;AjEphCK,MAAM,cAAiD;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEQ;AAAA,EACA;AAAA,EACA,mBAAmB,IAAI;AAAA,EAChC,kBAAiC,QAAQ,QAAQ;AAAA,EAEzD,WAAW,CAAC,UAAgC,CAAC,GAAG;AAAA,IAC9C,MAAM,OAAO,QAAQ,OAAO,kBAAkB,QAAQ,IAAI,IAAI;AAAA,IAC9D,KAAK,aAAa,0BAA0B,EAAE,KAAK,CAAC;AAAA,IACpD,IAAI,MAAM;AAAA,MACR,KAAK,WAAW,GAAG,IAAI,2BAA2B;AAAA,MAClD,KAAK,iBAAiB,0BAA0B,EAAE,MAAM,UAAU,KAAK,CAAC;AAAA,IAC1E,EAAO;AAAA,MACL,KAAK,iBAAiB,KAAK;AAAA;AAAA,IAG7B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,WAAW,EAAE;AAAA,IAC7C;AAAA,IAEA,MAAM,SAAS,mBAAmB,KAAK,YAAY;AAAA,MACjD,sBAAsB,OAAO,QAAQ,IAAI;AAAA,MACzC,oBAAoB;AAAA,IACtB,CAAC;AAAA,IACD,MAAM,+BAA+B,MAAM,KAAK,6BAA6B;AAAA,IAC7E,MAAM,QAAQ,4BACZ,CAAC,QAAQ,KAAK,wBAAwB,GAAG,GACzC,4BACF;AAAA,IACA,MAAM,gBAAgB,4BACpB,CAAC,QAAQ,KAAK,yBAAyB,GAAG,GAC1C,4BACF;AAAA,IACA,MAAM,YAAY,OACd,4BAA4B,OAAO,QAAQ;AAAA,MACzC,KAAK,6BAA6B;AAAA,MAClC,OAAO,IAAI;AAAA,OACV,4BAA4B,IAC/B;AAAA,IACJ,MAAM,cAAc,OAChB,IAAI,oBAAoB,EAAE,YAAY,KAAK,eAAe,CAAC,IAC3D,OAAO;AAAA,IACX,MAAM,iBAAiB,OACnB,IAAI,wBAAwB,EAAE,YAAY,KAAK,eAAe,CAAC,IAC/D,OAAO;AAAA,IACX,KAAK,UAAU,2BAA2B,aAAa,SAAS;AAAA,IAChE,KAAK,WAAW,6BAA6B,OAAO,UAAU,aAAa;AAAA,IAC3E,KAAK,OAAO,yBAAyB,OAAO,MAAM,KAAK;AAAA,IACvD,KAAK,aAAa,4BAA4B,OAAO,YAAY,KAAK;AAAA,IACtE,KAAK,SAAS,0BAA0B,OAAO,QAAQ,KAAK;AAAA,IAC5D,KAAK,UAAU,4BAA4B,OAAO,SAAS,KAAK;AAAA,IAChE,KAAK,UAAU,4BAA4B,OAAO,SAAS,KAAK;AAAA,IAChE,KAAK,WAAW,4BAA4B,OAAO,UAAU,KAAK;AAAA,IAClE,KAAK,aAAa,4BAA4B,OAAO,YAAY,KAAK;AAAA,IACtE,KAAK,eAAe,4BAA4B,OAAO,cAAc,KAAK;AAAA,IAC1E,KAAK,aAAa,4BAA4B,gBAAgB,SAAS;AAAA,IACvE,KAAK,WAAW,4BAA4B,OAAO,UAAU,KAAK;AAAA,IAClE,KAAK,iBAAiB,4BAA4B,OAAO,gBAAgB,KAAK;AAAA,IAC9E,KAAK,eAAe,gCAAgC,OAAO,cAAc,KAAK;AAAA,IAC9E,KAAK,wBAAwB,4BAA4B,OAAO,uBAAuB,KAAK;AAAA,IAC5F,KAAK,cAAc,4BAA4B,OAAO,aAAa,KAAK;AAAA,IACxE,KAAK,QAAQ,4BAA4B,OAAO,OAAO,KAAK;AAAA,IAC5D,KAAK,cAAc,4BAA4B,OAAO,aAAa,KAAK;AAAA,IACxE,KAAK,gBAAgB,4BAA4B,OAAO,eAAe,KAAK;AAAA,IAC5E,KAAK,uBAAuB,4BAA4B,OAAO,sBAAsB,KAAK;AAAA,IAC1F,KAAK,qBAAqB,4BAA4B,OAAO,oBAAoB,KAAK;AAAA,IACtF,KAAK,YAAY,QAAQ,OAAO,6BAA6B,QAAQ,IAAI,IAAI,CAAC;AAAA,IAC9E,oCAAoC,MAAM,CAAC,eACzC,OAAO,qBAAqB,sBAAsB,UAAU,CAC9D;AAAA;AAAA,OAGI,KAAI,GAAkB;AAAA,IAC1B,KAAK,6BAA6B;AAAA,IAClC,IAAI,KAAK,mBAAmB,KAAK,YAAY;AAAA,MAC3C,KAAK,eAAe,GAAG,MAAM,UAAU,EAAE,IAAI;AAAA,MAC7C;AAAA,IACF;AAAA,IACA,MAAM,KAAK,wBAAwB,MAAM;AAAA,MACvC,KAAK,WAAW,GAAG,MAAM,UAAU,EAAE,IAAI;AAAA,KAC1C;AAAA;AAAA,OASG,YAAc,CAClB,KACA,WAAsC,CAAC,GAC3B;AAAA,IACZ,IAAI,KAAK,iBAAiB,SAAS,GAAG;AAAA,MACpC,8BAA8B;AAAA,IAChC;AAAA,IAEA,OAAO,KAAK,oBAAoB,YAAY;AAAA,MAC1C,IAAI,SAAS;AAAA,MACb,MAAM,QAAQ,EAAE,QAAQ,KAAK;AAAA,MAC7B,MAAM,qBAAuD;AAAA,QAC3D,IAAI,CAAC;AAAA,QACL,kBAAkB,IAAI;AAAA,QACtB,QAAQ;AAAA,MACV;AAAA,MACA,MAAM,YAAY,KAAK,yBAAyB,kBAAkB;AAAA,MAClE,MAAM,KAAK,8BAA8B,WAAW,MAAM,MAAM;AAAA,MAEhE,IAAI;AAAA,QACF,OAAO,MAAM,6BAA6B,KAAK,WAAW,IAAI,MAC5D,KAAK,iBAAiB,IAAI,OAAO,YAAY;AAAA,UAC3C,IAAI;AAAA,YACF,MAAM,SAAS,MAAM,IAAI,EAAE;AAAA,YAC3B,mBAAmB,iBAAiB,kBAAkB;AAAA,YACtD,OAAO;AAAA,oBACP;AAAA,YACA,MAAM,SAAS;AAAA,YACf,mBAAmB,SAAS;AAAA,YAC5B,UAAU,SAAS,mBAAmB;AAAA,YACtC,mBAAmB,iBAAiB,WAAW;AAAA;AAAA,SAElD,CACH;AAAA,gBACA;AAAA,QACA,SAAS;AAAA;AAAA,KAEZ;AAAA;AAAA,EAGH,KAAK,GAAS;AAAA,IACZ,IAAI,KAAK,mBAAmB,KAAK;AAAA,MAAY,2BAA2B,KAAK,cAAc;AAAA,IAC3F,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,wBAAwB,CAC9B,oBACwD;AAAA,IACxD,OAAO;AAAA,SACF,mBACD;AAAA,QACE,IAAI,KAAK,WAAW;AAAA,QACpB,gBAAgB;AAAA,QAChB,oBAAoB;AAAA,MACtB,GACA;AAAA,QACE,sBAAsB,OAAO,QAAQ,IAAI;AAAA,QACzC;AAAA,MACF,CACF;AAAA,MACA,MAAM,YAAY;AAAA,QAChB,KAAK,WAAW,GAAG,MAAM,UAAU,EAAE,IAAI;AAAA;AAAA,MAE3C,aAAa,YAA2B;AAAA,QACtC,8BAA8B;AAAA;AAAA,IAElC;AAAA;AAAA,EAGM,uBAA0B,CAAC,KAAuC;AAAA,IACxE,KAAK,6BAA6B;AAAA,IAClC,OAAO,KAAK,oBAAoB,YAAY,IAAI,CAAC;AAAA;AAAA,EAG3C,wBAA2B,CAAC,KAAuC;AAAA,IACzE,KAAK,6BAA6B;AAAA,IAClC,OAAO,KAAK,oBAAoB,MAAM,6BAA6B,KAAK,WAAW,IAAI,GAAG,CAAC;AAAA;AAAA,EAGrF,4BAA4B,GAAS;AAAA,IAC3C,IAAI,CAAC,KAAK,iBAAiB,SAAS,GAAG;AAAA,MAAQ;AAAA,IAC/C,MAAM,IAAI,wBACR,sGACF;AAAA;AAAA,OAGY,oBAAsB,CAAC,KAAmC;AAAA,IACtE,MAAM,WAAW,KAAK;AAAA,IACtB,IAAI;AAAA,IACJ,KAAK,kBAAkB,IAAI,QAAc,CAAC,YAAY;AAAA,MACpD,UAAU;AAAA,KACX;AAAA,IAED,MAAM;AAAA,IACN,IAAI;AAAA,MACF,OAAO,MAAM,IAAI;AAAA,cACjB;AAAA,MACA,QAAQ;AAAA;AAAA;AAGd;AAEA,SAAS,kBAAkB,CACzB,YACA,SAIgB;AAAA,EAChB,MAAM,OAAO,IAAI,kBAAkB,EAAE,WAAW,CAAC;AAAA,EACjD,MAAM,cAAc,IAAI,wBAAwB,EAAE,WAAW,CAAC;AAAA,EAC9D,MAAM,gBAAgB,IAAI,0BAA0B,EAAE,WAAW,CAAC;AAAA,EAClE,MAAM,aAAa,IAAI,uBAAuB,WAAW,IAAI,MAAM,aAAa;AAAA,EAChF,OAAO;AAAA,IACL,SAAS,IAAI,oBAAoB,EAAE,WAAW,CAAC;AAAA,IAC/C,UAAU,IAAI,sBAAsB;AAAA,MAClC,IAAI,WAAW;AAAA,MACf,kBAAkB,QAAQ;AAAA,MAC1B,oBAAoB,QAAQ;AAAA,IAC9B,CAAC;AAAA,IACD;AAAA,IACA;AAAA,IACA,QAAQ,IAAI,mBAAmB,EAAE,YAAY,WAAW,CAAC;AAAA,IACzD,SAAS,IAAI,qBAAqB,EAAE,WAAW,CAAC;AAAA,IAChD,SAAS,IAAI,oBAAoB,UAAU;AAAA,IAC3C,UAAU,IAAI,qBAAqB,EAAE,WAAW,CAAC;AAAA,IACjD,YAAY,IAAI,uBAAuB,EAAE,YAAY,WAAW,CAAC;AAAA,IACjE,cAAc,IAAI,yBAAyB,EAAE,YAAY,WAAW,CAAC;AAAA,IACrE,YAAY,IAAI,wBAAwB,EAAE,WAAW,CAAC;AAAA,IACtD,UAAU,IAAI,qBAAqB,EAAE,YAAY,WAAW,CAAC;AAAA,IAC7D,gBAAgB,IAAI,2BAA2B,EAAE,YAAY,WAAW,CAAC;AAAA,IACzE,cAAc,IAAI,yBAAyB,EAAE,YAAY,WAAW,CAAC;AAAA,IACrE,uBAAuB,IAAI,kCAAkC,EAAE,WAAW,CAAC;AAAA,IAC3E,aAAa,IAAI,wBAAwB,EAAE,YAAY,WAAW,CAAC;AAAA,IACnE,OAAO,IAAI,mBAAmB,EAAE,WAAW,CAAC;AAAA,IAC5C;AAAA,IACA;AAAA,IACA,sBAAsB,IAAI,iCAAiC,UAAU;AAAA,IACrE,oBAAoB,IAAI,+BAA+B,UAAU;AAAA,EACnE;AAAA;",
73
+ "debugId": "A2CEAFAB428734DF64756E2164756E21",
74
74
  "names": []
75
75
  }