openmeld 0.3.42

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-url-Bdqmyw0D.js","names":["resolveLocksDir","process","resolveRuntimeDir","toErrorMessage","obj"],"sources":["../../../packages/schemas/dist/schemas/daemon/agent-controller-conversation-capability.js","../../../packages/schemas/dist/schemas/daemon/agent-controller-ref.js","../../../packages/schemas/dist/schemas/daemon/conversation-contract.js","../../../packages/schemas/dist/schemas/daemon/controller-contract.js","../../../packages/schemas/dist/schemas/local-machine/recovery.js","../src/config/paths.ts","../src/system/local-machine-recovery/index.ts","../src/config/openmeld-lane-descriptor.ts","../src/config/session-profile.ts","../src/config/lock.ts","../src/protocol/urls.ts","../src/config/runtime-config.ts","../src/config/base-url.ts"],"sourcesContent":["import { z } from \"zod/v4\";\n//#region src/schemas/daemon/agent-controller-conversation-capability.ts\nconst agentControllerConversationExternalImportCapabilitySchema = z.enum([\"unsupported\", \"by_ref_id\"]);\nconst agentControllerConversationResumeCapabilitySchema = z.enum([\"unsupported\", \"by_ref_id\"]);\nconst agentControllerConversationDiscoverCapabilitySchema = z.literal(\"unsupported\");\nconst agentControllerConversationTurnOverrideCapabilitySchema = z.enum([\n\t\"unsupported\",\n\t\"stateless\",\n\t\"persistent\"\n]);\nconst agentControllerConversationCapabilitySchema = z.strictObject({\n\tdiscover: agentControllerConversationDiscoverCapabilitySchema,\n\texternalImport: agentControllerConversationExternalImportCapabilitySchema,\n\tresume: agentControllerConversationResumeCapabilitySchema,\n\tturnOverride: agentControllerConversationTurnOverrideCapabilitySchema\n});\nconst BUILTIN_AGENT_CONTROLLER_CONVERSATION_CAPABILITY_BY_CONTROLLER_ID = {\n\tcodex: {\n\t\tdiscover: \"unsupported\",\n\t\texternalImport: \"by_ref_id\",\n\t\tresume: \"by_ref_id\",\n\t\tturnOverride: \"unsupported\"\n\t},\n\t\"claude-code\": {\n\t\tdiscover: \"unsupported\",\n\t\texternalImport: \"by_ref_id\",\n\t\tresume: \"by_ref_id\",\n\t\tturnOverride: \"unsupported\"\n\t},\n\tcursor: {\n\t\tdiscover: \"unsupported\",\n\t\texternalImport: \"by_ref_id\",\n\t\tresume: \"by_ref_id\",\n\t\tturnOverride: \"unsupported\"\n\t},\n\topencode: {\n\t\tdiscover: \"unsupported\",\n\t\texternalImport: \"unsupported\",\n\t\tresume: \"by_ref_id\",\n\t\tturnOverride: \"unsupported\"\n\t},\n\topenclaw: {\n\t\tdiscover: \"unsupported\",\n\t\texternalImport: \"unsupported\",\n\t\tresume: \"by_ref_id\",\n\t\tturnOverride: \"unsupported\"\n\t}\n};\nconst resolveBuiltinAgentControllerConversationCapability = (builtinControllerId) => {\n\tconst capability = BUILTIN_AGENT_CONTROLLER_CONVERSATION_CAPABILITY_BY_CONTROLLER_ID[builtinControllerId];\n\treturn capability ? { ...capability } : null;\n};\n//#endregion\nexport { BUILTIN_AGENT_CONTROLLER_CONVERSATION_CAPABILITY_BY_CONTROLLER_ID, agentControllerConversationCapabilitySchema, agentControllerConversationDiscoverCapabilitySchema, agentControllerConversationExternalImportCapabilitySchema, agentControllerConversationResumeCapabilitySchema, agentControllerConversationTurnOverrideCapabilitySchema, resolveBuiltinAgentControllerConversationCapability };\n\n//# sourceMappingURL=agent-controller-conversation-capability.js.map","import { resolveBuiltinAgentControllerConversationCapability } from \"./agent-controller-conversation-capability.js\";\nimport { z } from \"zod/v4\";\n//#region src/schemas/daemon/agent-controller-ref.ts\nconst BUILTIN_AGENT_CONTROLLER_REF_PREFIX = \"builtin:\";\nconst AGENT_CONTROLLER_REF_SEPARATOR = \":\";\nconst HOSTED_CENTER_AGENT_CONTROLLER_REF = \"hosted:center-agent\";\nconst HOSTED_CENTER_AGENT_CONTROLLER_REF_ID = \"center-agent\";\nconst agentControllerRefSchema = z.string().transform((value, context) => {\n\tconst parsed = parseAgentControllerRef(value);\n\tif (!parsed) {\n\t\tcontext.addIssue({\n\t\t\tcode: \"custom\",\n\t\t\tmessage: \"Agent Controller ref is invalid\"\n\t\t});\n\t\treturn z.NEVER;\n\t}\n\treturn parsed.ref;\n});\nfunction normalizeOptionalText(value) {\n\tif (typeof value !== \"string\") return null;\n\tconst normalized = value.trim();\n\treturn normalized.length > 0 ? normalized : null;\n}\nfunction normalizeBuiltinControllerId(agentControllerRef) {\n\tconst normalized = normalizeOptionalText(agentControllerRef);\n\tif (!normalized) return null;\n\tif (normalized.includes(\":\") && !normalized.startsWith(BUILTIN_AGENT_CONTROLLER_REF_PREFIX)) return null;\n\tconst builtinId = normalized.startsWith(BUILTIN_AGENT_CONTROLLER_REF_PREFIX) ? normalized.slice(8) : normalized;\n\tif (builtinId.length === 0 || builtinId.includes(\":\")) return null;\n\treturn builtinId;\n}\nfunction normalizeKnownBuiltinAgentControllerId(agentControllerRef) {\n\tconst builtinId = normalizeBuiltinControllerId(agentControllerRef);\n\treturn builtinId && resolveBuiltinAgentControllerConversationCapability(builtinId) ? builtinId : null;\n}\nfunction normalizeBuiltinAgentControllerId(agentControllerRef) {\n\treturn normalizeBuiltinControllerId(agentControllerRef);\n}\nfunction isExplicitBuiltinAgentControllerRef(agentControllerRef) {\n\tconst normalized = normalizeOptionalText(agentControllerRef);\n\treturn normalized?.startsWith(BUILTIN_AGENT_CONTROLLER_REF_PREFIX) === true && normalizeKnownBuiltinAgentControllerId(normalized) !== null;\n}\nfunction parseAgentControllerRef(agentControllerRef) {\n\tconst normalized = normalizeOptionalText(agentControllerRef);\n\tif (!normalized) return null;\n\tif (normalized === \"hosted:center-agent\") return {\n\t\tkind: HOSTED_CENTER_AGENT_CONTROLLER_REF,\n\t\tid: HOSTED_CENTER_AGENT_CONTROLLER_REF_ID,\n\t\tref: HOSTED_CENTER_AGENT_CONTROLLER_REF\n\t};\n\tfor (const kind of [\"builtin\", \"custom\"]) {\n\t\tconst prefix = `${kind}${AGENT_CONTROLLER_REF_SEPARATOR}`;\n\t\tif (!normalized.startsWith(prefix)) continue;\n\t\tconst id = normalized.slice(prefix.length).trim();\n\t\tif (id.length === 0 || id.includes(AGENT_CONTROLLER_REF_SEPARATOR)) return null;\n\t\treturn {\n\t\t\tkind,\n\t\t\tid,\n\t\t\tref: `${kind}${AGENT_CONTROLLER_REF_SEPARATOR}${id}`\n\t\t};\n\t}\n\treturn null;\n}\nfunction canonicalizeAgentControllerRef(agentControllerRef) {\n\treturn parseAgentControllerRef(agentControllerRef)?.ref ?? null;\n}\nfunction buildAgentControllerRoutingKey(agentControllerRef) {\n\treturn canonicalizeAgentControllerRef(agentControllerRef);\n}\nfunction canonicalizeBuiltinAgentControllerRef(agentControllerRef) {\n\tconst builtinId = normalizeBuiltinControllerId(agentControllerRef);\n\treturn builtinId ? `${BUILTIN_AGENT_CONTROLLER_REF_PREFIX}${builtinId}` : null;\n}\nfunction areBuiltinAgentControllerRefsEquivalent(left, right) {\n\tconst parsedLeft = parseAgentControllerRef(left);\n\tconst parsedRight = parseAgentControllerRef(right);\n\tif (!(parsedLeft?.kind === \"builtin\" && parsedRight?.kind === \"builtin\")) return false;\n\treturn parsedLeft.ref === parsedRight.ref;\n}\nfunction isHostedCenterAgentControllerRef(agentControllerRef) {\n\treturn parseAgentControllerRef(agentControllerRef)?.kind === HOSTED_CENTER_AGENT_CONTROLLER_REF;\n}\n//#endregion\nexport { HOSTED_CENTER_AGENT_CONTROLLER_REF, HOSTED_CENTER_AGENT_CONTROLLER_REF_ID, agentControllerRefSchema, areBuiltinAgentControllerRefsEquivalent, buildAgentControllerRoutingKey, canonicalizeAgentControllerRef, canonicalizeBuiltinAgentControllerRef, isExplicitBuiltinAgentControllerRef, isHostedCenterAgentControllerRef, normalizeBuiltinAgentControllerId, normalizeKnownBuiltinAgentControllerId, parseAgentControllerRef };\n\n//# sourceMappingURL=agent-controller-ref.js.map","import { canonicalizeBuiltinAgentControllerRef } from \"./agent-controller-ref.js\";\nimport { z } from \"zod/v4\";\n//#region src/schemas/daemon/conversation-contract.ts\nconst agentControllerConversationKindSchema = z.enum([\n\t\"session\",\n\t\"thread\",\n\t\"context\"\n]);\nconst trimmedNonEmptyStringSchema = z.string().trim().min(1);\nconst agentControllerConversationRefSchema = z.strictObject({\n\tagentControllerRef: trimmedNonEmptyStringSchema,\n\tagentControllerConversationKind: agentControllerConversationKindSchema,\n\tagentControllerConversationId: trimmedNonEmptyStringSchema\n});\nconst conversationPolicySchema = z.strictObject({\n\tcollaborationMode: z.enum([\"default\", \"plan\"]).optional(),\n\tfallbackModel: z.string().min(1).optional(),\n\tmodel: z.string().min(1).optional(),\n\treasoningLevel: z.string().min(1).optional()\n});\nconst BUILTIN_AGENT_CONTROLLER_CONVERSATION_KIND_BY_CONTROLLER_ID = {\n\tcodex: \"thread\",\n\t\"claude-code\": \"session\",\n\tcursor: \"session\",\n\topenclaw: \"session\",\n\topencode: \"session\"\n};\nconst BUILTIN_AGENT_CONTROLLER_ALLOWS_DISTINCT_CONVERSATION_ID = { openclaw: true };\nconst resolveBuiltinAgentControllerConversationKind = (agentControllerRef) => {\n\tconst canonical = canonicalizeBuiltinAgentControllerRef(agentControllerRef);\n\tif (!canonical) return null;\n\tconst builtinControllerId = canonical.slice(8);\n\treturn BUILTIN_AGENT_CONTROLLER_CONVERSATION_KIND_BY_CONTROLLER_ID[builtinControllerId] ?? null;\n};\nconst builtinAgentControllerAllowsDistinctConversationId = (builtinControllerId) => BUILTIN_AGENT_CONTROLLER_ALLOWS_DISTINCT_CONVERSATION_ID[builtinControllerId] === true;\nconst buildAgentControllerConversationRef = (input) => ({\n\tagentControllerRef: input.agentControllerRef,\n\tagentControllerConversationKind: input.agentControllerConversationKind,\n\tagentControllerConversationId: input.agentControllerConversationId\n});\n//#endregion\nexport { BUILTIN_AGENT_CONTROLLER_ALLOWS_DISTINCT_CONVERSATION_ID, BUILTIN_AGENT_CONTROLLER_CONVERSATION_KIND_BY_CONTROLLER_ID, agentControllerConversationKindSchema, agentControllerConversationRefSchema, buildAgentControllerConversationRef, builtinAgentControllerAllowsDistinctConversationId, conversationPolicySchema, resolveBuiltinAgentControllerConversationKind };\n\n//# sourceMappingURL=conversation-contract.js.map","import { agentControllerConversationRefSchema } from \"./conversation-contract.js\";\nimport { z } from \"zod/v4\";\n//#region src/schemas/daemon/controller-contract.ts\nconst LEGACY_RUNTIME_DISPATCH_POLICY = \"mention_only\";\nconst runtimeDispatchPolicySchema = z.enum([LEGACY_RUNTIME_DISPATCH_POLICY, \"listen_all\"]);\nconst runtimeTransportModeSchema = z.enum([\n\t\"local-cli\",\n\t\"codex-app-server\",\n\t\"acp\"\n]);\nconst runtimeStreamingModeSchema = z.enum([\"final\", \"stream\"]);\nconst runtimeAgentControllerConversationIdMappingSpecSchema = z.strictObject({\n\tsourceField: z.string().min(1),\n\tmappingVersion: z.number().int().min(1)\n});\nconst runtimeAgentExecutableLaunchContractSchema = z.strictObject({\n\tkind: z.literal(\"executable\"),\n\tcommandPath: z.string().min(1),\n\targsPrefix: z.array(z.string().min(1)).optional()\n});\nconst runtimeAgentNodeScriptLaunchContractSchema = z.strictObject({\n\tkind: z.literal(\"node_script\"),\n\tnodePath: z.string().min(1),\n\tscriptPath: z.string().min(1),\n\targsPrefix: z.array(z.string().min(1)).optional()\n});\nconst runtimeAgentControllerLaunchContractSchema = z.discriminatedUnion(\"kind\", [runtimeAgentExecutableLaunchContractSchema, runtimeAgentNodeScriptLaunchContractSchema]);\nconst runtimeAgentControllerLaunchCandidateSchema = z.strictObject({\n\tinstallId: z.string().min(1),\n\tlabel: z.string().min(1),\n\tdetail: z.string().min(1),\n\tcommandPath: z.string().min(1),\n\tlaunchContract: runtimeAgentControllerLaunchContractSchema\n});\nconst runtimeAgentControllerSettingsSchema = z.strictObject({\n\tdispatch_policy: runtimeDispatchPolicySchema.default(LEGACY_RUNTIME_DISPATCH_POLICY),\n\ttransport_mode: runtimeTransportModeSchema,\n\tstreaming_mode: runtimeStreamingModeSchema.default(\"final\"),\n\ttimeout_ms: z.number().int().positive().nullable().default(null),\n\tretry: z.number().int().min(0).default(0),\n\tcontext_id_mapping_spec: runtimeAgentControllerConversationIdMappingSpecSchema\n});\nconst agentContextResolutionSchema = z.strictObject({\n\tagentControllerConversationId: z.string().min(1).nullable(),\n\tagentControllerConversation: agentControllerConversationRefSchema.nullable().optional(),\n\tsourceField: z.string().min(1),\n\tmappingVersion: z.number().int().min(1)\n});\n//#endregion\nexport { LEGACY_RUNTIME_DISPATCH_POLICY, agentContextResolutionSchema, runtimeAgentControllerConversationIdMappingSpecSchema, runtimeAgentControllerLaunchCandidateSchema, runtimeAgentControllerLaunchContractSchema, runtimeAgentControllerSettingsSchema, runtimeAgentExecutableLaunchContractSchema, runtimeAgentNodeScriptLaunchContractSchema, runtimeDispatchPolicySchema, runtimeStreamingModeSchema, runtimeTransportModeSchema };\n\n//# sourceMappingURL=controller-contract.js.map","import { z } from \"zod/v4\";\n//#region src/schemas/local-machine/recovery.ts\nconst LOCAL_MACHINE_RECOVERY_SCHEMA_VERSION = 1;\nconst localMachineIssueCodeSchema = z.enum([\n\t\"local_machine.storage.exhausted\",\n\t\"local_machine.storage.not_writable\",\n\t\"local_machine.permission.denied\",\n\t\"local_machine.resources.exhausted\",\n\t\"local_machine.background_execution.blocked\",\n\t\"local_machine.concurrency.active\",\n\t\"local_machine.concurrency.orphaned\",\n\t\"local_machine.failure.unknown\"\n]);\nconst localMachineOperationSchema = z.enum([\n\t\"create_lock\",\n\t\"read_local_state\",\n\t\"write_local_state\",\n\t\"start_background_service\",\n\t\"start_process\",\n\t\"unknown\"\n]);\nconst localMachineRecoveryPolicySchema = z.enum([\n\t\"automatic\",\n\t\"retry_with_backoff\",\n\t\"user_action\",\n\t\"diagnostics\"\n]);\nconst LOCAL_MACHINE_RECOVERY_POLICY_BY_CODE = {\n\t\"local_machine.storage.exhausted\": \"user_action\",\n\t\"local_machine.storage.not_writable\": \"user_action\",\n\t\"local_machine.permission.denied\": \"user_action\",\n\t\"local_machine.resources.exhausted\": \"user_action\",\n\t\"local_machine.background_execution.blocked\": \"user_action\",\n\t\"local_machine.concurrency.active\": \"user_action\",\n\t\"local_machine.concurrency.orphaned\": \"user_action\",\n\t\"local_machine.failure.unknown\": \"diagnostics\"\n};\nfunction resolveLocalMachineRecoveryPolicy(code) {\n\tif (!Object.hasOwn(LOCAL_MACHINE_RECOVERY_POLICY_BY_CODE, code)) return null;\n\treturn LOCAL_MACHINE_RECOVERY_POLICY_BY_CODE[code];\n}\nconst localMachineUserMessageSchema = z.string().trim().min(1).max(512);\nconst localMachineDiagnosticTextSchema = z.string().trim().min(1).max(2048);\nconst localMachineAgentMessageSchema = z.string().trim().min(1).max(1025);\nfunction formatLocalMachineIssueMessage(issue) {\n\treturn issue.primaryAction ? `${issue.summary} ${issue.primaryAction}` : issue.summary;\n}\nconst localMachineIssueSchema = z.strictObject({\n\tschemaVersion: z.literal(1),\n\tcode: localMachineIssueCodeSchema,\n\toperation: localMachineOperationSchema,\n\trecoveryPolicy: localMachineRecoveryPolicySchema,\n\tsummary: localMachineUserMessageSchema,\n\tprimaryAction: z.union([localMachineUserMessageSchema, z.null()]),\n\tdiagnostics: z.strictObject({\n\t\tsystemCode: z.union([z.string().trim().min(1).max(64), z.null()]),\n\t\tdetail: z.union([localMachineDiagnosticTextSchema, z.null()])\n\t})\n}).superRefine((value, context) => {\n\tconst expectedPolicy = resolveLocalMachineRecoveryPolicy(value.code);\n\tif (value.recoveryPolicy !== expectedPolicy) context.addIssue({\n\t\tcode: \"custom\",\n\t\tmessage: `recovery policy must be ${expectedPolicy} for ${value.code}`,\n\t\tpath: [\"recoveryPolicy\"]\n\t});\n});\nconst localMachineIssueAgentEventSchema = z.strictObject({\n\ttype: z.literal(\"error\"),\n\tcode: localMachineIssueCodeSchema,\n\tmessage: localMachineAgentMessageSchema,\n\trequestId: z.string().trim().min(1).max(256).optional(),\n\tpayload: z.strictObject({ localMachineIssue: localMachineIssueSchema })\n}).superRefine((value, context) => {\n\tif (value.code !== value.payload.localMachineIssue.code) context.addIssue({\n\t\tcode: \"custom\",\n\t\tmessage: \"agent event code must match local machine issue code\",\n\t\tpath: [\"code\"]\n\t});\n\tconst expectedMessage = formatLocalMachineIssueMessage(value.payload.localMachineIssue);\n\tif (value.message !== expectedMessage) context.addIssue({\n\t\tcode: \"custom\",\n\t\tmessage: \"agent event message must match local machine issue copy\",\n\t\tpath: [\"message\"]\n\t});\n});\n//#endregion\nexport { LOCAL_MACHINE_RECOVERY_POLICY_BY_CODE, LOCAL_MACHINE_RECOVERY_SCHEMA_VERSION, formatLocalMachineIssueMessage, localMachineIssueAgentEventSchema, localMachineIssueCodeSchema, localMachineIssueSchema, localMachineOperationSchema, localMachineRecoveryPolicySchema, resolveLocalMachineRecoveryPolicy };\n\n//# sourceMappingURL=recovery.js.map","import { homedir } from \"node:os\";\nimport { basename, dirname, join, parse, resolve } from \"node:path\";\n\nexport type OpenMeldProfileId = string;\nexport type OpenMeldAccountKey = {\n hostKey: string;\n userKey: string;\n};\nexport type OpenMeldEnvPreset = \"prod\" | \"dev-local\" | \"canary\";\ntype OpenMeldPathResolutionInput = {\n env?: NodeJS.ProcessEnv;\n argv?: string[];\n homeDir?: string;\n};\n\nexport type { OpenMeldPathResolutionInput };\n\nconst MAX_ACCOUNT_PATH_SEGMENT_LENGTH = 128;\nconst OPAQUE_CACHE_PATH_SEGMENT_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/u;\nconst FALLBACK_ACCOUNT_HOST_KEY = \"unauthenticated\";\nconst FALLBACK_ACCOUNT_USER_KEY = \"local\";\nexport const OPENMELD_HOME_ENV_KEY = \"OPENMELD_HOME\";\nconst OPENMELD_ENV_PRESET_ENV_KEY = \"OPENMELD_ENV_PRESET\";\nconst DEFAULT_OPENMELD_ENV_PRESET: OpenMeldEnvPreset = \"prod\";\nconst OPENMELD_DEFAULT_HOME_DIR_BY_PRESET = {\n prod: \".openmeld\",\n \"dev-local\": \".openmeld-dev\",\n canary: \".openmeld-canary\",\n} as const satisfies Record<OpenMeldEnvPreset, string>;\nconst OPENMELD_ENV_PRESET_BY_ENTRY_NAME = {\n openmeld: \"prod\",\n \"openmeld-dev\": \"dev-local\",\n \"openmeld-canary\": \"canary\",\n} as const satisfies Record<string, OpenMeldEnvPreset>;\nexport type OpenMeldCliEntryName =\n keyof typeof OPENMELD_ENV_PRESET_BY_ENTRY_NAME;\n\nexport function normalizeOpenMeldProfileId(value: unknown): OpenMeldProfileId {\n const raw = String(value ?? \"\").trim();\n if (raw.length === 0) {\n throw new Error(\"openMeldProfileId is required\");\n }\n // Keep filenames stable and safe.\n const safe = raw.replace(/[^a-zA-Z0-9._-]+/g, \"_\").toLowerCase();\n if (!safe || safe === \".\" || safe === \"..\") {\n throw new Error(\"openMeldProfileId is invalid\");\n }\n if (safe.length > MAX_ACCOUNT_PATH_SEGMENT_LENGTH) {\n throw new Error(\"openMeldProfileId is too long\");\n }\n return safe;\n}\n\nexport function resolveOpenMeldEnvPreset(\n input: OpenMeldPathResolutionInput = {}\n): OpenMeldEnvPreset {\n const env = input.env ?? process.env;\n const fromEnv = normalizeOpenMeldEnvPreset(env[OPENMELD_ENV_PRESET_ENV_KEY]);\n if (fromEnv) {\n return fromEnv;\n }\n return resolveOpenMeldEnvPresetFromArgv(input.argv ?? process.argv);\n}\n\nexport function resolveExplicitOpenMeldEnvPreset(\n input: OpenMeldPathResolutionInput = {}\n): OpenMeldEnvPreset | null {\n const env = input.env ?? process.env;\n return normalizeOpenMeldEnvPreset(env[OPENMELD_ENV_PRESET_ENV_KEY]);\n}\n\nexport function resolveDefaultOpenMeldHomeDirname(\n preset: OpenMeldEnvPreset\n): string {\n return OPENMELD_DEFAULT_HOME_DIR_BY_PRESET[preset];\n}\n\nexport function resolveOpenMeldRootDir(\n input: OpenMeldPathResolutionInput = {}\n): string {\n const env = input.env ?? process.env;\n const fromEnv = String(env[OPENMELD_HOME_ENV_KEY] ?? \"\").trim();\n if (fromEnv) {\n return fromEnv;\n }\n const preset = resolveOpenMeldEnvPreset(input);\n return join(\n resolveHomeDirectory(input),\n resolveDefaultOpenMeldHomeDirname(preset)\n );\n}\n\n/**\n * OS-level resources are shared by every process using the same environment\n * preset, even when a command uses an isolated OPENMELD_HOME. Their local\n * coordination files therefore live under the preset's canonical home.\n */\nexport function resolveOpenMeldPresetOwnedPathInput(\n input: OpenMeldPathResolutionInput = {}\n): OpenMeldPathResolutionInput {\n const env = { ...(input.env ?? process.env) };\n delete env[OPENMELD_HOME_ENV_KEY];\n return {\n ...input,\n env,\n };\n}\n\nexport function openMeldRootDir(): string {\n return resolveOpenMeldRootDir();\n}\n\n/**\n * Whether the effective OpenMeld home is the published `~/.openmeld` user lane.\n * Lane-specific homes (`openmeld-dev`, `openmeld-canary`, isolated dev lanes,\n * and other `OPENMELD_HOME` overrides) resolve elsewhere and must not manage\n * shared real-user state that the published lane owns.\n */\nexport function isPublishedOpenMeldHome(\n input: OpenMeldPathResolutionInput = {}\n): boolean {\n const publishedRootDir = join(\n resolveHomeDirectory(input),\n OPENMELD_DEFAULT_HOME_DIR_BY_PRESET.prod\n );\n return resolve(resolveOpenMeldRootDir(input)) === resolve(publishedRootDir);\n}\n\nexport function openMeldBackupsDir(): string {\n const root = openMeldRootDir();\n return join(dirname(root), `${basename(root)}-backups`);\n}\n\n// Managed binary layout (binary distribution only). Each installed version\n// lives under versions/<version>/openmeld; bin/openmeld is the current-version\n// pointer (a symlink) that install-self / update swap atomically. The layout is\n// lane-aware through resolveOpenMeldRootDir, so the dev lane uses\n// ~/.openmeld-dev/versions and ~/.openmeld-dev/bin.\nexport function openMeldVersionsDir(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(resolveOpenMeldRootDir(input), \"versions\");\n}\n\nexport function openMeldManagedVersionDir(\n version: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n openMeldVersionsDir(input),\n normalizePathSegment(version, \"unknown\")\n );\n}\n\nexport function openMeldManagedVersionBinaryPath(\n version: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(openMeldManagedVersionDir(version, input), \"openmeld\");\n}\n\nexport function openMeldBinDir(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(resolveOpenMeldRootDir(input), \"bin\");\n}\n\nexport function openMeldManagedBinaryPath(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(openMeldBinDir(input), \"openmeld\");\n}\n\nexport function accountsDir(): string {\n return join(openMeldRootDir(), \"accounts\");\n}\n\nexport function deviceDir(input: OpenMeldPathResolutionInput = {}): string {\n return join(resolveOpenMeldRootDir(input), \"device\");\n}\n\nexport function deviceDaemonDir(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceDir(input), \"daemon\");\n}\n\nexport function deviceSkillsDir(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceDir(input), \"skills\");\n}\n\nexport function devicePreferencesPath(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceDir(input), \"preferences.json\");\n}\n\nexport function deviceAgentRuntimePath(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceDir(input), \"agent-runtime.json\");\n}\n\nexport function deviceProvidersDir(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceDir(input), \"providers\");\n}\n\nexport function deviceProviderDir(\n providerId: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n deviceProvidersDir(input),\n normalizePathSegment(providerId, \"unknown\")\n );\n}\n\nexport function deviceProviderProfilesDir(\n providerId: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceProviderDir(providerId, input), \"profiles\");\n}\n\nexport function deviceProviderProfileDir(\n providerId: string,\n profileId: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n deviceProviderProfilesDir(providerId, input),\n normalizePathSegment(profileId, \"unknown\")\n );\n}\n\nexport function deviceOpenClawProfilesDir(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return deviceProviderProfilesDir(\"openclaw\", input);\n}\n\nexport function deviceOpenClawProfileDir(\n profileId: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return deviceProviderProfileDir(\"openclaw\", profileId, input);\n}\n\nexport function deviceOpenClawProfileWorkspaceDir(\n profileId: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceOpenClawProfileDir(profileId, input), \"workspace\");\n}\n\nexport function deviceOpenClawProfileBootstrapPath(\n profileId: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceOpenClawProfileDir(profileId, input), \"bootstrap.json\");\n}\n\nexport function deviceSkillsStorePath(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceSkillsDir(input), \"store.json\");\n}\n\nexport function deviceSkillsCustomTargetsPath(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceSkillsDir(input), \"custom-targets.json\");\n}\n\nexport function deviceSkillsInstallsPath(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(deviceSkillsDir(input), \"installs.json\");\n}\n\nexport function legacyRuntimeConfigPath(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(resolveOpenMeldRootDir(input), \"config.json\");\n}\n\nexport function normalizeAccountHostKey(value: unknown): string {\n return normalizePathSegment(value, FALLBACK_ACCOUNT_HOST_KEY);\n}\n\nexport function normalizeAccountUserKey(value: unknown): string {\n return normalizePathSegment(value, FALLBACK_ACCOUNT_USER_KEY);\n}\n\nexport function normalizeAccountKey(\n input: Partial<OpenMeldAccountKey>\n): OpenMeldAccountKey {\n return {\n hostKey: normalizeAccountHostKey(input.hostKey),\n userKey: normalizeAccountUserKey(input.userKey),\n };\n}\n\nexport function accountDir(account: OpenMeldAccountKey): string {\n const normalized = normalizeAccountKey(account);\n return join(accountsDir(), normalized.hostKey, normalized.userKey);\n}\n\nexport function accountProfilesDir(account: OpenMeldAccountKey): string {\n // TODO(v-next): optional `index/profiles.json` for write-through + read-through\n // refresh cache when profile listing becomes a local performance bottleneck.\n return join(accountDir(account), \"profiles\");\n}\n\nexport function accountProfileDir(\n account: OpenMeldAccountKey,\n openMeldProfileId: OpenMeldProfileId\n): string {\n // `local-meta.json` is the profile-local device envelope; workspace is one\n // section within it.\n return join(\n accountProfilesDir(account),\n normalizeOpenMeldProfileId(openMeldProfileId)\n );\n}\n\nexport function accountProfileViewPath(\n account: OpenMeldAccountKey,\n openMeldProfileId: OpenMeldProfileId\n): string {\n return join(accountProfileDir(account, openMeldProfileId), \"view.json\");\n}\n\nexport function accountProfileLocalMetaPath(\n account: OpenMeldAccountKey,\n openMeldProfileId: OpenMeldProfileId\n): string {\n return join(accountProfileDir(account, openMeldProfileId), \"local-meta.json\");\n}\n\nexport function accountProfileWorkspacePath(\n account: OpenMeldAccountKey,\n openMeldProfileId: OpenMeldProfileId\n): string {\n return join(accountProfileDir(account, openMeldProfileId), \"workspace\");\n}\n\nexport function accountProfileSpaceCacheDir(\n account: OpenMeldAccountKey,\n openMeldProfileId: OpenMeldProfileId\n): string {\n return join(accountProfileDir(account, openMeldProfileId), \"space-cache\");\n}\n\nexport function legacyAccountProfileSpacesDir(\n account: OpenMeldAccountKey,\n openMeldProfileId: OpenMeldProfileId\n): string {\n return join(accountProfileDir(account, openMeldProfileId), \"spaces\");\n}\n\nexport function profileDir(openMeldProfileId: OpenMeldProfileId): string {\n return join(openMeldRootDir(), \"profiles\", openMeldProfileId);\n}\n\nexport function runtimeDir(input: OpenMeldPathResolutionInput = {}): string {\n return join(resolveOpenMeldRootDir(input), \"runtime\");\n}\n\nexport function runtimeLogsDir(): string {\n return join(runtimeDir(), \"logs\");\n}\n\nexport function sessionsDir(): string {\n return join(runtimeDir(), \"sessions\");\n}\n\nexport function systemDir(input: OpenMeldPathResolutionInput = {}): string {\n return join(resolveOpenMeldRootDir(input), \"system\");\n}\n\nexport function skillsDir(): string {\n return join(openMeldRootDir(), \"skills\");\n}\n\nexport function organizationSkillsDir(\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(resolveOpenMeldRootDir(input), \"organization-skills\");\n}\n\nexport function organizationSkillReleaseDir(\n organizationId: string,\n skillId: string,\n releaseId: string,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n organizationSkillsDir(input),\n requireOpaqueCachePathSegment(organizationId, \"organizationId\"),\n requireOpaqueCachePathSegment(skillId, \"skillId\"),\n requireOpaqueCachePathSegment(releaseId, \"releaseId\")\n );\n}\n\nexport function profileIdentityPath(\n openMeldProfileId: OpenMeldProfileId\n): string {\n return join(profileDir(openMeldProfileId), \"profile.json\");\n}\n\nexport function spacesDir(openMeldProfileId: OpenMeldProfileId): string {\n return join(profileDir(openMeldProfileId), \"spaces\");\n}\n\nexport function locksDir(\n openMeldProfileId: OpenMeldProfileId,\n input: OpenMeldPathResolutionInput = {}\n): string {\n return join(runtimeDir(input), \"locks\", openMeldProfileId);\n}\n\nexport function profileViewPath(openMeldProfileId: OpenMeldProfileId): string {\n return join(profileDir(openMeldProfileId), \"view.json\");\n}\n\nfunction normalizePathSegment(value: unknown, fallback: string): string {\n const normalized = String(value ?? \"\")\n .trim()\n .toLowerCase();\n if (!normalized) {\n return fallback;\n }\n\n const safe = normalized.replace(/[^a-z0-9._-]+/g, \"_\");\n if (!safe) {\n return fallback;\n }\n\n if (safe === \".\" || safe === \"..\") {\n return fallback;\n }\n\n return safe.slice(0, MAX_ACCOUNT_PATH_SEGMENT_LENGTH);\n}\n\nfunction requireOpaqueCachePathSegment(value: unknown, label: string): string {\n const normalized = String(value ?? \"\").trim();\n if (\n normalized.length === 0 ||\n normalized.length > 256 ||\n normalized === \".\" ||\n normalized === \"..\" ||\n !OPAQUE_CACHE_PATH_SEGMENT_RE.test(normalized)\n ) {\n throw new Error(`${label} is not safe for the Organization Skills cache`);\n }\n return normalized;\n}\n\nfunction resolveOpenMeldEnvPresetFromArgv(argv: string[]): OpenMeldEnvPreset {\n return (\n resolveKnownOpenMeldEnvPresetFromArgv(argv) ?? DEFAULT_OPENMELD_ENV_PRESET\n );\n}\n\nexport function resolveKnownOpenMeldEnvPresetFromArgv(\n argv: string[]\n): OpenMeldEnvPreset | null {\n const entryName = resolveOpenMeldCliEntryNameFromArgv(argv);\n if (!entryName) {\n return null;\n }\n return OPENMELD_ENV_PRESET_BY_ENTRY_NAME[entryName] ?? null;\n}\n\nexport function resolveOpenMeldCliEntryNameFromArgv(\n argv: string[]\n): OpenMeldCliEntryName | null {\n return resolveCliEntryName(argv[1]);\n}\n\nfunction resolveCliEntryName(\n value: string | undefined\n): OpenMeldCliEntryName | null {\n const raw = String(value ?? \"\").trim();\n if (!raw) {\n return null;\n }\n const parsed = parse(raw);\n const normalizedName = parsed.name.trim().toLowerCase();\n if (!normalizedName) {\n return null;\n }\n if (!isOpenMeldCliEntryName(normalizedName)) {\n return null;\n }\n return normalizedName;\n}\n\nfunction isOpenMeldCliEntryName(value: string): value is OpenMeldCliEntryName {\n return value in OPENMELD_ENV_PRESET_BY_ENTRY_NAME;\n}\n\nfunction normalizeOpenMeldEnvPreset(\n value: string | undefined\n): OpenMeldEnvPreset | null {\n const normalized = String(value ?? \"\")\n .trim()\n .toLowerCase();\n if (\n normalized === \"prod\" ||\n normalized === \"dev-local\" ||\n normalized === \"canary\"\n ) {\n return normalized;\n }\n return null;\n}\n\nfunction resolveHomeDirectory(input: OpenMeldPathResolutionInput): string {\n if (input.homeDir) {\n return input.homeDir;\n }\n const env = input.env ?? process.env;\n const fromEnv = String(env.HOME ?? \"\").trim();\n if (fromEnv) {\n return fromEnv;\n }\n return homedir();\n}\n","import {\n formatLocalMachineIssueMessage,\n type LocalMachineIssue,\n type LocalMachineOperation,\n} from \"@openmeld/schemas\";\n\ntype LocalMachineFailureInput = {\n operation: LocalMachineOperation;\n error: unknown;\n};\n\nexport class LocalMachineFailureError extends Error {\n readonly code: LocalMachineIssue[\"code\"];\n readonly issue: LocalMachineIssue;\n\n constructor(input: { issue: LocalMachineIssue; cause?: unknown }) {\n super(formatLocalMachineIssueMessage(input.issue), {\n cause: input.cause,\n });\n this.name = \"LocalMachineFailureError\";\n this.code = input.issue.code;\n this.issue = input.issue;\n }\n}\n\nexport function isLocalMachineFailureError(\n error: unknown\n): error is LocalMachineFailureError {\n return error instanceof LocalMachineFailureError;\n}\n\nexport function toLocalMachineFailureError(\n input: LocalMachineFailureInput\n): LocalMachineFailureError {\n if (isLocalMachineFailureError(input.error)) {\n return input.error;\n }\n return new LocalMachineFailureError({\n issue: assessLocalMachineFailure(input),\n cause: input.error,\n });\n}\n\nexport function toRecognizedLocalMachineFailureError(\n input: LocalMachineFailureInput\n): LocalMachineFailureError | null {\n if (isLocalMachineFailureError(input.error)) {\n return input.error;\n }\n const issue = assessLocalMachineFailure(input);\n return issue.code === \"local_machine.failure.unknown\"\n ? null\n : new LocalMachineFailureError({\n issue,\n cause: input.error,\n });\n}\n\nexport function assessLocalMachineFailure(\n input: LocalMachineFailureInput\n): LocalMachineIssue {\n const systemCode = readSystemErrorCode(input.error);\n const detail = readErrorMessage(input.error);\n\n if (systemCode === \"ENOSPC\" || systemCode === \"EDQUOT\") {\n return {\n schemaVersion: 1,\n code: \"local_machine.storage.exhausted\",\n operation: input.operation,\n recoveryPolicy: \"user_action\",\n summary:\n \"Your computer is out of storage space. OpenMeld can't save the local files it needs.\",\n primaryAction: \"Free up storage, then try again.\",\n diagnostics: {\n systemCode,\n detail,\n },\n };\n }\n\n if (\n systemCode === \"EROFS\" ||\n ((input.operation === \"create_lock\" ||\n input.operation === \"write_local_state\") &&\n (systemCode === \"EACCES\" || systemCode === \"EPERM\"))\n ) {\n return {\n schemaVersion: 1,\n code: \"local_machine.storage.not_writable\",\n operation: input.operation,\n recoveryPolicy: \"user_action\",\n summary: \"OpenMeld can't write to its local data folder.\",\n primaryAction: \"Make sure the folder is writable, then try again.\",\n diagnostics: {\n systemCode,\n detail,\n },\n };\n }\n\n if (\n systemCode === \"EACCES\" ||\n systemCode === \"EPERM\" ||\n systemCode === \"EROFS\"\n ) {\n return {\n schemaVersion: 1,\n code: \"local_machine.permission.denied\",\n operation: input.operation,\n recoveryPolicy: \"user_action\",\n summary:\n \"OpenMeld doesn't have permission to complete local setup on this computer.\",\n primaryAction:\n \"Allow OpenMeld to access its local files and background services, then try again.\",\n diagnostics: {\n systemCode,\n detail,\n },\n };\n }\n\n if (\n systemCode === \"EMFILE\" ||\n systemCode === \"ENFILE\" ||\n systemCode === \"ENOMEM\"\n ) {\n return {\n schemaVersion: 1,\n code: \"local_machine.resources.exhausted\",\n operation: input.operation,\n recoveryPolicy: \"user_action\",\n summary:\n \"Your computer doesn't have enough available system resources for OpenMeld to continue.\",\n primaryAction: \"Restart your computer, then try again.\",\n diagnostics: {\n systemCode,\n detail,\n },\n };\n }\n\n return {\n schemaVersion: 1,\n code: \"local_machine.failure.unknown\",\n operation: input.operation,\n recoveryPolicy: \"diagnostics\",\n summary: \"OpenMeld couldn't complete a required action on this computer.\",\n primaryAction: \"Try again. If it still fails, open diagnostics.\",\n diagnostics: {\n systemCode,\n detail,\n },\n };\n}\n\nexport function createBackgroundExecutionBlockedIssue(input: {\n detail?: string | null;\n}): LocalMachineIssue {\n return {\n schemaVersion: 1,\n code: \"local_machine.background_execution.blocked\",\n operation: \"start_background_service\",\n recoveryPolicy: \"user_action\",\n summary: \"macOS blocked OpenMeld Service from running in the background.\",\n primaryAction:\n \"Open System Settings > General > Login Items & Extensions, enable OpenMeld, then try again.\",\n diagnostics: {\n systemCode: \"BACKGROUND_EXECUTION_BLOCKED\",\n detail: input.detail?.trim().slice(0, 2048) || null,\n },\n };\n}\n\nexport function createActiveSetupConcurrencyIssue(input: {\n detail?: string | null;\n primaryAction: string;\n}): LocalMachineIssue {\n return {\n schemaVersion: 1,\n code: \"local_machine.concurrency.active\",\n operation: \"create_lock\",\n recoveryPolicy: \"user_action\",\n summary: \"Another OpenMeld setup is already running on this computer.\",\n primaryAction: input.primaryAction,\n diagnostics: {\n systemCode: \"OPENMELD_LOCK_ACTIVE\",\n detail: input.detail?.trim().slice(0, 2048) || null,\n },\n };\n}\n\nexport function createOrphanedSetupConcurrencyIssue(input: {\n detail?: string | null;\n primaryAction: string;\n}): LocalMachineIssue {\n return createOrphanedLocalConcurrencyIssue({\n ...input,\n summary: \"OpenMeld found a setup lock left by an older version.\",\n });\n}\n\nexport function createOrphanedLocalConcurrencyIssue(input: {\n detail?: string | null;\n primaryAction: string;\n summary: string;\n}): LocalMachineIssue {\n return {\n schemaVersion: 1,\n code: \"local_machine.concurrency.orphaned\",\n operation: \"create_lock\",\n recoveryPolicy: \"user_action\",\n summary: input.summary,\n primaryAction: input.primaryAction,\n diagnostics: {\n systemCode: \"OPENMELD_LOCK_ORPHANED\",\n detail: input.detail?.trim().slice(0, 2048) || null,\n },\n };\n}\n\nfunction readSystemErrorCode(error: unknown): string | null {\n if (!error || typeof error !== \"object\") {\n return null;\n }\n const code = (error as { code?: unknown }).code;\n return typeof code === \"string\" && code.trim().length > 0 ? code : null;\n}\n\nfunction readErrorMessage(error: unknown): string | null {\n if (error instanceof Error && error.message.trim().length > 0) {\n return error.message.trim().slice(0, 2048);\n }\n if (typeof error === \"string\" && error.trim().length > 0) {\n return error.trim().slice(0, 2048);\n }\n return null;\n}\n","import {\n type OpenMeldEnvPreset,\n resolveOpenMeldEnvPreset,\n resolveOpenMeldRootDir,\n} from \"./paths\";\n\nexport type OpenMeldLaneDescriptor = {\n command: \"openmeld\" | \"openmeld-dev\" | \"openmeld-canary\";\n preset: OpenMeldEnvPreset;\n openMeldHome: string;\n destructiveResetAllowed: boolean;\n repairCommand: string;\n removeCommand: string | null;\n resetCommand: string;\n};\n\nexport function resolveOpenMeldLaneDescriptor(input?: {\n env?: NodeJS.ProcessEnv;\n argv?: string[];\n homeDir?: string;\n}): OpenMeldLaneDescriptor {\n const env = input?.env ?? process.env;\n const preset = resolveOpenMeldEnvPreset({\n argv: input?.argv,\n env,\n homeDir: input?.homeDir,\n });\n const command = resolveLaneCommand(preset);\n return {\n command,\n preset,\n openMeldHome: resolveOpenMeldRootDir({\n argv: input?.argv,\n env,\n homeDir: input?.homeDir,\n }),\n destructiveResetAllowed: true,\n repairCommand: `${command} repair local-state`,\n removeCommand: preset === \"canary\" ? \"pnpm openmeld:canary:remove\" : null,\n resetCommand: `${command} reset --yes`,\n };\n}\n\nexport function formatLaneScopeSentence(\n lane: Pick<OpenMeldLaneDescriptor, \"openMeldHome\" | \"command\">\n): string {\n return `This only affects the ${lane.command} lane at ${lane.openMeldHome}.`;\n}\n\nexport function buildLaneScopedCleanupGuidance(\n lane: Pick<\n OpenMeldLaneDescriptor,\n \"command\" | \"repairCommand\" | \"removeCommand\"\n >\n): string {\n const commands = [`\\`${lane.repairCommand}\\``];\n if (lane.removeCommand) {\n commands.unshift(`\\`${lane.removeCommand}\\``);\n }\n return `Optional cleanup for this lane: run ${commands.join(\" or \")}.`;\n}\n\nfunction resolveLaneCommand(\n preset: OpenMeldEnvPreset\n): OpenMeldLaneDescriptor[\"command\"] {\n if (preset === \"dev-local\") {\n return \"openmeld-dev\";\n }\n if (preset === \"canary\") {\n return \"openmeld-canary\";\n }\n return \"openmeld\";\n}\n","import { createHash } from \"node:crypto\";\nimport { mkdir, open, readdir, readFile, rename, rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n normalizeOpenMeldProfileId,\n type OpenMeldProfileId,\n sessionsDir,\n} from \"./paths\";\n\nexport const OPENMELD_CLI_CONTEXT_ENV_KEY = \"OPENMELD_CLI_CONTEXT_ID\";\nexport const LEGACY_OPENMELD_AGENT_SESSION_ENV_KEY =\n \"OPENMELD_AGENT_SESSION_ID\";\n\nexport const CLI_CONTEXT_ENV_KEYS = [\n OPENMELD_CLI_CONTEXT_ENV_KEY,\n LEGACY_OPENMELD_AGENT_SESSION_ENV_KEY,\n] as const;\n\nconst SESSION_FILE_MAX_LENGTH = 128;\nconst SESSION_FILE_HASH_LENGTH = 8;\n\nexport type CliContextResolution = {\n cliContextId: string;\n source: string;\n};\n\nexport type CliContextStateV1 = {\n v: 1;\n sessionId: string;\n updatedAt: string;\n cliContextSource?: string;\n openMeldProfileId?: string;\n selectedOpenMeldProfileId?: string;\n};\n\nexport function resolveCliContext(\n profileIdInput?: string\n): CliContextResolution | null {\n const explicit = normalizeSessionId(profileIdInput);\n if (explicit) {\n return {\n cliContextId: explicit,\n source: \"manual\",\n };\n }\n\n for (const key of CLI_CONTEXT_ENV_KEYS) {\n const sessionId = normalizeSessionId(process.env[key]);\n if (sessionId) {\n return {\n cliContextId: sessionId,\n source: `environment:${key}`,\n };\n }\n }\n\n return resolveTerminalSessionId();\n}\n\nexport function resolveCliContextId(profileIdInput?: string): string | null {\n return resolveCliContext(profileIdInput)?.cliContextId ?? null;\n}\n\nexport function buildSessionProfilePayload(\n session: CliContextResolution,\n openMeldProfileId: OpenMeldProfileId\n): CliContextStateV1 {\n return {\n v: 1,\n sessionId: session.cliContextId,\n cliContextSource: session.source,\n openMeldProfileId: normalizeOpenMeldProfileId(openMeldProfileId),\n updatedAt: new Date().toISOString(),\n };\n}\n\nexport function formatCliContextSource(source: string): string {\n if (source === \"manual\") {\n return \"manual\";\n }\n if (source.startsWith(\"environment:\")) {\n return `environment:${source.slice(\"environment:\".length)}`;\n }\n if (source.startsWith(\"terminal:\")) {\n return \"terminal-fingerprint\";\n }\n return source;\n}\n\nexport function normalizeCliContextResolution(\n value: unknown\n): CliContextResolution | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n\n const maybe = value as {\n cliContextId?: unknown;\n source?: unknown;\n };\n const cliContextId = normalizeSessionId(maybe.cliContextId);\n const source = normalizeSessionSource(maybe.source);\n if (!(cliContextId && source)) {\n return null;\n }\n\n return { cliContextId, source };\n}\n\nfunction normalizeSessionSource(raw: unknown): string | null {\n const value = String(raw ?? \"\").trim();\n if (!value) {\n return null;\n }\n return value;\n}\n\nexport async function setSessionOpenMeldProfileId(\n openMeldProfileId: OpenMeldProfileId\n): Promise<boolean> {\n return await writeCliContextState({\n openMeldProfileId,\n });\n}\n\nexport async function getSessionOpenMeldProfileId(): Promise<OpenMeldProfileId | null> {\n return (await readCliContextState())?.openMeldProfileId ?? null;\n}\n\nexport async function clearSessionOpenMeldProfileId(): Promise<boolean> {\n return await writeCliContextState({\n openMeldProfileId: null,\n });\n}\n\nexport async function readCliContextState(input?: {\n sessionId?: string;\n}): Promise<CliContextStateV1 | null> {\n const cliContextId = resolveSessionStateId(input?.sessionId);\n if (!cliContextId) {\n return null;\n }\n\n const raw = await readFile(cliContextStatePath(cliContextId), \"utf8\").catch(\n () => null\n );\n if (!raw) {\n return null;\n }\n\n return parseCliContextState(raw);\n}\n\nexport async function listCliContextStates(): Promise<CliContextStateV1[]> {\n const entryNames = await readdir(sessionsDir()).catch(() => []);\n const states: CliContextStateV1[] = [];\n for (const entryName of entryNames) {\n if (!entryName.endsWith(\".json\")) {\n continue;\n }\n const raw = await readFile(join(sessionsDir(), entryName), \"utf8\").catch(\n () => null\n );\n if (!raw) {\n continue;\n }\n const parsed = parseCliContextState(raw);\n if (!parsed) {\n continue;\n }\n states.push(parsed);\n }\n return states.sort((left, right) =>\n left.sessionId.localeCompare(right.sessionId)\n );\n}\n\nexport async function writeCliContextState(input: {\n sessionId?: string;\n sessionSource?: string;\n openMeldProfileId?: string | null;\n selectedOpenMeldProfileId?: string | null;\n}): Promise<boolean> {\n const cliContext = resolveCliContextStateInput(input) ?? resolveCliContext();\n if (!cliContext) {\n return false;\n }\n\n await mkdir(sessionsDir(), { recursive: true });\n const existing = await readCliContextState({\n sessionId: cliContext.cliContextId,\n });\n const nextOpenMeldProfileId = resolveNextSessionOpenMeldProfileId(\n existing,\n input\n );\n const nextSelectedOpenMeldProfileId = resolveNextSelectedOpenMeldProfileId(\n existing,\n input\n );\n const outputPath = cliContextStatePath(cliContext.cliContextId);\n\n if (!(nextOpenMeldProfileId || nextSelectedOpenMeldProfileId)) {\n await rm(outputPath, { force: true });\n return true;\n }\n\n const payload: CliContextStateV1 = {\n v: 1,\n sessionId: cliContext.cliContextId,\n cliContextSource:\n cliContext.source ?? existing?.cliContextSource ?? \"manual\",\n ...(nextOpenMeldProfileId\n ? { openMeldProfileId: nextOpenMeldProfileId }\n : {}),\n ...(nextSelectedOpenMeldProfileId\n ? { selectedOpenMeldProfileId: nextSelectedOpenMeldProfileId }\n : {}),\n updatedAt: new Date().toISOString(),\n };\n\n await writeCliContextStateFile(outputPath, payload);\n return true;\n}\n\nexport function cliContextStatePath(sessionId: string): string {\n return join(sessionsDir(), `${toSafeSessionFile(sessionId)}.json`);\n}\n\nfunction toSafeSessionFile(value: string): string {\n const hash = createHash(\"sha1\")\n .update(value, \"utf8\")\n .digest(\"hex\")\n .slice(0, SESSION_FILE_HASH_LENGTH);\n const safeBaseRaw = value.replace(/[^a-zA-Z0-9._-]+/g, \"_\");\n const safeBase = safeBaseRaw.length > 0 ? safeBaseRaw : \"session\";\n const maxBaseLength = Math.max(\n 1,\n SESSION_FILE_MAX_LENGTH - SESSION_FILE_HASH_LENGTH - 1\n );\n const truncatedBase = safeBase.slice(0, maxBaseLength);\n return `${truncatedBase}-${hash}`;\n}\n\nfunction resolveCliContextStateInput(input: {\n sessionId?: string;\n sessionSource?: string;\n}): CliContextResolution | null {\n const sessionId = normalizeSessionId(input.sessionId);\n if (!sessionId) {\n return null;\n }\n return {\n cliContextId: sessionId,\n source: normalizeSessionSource(input.sessionSource) ?? \"manual\",\n };\n}\n\nfunction resolveSessionStateId(sessionId?: string): string | null {\n const explicit = normalizeSessionId(sessionId);\n if (explicit) {\n return explicit;\n }\n return resolveCliContext()?.cliContextId ?? null;\n}\n\nfunction parseCliContextState(raw: string): CliContextStateV1 | null {\n let parsed: Partial<CliContextStateV1> & {\n profile?: unknown;\n };\n try {\n parsed = JSON.parse(raw) as Partial<CliContextStateV1> & {\n profile?: unknown;\n };\n } catch {\n return null;\n }\n\n if (parsed.v !== 1) {\n return null;\n }\n const sessionId = normalizeSessionId(parsed.sessionId);\n if (!sessionId) {\n return null;\n }\n const openMeldProfileId = resolveStoredSessionOpenMeldProfileId(parsed);\n const selectedOpenMeldProfileId =\n resolveStoredSelectedOpenMeldProfileId(parsed);\n if (!(openMeldProfileId || selectedOpenMeldProfileId)) {\n return null;\n }\n const cliContextSource = normalizeSessionSource(parsed.cliContextSource);\n return {\n v: 1,\n sessionId,\n ...(cliContextSource ? { cliContextSource } : {}),\n ...(openMeldProfileId ? { openMeldProfileId } : {}),\n ...(selectedOpenMeldProfileId ? { selectedOpenMeldProfileId } : {}),\n updatedAt:\n typeof parsed.updatedAt === \"string\" && parsed.updatedAt.trim().length > 0\n ? parsed.updatedAt\n : new Date(0).toISOString(),\n };\n}\n\nfunction resolveNextSessionOpenMeldProfileId(\n existing: CliContextStateV1 | null,\n input: {\n openMeldProfileId?: string | null;\n selectedOpenMeldProfileId?: string | null;\n }\n): string | undefined {\n if (!(\"openMeldProfileId\" in input)) {\n return existing?.openMeldProfileId;\n }\n return (\n normalizeOptionalOpenMeldProfileId(input.openMeldProfileId) ?? undefined\n );\n}\n\nfunction resolveNextSelectedOpenMeldProfileId(\n existing: CliContextStateV1 | null,\n input: {\n openMeldProfileId?: string | null;\n selectedOpenMeldProfileId?: string | null;\n }\n): string | undefined {\n if (!(\"selectedOpenMeldProfileId\" in input)) {\n return existing?.selectedOpenMeldProfileId;\n }\n return (\n normalizeOptionalOpenMeldProfileId(input.selectedOpenMeldProfileId) ??\n undefined\n );\n}\n\nasync function writeCliContextStateFile(\n outputPath: string,\n payload: CliContextStateV1\n): Promise<void> {\n const tempPath = `${outputPath}.tmp-${process.pid}-${Date.now()}`;\n const file = await open(tempPath, \"w\");\n let writeFailure: unknown = null;\n try {\n await file.writeFile(`${JSON.stringify(payload, null, 2)}\\n`, \"utf8\");\n await file.sync();\n } catch (error) {\n writeFailure = error;\n }\n try {\n await file.close();\n } catch (error) {\n if (!writeFailure) {\n writeFailure = error;\n }\n }\n if (writeFailure) {\n await rm(tempPath, { force: true }).catch(() => undefined);\n throw writeFailure;\n }\n\n try {\n await rename(tempPath, outputPath);\n } catch (error) {\n await rm(tempPath, { force: true }).catch(() => undefined);\n throw error;\n }\n}\n\nfunction normalizeSessionId(value: unknown): string | null {\n const raw = String(value ?? \"\").trim();\n if (!raw) {\n return null;\n }\n return raw.slice(0, 256);\n}\n\nfunction resolveTerminalSessionId(): CliContextResolution | null {\n if (!(process.stdin.isTTY || process.stdout.isTTY)) {\n return null;\n }\n\n const parentPid = Number(process.ppid);\n if (!Number.isInteger(parentPid) || parentPid <= 1) {\n return null;\n }\n\n return {\n cliContextId: `terminal-ppid-${parentPid}`,\n source: `terminal:ppid-${parentPid}`,\n };\n}\n\nfunction resolveStoredSessionOpenMeldProfileId(input: {\n openMeldProfileId?: unknown;\n profile?: unknown;\n}): OpenMeldProfileId | null {\n const openMeldProfileId = normalizeOptionalOpenMeldProfileId(\n input.openMeldProfileId\n );\n const legacyProfile = normalizeOptionalOpenMeldProfileId(input.profile);\n if (\n openMeldProfileId &&\n legacyProfile &&\n openMeldProfileId !== legacyProfile\n ) {\n throw new Error(\n `conflicting stored OpenMeld profile identity: openMeldProfileId=${openMeldProfileId}, profile=${legacyProfile}. Remove or reconcile the legacy profile field so it matches openMeldProfileId.`\n );\n }\n return openMeldProfileId ?? legacyProfile;\n}\n\nfunction resolveStoredSelectedOpenMeldProfileId(input: {\n selectedOpenMeldProfileId?: unknown;\n}): OpenMeldProfileId | null {\n return normalizeOptionalOpenMeldProfileId(input.selectedOpenMeldProfileId);\n}\n\nfunction normalizeOptionalOpenMeldProfileId(\n value: unknown\n): OpenMeldProfileId | null {\n if (typeof value !== \"string\") {\n return null;\n }\n try {\n return normalizeOpenMeldProfileId(value);\n } catch {\n return null;\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport { rmdirSync, unlinkSync } from \"node:fs\";\nimport {\n lstat,\n mkdir,\n open,\n readdir,\n rmdir,\n unlink,\n writeFile,\n} from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport process from \"node:process\";\nimport type { LocalMachineIssue } from \"@openmeld/schemas\";\nimport {\n createOrphanedLocalConcurrencyIssue,\n toRecognizedLocalMachineFailureError,\n} from \"../system/local-machine-recovery\";\nimport { resolveOpenMeldLaneDescriptor } from \"./openmeld-lane-descriptor\";\nimport {\n normalizeOpenMeldProfileId,\n type OpenMeldPathResolutionInput,\n locksDir as resolveLocksDir,\n runtimeDir as resolveRuntimeDir,\n} from \"./paths\";\nimport { resolveCliContextId } from \"./session-profile\";\n\nexport type OpenMeldLock = {\n ownerId: string;\n path: string;\n};\n\nexport type OpenMeldLockMeta = Record<string, unknown>;\nexport type OpenMeldLockContentionState = \"active\" | \"orphaned\" | \"unknown\";\nexport type OpenMeldLegacyLockRepairReport = {\n removedOrphanedLegacyLocks: number;\n};\ntype HeldLockReleaseContext = Record<string, unknown>;\nconst MALFORMED_LOCK_RECOVERY_GRACE_MS = 30_000;\nconst OPENMELD_ORPHANED_LOCK_SUMMARY =\n \"OpenMeld found a local command lock left by an older version.\";\n\nexport class OpenMeldLockError extends Error {\n readonly code = \"openmeld.locked\";\n readonly lockPath: string;\n readonly lockKey: string;\n readonly metaRaw: string | null;\n readonly meta: OpenMeldLockMeta | null;\n readonly contentionState: OpenMeldLockContentionState;\n\n constructor(input: {\n path: string;\n key: string;\n metaRaw?: string;\n contentionState?: OpenMeldLockContentionState;\n }) {\n const normalizedMetaRaw = normalizeMetaRaw(input.metaRaw);\n const contentionState = input.contentionState ?? \"unknown\";\n super(\n buildOpenMeldLockErrorMessage(\n input.path,\n normalizedMetaRaw,\n contentionState\n )\n );\n this.name = \"OpenMeldLockError\";\n this.lockPath = input.path;\n this.lockKey = input.key;\n this.metaRaw = normalizedMetaRaw;\n this.meta = parseOpenMeldLockMeta(normalizedMetaRaw);\n this.contentionState = contentionState;\n }\n}\n\nexport function isOpenMeldLockError(\n error: unknown\n): error is OpenMeldLockError {\n return error instanceof OpenMeldLockError;\n}\n\nexport function isOpenMeldOrphanedLockError(\n error: unknown\n): error is OpenMeldLockError {\n return isOpenMeldLockError(error) && error.contentionState === \"orphaned\";\n}\n\nexport function resolveOpenMeldOrphanedLockIssue(\n error: unknown\n): LocalMachineIssue | null {\n if (!isOpenMeldOrphanedLockError(error)) {\n return null;\n }\n return createOrphanedLocalConcurrencyIssue({\n summary: OPENMELD_ORPHANED_LOCK_SUMMARY,\n primaryAction: buildOpenMeldOrphanedLockAction(),\n detail: error.message,\n });\n}\n\nexport function buildOpenMeldOrphanedLockAction(): string {\n const repairCommand = resolveOpenMeldLaneDescriptor().repairCommand;\n return `Close any other OpenMeld commands, then run \\`${repairCommand}\\` and try again.`;\n}\n\nexport async function acquireLock(input: {\n openMeldProfileId: string;\n key: string;\n meta?: OpenMeldLockMeta;\n pathResolution?: OpenMeldPathResolutionInput;\n}): Promise<OpenMeldLock> {\n const openMeldProfileId = normalizeOpenMeldProfileId(input.openMeldProfileId);\n const sessionId = resolveCliContextId();\n const dir = resolveLocksDir(openMeldProfileId, input.pathResolution);\n const path = resolveLockPath({\n openMeldProfileId,\n key: input.key,\n pathResolution: input.pathResolution,\n });\n const ownerId = randomUUID();\n try {\n await mkdir(dir, { recursive: true });\n } catch (error) {\n throwRecognizedLocalMachineFailure({\n operation: \"create_lock\",\n error,\n });\n }\n\n // A directory is the atomic ownership boundary. Its owner-specific entry\n // lets release remove only the lock it acquired, even if another process\n // publishes a replacement at the same canonical path.\n for (let attempt = 0; attempt < 2; attempt++) {\n const contents = `${JSON.stringify({\n ...(input.meta ? { ...input.meta } : {}),\n pid: process.pid,\n openMeldProfileId,\n ...(sessionId ? { sessionId } : {}),\n at: new Date().toISOString(),\n ownerId,\n })}\\n`;\n let published: boolean;\n try {\n published = await tryPublishLock(path, ownerId, contents);\n } catch (error) {\n throwRecognizedLocalMachineFailure({\n operation: \"create_lock\",\n error,\n });\n }\n if (published) {\n return { ownerId, path };\n }\n\n try {\n const existingLock = await readLockSnapshot(path);\n if (\n !existingLock.exists ||\n (await tryCleanupStaleLockPath(path, existingLock))\n ) {\n continue;\n }\n\n throw new OpenMeldLockError({\n path,\n key: input.key,\n metaRaw: existingLock.metaRaw ?? undefined,\n contentionState: resolveLockContentionState(existingLock),\n });\n } catch (error) {\n if (isOpenMeldLockError(error)) {\n throw error;\n }\n throwRecognizedLocalMachineFailure({\n operation: \"create_lock\",\n error,\n });\n }\n }\n\n throw new OpenMeldLockError({\n path,\n key: input.key,\n });\n}\n\nexport async function releaseLock(lock: OpenMeldLock): Promise<void> {\n const removedOwnerEntry = await unlinkOwnedDirectoryEntry(lock);\n if (!removedOwnerEntry) {\n return;\n }\n await rmdir(lock.path);\n}\n\nexport function releaseLockSync(lock: OpenMeldLock): void {\n try {\n unlinkSync(resolveOwnerEntryPath(lock.path, lock.ownerId));\n } catch (error) {\n if (getErrorCode(error) === \"ENOENT\" || getErrorCode(error) === \"ENOTDIR\") {\n return;\n }\n throw error;\n }\n\n try {\n rmdirSync(lock.path);\n } catch (error) {\n if (getErrorCode(error) === \"ENOENT\") {\n return;\n }\n throw error;\n }\n}\n\nexport async function runWithCleanupPreservingRunError<T>(input: {\n run: () => Promise<T>;\n cleanup: () => Promise<void>;\n onCleanupErrorAfterRunFailure?: (cleanupError: unknown) => void;\n}): Promise<T> {\n let runResult: T | undefined;\n let runSucceeded = false;\n let runError: unknown;\n\n try {\n runResult = await input.run();\n runSucceeded = true;\n } catch (error) {\n runError = error;\n }\n\n try {\n await input.cleanup();\n } catch (cleanupError) {\n if (!runSucceeded) {\n input.onCleanupErrorAfterRunFailure?.(cleanupError);\n throw runError;\n }\n throw cleanupError;\n }\n\n if (!runSucceeded) {\n throw runError;\n }\n\n return runResult as T;\n}\n\nexport async function runWithHeldLock<T>(input: {\n lock: OpenMeldLock;\n run: () => Promise<T>;\n releaseContext?: HeldLockReleaseContext;\n}): Promise<T> {\n return await runWithCleanupPreservingRunError({\n run: input.run,\n cleanup: () => releaseLock(input.lock),\n onCleanupErrorAfterRunFailure: (releaseError) => {\n warnLockReleaseFailure({\n error: releaseError,\n lock: input.lock,\n releaseContext: input.releaseContext,\n });\n },\n });\n}\n\nexport async function readLockMeta(input: {\n openMeldProfileId: string;\n key: string;\n pathResolution?: OpenMeldPathResolutionInput;\n}): Promise<OpenMeldLockMeta | null> {\n const existingLock = await readLockSnapshot(\n resolveLockPath({\n openMeldProfileId: input.openMeldProfileId,\n key: input.key,\n pathResolution: input.pathResolution,\n })\n );\n return existingLock.meta;\n}\n\nexport async function tryCleanupStaleLock(input: {\n openMeldProfileId: string;\n key: string;\n pathResolution?: OpenMeldPathResolutionInput;\n}): Promise<boolean> {\n return await tryCleanupStaleLockPath(\n resolveLockPath({\n openMeldProfileId: input.openMeldProfileId,\n key: input.key,\n pathResolution: input.pathResolution,\n })\n );\n}\n\nexport async function repairOrphanedLegacyLock(input: {\n openMeldProfileId: string;\n key: string;\n}): Promise<boolean> {\n const path = resolveLockPath({\n openMeldProfileId: input.openMeldProfileId,\n key: input.key,\n });\n return await repairOrphanedLegacyLockPath(path);\n}\n\nexport async function repairOrphanedLegacyLocks(): Promise<OpenMeldLegacyLockRepairReport> {\n const locksRootPath = join(resolveRuntimeDir(), \"locks\");\n const profileEntries = await readDirectoryEntries(locksRootPath);\n let removedOrphanedLegacyLocks = 0;\n\n for (const profileEntry of profileEntries.sort((left, right) =>\n left.name.localeCompare(right.name)\n )) {\n if (!profileEntry.isDirectory()) {\n continue;\n }\n const profileLocksPath = join(locksRootPath, profileEntry.name);\n const lockEntries = await readDirectoryEntries(profileLocksPath);\n for (const lockEntry of lockEntries.sort((left, right) =>\n left.name.localeCompare(right.name)\n )) {\n if (!(lockEntry.isFile() && lockEntry.name.endsWith(\".lock\"))) {\n continue;\n }\n if (\n await repairOrphanedLegacyLockPath(\n join(profileLocksPath, lockEntry.name)\n )\n ) {\n removedOrphanedLegacyLocks += 1;\n }\n }\n }\n\n return { removedOrphanedLegacyLocks };\n}\n\nasync function repairOrphanedLegacyLockPath(path: string): Promise<boolean> {\n const firstSnapshot = await readLockSnapshot(path);\n if (\n firstSnapshot.storageKind !== \"legacy_file\" ||\n !isRecoverableStaleLock(firstSnapshot)\n ) {\n return false;\n }\n\n const confirmedSnapshot = await readLockSnapshot(path);\n if (!isSameRecoverableLockSnapshot(firstSnapshot, confirmedSnapshot)) {\n return false;\n }\n\n try {\n // Ordinary lock acquisition never unlinks legacy files because an older\n // client may replace one concurrently. This path is reserved for the\n // explicit local-state repair action after the user has closed other\n // OpenMeld commands that could publish a legacy lock at this path.\n await unlink(path);\n return true;\n } catch (error) {\n if (getErrorCode(error) === \"ENOENT\" || getErrorCode(error) === \"EISDIR\") {\n return false;\n }\n throw error;\n }\n}\n\nasync function readDirectoryEntries(path: string) {\n return await readdir(path, { withFileTypes: true }).catch((error) => {\n if (getErrorCode(error) === \"ENOENT\") {\n return [];\n }\n throw error;\n });\n}\n\ntype LockSnapshot = {\n exists: boolean;\n fileIdentity: string | null;\n ownerEntryName: string | null;\n modifiedAtMs: number | null;\n metaRaw: string | null;\n meta: OpenMeldLockMeta | null;\n pid: number | null;\n hasStalePid: boolean;\n storageKind: \"directory\" | \"legacy_file\" | null;\n};\n\nfunction resolveLockPath(input: {\n openMeldProfileId: string;\n key: string;\n pathResolution?: OpenMeldPathResolutionInput;\n}): string {\n const openMeldProfileId = normalizeOpenMeldProfileId(input.openMeldProfileId);\n return join(\n resolveLocksDir(openMeldProfileId, input.pathResolution),\n `${sanitizeFilename(input.key)}.lock`\n );\n}\n\nfunction sanitizeFilename(value: string): string {\n return value.replace(/[^a-zA-Z0-9._-]+/g, \"_\");\n}\n\nfunction safeParse(value: string): unknown {\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n}\n\nfunction normalizeMetaRaw(metaRaw: string | undefined): string | null {\n if (typeof metaRaw !== \"string\") {\n return null;\n }\n const normalized = metaRaw.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nfunction parseOpenMeldLockMeta(\n metaRaw: string | null\n): OpenMeldLockMeta | null {\n if (!metaRaw) {\n return null;\n }\n const parsed = safeParse(metaRaw);\n if (!parsed || typeof parsed !== \"object\") {\n return null;\n }\n return parsed as OpenMeldLockMeta;\n}\n\nfunction buildOpenMeldLockErrorMessage(\n path: string,\n metaRaw: string | null,\n contentionState: OpenMeldLockContentionState\n): string {\n const lockDetail = metaRaw\n ? `space is locked (${path}). Meta: ${metaRaw}`\n : `space is locked (${path})`;\n if (contentionState !== \"orphaned\") {\n return lockDetail;\n }\n return `${lockDetail}. ${OPENMELD_ORPHANED_LOCK_SUMMARY} ${buildOpenMeldOrphanedLockAction()}`;\n}\n\nfunction getPidFromMeta(meta: unknown): number | null {\n if (!meta || typeof meta !== \"object\") {\n return null;\n }\n const pid = (meta as Record<string, unknown>).pid;\n return typeof pid === \"number\" ? pid : null;\n}\n\nfunction missingLockSnapshot(): LockSnapshot {\n return {\n exists: false,\n fileIdentity: null,\n ownerEntryName: null,\n modifiedAtMs: null,\n metaRaw: null,\n meta: null,\n pid: null,\n hasStalePid: false,\n storageKind: null,\n };\n}\n\nasync function readLockSnapshot(\n path: string,\n remainingRaceRetries = 2\n): Promise<LockSnapshot> {\n const pathStats = await lstat(path).catch((error) => {\n if (getErrorCode(error) === \"ENOENT\") {\n return null;\n }\n throw error;\n });\n if (!pathStats) {\n return missingLockSnapshot();\n }\n\n if (pathStats.isDirectory()) {\n try {\n return await readDirectoryLockSnapshot(path, pathStats);\n } catch (error) {\n if (\n remainingRaceRetries > 0 &&\n (getErrorCode(error) === \"ENOENT\" || getErrorCode(error) === \"ENOTDIR\")\n ) {\n return await readLockSnapshot(path, remainingRaceRetries - 1);\n }\n throw error;\n }\n }\n\n const handle = await open(path, \"r\").catch((error) => {\n if (getErrorCode(error) === \"ENOENT\") {\n return null;\n }\n if (remainingRaceRetries > 0 && getErrorCode(error) === \"EISDIR\") {\n return \"retry\" as const;\n }\n throw error;\n });\n if (handle === \"retry\") {\n return await readLockSnapshot(path, remainingRaceRetries - 1);\n }\n if (!handle) {\n return missingLockSnapshot();\n }\n\n try {\n const [metaRaw, stats] = await Promise.all([\n handle.readFile(\"utf8\"),\n handle.stat(),\n ]);\n const normalizedMetaRaw = normalizeMetaRaw(metaRaw);\n const meta = parseOpenMeldLockMeta(normalizedMetaRaw);\n const pid = getPidFromMeta(meta);\n return {\n exists: true,\n fileIdentity: `${stats.dev}:${stats.ino}:${stats.mtimeMs}:${stats.size}`,\n ownerEntryName: null,\n modifiedAtMs: stats.mtimeMs,\n metaRaw: normalizedMetaRaw,\n meta,\n pid,\n hasStalePid: pid !== null && !isPidAlive(pid),\n storageKind: \"legacy_file\",\n };\n } finally {\n await handle.close();\n }\n}\n\nasync function readDirectoryLockSnapshot(\n path: string,\n pathStats: Awaited<ReturnType<typeof lstat>>\n): Promise<LockSnapshot> {\n const ownerEntries = (await readdir(path, { withFileTypes: true }))\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".owner.json\"))\n .map((entry) => entry.name)\n .sort();\n const ownerEntryName = ownerEntries.length === 1 ? ownerEntries[0] : null;\n const directoryIdentity = `${pathStats.dev}:${pathStats.ino}:${pathStats.mtimeMs}`;\n\n if (!ownerEntryName) {\n return {\n exists: true,\n fileIdentity: `${directoryIdentity}:empty-or-malformed`,\n ownerEntryName: null,\n modifiedAtMs: Number(pathStats.mtimeMs),\n metaRaw: null,\n meta: null,\n pid: null,\n hasStalePid: false,\n storageKind: \"directory\",\n };\n }\n\n const ownerEntryPath = join(path, ownerEntryName);\n const handle = await open(ownerEntryPath, \"r\");\n try {\n const [metaRaw, stats] = await Promise.all([\n handle.readFile(\"utf8\"),\n handle.stat(),\n ]);\n const normalizedMetaRaw = normalizeMetaRaw(metaRaw);\n const meta = parseOpenMeldLockMeta(normalizedMetaRaw);\n const pid = getPidFromMeta(meta);\n return {\n exists: true,\n fileIdentity: `${directoryIdentity}:${ownerEntryName}:${stats.dev}:${stats.ino}:${stats.mtimeMs}:${stats.size}`,\n ownerEntryName,\n modifiedAtMs: stats.mtimeMs,\n metaRaw: normalizedMetaRaw,\n meta,\n pid,\n hasStalePid: pid !== null && !isPidAlive(pid),\n storageKind: \"directory\",\n };\n } finally {\n await handle.close();\n }\n}\n\nasync function tryCleanupStaleLockPath(\n path: string,\n initialSnapshot?: LockSnapshot\n): Promise<boolean> {\n const firstSnapshot = initialSnapshot ?? (await readLockSnapshot(path));\n\n if (!isRecoverableStaleLock(firstSnapshot)) {\n return false;\n }\n\n // A legacy client can replace a stale file lock with a live file lock at the\n // same path between inspection and unlink. Without owner-scoped storage,\n // cleanup cannot prove that it is removing the same owner, so fail closed\n // throughout the mixed-version rollout.\n if (firstSnapshot.storageKind === \"legacy_file\") {\n return false;\n }\n\n const confirmedSnapshot = await readLockSnapshot(path);\n if (!isSameRecoverableLockSnapshot(firstSnapshot, confirmedSnapshot)) {\n return false;\n }\n\n if (confirmedSnapshot.storageKind === \"directory\") {\n return await cleanupStaleDirectoryLock(path, confirmedSnapshot);\n }\n\n return false;\n}\n\nfunction isSameRecoverableLockSnapshot(\n firstSnapshot: LockSnapshot,\n confirmedSnapshot: LockSnapshot\n): boolean {\n return (\n confirmedSnapshot.exists &&\n confirmedSnapshot.fileIdentity === firstSnapshot.fileIdentity &&\n confirmedSnapshot.ownerEntryName === firstSnapshot.ownerEntryName &&\n confirmedSnapshot.metaRaw === firstSnapshot.metaRaw &&\n confirmedSnapshot.pid === firstSnapshot.pid &&\n confirmedSnapshot.storageKind === firstSnapshot.storageKind &&\n isRecoverableStaleLock(confirmedSnapshot)\n );\n}\n\nfunction resolveLockContentionState(\n snapshot: LockSnapshot\n): OpenMeldLockContentionState {\n if (\n snapshot.storageKind === \"legacy_file\" &&\n isRecoverableStaleLock(snapshot)\n ) {\n return \"orphaned\";\n }\n if (\n snapshot.storageKind !== null &&\n (snapshot.pid === null || !snapshot.hasStalePid)\n ) {\n return \"active\";\n }\n return \"unknown\";\n}\n\nasync function cleanupStaleDirectoryLock(\n path: string,\n snapshot: LockSnapshot\n): Promise<boolean> {\n if (snapshot.ownerEntryName) {\n try {\n await unlink(join(path, snapshot.ownerEntryName));\n } catch (error) {\n if (getErrorCode(error) === \"ENOENT\") {\n return false;\n }\n throw error;\n }\n }\n try {\n await rmdir(path);\n return true;\n } catch (error) {\n if (getErrorCode(error) === \"ENOENT\") {\n return true;\n }\n if (getErrorCode(error) === \"ENOTEMPTY\") {\n return false;\n }\n throw error;\n }\n}\n\nasync function tryPublishLock(\n path: string,\n ownerId: string,\n contents: string\n): Promise<boolean> {\n try {\n await mkdir(path);\n } catch (error) {\n if (getErrorCode(error) === \"EEXIST\") {\n return false;\n }\n throw error;\n }\n\n const ownerEntryPath = resolveOwnerEntryPath(path, ownerId);\n try {\n await writeFile(ownerEntryPath, contents, {\n encoding: \"utf8\",\n flag: \"wx\",\n });\n return true;\n } catch (error) {\n await unlink(ownerEntryPath).catch((cleanupError) => {\n if (getErrorCode(cleanupError) !== \"ENOENT\") {\n console.warn(\"[openmeld.lock.owner_entry_cleanup_warning]\", {\n ownerEntryPath,\n cleanupError: toErrorMessage(cleanupError),\n });\n }\n });\n await rmdir(path).catch((cleanupError) => {\n if (getErrorCode(cleanupError) !== \"ENOENT\") {\n console.warn(\"[openmeld.lock.directory_cleanup_warning]\", {\n lockPath: path,\n cleanupError: toErrorMessage(cleanupError),\n });\n }\n });\n throw error;\n }\n}\n\nasync function unlinkOwnedDirectoryEntry(lock: OpenMeldLock): Promise<boolean> {\n try {\n await unlink(resolveOwnerEntryPath(lock.path, lock.ownerId));\n return true;\n } catch (error) {\n if (getErrorCode(error) === \"ENOENT\" || getErrorCode(error) === \"ENOTDIR\") {\n return false;\n }\n throw error;\n }\n}\n\nfunction resolveOwnerEntryPath(path: string, ownerId: string): string {\n return join(path, `${encodeURIComponent(ownerId)}.owner.json`);\n}\n\nfunction isRecoverableStaleLock(snapshot: LockSnapshot): boolean {\n if (!snapshot.exists) {\n return false;\n }\n if (snapshot.pid !== null) {\n return snapshot.hasStalePid;\n }\n return (\n snapshot.modifiedAtMs !== null &&\n Date.now() - snapshot.modifiedAtMs >= MALFORMED_LOCK_RECOVERY_GRACE_MS\n );\n}\n\nfunction isPidAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (err) {\n if (getErrorCode(err) === \"ESRCH\") {\n return false;\n }\n return true;\n }\n}\n\nfunction getErrorCode(err: unknown): string | undefined {\n if (!err || typeof err !== \"object\") {\n return undefined;\n }\n const code = (err as { code?: unknown }).code;\n return typeof code === \"string\" ? code : undefined;\n}\n\nfunction throwRecognizedLocalMachineFailure(input: {\n operation: \"create_lock\";\n error: unknown;\n}): never {\n const recognizedFailure = toRecognizedLocalMachineFailureError(input);\n throw recognizedFailure ?? input.error;\n}\n\nfunction warnLockReleaseFailure(input: {\n error: unknown;\n lock: OpenMeldLock;\n releaseContext?: HeldLockReleaseContext;\n}): void {\n console.warn(\"[openmeld.lock.release.warning]\", {\n lockPath: input.lock.path,\n releaseError: toErrorMessage(input.error),\n releaseContext: input.releaseContext ?? {},\n });\n}\n\nfunction toErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","const TRAILING_SLASHES_REGEX = /\\/+$/;\nconst ROOT_PATH_REGEX = /^\\/+$/;\n\nexport function normalizeBaseUrl(baseUrl: string): string {\n const url = new URL(baseUrl);\n if (!ROOT_PATH_REGEX.test(url.pathname)) {\n throw new Error(\"baseUrl must be origin-only (no path prefix)\");\n }\n if (url.search || url.hash) {\n throw new Error(\"baseUrl must be origin-only (no query or hash)\");\n }\n url.pathname = \"\";\n url.search = \"\";\n url.hash = \"\";\n return url.toString().replace(TRAILING_SLASHES_REGEX, \"\");\n}\n\nexport function toSpaceSignalsUrl(baseUrl: string, space: string): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = `/v1/spaces/${encodeURIComponent(space)}/signals`;\n return url.toString();\n}\n\nexport function toSpaceCreateUrl(baseUrl: string): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = \"/v1/spaces\";\n return url.toString();\n}\n\nexport function toSpaceDeleteUrl(baseUrl: string, space: string): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = `/v1/spaces/${encodeURIComponent(space)}`;\n return url.toString();\n}\n\nexport function toSpaceMetaUrl(baseUrl: string, space: string): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = `/v1/spaces/${encodeURIComponent(space)}/meta`;\n return url.toString();\n}\n\nexport function toSpaceContractUrl(baseUrl: string, space: string): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = `/v1/spaces/${encodeURIComponent(space)}/contract`;\n return url.toString();\n}\n\nexport function toSpaceBoardUrl(baseUrl: string, space: string): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = `/v1/spaces/${encodeURIComponent(space)}/board`;\n return url.toString();\n}\n\nexport function toSpaceUpdatesUrl(baseUrl: string, space: string): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = `/v1/spaces/${encodeURIComponent(space)}/updates`;\n return url.toString();\n}\n\nexport function toSpaceStatusUrl(baseUrl: string, space: string): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = `/v1/spaces/${encodeURIComponent(space)}/status`;\n return url.toString();\n}\n\nexport function toSpaceResultUrl(baseUrl: string, space: string): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = `/v1/spaces/${encodeURIComponent(space)}/result`;\n return url.toString();\n}\n\nexport function toSpaceMembersUrl(baseUrl: string, space: string): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = `/v1/spaces/${encodeURIComponent(space)}/members`;\n return url.toString();\n}\n\nexport function toSpaceRemoveMembersUrl(\n baseUrl: string,\n space: string\n): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = `/v1/spaces/${encodeURIComponent(space)}/members/remove`;\n return url.toString();\n}\n\nexport function toSpaceLeaveUrl(baseUrl: string, space: string): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = `/v1/spaces/${encodeURIComponent(space)}/leave`;\n return url.toString();\n}\n\nexport function toSpaceDispatchTraceUrl(\n baseUrl: string,\n space: string,\n dispatchId: string\n): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = `/v1/spaces/${encodeURIComponent(space)}/dispatches/${encodeURIComponent(dispatchId)}/trace`;\n return url.toString();\n}\n\nexport function toSpaceDispatchLookupUrl(\n baseUrl: string,\n space: string\n): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = `/v1/spaces/${encodeURIComponent(space)}/dispatches/lookup`;\n return url.toString();\n}\n\nexport function toDaemonRouteObservationUrl(\n baseUrl: string,\n profileId: string\n): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = `/v1/daemon/routes/${encodeURIComponent(profileId)}`;\n return url.toString();\n}\n\nexport function toSpacePasswordUrl(baseUrl: string, space: string): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = `/v1/spaces/${encodeURIComponent(space)}/password`;\n return url.toString();\n}\n\nexport function toSpaceCursorUrl(\n baseUrl: string,\n space: string,\n profileId: string\n): string {\n const url = new URL(normalizeBaseUrl(baseUrl));\n url.pathname = `/v1/spaces/${encodeURIComponent(space)}/cursors/${encodeURIComponent(profileId)}`;\n return url.toString();\n}\n\nexport function toSpaceWsUrl(baseUrl: string, space: string): string {\n const http = new URL(normalizeBaseUrl(baseUrl));\n let wsScheme: \"ws:\" | \"wss:\";\n if (http.protocol === \"http:\") {\n wsScheme = \"ws:\";\n } else if (http.protocol === \"https:\") {\n wsScheme = \"wss:\";\n } else if (http.protocol === \"ws:\" || http.protocol === \"wss:\") {\n wsScheme = http.protocol;\n } else {\n throw new Error(\n `unsupported baseUrl protocol for websocket URL: ${http.protocol}`\n );\n }\n return `${wsScheme}//${http.host}/v1/spaces/${encodeURIComponent(space)}/stream`;\n}\n","import { createHash } from \"node:crypto\";\nimport { mkdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, normalize, posix, win32 } from \"node:path\";\nimport {\n runtimeAgentControllerLaunchContractSchema,\n runtimeAgentControllerSettingsSchema,\n} from \"@openmeld/schemas\";\nimport type {\n RuntimeAgentControllerLaunchContract,\n RuntimeTransportMode,\n} from \"@openmeld/schemas/types\";\nimport { normalizeGatewayBaseUrl } from \"./base-url\";\nimport {\n acquireLock,\n isOpenMeldLockError,\n isOpenMeldOrphanedLockError,\n type OpenMeldLock,\n runWithHeldLock,\n} from \"./lock\";\nimport {\n deviceAgentRuntimePath,\n deviceDir,\n devicePreferencesPath,\n deviceSkillsCustomTargetsPath,\n deviceSkillsDir,\n deviceSkillsInstallsPath,\n deviceSkillsStorePath,\n legacyRuntimeConfigPath,\n resolveOpenMeldEnvPreset,\n} from \"./paths\";\n\nexport type RuntimeViewCustomization = {\n messages?: {\n human?: Record<string, string>;\n agent?: Record<string, string>;\n };\n render?: {\n human?: {\n dataMode?: \"payload\" | \"envelope\";\n };\n agent?: {\n envelopeMode?: \"verbose\" | \"compact\";\n };\n };\n};\n\nexport type RuntimeSkillsAgentConfig = {\n skillsDir?: string;\n globalSkillsDir?: string;\n};\n\nexport type RuntimeSkillsCustomTarget = {\n id?: string;\n name: string;\n dir: string;\n};\n\nexport type RuntimeSkillsInstallRecord = {\n targetId: string;\n targetDir: string;\n mode: \"symlink\" | \"copy\";\n status: \"installed\" | \"skipped\" | \"failed\";\n skillIds: string[];\n reason?: string;\n updatedAt: string;\n};\n\nexport type RuntimeSkillsConfig = {\n storeDir?: string;\n agents?: Record<string, RuntimeSkillsAgentConfig>;\n customTargets?: RuntimeSkillsCustomTarget[];\n installs?: RuntimeSkillsInstallRecord[];\n};\n\nexport type RuntimeDaemonDispatchConfig = {\n globalConcurrency?: number;\n queueMax?: number;\n};\n\nexport type RuntimeDaemonConfig = {\n dispatch?: RuntimeDaemonDispatchConfig;\n};\n\nexport type RuntimeDaemonDispatchLimits = {\n globalConcurrency: number;\n queueMax: number;\n};\n\nexport type RuntimeAgentTransportMode = RuntimeTransportMode;\nexport type RuntimeAgentStreamingMode = \"final\" | \"stream\";\n\nexport type RuntimeAgentControllerConversationIdMappingSpec = {\n sourceField: string;\n mappingVersion: number;\n};\n\nexport type RuntimeAgentControllerSettings = {\n transportMode: RuntimeAgentTransportMode;\n streamingMode: RuntimeAgentStreamingMode;\n timeoutMs: number | null;\n retry: number;\n contextIdMappingSpec: RuntimeAgentControllerConversationIdMappingSpec;\n};\n\nexport const DEFAULT_RUNTIME_AGENT_TRANSPORT_MODE: RuntimeAgentTransportMode =\n \"local-cli\";\nexport const DEFAULT_RUNTIME_AGENT_STREAMING_MODE: RuntimeAgentStreamingMode =\n \"final\";\n// Normal Agent execution has no fixed wall-clock timeout. Long-running tasks\n// should end by explicit result, failure, cancellation, or stale progress\n// evidence policy, not by a hard-coded elapsed-time cutoff.\nexport const DEFAULT_LOCAL_ADAPTER_TIMEOUT_MS = null as number | null;\nexport const DEFAULT_RUNTIME_AGENT_RETRY = 0;\nexport const DEFAULT_RUNTIME_AGENT_CONTEXT_MAPPING_VERSION = 1;\nexport const DEFAULT_RUNTIME_AGENT_CONTEXT_SOURCE_FIELD =\n \"OPENMELD_CLI_CONTEXT_ID\";\nexport const DEFAULT_RUNTIME_DAEMON_GLOBAL_CONCURRENCY = 10;\nexport const DEFAULT_RUNTIME_DAEMON_QUEUE_MAX = 50;\n\nexport type RuntimeAgentControllerState = {\n agentId: string;\n displayName: string;\n enabled: boolean;\n launchContract?: RuntimeAgentControllerLaunchContract;\n transportMode?: RuntimeAgentTransportMode;\n streamingMode?: RuntimeAgentStreamingMode;\n timeoutMs?: number | null;\n retry?: number;\n contextIdMappingSpec?: RuntimeAgentControllerConversationIdMappingSpec;\n registeredAt: string;\n updatedAt: string;\n};\n\nexport type RuntimeDeviceRuntimeState = {\n controllers?: RuntimeAgentControllerState[];\n};\n\nexport type RuntimeStartV1OnboardingState = {\n disclaimerAcceptedVersion?: string;\n lastCompletedAt?: string;\n localAgentsSetupCompletedAt?: string;\n};\n\nexport type RuntimeOnboardingConfig = {\n disclaimerAcceptedAt?: string;\n startV1?: RuntimeStartV1OnboardingState;\n};\n\nexport type RuntimeConfigFallbackReason = \"invalid_json\" | \"invalid_version\";\n\nexport type RuntimeConfigReadHealth = {\n parseFallback: boolean;\n reason?: RuntimeConfigFallbackReason;\n};\n\ntype RuntimeConfigV1 = {\n v: 1;\n baseUrl?: string;\n viewCustomization?: RuntimeViewCustomization;\n skills?: RuntimeSkillsConfig;\n daemon?: RuntimeDaemonConfig;\n deviceRuntimeState?: RuntimeDeviceRuntimeState;\n onboarding?: RuntimeOnboardingConfig;\n updatedAt: string;\n};\n\ntype DevicePreferencesV1 = {\n v: 1;\n baseUrl?: string;\n viewCustomization?: RuntimeViewCustomization;\n daemon?: RuntimeDaemonConfig;\n onboarding?: RuntimeOnboardingConfig;\n updatedAt: string;\n};\n\ntype DeviceAgentRuntimeV1 = {\n v: 1;\n deviceRuntimeState?: RuntimeDeviceRuntimeState;\n updatedAt: string;\n};\n\ntype DeviceSkillsStoreV1 = {\n v: 1;\n storeDir?: string;\n agents?: Record<string, RuntimeSkillsAgentConfig>;\n updatedAt: string;\n};\n\ntype DeviceSkillsCustomTargetsV1 = {\n v: 1;\n customTargets: RuntimeSkillsCustomTarget[];\n updatedAt: string;\n};\n\ntype DeviceSkillsInstallsV1 = {\n v: 1;\n installs: RuntimeSkillsInstallRecord[];\n updatedAt: string;\n};\n\ntype RuntimeMessageCustomization = RuntimeViewCustomization[\"messages\"];\ntype RuntimeRenderCustomization = RuntimeViewCustomization[\"render\"];\ntype RuntimeHumanRender = NonNullable<RuntimeRenderCustomization>[\"human\"];\ntype RuntimeAgentRender = NonNullable<RuntimeRenderCustomization>[\"agent\"];\ntype RuntimeConfigOverrides = {\n baseUrl?: string | null;\n viewCustomization?: RuntimeViewCustomization | null;\n skills?: RuntimeSkillsConfig | null;\n daemon?: RuntimeDaemonConfig | null;\n deviceRuntimeState?: RuntimeDeviceRuntimeState | null;\n onboarding?: RuntimeOnboardingConfig | null;\n};\nconst CUSTOM_TARGET_ID_PREFIX = \"custom-\";\nconst CUSTOM_TARGET_ID_LENGTH = 12;\nconst RUNTIME_CONFIG_LOCK_PROFILE = \"__system__\";\nconst RUNTIME_CONFIG_LOCK_KEY = \"runtime-config\";\nconst RUNTIME_CONFIG_LOCK_MAX_ATTEMPTS = 40;\nconst RUNTIME_CONFIG_LOCK_RETRY_DELAY_MS = 25;\nconst WINDOWS_DRIVE_ONLY_RE = /^[a-zA-Z]:$/;\nconst WINDOWS_DRIVE_PREFIX_RE = /^[a-zA-Z]:[\\\\/]/;\nconst WINDOWS_UNC_RE = /^[/\\\\]{2}[^/\\\\]+[/\\\\]+[^/\\\\]+/;\nconst WINDOWS_DRIVE_ANY_RE = /^[a-zA-Z]:/;\nconst TRAILING_PATH_SEPARATORS_RE = /[\\\\/]+$/;\n\nexport function resolveRuntimeSkillsCustomTargetId(input: {\n dir: string;\n id?: string;\n}): string {\n const existingId =\n typeof input.id === \"string\" && input.id.trim().length > 0\n ? input.id.trim()\n : \"\";\n if (existingId) {\n return existingId;\n }\n const normalizedDir = normalizeCustomTargetDir(input.dir);\n const digest = createHash(\"sha256\").update(normalizedDir).digest(\"hex\");\n return `${CUSTOM_TARGET_ID_PREFIX}${digest.slice(0, CUSTOM_TARGET_ID_LENGTH)}`;\n}\n\nexport function resolveDefaultAgentContextSourceField(\n _agentId: string\n): string {\n return DEFAULT_RUNTIME_AGENT_CONTEXT_SOURCE_FIELD;\n}\n\nexport function createDefaultRuntimeAgentControllerSettings(\n agentId: string\n): RuntimeAgentControllerSettings {\n return {\n transportMode: DEFAULT_RUNTIME_AGENT_TRANSPORT_MODE,\n streamingMode: resolveDefaultRuntimeAgentStreamingMode(),\n timeoutMs: DEFAULT_LOCAL_ADAPTER_TIMEOUT_MS,\n retry: DEFAULT_RUNTIME_AGENT_RETRY,\n contextIdMappingSpec: {\n sourceField: resolveDefaultAgentContextSourceField(agentId),\n mappingVersion: DEFAULT_RUNTIME_AGENT_CONTEXT_MAPPING_VERSION,\n },\n };\n}\n\nconst resolveDefaultRuntimeAgentStreamingMode =\n (): RuntimeAgentStreamingMode => {\n const preset = resolveOpenMeldEnvPreset();\n if (preset === \"dev-local\" || preset === \"canary\") {\n return \"stream\";\n }\n return DEFAULT_RUNTIME_AGENT_STREAMING_MODE;\n };\n\nexport async function getConfiguredBaseUrl(): Promise<string | null> {\n const config = await readRuntimeConfig();\n if (!config?.baseUrl) {\n return null;\n }\n return normalizeGatewayBaseUrl(config.baseUrl);\n}\n\nexport async function getConfiguredViewCustomization(): Promise<RuntimeViewCustomization | null> {\n const config = await readRuntimeConfig();\n return config?.viewCustomization ?? null;\n}\n\nexport async function getConfiguredSkillsConfig(): Promise<RuntimeSkillsConfig | null> {\n const config = await readRuntimeConfig();\n return config?.skills ?? null;\n}\n\nexport async function getConfiguredDeviceRuntimeState(): Promise<RuntimeDeviceRuntimeState | null> {\n const config = await readRuntimeConfig();\n return config?.deviceRuntimeState ?? null;\n}\n\nexport async function getConfiguredDaemonDispatchLimits(): Promise<RuntimeDaemonDispatchLimits> {\n const config = await readRuntimeConfig();\n return resolveRuntimeDaemonDispatchLimits(config?.daemon?.dispatch);\n}\n\nexport async function getConfiguredOnboardingConfig(): Promise<RuntimeOnboardingConfig | null> {\n const config = await readRuntimeConfig();\n return config?.onboarding ?? null;\n}\n\nexport async function getConfiguredOnboardingDisclaimerAcceptedAt(): Promise<\n string | null\n> {\n const onboarding = await getConfiguredOnboardingConfig();\n return onboarding?.disclaimerAcceptedAt ?? null;\n}\n\nexport async function getConfiguredStartV1OnboardingState(): Promise<RuntimeStartV1OnboardingState | null> {\n const onboarding = await getConfiguredOnboardingConfig();\n return onboarding?.startV1 ?? null;\n}\n\nexport async function getRuntimeConfigReadHealth(): Promise<RuntimeConfigReadHealth> {\n const result = await readRuntimeConfigDetailed();\n return result.health;\n}\n\nexport async function alignRuntimeConfigStorage(): Promise<{\n migratedLegacyConfig: boolean;\n removedLegacyConfig: boolean;\n}> {\n return await withRuntimeConfigLock(async () => {\n const split = await readSplitRuntimeConfigDetailed();\n const legacy = await readLegacyRuntimeConfigDetailed();\n const hasLegacyConfig = await pathExists(legacyRuntimeConfigPath());\n\n if (legacy.config && (!split.hasFiles || split.health.parseFallback)) {\n await writeRuntimeConfig(legacy.config);\n return {\n migratedLegacyConfig: true,\n removedLegacyConfig: hasLegacyConfig,\n };\n }\n\n if (hasLegacyConfig && split.hasFiles) {\n await rm(legacyRuntimeConfigPath(), { force: true });\n return {\n migratedLegacyConfig: false,\n removedLegacyConfig: true,\n };\n }\n\n return {\n migratedLegacyConfig: false,\n removedLegacyConfig: false,\n };\n });\n}\n\nexport async function setConfiguredBaseUrl(baseUrl: string): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const normalized = normalizeGatewayBaseUrl(baseUrl);\n const previous = await readRuntimeConfig();\n const next = buildNextConfig(previous, { baseUrl: normalized });\n\n await writeRuntimeConfig(next);\n });\n}\n\nexport async function setConfiguredSkillsConfig(\n skills: RuntimeSkillsConfig\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfig();\n const next = buildNextConfig(previous, { skills });\n\n await writeRuntimeConfig(next);\n });\n}\n\nexport async function updateConfiguredSkillsConfig(\n updater: (current: RuntimeSkillsConfig | null) => RuntimeSkillsConfig | null\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfig();\n const previousSkills = previous?.skills ?? null;\n const nextSkills = updater(previousSkills);\n\n const previousComparable = JSON.stringify(previousSkills);\n const nextComparable = JSON.stringify(nextSkills);\n if (previousComparable === nextComparable) {\n return;\n }\n\n const next = buildNextConfig(previous, { skills: nextSkills });\n\n await writeRuntimeConfig(next);\n });\n}\n\nexport async function setConfiguredDeviceRuntimeState(\n deviceRuntimeState: RuntimeDeviceRuntimeState\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfig();\n const next = buildNextConfig(previous, { deviceRuntimeState });\n\n await writeRuntimeConfig(next);\n });\n}\n\nexport async function updateConfiguredDeviceRuntimeState(\n updater: (\n current: RuntimeDeviceRuntimeState | null\n ) => RuntimeDeviceRuntimeState | null\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfig();\n const previousDeviceRuntimeState = previous?.deviceRuntimeState ?? null;\n const nextDeviceRuntimeState = updater(previousDeviceRuntimeState);\n\n const previousComparable = JSON.stringify(previousDeviceRuntimeState);\n const nextComparable = JSON.stringify(nextDeviceRuntimeState);\n if (previousComparable === nextComparable) {\n return;\n }\n\n const next = buildNextConfig(previous, {\n deviceRuntimeState: nextDeviceRuntimeState,\n });\n\n await writeRuntimeConfig(next);\n });\n}\n\nexport async function updateConfiguredStartV1OnboardingState(\n updater: (\n current: RuntimeStartV1OnboardingState | null\n ) => RuntimeStartV1OnboardingState | null\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfig();\n const previousOnboarding = previous?.onboarding ?? null;\n const previousStartV1 = previousOnboarding?.startV1 ?? null;\n const nextStartV1 = updater(previousStartV1);\n\n const previousComparable = JSON.stringify(previousStartV1);\n const nextComparable = JSON.stringify(nextStartV1);\n if (previousComparable === nextComparable) {\n return;\n }\n\n const nextOnboarding =\n nextStartV1 || previousOnboarding?.disclaimerAcceptedAt\n ? {\n ...(previousOnboarding?.disclaimerAcceptedAt\n ? {\n disclaimerAcceptedAt: previousOnboarding.disclaimerAcceptedAt,\n }\n : {}),\n ...(nextStartV1 ? { startV1: nextStartV1 } : {}),\n }\n : null;\n const next = buildNextConfig(previous, {\n onboarding: nextOnboarding,\n });\n\n await writeRuntimeConfig(next);\n });\n}\n\nexport async function updateConfiguredOnboardingConfig(\n updater: (\n current: RuntimeOnboardingConfig | null\n ) => RuntimeOnboardingConfig | null\n): Promise<void> {\n await withRuntimeConfigLock(async () => {\n const previous = await readRuntimeConfig();\n const previousOnboarding = previous?.onboarding ?? null;\n const nextOnboarding = updater(previousOnboarding);\n\n const previousComparable = JSON.stringify(previousOnboarding);\n const nextComparable = JSON.stringify(nextOnboarding);\n if (previousComparable === nextComparable) {\n return;\n }\n\n const next = buildNextConfig(previous, {\n onboarding: nextOnboarding,\n });\n\n await writeRuntimeConfig(next);\n });\n}\n\nfunction buildNextConfig(\n previous: RuntimeConfigV1 | null,\n overrides: RuntimeConfigOverrides\n): RuntimeConfigV1 {\n const baseUrl = resolveBaseUrlOverride(previous?.baseUrl, overrides);\n const viewCustomization = resolveConfigOverride(\n \"viewCustomization\",\n previous?.viewCustomization,\n overrides\n );\n const skills = resolveConfigOverride(\"skills\", previous?.skills, overrides);\n const daemon = resolveConfigOverride(\"daemon\", previous?.daemon, overrides);\n const deviceRuntimeState = resolveConfigOverride(\n \"deviceRuntimeState\",\n previous?.deviceRuntimeState,\n overrides\n );\n const onboarding = resolveConfigOverride(\n \"onboarding\",\n previous?.onboarding,\n overrides\n );\n\n return {\n v: 1,\n ...(baseUrl ? { baseUrl } : {}),\n ...(viewCustomization ? { viewCustomization } : {}),\n ...(skills ? { skills } : {}),\n ...(daemon ? { daemon } : {}),\n ...(deviceRuntimeState ? { deviceRuntimeState } : {}),\n ...(onboarding ? { onboarding } : {}),\n updatedAt: new Date().toISOString(),\n };\n}\n\nfunction resolveBaseUrlOverride(\n previous: string | undefined,\n overrides: RuntimeConfigOverrides\n): string | undefined {\n if (!(\"baseUrl\" in overrides)) {\n return previous;\n }\n if (typeof overrides.baseUrl !== \"string\" || overrides.baseUrl.length === 0) {\n return undefined;\n }\n return overrides.baseUrl;\n}\n\nfunction resolveConfigOverride<T>(\n key:\n | \"viewCustomization\"\n | \"skills\"\n | \"daemon\"\n | \"deviceRuntimeState\"\n | \"onboarding\",\n previous: T | undefined,\n overrides: RuntimeConfigOverrides\n): T | undefined {\n if (!(key in overrides)) {\n return previous;\n }\n const value = overrides[key] as T | null | undefined;\n return value ?? undefined;\n}\n\nasync function acquireRuntimeConfigLock(): Promise<OpenMeldLock> {\n for (\n let attempt = 0;\n attempt < RUNTIME_CONFIG_LOCK_MAX_ATTEMPTS;\n attempt += 1\n ) {\n try {\n return await acquireLock({\n openMeldProfileId: RUNTIME_CONFIG_LOCK_PROFILE,\n key: RUNTIME_CONFIG_LOCK_KEY,\n });\n } catch (error) {\n if (\n !isOpenMeldLockError(error) ||\n isOpenMeldOrphanedLockError(error) ||\n attempt === RUNTIME_CONFIG_LOCK_MAX_ATTEMPTS - 1\n ) {\n throw error;\n }\n await delay(RUNTIME_CONFIG_LOCK_RETRY_DELAY_MS);\n }\n }\n\n throw new Error(\"runtime config lock retries exhausted\");\n}\n\nasync function withRuntimeConfigLock<T>(run: () => Promise<T>): Promise<T> {\n const lock = await acquireRuntimeConfigLock();\n return await runWithHeldLock({\n lock,\n run,\n releaseContext: {\n component: \"runtime_config\",\n lockKey: RUNTIME_CONFIG_LOCK_KEY,\n openMeldProfileId: RUNTIME_CONFIG_LOCK_PROFILE,\n },\n });\n}\n\nasync function readRuntimeConfig(): Promise<RuntimeConfigV1 | null> {\n const result = await readRuntimeConfigDetailed();\n return result.config;\n}\n\nasync function readRuntimeConfigDetailed(): Promise<{\n config: RuntimeConfigV1 | null;\n health: RuntimeConfigReadHealth;\n}> {\n const split = await readSplitRuntimeConfigDetailed();\n if (split.hasFiles) {\n return {\n config: split.config,\n health: split.health,\n };\n }\n return await readLegacyRuntimeConfigDetailed();\n}\n\nfunction parseConfiguredBaseUrl(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n try {\n return normalizeGatewayBaseUrl(value);\n } catch {\n return undefined;\n }\n}\n\nfunction parseRuntimeViewCustomization(\n value: unknown\n): RuntimeViewCustomization | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const obj = value as {\n messages?: unknown;\n render?: unknown;\n };\n\n const messages = parseMessageCustomization(obj.messages);\n const render = parseRenderCustomization(obj.render);\n\n if (!(messages || render)) {\n return undefined;\n }\n\n return {\n ...(messages ? { messages } : {}),\n ...(render ? { render } : {}),\n };\n}\n\nfunction parseRuntimeSkillsConfig(\n value: unknown\n): RuntimeSkillsConfig | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const obj = value as {\n storeDir?: unknown;\n agents?: unknown;\n customTargets?: unknown;\n installs?: unknown;\n };\n\n const storeDir =\n typeof obj.storeDir === \"string\" && obj.storeDir.trim().length > 0\n ? obj.storeDir.trim()\n : undefined;\n const agents = parseRuntimeSkillsAgents(obj.agents);\n const installs = parseRuntimeSkillsInstallRecords(obj.installs);\n const customTargets = parseRuntimeSkillsCustomTargets(\n obj.customTargets,\n buildLegacyCustomTargetIdByDir(installs)\n );\n\n if (!(storeDir || agents || customTargets || installs)) {\n return undefined;\n }\n\n return {\n ...(storeDir ? { storeDir } : {}),\n ...(agents ? { agents } : {}),\n ...(customTargets ? { customTargets } : {}),\n ...(installs ? { installs } : {}),\n };\n}\n\nfunction parseRuntimeDaemonConfig(\n value: unknown\n): RuntimeDaemonConfig | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const obj = value as {\n dispatch?: unknown;\n };\n const dispatch = parseRuntimeDaemonDispatchConfig(obj.dispatch);\n if (!dispatch) {\n return undefined;\n }\n return { dispatch };\n}\n\nfunction parseRuntimeDaemonDispatchConfig(\n value: unknown\n): RuntimeDaemonDispatchConfig | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const obj = value as {\n globalConcurrency?: unknown;\n queueMax?: unknown;\n };\n const globalConcurrency = parsePositiveInteger(obj.globalConcurrency);\n const queueMax = parsePositiveInteger(obj.queueMax);\n if (globalConcurrency === undefined && queueMax === undefined) {\n return undefined;\n }\n return {\n ...(globalConcurrency === undefined ? {} : { globalConcurrency }),\n ...(queueMax === undefined ? {} : { queueMax }),\n };\n}\n\nfunction parseRuntimeDeviceRuntimeState(\n value: unknown\n): RuntimeDeviceRuntimeState | undefined {\n const fromDeviceRuntimeState = parseRuntimeDeviceRuntimeStateObject(value);\n return fromDeviceRuntimeState;\n}\n\nfunction parseRuntimeDeviceRuntimeStateObject(\n value: unknown\n): RuntimeDeviceRuntimeState | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const obj = value as {\n controllers?: unknown;\n };\n const controllers = parseRuntimeAgentControllerStates(obj.controllers);\n if (!controllers) {\n return undefined;\n }\n\n return {\n controllers,\n };\n}\n\nfunction parseRuntimeOnboardingConfig(\n value: unknown\n): RuntimeOnboardingConfig | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const obj = value as {\n disclaimerAcceptedAt?: unknown;\n startV1?: unknown;\n };\n const disclaimerAcceptedAt = toTrimmedStringOrUndefined(\n obj.disclaimerAcceptedAt\n );\n const startV1 = parseRuntimeStartV1OnboardingState(obj.startV1);\n if (!(disclaimerAcceptedAt || startV1)) {\n return undefined;\n }\n return {\n ...(disclaimerAcceptedAt ? { disclaimerAcceptedAt } : {}),\n ...(startV1 ? { startV1 } : {}),\n };\n}\n\nfunction parseRuntimeStartV1OnboardingState(\n value: unknown\n): RuntimeStartV1OnboardingState | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const obj = value as {\n disclaimerAcceptedVersion?: unknown;\n lastCompletedAt?: unknown;\n localAgentsSetupCompletedAt?: unknown;\n };\n const disclaimerAcceptedVersion = toTrimmedStringOrUndefined(\n obj.disclaimerAcceptedVersion\n );\n const lastCompletedAt = toTrimmedStringOrUndefined(obj.lastCompletedAt);\n const localAgentsSetupCompletedAt = toTrimmedStringOrUndefined(\n obj.localAgentsSetupCompletedAt\n );\n if (\n !(\n disclaimerAcceptedVersion ||\n lastCompletedAt ||\n localAgentsSetupCompletedAt\n )\n ) {\n return undefined;\n }\n return {\n ...(disclaimerAcceptedVersion ? { disclaimerAcceptedVersion } : {}),\n ...(lastCompletedAt ? { lastCompletedAt } : {}),\n ...(localAgentsSetupCompletedAt ? { localAgentsSetupCompletedAt } : {}),\n };\n}\n\nasync function writeRuntimeConfig(next: RuntimeConfigV1): Promise<void> {\n await mkdir(deviceDir(), { recursive: true });\n await mkdir(deviceSkillsDir(), { recursive: true });\n\n const updatedAt = new Date().toISOString();\n await writeJsonFileOrRemove(\n devicePreferencesPath(),\n buildDevicePreferencesState(next, updatedAt)\n );\n await writeJsonFileOrRemove(\n deviceAgentRuntimePath(),\n buildDeviceAgentRuntimeState(next, updatedAt)\n );\n await writeJsonFileOrRemove(\n deviceSkillsStorePath(),\n buildDeviceSkillsStoreState(next, updatedAt)\n );\n await writeJsonFileOrRemove(\n deviceSkillsCustomTargetsPath(),\n buildDeviceSkillsCustomTargetsState(next, updatedAt)\n );\n await writeJsonFileOrRemove(\n deviceSkillsInstallsPath(),\n buildDeviceSkillsInstallsState(next, updatedAt)\n );\n await rm(legacyRuntimeConfigPath(), { force: true }).catch(() => undefined);\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction parseMessageCustomization(\n value: unknown\n): RuntimeMessageCustomization | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const obj = value as {\n human?: unknown;\n agent?: unknown;\n };\n\n const human = toStringMap(obj.human);\n const agent = toStringMap(obj.agent);\n\n if (!(human || agent)) {\n return undefined;\n }\n\n return {\n ...(human ? { human } : {}),\n ...(agent ? { agent } : {}),\n };\n}\n\nfunction parseRenderCustomization(\n value: unknown\n): RuntimeRenderCustomization | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const obj = value as {\n human?: unknown;\n agent?: unknown;\n };\n\n const humanRaw = obj.human as { dataMode?: unknown } | undefined;\n const agentRaw = obj.agent as { envelopeMode?: unknown } | undefined;\n\n const human: RuntimeHumanRender | undefined =\n humanRaw?.dataMode === \"payload\" || humanRaw?.dataMode === \"envelope\"\n ? { dataMode: humanRaw.dataMode }\n : undefined;\n\n const agent: RuntimeAgentRender | undefined =\n agentRaw?.envelopeMode === \"verbose\" || agentRaw?.envelopeMode === \"compact\"\n ? { envelopeMode: agentRaw.envelopeMode }\n : undefined;\n\n if (!(human || agent)) {\n return undefined;\n }\n\n return {\n ...(human ? { human } : {}),\n ...(agent ? { agent } : {}),\n };\n}\n\nfunction parseRuntimeSkillsAgents(\n value: unknown\n): Record<string, RuntimeSkillsAgentConfig> | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const entries = Object.entries(value).flatMap(([agentName, agentValue]) => {\n if (!agentValue || typeof agentValue !== \"object\") {\n return [];\n }\n const agentObj = agentValue as {\n skillsDir?: unknown;\n globalSkillsDir?: unknown;\n };\n const skillsDir =\n typeof agentObj.skillsDir === \"string\" &&\n agentObj.skillsDir.trim().length > 0\n ? agentObj.skillsDir.trim()\n : undefined;\n const globalSkillsDir =\n typeof agentObj.globalSkillsDir === \"string\" &&\n agentObj.globalSkillsDir.trim().length > 0\n ? agentObj.globalSkillsDir.trim()\n : undefined;\n if (!(skillsDir || globalSkillsDir)) {\n return [];\n }\n return [\n [\n agentName,\n {\n ...(skillsDir ? { skillsDir } : {}),\n ...(globalSkillsDir ? { globalSkillsDir } : {}),\n },\n ] as [string, RuntimeSkillsAgentConfig],\n ];\n });\n\n if (entries.length === 0) {\n return undefined;\n }\n\n return Object.fromEntries(entries);\n}\n\nfunction parseRuntimeSkillsCustomTargets(\n value: unknown,\n legacyCustomTargetIdByDir?: Map<string, string>\n): RuntimeSkillsCustomTarget[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const targets = value.flatMap((item) => {\n if (!item || typeof item !== \"object\") {\n return [];\n }\n const obj = item as { id?: unknown; name?: unknown; dir?: unknown };\n const name =\n typeof obj.name === \"string\" && obj.name.trim().length > 0\n ? obj.name.trim()\n : \"\";\n const dir =\n typeof obj.dir === \"string\" && obj.dir.trim().length > 0\n ? normalizeCustomTargetDir(obj.dir)\n : \"\";\n if (!(name && dir)) {\n return [];\n }\n const explicitId = toTrimmedStringOrUndefined(obj.id);\n const fallbackLegacyId = legacyCustomTargetIdByDir?.get(dir);\n const id = resolveRuntimeSkillsCustomTargetId({\n dir,\n ...(explicitId ? { id: explicitId } : {}),\n ...(!explicitId && fallbackLegacyId ? { id: fallbackLegacyId } : {}),\n });\n return [{ id, name, dir }];\n });\n\n if (targets.length === 0) {\n return undefined;\n }\n\n return targets;\n}\n\nfunction parseRuntimeSkillsInstallRecords(\n value: unknown\n): RuntimeSkillsInstallRecord[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const records = value\n .map((item) => parseRuntimeSkillsInstallRecord(item))\n .filter((record): record is RuntimeSkillsInstallRecord => record !== null);\n\n if (records.length === 0) {\n return undefined;\n }\n\n return records;\n}\n\nfunction buildLegacyCustomTargetIdByDir(\n installs: RuntimeSkillsInstallRecord[] | undefined\n): Map<string, string> {\n const byDir = new Map<string, string>();\n for (const install of installs ?? []) {\n if (!install.targetId.startsWith(CUSTOM_TARGET_ID_PREFIX)) {\n continue;\n }\n const normalizedTargetDir = normalizeCustomTargetDir(install.targetDir);\n if (!normalizedTargetDir) {\n continue;\n }\n byDir.set(normalizedTargetDir, install.targetId);\n }\n return byDir;\n}\n\nfunction parseRuntimeSkillsInstallRecord(\n value: unknown\n): RuntimeSkillsInstallRecord | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n\n const obj = value as {\n targetId?: unknown;\n targetDir?: unknown;\n mode?: unknown;\n status?: unknown;\n skillIds?: unknown;\n reason?: unknown;\n updatedAt?: unknown;\n };\n const targetId = toTrimmedStringOrEmpty(obj.targetId);\n const rawTargetDir = toTrimmedStringOrEmpty(obj.targetDir);\n const targetDir = rawTargetDir;\n const mode = parseSkillsInstallMode(obj.mode);\n const status = parseSkillsInstallStatus(obj.status);\n const skillIds = Array.isArray(obj.skillIds)\n ? obj.skillIds\n .map((skill) => (typeof skill === \"string\" ? skill.trim() : \"\"))\n .filter((skill): skill is string => skill.length > 0)\n : [];\n const updatedAt = toTrimmedStringOrEmpty(obj.updatedAt);\n const reason = toTrimmedStringOrUndefined(obj.reason);\n\n if (!(targetId && targetDir && mode && status && updatedAt)) {\n return null;\n }\n\n return {\n targetId,\n targetDir,\n mode,\n status,\n skillIds,\n ...(reason ? { reason } : {}),\n updatedAt,\n };\n}\n\nfunction parseRuntimeAgentControllerStates(\n value: unknown\n): RuntimeAgentControllerState[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const parsed = value\n .map((entry) => parseRuntimeAgentControllerState(entry))\n .filter((entry): entry is RuntimeAgentControllerState => entry !== null);\n\n if (parsed.length === 0) {\n return undefined;\n }\n\n const deduped = new Map<string, RuntimeAgentControllerState>();\n for (const entry of parsed) {\n deduped.set(entry.agentId, entry);\n }\n\n return [...deduped.values()].sort((a, b) =>\n a.agentId.localeCompare(b.agentId)\n );\n}\n\nfunction parseRuntimeAgentControllerState(\n value: unknown\n): RuntimeAgentControllerState | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n\n const obj = value as {\n agentId?: unknown;\n displayName?: unknown;\n enabled?: unknown;\n launchContract?: unknown;\n transportMode?: unknown;\n streamingMode?: unknown;\n timeoutMs?: unknown;\n retry?: unknown;\n contextIdMappingSpec?: unknown;\n registeredAt?: unknown;\n updatedAt?: unknown;\n };\n const agentId = toTrimmedStringOrEmpty(obj.agentId);\n const displayName = toTrimmedStringOrEmpty(obj.displayName);\n const enabled = typeof obj.enabled === \"boolean\" ? obj.enabled : null;\n const launchContract = parseRuntimeAgentControllerLaunchContract(\n obj.launchContract\n );\n const defaults = createDefaultRuntimeAgentControllerSettings(agentId);\n const controllerSettings = parseRuntimeAgentControllerSettings(\n {\n transportMode: obj.transportMode,\n streamingMode: obj.streamingMode,\n timeoutMs: obj.timeoutMs,\n retry: obj.retry,\n contextIdMappingSpec: obj.contextIdMappingSpec,\n },\n defaults\n );\n const registeredAt = toTrimmedStringOrEmpty(obj.registeredAt);\n const updatedAt = toTrimmedStringOrEmpty(obj.updatedAt);\n\n if (\n !(\n agentId &&\n displayName &&\n enabled !== null &&\n controllerSettings &&\n registeredAt &&\n updatedAt\n )\n ) {\n return null;\n }\n\n return {\n agentId,\n displayName,\n enabled,\n ...(launchContract ? { launchContract } : {}),\n transportMode: controllerSettings.transportMode,\n streamingMode: controllerSettings.streamingMode,\n timeoutMs: controllerSettings.timeoutMs,\n retry: controllerSettings.retry,\n contextIdMappingSpec: controllerSettings.contextIdMappingSpec,\n registeredAt,\n updatedAt,\n };\n}\n\nfunction parseRuntimeAgentControllerLaunchContract(\n value: unknown\n): RuntimeAgentControllerLaunchContract | undefined {\n if (!(value && typeof value === \"object\")) {\n return undefined;\n }\n const parsed = runtimeAgentControllerLaunchContractSchema.safeParse(value);\n return parsed.success ? parsed.data : undefined;\n}\n\nfunction parseRuntimeAgentControllerSettings(\n raw: {\n transportMode: unknown;\n streamingMode: unknown;\n timeoutMs: unknown;\n retry: unknown;\n contextIdMappingSpec: unknown;\n },\n defaults: RuntimeAgentControllerSettings\n): RuntimeAgentControllerSettings | null {\n const normalizedStreamingMode = normalizeRuntimeStreamingMode(\n raw.streamingMode\n );\n const parsed = runtimeAgentControllerSettingsSchema.safeParse({\n transport_mode: raw.transportMode ?? defaults.transportMode,\n streaming_mode: normalizedStreamingMode ?? defaults.streamingMode,\n timeout_ms:\n raw.timeoutMs === undefined ? defaults.timeoutMs : raw.timeoutMs,\n retry: raw.retry ?? defaults.retry,\n context_id_mapping_spec:\n raw.contextIdMappingSpec ?? defaults.contextIdMappingSpec,\n });\n if (!parsed.success) {\n return null;\n }\n\n return {\n transportMode: parsed.data.transport_mode,\n streamingMode: parsed.data.streaming_mode,\n timeoutMs: normalizeRuntimeAgentTimeoutMs({\n defaults,\n timeoutMs: parsed.data.timeout_ms,\n }),\n retry: parsed.data.retry,\n contextIdMappingSpec:\n normalizeRuntimeAgentControllerConversationIdMappingSpec({\n contextIdMappingSpec: parsed.data.context_id_mapping_spec,\n defaults,\n }),\n };\n}\n\nfunction normalizeRuntimeAgentTimeoutMs(input: {\n defaults: RuntimeAgentControllerSettings;\n timeoutMs: number | null;\n}): number | null {\n // 120s was an old persisted default. Normal Agent execution must not inherit\n // it as a fixed wall-clock cutoff.\n if (input.timeoutMs === 120_000) {\n return input.defaults.timeoutMs;\n }\n return input.timeoutMs;\n}\n\nfunction normalizeRuntimeAgentControllerConversationIdMappingSpec(input: {\n contextIdMappingSpec: RuntimeAgentControllerConversationIdMappingSpec;\n defaults: RuntimeAgentControllerSettings;\n}): RuntimeAgentControllerConversationIdMappingSpec {\n if (\n input.contextIdMappingSpec.sourceField !==\n DEFAULT_RUNTIME_AGENT_CONTEXT_SOURCE_FIELD\n ) {\n return input.defaults.contextIdMappingSpec;\n }\n return input.contextIdMappingSpec;\n}\n\nfunction resolveRuntimeDaemonDispatchLimits(\n config?: RuntimeDaemonDispatchConfig\n): RuntimeDaemonDispatchLimits {\n return {\n globalConcurrency:\n parsePositiveInteger(config?.globalConcurrency) ??\n DEFAULT_RUNTIME_DAEMON_GLOBAL_CONCURRENCY,\n queueMax:\n parsePositiveInteger(config?.queueMax) ??\n DEFAULT_RUNTIME_DAEMON_QUEUE_MAX,\n };\n}\n\nfunction normalizeRuntimeStreamingMode(\n value: unknown\n): RuntimeAgentStreamingMode | null {\n if (value === \"final\" || value === \"stream\") {\n return value;\n }\n return null;\n}\n\nfunction parseSkillsInstallMode(\n value: unknown\n): RuntimeSkillsInstallRecord[\"mode\"] | null {\n if (value === \"symlink\" || value === \"copy\") {\n return value;\n }\n return null;\n}\n\nfunction parseSkillsInstallStatus(\n value: unknown\n): RuntimeSkillsInstallRecord[\"status\"] | null {\n if (value === \"installed\" || value === \"skipped\" || value === \"failed\") {\n return value;\n }\n return null;\n}\n\nfunction parsePositiveInteger(value: unknown): number | undefined {\n if (!Number.isInteger(value)) {\n return undefined;\n }\n const numericValue = Number(value);\n if (numericValue <= 0) {\n return undefined;\n }\n return numericValue;\n}\n\nfunction toTrimmedStringOrEmpty(value: unknown): string {\n if (typeof value !== \"string\") {\n return \"\";\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : \"\";\n}\n\nfunction toTrimmedStringOrUndefined(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction normalizeCustomTargetDir(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n return \"\";\n }\n if (WINDOWS_DRIVE_ONLY_RE.test(trimmed)) {\n return `${trimmed[0]?.toUpperCase() ?? \"\"}:`;\n }\n const windowsLike =\n WINDOWS_DRIVE_PREFIX_RE.test(trimmed) || WINDOWS_UNC_RE.test(trimmed);\n const normalizedPath = windowsLike\n ? (() => {\n const normalizedWindowsPath = win32.normalize(trimmed);\n if (WINDOWS_DRIVE_ANY_RE.test(normalizedWindowsPath)) {\n return `${normalizedWindowsPath[0]?.toUpperCase() ?? \"\"}${normalizedWindowsPath.slice(1)}`;\n }\n return normalizedWindowsPath;\n })()\n : normalize(trimmed);\n const isPosixRoot = normalizedPath === posix.parse(normalizedPath).root;\n const isWindowsRoot = normalizedPath === win32.parse(normalizedPath).root;\n if (isPosixRoot || isWindowsRoot) {\n return normalizedPath;\n }\n return normalizedPath.replace(TRAILING_PATH_SEPARATORS_RE, \"\");\n}\n\nfunction toStringMap(value: unknown): Record<string, string> | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const entries = Object.entries(value).filter(\n (entry): entry is [string, string] => typeof entry[1] === \"string\"\n );\n if (entries.length === 0) {\n return undefined;\n }\n\n return Object.fromEntries(entries);\n}\n\nfunction isFileNotFoundError(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: string }).code === \"ENOENT\"\n );\n}\n\nasync function readSplitRuntimeConfigDetailed(): Promise<{\n config: RuntimeConfigV1 | null;\n hasFiles: boolean;\n health: RuntimeConfigReadHealth;\n}> {\n const [\n preferencesFile,\n agentRuntimeFile,\n skillsStoreFile,\n customTargetsFile,\n installsFile,\n ] = await Promise.all([\n readOptionalJsonFile(devicePreferencesPath()),\n readOptionalJsonFile(deviceAgentRuntimePath()),\n readOptionalJsonFile(deviceSkillsStorePath()),\n readOptionalJsonFile(deviceSkillsCustomTargetsPath()),\n readOptionalJsonFile(deviceSkillsInstallsPath()),\n ]);\n\n const files = [\n preferencesFile,\n agentRuntimeFile,\n skillsStoreFile,\n customTargetsFile,\n installsFile,\n ];\n const hasFiles = files.some((file) => file.found);\n if (!hasFiles) {\n return {\n config: null,\n hasFiles: false,\n health: {\n parseFallback: false,\n },\n };\n }\n\n const invalidFile = files.find((file) => file.error);\n const preferences = parseDevicePreferencesConfig(preferencesFile.value);\n const agentRuntime = parseDeviceAgentRuntimeConfig(agentRuntimeFile.value);\n const skillsStore = parseDeviceSkillsStoreConfig(skillsStoreFile.value);\n const customTargets = parseDeviceSkillsCustomTargetsConfig(\n customTargetsFile.value\n );\n const installs = parseDeviceSkillsInstallsConfig(installsFile.value);\n\n const skills = mergeRuntimeSkillsConfig({\n store: skillsStore,\n customTargets,\n installs,\n });\n const config = buildRuntimeConfigFromParts({\n baseUrl: preferences.baseUrl,\n viewCustomization: preferences.viewCustomization,\n daemon: preferences.daemon,\n onboarding: preferences.onboarding,\n deviceRuntimeState: agentRuntime,\n skills,\n });\n\n return {\n config,\n hasFiles: true,\n health: invalidFile\n ? {\n parseFallback: true,\n reason: invalidFile.error ?? \"invalid_json\",\n }\n : {\n parseFallback: false,\n },\n };\n}\n\nasync function readLegacyRuntimeConfigDetailed(): Promise<{\n config: RuntimeConfigV1 | null;\n health: RuntimeConfigReadHealth;\n}> {\n let raw: string;\n try {\n raw = await readFile(legacyRuntimeConfigPath(), \"utf8\");\n } catch (error) {\n if (isFileNotFoundError(error)) {\n return {\n config: null,\n health: {\n parseFallback: false,\n },\n };\n }\n throw error;\n }\n\n if (raw.trim().length === 0) {\n return {\n config: null,\n health: {\n parseFallback: false,\n },\n };\n }\n\n let parsed: Partial<RuntimeConfigV1> & {\n agents?: unknown;\n daemon?: unknown;\n onboarding?: unknown;\n };\n try {\n parsed = JSON.parse(raw) as Partial<RuntimeConfigV1> & {\n agents?: unknown;\n daemon?: unknown;\n onboarding?: unknown;\n };\n } catch {\n return {\n config: null,\n health: {\n parseFallback: true,\n reason: \"invalid_json\",\n },\n };\n }\n\n if (parsed.v !== 1) {\n return {\n config: null,\n health: {\n parseFallback: true,\n reason: \"invalid_version\",\n },\n };\n }\n\n if (parsed.agents !== undefined) {\n throw new Error(\n \"runtime.config.legacy_agents_unsupported: key 'agents.registrations' is no longer supported. Use 'deviceRuntimeState.controllers' or run 'openmeld reset --yes'.\"\n );\n }\n\n return {\n config: buildRuntimeConfigFromParts({\n baseUrl: parseConfiguredBaseUrl(parsed.baseUrl),\n viewCustomization: parseRuntimeViewCustomization(\n parsed.viewCustomization\n ),\n skills: parseRuntimeSkillsConfig(parsed.skills),\n daemon: parseRuntimeDaemonConfig(parsed.daemon),\n deviceRuntimeState: parseRuntimeDeviceRuntimeState(\n parsed.deviceRuntimeState\n ),\n onboarding: parseRuntimeOnboardingConfig(parsed.onboarding),\n updatedAt:\n typeof parsed.updatedAt === \"string\"\n ? parsed.updatedAt\n : new Date().toISOString(),\n }),\n health: {\n parseFallback: false,\n },\n };\n}\n\nfunction buildRuntimeConfigFromParts(input: {\n baseUrl?: string;\n viewCustomization?: RuntimeViewCustomization;\n skills?: RuntimeSkillsConfig;\n daemon?: RuntimeDaemonConfig;\n deviceRuntimeState?: RuntimeDeviceRuntimeState;\n onboarding?: RuntimeOnboardingConfig;\n updatedAt?: string;\n}): RuntimeConfigV1 | null {\n const updatedAt = input.updatedAt ?? new Date().toISOString();\n if (\n !(\n input.baseUrl ||\n input.viewCustomization ||\n input.skills ||\n input.daemon ||\n input.deviceRuntimeState ||\n input.onboarding\n )\n ) {\n return null;\n }\n\n return {\n v: 1,\n ...(input.baseUrl ? { baseUrl: input.baseUrl } : {}),\n ...(input.viewCustomization\n ? { viewCustomization: input.viewCustomization }\n : {}),\n ...(input.skills ? { skills: input.skills } : {}),\n ...(input.daemon ? { daemon: input.daemon } : {}),\n ...(input.deviceRuntimeState\n ? { deviceRuntimeState: input.deviceRuntimeState }\n : {}),\n ...(input.onboarding ? { onboarding: input.onboarding } : {}),\n updatedAt,\n };\n}\n\nfunction parseDevicePreferencesConfig(\n value: unknown\n): Pick<\n RuntimeConfigV1,\n \"baseUrl\" | \"viewCustomization\" | \"daemon\" | \"onboarding\"\n> {\n if (!value || typeof value !== \"object\") {\n return {};\n }\n const parsed = value as Partial<DevicePreferencesV1>;\n if (parsed.v !== 1) {\n return {};\n }\n return {\n ...(parseConfiguredBaseUrl(parsed.baseUrl)\n ? { baseUrl: parseConfiguredBaseUrl(parsed.baseUrl) }\n : {}),\n ...(parseRuntimeViewCustomization(parsed.viewCustomization)\n ? {\n viewCustomization: parseRuntimeViewCustomization(\n parsed.viewCustomization\n ),\n }\n : {}),\n ...(parseRuntimeDaemonConfig(parsed.daemon)\n ? { daemon: parseRuntimeDaemonConfig(parsed.daemon) }\n : {}),\n ...(parseRuntimeOnboardingConfig(parsed.onboarding)\n ? { onboarding: parseRuntimeOnboardingConfig(parsed.onboarding) }\n : {}),\n };\n}\n\nfunction parseDeviceAgentRuntimeConfig(\n value: unknown\n): RuntimeDeviceRuntimeState | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const parsed = value as Partial<DeviceAgentRuntimeV1>;\n if (parsed.v !== 1) {\n return undefined;\n }\n return parseRuntimeDeviceRuntimeState(parsed.deviceRuntimeState);\n}\n\nfunction parseDeviceSkillsStoreConfig(\n value: unknown\n): Pick<RuntimeSkillsConfig, \"storeDir\" | \"agents\"> | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const parsed = value as Partial<DeviceSkillsStoreV1>;\n if (parsed.v !== 1) {\n return undefined;\n }\n const storeDir =\n typeof parsed.storeDir === \"string\" && parsed.storeDir.trim().length > 0\n ? parsed.storeDir.trim()\n : undefined;\n const agents = parseRuntimeSkillsAgents(parsed.agents);\n if (!(storeDir || agents)) {\n return undefined;\n }\n return {\n ...(storeDir ? { storeDir } : {}),\n ...(agents ? { agents } : {}),\n };\n}\n\nfunction parseDeviceSkillsCustomTargetsConfig(\n value: unknown\n): RuntimeSkillsCustomTarget[] | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const parsed = value as Partial<DeviceSkillsCustomTargetsV1>;\n if (parsed.v !== 1) {\n return undefined;\n }\n return parseRuntimeSkillsCustomTargets(parsed.customTargets, undefined);\n}\n\nfunction parseDeviceSkillsInstallsConfig(\n value: unknown\n): RuntimeSkillsInstallRecord[] | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const parsed = value as Partial<DeviceSkillsInstallsV1>;\n if (parsed.v !== 1) {\n return undefined;\n }\n return parseRuntimeSkillsInstallRecords(parsed.installs);\n}\n\nfunction mergeRuntimeSkillsConfig(input: {\n store?: Pick<RuntimeSkillsConfig, \"storeDir\" | \"agents\">;\n customTargets?: RuntimeSkillsCustomTarget[];\n installs?: RuntimeSkillsInstallRecord[];\n}): RuntimeSkillsConfig | undefined {\n if (!(input.store || input.customTargets || input.installs)) {\n return undefined;\n }\n return {\n ...(input.store?.storeDir ? { storeDir: input.store.storeDir } : {}),\n ...(input.store?.agents ? { agents: input.store.agents } : {}),\n ...(input.customTargets ? { customTargets: input.customTargets } : {}),\n ...(input.installs ? { installs: input.installs } : {}),\n };\n}\n\nfunction buildDevicePreferencesState(\n next: RuntimeConfigV1,\n updatedAt: string\n): DevicePreferencesV1 | null {\n if (\n !(next.baseUrl || next.viewCustomization || next.daemon || next.onboarding)\n ) {\n return null;\n }\n return {\n v: 1,\n ...(next.baseUrl ? { baseUrl: next.baseUrl } : {}),\n ...(next.viewCustomization\n ? { viewCustomization: next.viewCustomization }\n : {}),\n ...(next.daemon ? { daemon: next.daemon } : {}),\n ...(next.onboarding ? { onboarding: next.onboarding } : {}),\n updatedAt,\n };\n}\n\nfunction buildDeviceAgentRuntimeState(\n next: RuntimeConfigV1,\n updatedAt: string\n): DeviceAgentRuntimeV1 | null {\n if (!next.deviceRuntimeState) {\n return null;\n }\n return {\n v: 1,\n deviceRuntimeState: next.deviceRuntimeState,\n updatedAt,\n };\n}\n\nfunction buildDeviceSkillsStoreState(\n next: RuntimeConfigV1,\n updatedAt: string\n): DeviceSkillsStoreV1 | null {\n if (!(next.skills?.storeDir || next.skills?.agents)) {\n return null;\n }\n return {\n v: 1,\n ...(next.skills?.storeDir ? { storeDir: next.skills.storeDir } : {}),\n ...(next.skills?.agents ? { agents: next.skills.agents } : {}),\n updatedAt,\n };\n}\n\nfunction buildDeviceSkillsCustomTargetsState(\n next: RuntimeConfigV1,\n updatedAt: string\n): DeviceSkillsCustomTargetsV1 | null {\n if (!(next.skills?.customTargets && next.skills.customTargets.length > 0)) {\n return null;\n }\n return {\n v: 1,\n customTargets: next.skills.customTargets,\n updatedAt,\n };\n}\n\nfunction buildDeviceSkillsInstallsState(\n next: RuntimeConfigV1,\n updatedAt: string\n): DeviceSkillsInstallsV1 | null {\n if (!(next.skills?.installs && next.skills.installs.length > 0)) {\n return null;\n }\n return {\n v: 1,\n installs: next.skills.installs,\n updatedAt,\n };\n}\n\nasync function writeJsonFileOrRemove(\n path: string,\n payload: object | null\n): Promise<void> {\n if (!payload) {\n await rm(path, { force: true }).catch(() => undefined);\n return;\n }\n\n await mkdir(dirname(path), { recursive: true });\n const tempPath = `${path}.tmp-${process.pid}-${Date.now()}`;\n await writeFile(tempPath, `${JSON.stringify(payload, null, 2)}\\n`, \"utf8\");\n try {\n await rename(tempPath, path);\n } catch (error) {\n await rm(tempPath, { force: true }).catch(() => undefined);\n throw error;\n }\n}\n\nasync function readOptionalJsonFile(path: string): Promise<{\n found: boolean;\n value: unknown;\n error?: RuntimeConfigFallbackReason;\n}> {\n const raw = await readFile(path, \"utf8\").catch((error) => {\n if (isFileNotFoundError(error)) {\n return null;\n }\n throw error;\n });\n if (raw === null) {\n return {\n found: false,\n value: null,\n };\n }\n if (raw.trim().length === 0) {\n return {\n found: true,\n value: null,\n };\n }\n try {\n return {\n found: true,\n value: JSON.parse(raw),\n };\n } catch {\n return {\n found: true,\n value: null,\n error: \"invalid_json\",\n };\n }\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n return await readFile(path, \"utf8\")\n .then(() => true)\n .catch((error) => {\n if (isFileNotFoundError(error)) {\n return false;\n }\n throw error;\n });\n}\n","import { normalizeBaseUrl } from \"../protocol/urls\";\nimport { resolveOpenMeldEnvPreset } from \"./paths\";\nimport { getConfiguredBaseUrl } from \"./runtime-config\";\n\nexport const DEFAULT_GATEWAY_BASE_URL = \"https://gateway.openmeld.ai\";\nexport const DEV_LOCAL_GATEWAY_BASE_URL = \"http://localhost:8080\";\nconst AUTH_HOST_LABEL = \"auth\";\nconst AUTH_HOST_PREFIX = \"auth-\";\nconst LOCAL_AUTH_PORT = \"8788\";\n\nexport async function resolveBaseUrl(\n cliValue?: string,\n input: { env?: NodeJS.ProcessEnv } = {}\n): Promise<string> {\n const env = input.env ?? process.env;\n const fromCli = String(cliValue ?? \"\").trim();\n if (fromCli) {\n return normalizeGatewayBaseUrl(fromCli);\n }\n\n // False-positive guard: OPENMELD_BASE_URL fallback is intentionally removed.\n // We only support OPENMELD_GATEWAY_URL to avoid ambiguous env precedence.\n const fromEnv = String(env.OPENMELD_GATEWAY_URL ?? \"\").trim();\n if (fromEnv) {\n return normalizeGatewayBaseUrl(fromEnv);\n }\n\n const fromConfig = await getConfiguredBaseUrl();\n if (fromConfig) {\n return normalizeGatewayBaseUrl(fromConfig);\n }\n\n return normalizeGatewayBaseUrl(resolveDefaultGatewayBaseUrl({ env }));\n}\n\nexport async function resolveBaseUrlOrNull(\n cliValue?: string\n): Promise<string | null> {\n try {\n return await resolveBaseUrl(cliValue);\n } catch {\n return null;\n }\n}\n\nexport async function resolveExplicitGatewayUrlOrThrow(\n cliValue?: string\n): Promise<string | undefined> {\n const explicitGatewayUrl = normalizeOptionalString(cliValue);\n if (!explicitGatewayUrl) {\n return undefined;\n }\n\n try {\n return await Promise.resolve().then(() =>\n normalizeGatewayBaseUrl(explicitGatewayUrl)\n );\n } catch (error) {\n throw new Error(\n `Invalid explicit gateway URL \"${explicitGatewayUrl}\": ${toErrorMessage(error)}`\n );\n }\n}\n\nexport function normalizeGatewayBaseUrl(gatewayUrl: string): string {\n const normalizedGatewayUrl = normalizeBaseUrl(gatewayUrl);\n const parsedGatewayUrl = new URL(normalizedGatewayUrl);\n if (isAuthWorkerUrl(parsedGatewayUrl)) {\n throw new Error(\n \"gateway URL must point to the OpenMeld gateway, not the OpenMeld auth worker\"\n );\n }\n return normalizedGatewayUrl;\n}\n\nexport function normalizeGatewayBaseUrlOrNull(\n gatewayUrl?: string | null\n): string | null {\n const normalizedGatewayUrl = normalizeOptionalString(gatewayUrl);\n if (!normalizedGatewayUrl) {\n return null;\n }\n try {\n return normalizeGatewayBaseUrl(normalizedGatewayUrl);\n } catch {\n return null;\n }\n}\n\nfunction normalizeOptionalString(value: unknown): string | null {\n const normalized = String(value ?? \"\").trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nexport function resolveDefaultGatewayBaseUrl(\n input: { env?: NodeJS.ProcessEnv } = {}\n): string {\n const preset = resolveOpenMeldEnvPreset(input);\n if (preset === \"dev-local\" || preset === \"canary\") {\n return DEV_LOCAL_GATEWAY_BASE_URL;\n }\n return DEFAULT_GATEWAY_BASE_URL;\n}\n\nfunction isAuthWorkerUrl(url: URL): boolean {\n if (isLoopbackHostname(url.hostname)) {\n return resolveUrlPort(url) === LOCAL_AUTH_PORT;\n }\n\n const [firstLabel = \"\"] = url.hostname.toLowerCase().split(\".\");\n return (\n firstLabel === AUTH_HOST_LABEL || firstLabel.startsWith(AUTH_HOST_PREFIX)\n );\n}\n\nfunction isLoopbackHostname(hostname: string): boolean {\n const normalizedHostname = hostname.toLowerCase();\n return (\n normalizedHostname === \"localhost\" ||\n normalizedHostname === \"127.0.0.1\" ||\n normalizedHostname === \"::1\"\n );\n}\n\nfunction resolveUrlPort(url: URL): string {\n if (url.port) {\n return url.port;\n }\n if (url.protocol === \"http:\" || url.protocol === \"ws:\") {\n return \"80\";\n }\n if (url.protocol === \"https:\" || url.protocol === \"wss:\") {\n return \"443\";\n }\n return \"\";\n}\n\nfunction toErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAM,4DAA4D,EAAE,KAAK,CAAC,eAAe,WAAW,CAAC;AACrG,MAAM,oDAAoD,EAAE,KAAK,CAAC,eAAe,WAAW,CAAC;AAC7F,MAAM,sDAAsD,EAAE,QAAQ,aAAa;AACnF,MAAM,0DAA0D,EAAE,KAAK;CACtE;CACA;CACA;AACD,CAAC;AACmD,EAAE,aAAa;CAClE,UAAU;CACV,gBAAgB;CAChB,QAAQ;CACR,cAAc;AACf,CAAC;AACD,MAAM,oEAAoE;CACzE,OAAO;EACN,UAAU;EACV,gBAAgB;EAChB,QAAQ;EACR,cAAc;CACf;CACA,eAAe;EACd,UAAU;EACV,gBAAgB;EAChB,QAAQ;EACR,cAAc;CACf;CACA,QAAQ;EACP,UAAU;EACV,gBAAgB;EAChB,QAAQ;EACR,cAAc;CACf;CACA,UAAU;EACT,UAAU;EACV,gBAAgB;EAChB,QAAQ;EACR,cAAc;CACf;CACA,UAAU;EACT,UAAU;EACV,gBAAgB;EAChB,QAAQ;EACR,cAAc;CACf;AACD;AACA,MAAM,uDAAuD,wBAAwB;CACpF,MAAM,aAAa,kEAAkE;CACrF,OAAO,aAAa,EAAE,GAAG,WAAW,IAAI;AACzC;;;AChDA,MAAM,sCAAsC;AAC5C,MAAM,iCAAiC;AACvC,MAAM,qCAAqC;AAC3C,MAAM,wCAAwC;AAC9C,MAAM,2BAA2B,EAAE,OAAO,CAAC,CAAC,WAAW,OAAO,YAAY;CACzE,MAAM,SAAS,wBAAwB,KAAK;CAC5C,IAAI,CAAC,QAAQ;EACZ,QAAQ,SAAS;GAChB,MAAM;GACN,SAAS;EACV,CAAC;EACD,OAAO,EAAE;CACV;CACA,OAAO,OAAO;AACf,CAAC;AACD,SAAS,sBAAsB,OAAO;CACrC,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,MAAM,aAAa,MAAM,KAAK;CAC9B,OAAO,WAAW,SAAS,IAAI,aAAa;AAC7C;AACA,SAAS,6BAA6B,oBAAoB;CACzD,MAAM,aAAa,sBAAsB,kBAAkB;CAC3D,IAAI,CAAC,YAAY,OAAO;CACxB,IAAI,WAAW,SAAS,GAAG,KAAK,CAAC,WAAW,WAAW,mCAAmC,GAAG,OAAO;CACpG,MAAM,YAAY,WAAW,WAAW,mCAAmC,IAAI,WAAW,MAAM,CAAC,IAAI;CACrG,IAAI,UAAU,WAAW,KAAK,UAAU,SAAS,GAAG,GAAG,OAAO;CAC9D,OAAO;AACR;AACA,SAAS,uCAAuC,oBAAoB;CACnE,MAAM,YAAY,6BAA6B,kBAAkB;CACjE,OAAO,aAAa,oDAAoD,SAAS,IAAI,YAAY;AAClG;AACA,SAAS,kCAAkC,oBAAoB;CAC9D,OAAO,6BAA6B,kBAAkB;AACvD;AAKA,SAAS,wBAAwB,oBAAoB;CACpD,MAAM,aAAa,sBAAsB,kBAAkB;CAC3D,IAAI,CAAC,YAAY,OAAO;CACxB,IAAI,eAAe,uBAAuB,OAAO;EAChD,MAAM;EACN,IAAI;EACJ,KAAK;CACN;CACA,KAAK,MAAM,QAAQ,CAAC,WAAW,QAAQ,GAAG;EACzC,MAAM,SAAS,GAAG,OAAO;EACzB,IAAI,CAAC,WAAW,WAAW,MAAM,GAAG;EACpC,MAAM,KAAK,WAAW,MAAM,OAAO,MAAM,CAAC,CAAC,KAAK;EAChD,IAAI,GAAG,WAAW,KAAK,GAAG,SAAS,8BAA8B,GAAG,OAAO;EAC3E,OAAO;GACN;GACA;GACA,KAAK,GAAG,OAAO,iCAAiC;EACjD;CACD;CACA,OAAO;AACR;AACA,SAAS,+BAA+B,oBAAoB;CAC3D,OAAO,wBAAwB,kBAAkB,CAAC,EAAE,OAAO;AAC5D;AACA,SAAS,+BAA+B,oBAAoB;CAC3D,OAAO,+BAA+B,kBAAkB;AACzD;AACA,SAAS,sCAAsC,oBAAoB;CAClE,MAAM,YAAY,6BAA6B,kBAAkB;CACjE,OAAO,YAAY,GAAG,sCAAsC,cAAc;AAC3E;;;ACrEA,MAAM,wCAAwC,EAAE,KAAK;CACpD;CACA;CACA;AACD,CAAC;AACD,MAAM,8BAA8B,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AAC3D,MAAM,uCAAuC,EAAE,aAAa;CAC3D,oBAAoB;CACpB,iCAAiC;CACjC,+BAA+B;AAChC,CAAC;AACD,MAAM,2BAA2B,EAAE,aAAa;CAC/C,mBAAmB,EAAE,KAAK,CAAC,WAAW,MAAM,CAAC,CAAC,CAAC,SAAS;CACxD,eAAe,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;CAC1C,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;CAClC,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;AAC5C,CAAC;AACD,MAAM,8DAA8D;CACnE,OAAO;CACP,eAAe;CACf,QAAQ;CACR,UAAU;CACV,UAAU;AACX;AAEA,MAAM,iDAAiD,uBAAuB;CAC7E,MAAM,YAAY,sCAAsC,kBAAkB;CAC1E,IAAI,CAAC,WAAW,OAAO;CACvB,MAAM,sBAAsB,UAAU,MAAM,CAAC;CAC7C,OAAO,4DAA4D,wBAAwB;AAC5F;AAEA,MAAM,uCAAuC,WAAW;CACvD,oBAAoB,MAAM;CAC1B,iCAAiC,MAAM;CACvC,+BAA+B,MAAM;AACtC;;;ACpCA,MAAM,iCAAiC;AACvC,MAAM,8BAA8B,EAAE,KAAK,CAAC,gCAAgC,YAAY,CAAC;AACzF,MAAM,6BAA6B,EAAE,KAAK;CACzC;CACA;CACA;AACD,CAAC;AACD,MAAM,6BAA6B,EAAE,KAAK,CAAC,SAAS,QAAQ,CAAC;AAC7D,MAAM,wDAAwD,EAAE,aAAa;CAC5E,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC7B,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AACD,MAAM,6CAA6C,EAAE,aAAa;CACjE,MAAM,EAAE,QAAQ,YAAY;CAC5B,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC7B,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;AACjD,CAAC;AACD,MAAM,6CAA6C,EAAE,aAAa;CACjE,MAAM,EAAE,QAAQ,aAAa;CAC7B,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC1B,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC5B,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;AACjD,CAAC;AACD,MAAM,6CAA6C,EAAE,mBAAmB,QAAQ,CAAC,4CAA4C,0CAA0C,CAAC;AACpH,EAAE,aAAa;CAClE,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC3B,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CACvB,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CACxB,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC7B,gBAAgB;AACjB,CAAC;AACD,MAAM,uCAAuC,EAAE,aAAa;CAC3D,iBAAiB,4BAA4B,QAAQ,8BAA8B;CACnF,gBAAgB;CAChB,gBAAgB,2BAA2B,QAAQ,OAAO;CAC1D,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,IAAI;CAC/D,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;CACxC,yBAAyB;AAC1B,CAAC;AACoC,EAAE,aAAa;CACnD,+BAA+B,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;CAC1D,6BAA6B,qCAAqC,SAAS,CAAC,CAAC,SAAS;CACtF,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC7B,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;;;AC5CD,MAAM,8BAA8B,EAAE,KAAK;CAC1C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,CAAC;AACD,MAAM,8BAA8B,EAAE,KAAK;CAC1C;CACA;CACA;CACA;CACA;CACA;AACD,CAAC;AACD,MAAM,mCAAmC,EAAE,KAAK;CAC/C;CACA;CACA;CACA;AACD,CAAC;AACD,MAAM,wCAAwC;CAC7C,mCAAmC;CACnC,sCAAsC;CACtC,mCAAmC;CACnC,qCAAqC;CACrC,8CAA8C;CAC9C,oCAAoC;CACpC,sCAAsC;CACtC,iCAAiC;AAClC;AACA,SAAS,kCAAkC,MAAM;CAChD,IAAI,CAAC,OAAO,OAAO,uCAAuC,IAAI,GAAG,OAAO;CACxE,OAAO,sCAAsC;AAC9C;AACA,MAAM,gCAAgC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG;AACtE,MAAM,mCAAmC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;AAC1E,MAAM,iCAAiC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;AACxE,SAAS,+BAA+B,OAAO;CAC9C,OAAO,MAAM,gBAAgB,GAAG,MAAM,QAAQ,GAAG,MAAM,kBAAkB,MAAM;AAChF;AACA,MAAM,0BAA0B,EAAE,aAAa;CAC9C,eAAe,EAAE,QAAQ,CAAC;CAC1B,MAAM;CACN,WAAW;CACX,gBAAgB;CAChB,SAAS;CACT,eAAe,EAAE,MAAM,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;CAChE,aAAa,EAAE,aAAa;EAC3B,YAAY,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;EAChE,QAAQ,EAAE,MAAM,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;CAC7D,CAAC;AACF,CAAC,CAAC,CAAC,aAAa,OAAO,YAAY;CAClC,MAAM,iBAAiB,kCAAkC,MAAM,IAAI;CACnE,IAAI,MAAM,mBAAmB,gBAAgB,QAAQ,SAAS;EAC7D,MAAM;EACN,SAAS,2BAA2B,eAAe,OAAO,MAAM;EAChE,MAAM,CAAC,gBAAgB;CACxB,CAAC;AACF,CAAC;AACyC,EAAE,aAAa;CACxD,MAAM,EAAE,QAAQ,OAAO;CACvB,MAAM;CACN,SAAS;CACT,WAAW,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS;CACtD,SAAS,EAAE,aAAa,EAAE,mBAAmB,wBAAwB,CAAC;AACvE,CAAC,CAAC,CAAC,aAAa,OAAO,YAAY;CAClC,IAAI,MAAM,SAAS,MAAM,QAAQ,kBAAkB,MAAM,QAAQ,SAAS;EACzE,MAAM;EACN,SAAS;EACT,MAAM,CAAC,MAAM;CACd,CAAC;CACD,MAAM,kBAAkB,+BAA+B,MAAM,QAAQ,iBAAiB;CACtF,IAAI,MAAM,YAAY,iBAAiB,QAAQ,SAAS;EACvD,MAAM;EACN,SAAS;EACT,MAAM,CAAC,SAAS;CACjB,CAAC;AACF,CAAC;;;ACnED,MAAM,kCAAkC;AACxC,MAAM,+BAA+B;AACrC,MAAM,4BAA4B;AAClC,MAAM,4BAA4B;AAClC,MAAa,wBAAwB;AACrC,MAAM,8BAA8B;AACpC,MAAM,8BAAiD;AACvD,MAAM,sCAAsC;CAC1C,MAAM;CACN,aAAa;CACb,QAAQ;AACV;AACA,MAAM,oCAAoC;CACxC,UAAU;CACV,gBAAgB;CAChB,mBAAmB;AACrB;AAIA,SAAgB,2BAA2B,OAAmC;CAC5E,MAAM,MAAM,OAAO,SAAS,EAAE,CAAC,CAAC,KAAK;CACrC,IAAI,IAAI,WAAW,GACjB,MAAM,IAAI,MAAM,+BAA+B;CAGjD,MAAM,OAAO,IAAI,QAAQ,qBAAqB,GAAG,CAAC,CAAC,YAAY;CAC/D,IAAI,CAAC,QAAQ,SAAS,OAAO,SAAS,MACpC,MAAM,IAAI,MAAM,8BAA8B;CAEhD,IAAI,KAAK,SAAS,iCAChB,MAAM,IAAI,MAAM,+BAA+B;CAEjD,OAAO;AACT;AAEA,SAAgB,yBACd,QAAqC,CAAC,GACnB;CAEnB,MAAM,UAAU,4BADJ,MAAM,OAAO,QAAQ,IAAA,CACc,4BAA4B;CAC3E,IAAI,SACF,OAAO;CAET,OAAO,iCAAiC,MAAM,QAAQ,QAAQ,IAAI;AACpE;AAEA,SAAgB,iCACd,QAAqC,CAAC,GACZ;CAE1B,OAAO,4BADK,MAAM,OAAO,QAAQ,IAAA,CACK,4BAA4B;AACpE;AAEA,SAAgB,kCACd,QACQ;CACR,OAAO,oCAAoC;AAC7C;AAEA,SAAgB,uBACd,QAAqC,CAAC,GAC9B;CACR,MAAM,MAAM,MAAM,OAAO,QAAQ;CACjC,MAAM,UAAU,OAAO,IAAA,oBAA8B,EAAE,CAAC,CAAC,KAAK;CAC9D,IAAI,SACF,OAAO;CAET,MAAM,SAAS,yBAAyB,KAAK;CAC7C,OAAO,KACL,qBAAqB,KAAK,GAC1B,kCAAkC,MAAM,CAC1C;AACF;;;;;;AAOA,SAAgB,oCACd,QAAqC,CAAC,GACT;CAC7B,MAAM,MAAM,EAAE,GAAI,MAAM,OAAO,QAAQ,IAAK;CAC5C,OAAO,IAAI;CACX,OAAO;EACL,GAAG;EACH;CACF;AACF;AAEA,SAAgB,kBAA0B;CACxC,OAAO,uBAAuB;AAChC;;;;;;;AAQA,SAAgB,wBACd,QAAqC,CAAC,GAC7B;CACT,MAAM,mBAAmB,KACvB,qBAAqB,KAAK,GAC1B,oCAAoC,IACtC;CACA,OAAO,QAAQ,uBAAuB,KAAK,CAAC,MAAM,QAAQ,gBAAgB;AAC5E;AAEA,SAAgB,qBAA6B;CAC3C,MAAM,OAAO,gBAAgB;CAC7B,OAAO,KAAK,QAAQ,IAAI,GAAG,GAAG,SAAS,IAAI,EAAE,SAAS;AACxD;AAOA,SAAgB,oBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,uBAAuB,KAAK,GAAG,UAAU;AACvD;AAEA,SAAgB,0BACd,SACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KACL,oBAAoB,KAAK,GACzB,qBAAqB,SAAS,SAAS,CACzC;AACF;AAEA,SAAgB,iCACd,SACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,0BAA0B,SAAS,KAAK,GAAG,UAAU;AACnE;AAEA,SAAgB,eACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,uBAAuB,KAAK,GAAG,KAAK;AAClD;AAEA,SAAgB,0BACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,eAAe,KAAK,GAAG,UAAU;AAC/C;AAEA,SAAgB,cAAsB;CACpC,OAAO,KAAK,gBAAgB,GAAG,UAAU;AAC3C;AAEA,SAAgB,UAAU,QAAqC,CAAC,GAAW;CACzE,OAAO,KAAK,uBAAuB,KAAK,GAAG,QAAQ;AACrD;AAQA,SAAgB,gBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,UAAU,KAAK,GAAG,QAAQ;AACxC;AAEA,SAAgB,sBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,UAAU,KAAK,GAAG,kBAAkB;AAClD;AAEA,SAAgB,uBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,UAAU,KAAK,GAAG,oBAAoB;AACpD;AAEA,SAAgB,mBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,UAAU,KAAK,GAAG,WAAW;AAC3C;AAEA,SAAgB,kBACd,YACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KACL,mBAAmB,KAAK,GACxB,qBAAqB,YAAY,SAAS,CAC5C;AACF;AAEA,SAAgB,0BACd,YACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,kBAAkB,YAAY,KAAK,GAAG,UAAU;AAC9D;AAEA,SAAgB,yBACd,YACA,WACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KACL,0BAA0B,YAAY,KAAK,GAC3C,qBAAqB,WAAW,SAAS,CAC3C;AACF;AAQA,SAAgB,yBACd,WACA,QAAqC,CAAC,GAC9B;CACR,OAAO,yBAAyB,YAAY,WAAW,KAAK;AAC9D;AAEA,SAAgB,kCACd,WACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,yBAAyB,WAAW,KAAK,GAAG,WAAW;AACrE;AAEA,SAAgB,mCACd,WACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,yBAAyB,WAAW,KAAK,GAAG,gBAAgB;AAC1E;AAEA,SAAgB,sBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,gBAAgB,KAAK,GAAG,YAAY;AAClD;AAEA,SAAgB,8BACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,gBAAgB,KAAK,GAAG,qBAAqB;AAC3D;AAEA,SAAgB,yBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,gBAAgB,KAAK,GAAG,eAAe;AACrD;AAEA,SAAgB,wBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,uBAAuB,KAAK,GAAG,aAAa;AAC1D;AAEA,SAAgB,wBAAwB,OAAwB;CAC9D,OAAO,qBAAqB,OAAO,yBAAyB;AAC9D;AAEA,SAAgB,wBAAwB,OAAwB;CAC9D,OAAO,qBAAqB,OAAO,yBAAyB;AAC9D;AAEA,SAAgB,oBACd,OACoB;CACpB,OAAO;EACL,SAAS,wBAAwB,MAAM,OAAO;EAC9C,SAAS,wBAAwB,MAAM,OAAO;CAChD;AACF;AAEA,SAAgB,WAAW,SAAqC;CAC9D,MAAM,aAAa,oBAAoB,OAAO;CAC9C,OAAO,KAAK,YAAY,GAAG,WAAW,SAAS,WAAW,OAAO;AACnE;AAEA,SAAgB,mBAAmB,SAAqC;CAGtE,OAAO,KAAK,WAAW,OAAO,GAAG,UAAU;AAC7C;AAEA,SAAgB,kBACd,SACA,mBACQ;CAGR,OAAO,KACL,mBAAmB,OAAO,GAC1B,2BAA2B,iBAAiB,CAC9C;AACF;AAEA,SAAgB,uBACd,SACA,mBACQ;CACR,OAAO,KAAK,kBAAkB,SAAS,iBAAiB,GAAG,WAAW;AACxE;AAEA,SAAgB,4BACd,SACA,mBACQ;CACR,OAAO,KAAK,kBAAkB,SAAS,iBAAiB,GAAG,iBAAiB;AAC9E;AAEA,SAAgB,4BACd,SACA,mBACQ;CACR,OAAO,KAAK,kBAAkB,SAAS,iBAAiB,GAAG,WAAW;AACxE;AAEA,SAAgB,4BACd,SACA,mBACQ;CACR,OAAO,KAAK,kBAAkB,SAAS,iBAAiB,GAAG,aAAa;AAC1E;AAEA,SAAgB,8BACd,SACA,mBACQ;CACR,OAAO,KAAK,kBAAkB,SAAS,iBAAiB,GAAG,QAAQ;AACrE;AAEA,SAAgB,WAAW,mBAA8C;CACvE,OAAO,KAAK,gBAAgB,GAAG,YAAY,iBAAiB;AAC9D;AAEA,SAAgB,WAAW,QAAqC,CAAC,GAAW;CAC1E,OAAO,KAAK,uBAAuB,KAAK,GAAG,SAAS;AACtD;AAEA,SAAgB,iBAAyB;CACvC,OAAO,KAAK,WAAW,GAAG,MAAM;AAClC;AAEA,SAAgB,cAAsB;CACpC,OAAO,KAAK,WAAW,GAAG,UAAU;AACtC;AAEA,SAAgB,UAAU,QAAqC,CAAC,GAAW;CACzE,OAAO,KAAK,uBAAuB,KAAK,GAAG,QAAQ;AACrD;AAEA,SAAgB,YAAoB;CAClC,OAAO,KAAK,gBAAgB,GAAG,QAAQ;AACzC;AAEA,SAAgB,sBACd,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,uBAAuB,KAAK,GAAG,qBAAqB;AAClE;AAEA,SAAgB,4BACd,gBACA,SACA,WACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KACL,sBAAsB,KAAK,GAC3B,8BAA8B,gBAAgB,gBAAgB,GAC9D,8BAA8B,SAAS,SAAS,GAChD,8BAA8B,WAAW,WAAW,CACtD;AACF;AAQA,SAAgB,UAAU,mBAA8C;CACtE,OAAO,KAAK,WAAW,iBAAiB,GAAG,QAAQ;AACrD;AAEA,SAAgB,SACd,mBACA,QAAqC,CAAC,GAC9B;CACR,OAAO,KAAK,WAAW,KAAK,GAAG,SAAS,iBAAiB;AAC3D;AAEA,SAAgB,gBAAgB,mBAA8C;CAC5E,OAAO,KAAK,WAAW,iBAAiB,GAAG,WAAW;AACxD;AAEA,SAAS,qBAAqB,OAAgB,UAA0B;CACtE,MAAM,aAAa,OAAO,SAAS,EAAE,CAAC,CACnC,KAAK,CAAC,CACN,YAAY;CACf,IAAI,CAAC,YACH,OAAO;CAGT,MAAM,OAAO,WAAW,QAAQ,kBAAkB,GAAG;CACrD,IAAI,CAAC,MACH,OAAO;CAGT,IAAI,SAAS,OAAO,SAAS,MAC3B,OAAO;CAGT,OAAO,KAAK,MAAM,GAAG,+BAA+B;AACtD;AAEA,SAAS,8BAA8B,OAAgB,OAAuB;CAC5E,MAAM,aAAa,OAAO,SAAS,EAAE,CAAC,CAAC,KAAK;CAC5C,IACE,WAAW,WAAW,KACtB,WAAW,SAAS,OACpB,eAAe,OACf,eAAe,QACf,CAAC,6BAA6B,KAAK,UAAU,GAE7C,MAAM,IAAI,MAAM,GAAG,MAAM,+CAA+C;CAE1E,OAAO;AACT;AAEA,SAAS,iCAAiC,MAAmC;CAC3E,OACE,sCAAsC,IAAI,KAAK;AAEnD;AAEA,SAAgB,sCACd,MAC0B;CAC1B,MAAM,YAAY,oCAAoC,IAAI;CAC1D,IAAI,CAAC,WACH,OAAO;CAET,OAAO,kCAAkC,cAAc;AACzD;AAEA,SAAgB,oCACd,MAC6B;CAC7B,OAAO,oBAAoB,KAAK,EAAE;AACpC;AAEA,SAAS,oBACP,OAC6B;CAC7B,MAAM,MAAM,OAAO,SAAS,EAAE,CAAC,CAAC,KAAK;CACrC,IAAI,CAAC,KACH,OAAO;CAGT,MAAM,iBADS,MAAM,GACO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,YAAY;CACtD,IAAI,CAAC,gBACH,OAAO;CAET,IAAI,CAAC,uBAAuB,cAAc,GACxC,OAAO;CAET,OAAO;AACT;AAEA,SAAS,uBAAuB,OAA8C;CAC5E,OAAO,SAAS;AAClB;AAEA,SAAS,2BACP,OAC0B;CAC1B,MAAM,aAAa,OAAO,SAAS,EAAE,CAAC,CACnC,KAAK,CAAC,CACN,YAAY;CACf,IACE,eAAe,UACf,eAAe,eACf,eAAe,UAEf,OAAO;CAET,OAAO;AACT;AAEA,SAAS,qBAAqB,OAA4C;CACxE,IAAI,MAAM,SACR,OAAO,MAAM;CAEf,MAAM,MAAM,MAAM,OAAO,QAAQ;CACjC,MAAM,UAAU,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC,KAAK;CAC5C,IAAI,SACF,OAAO;CAET,OAAO,QAAQ;AACjB;;;AC3gBA,IAAa,2BAAb,cAA8C,MAAM;CAClD;CACA;CAEA,YAAY,OAAsD;EAChE,MAAM,+BAA+B,MAAM,KAAK,GAAG,EACjD,OAAO,MAAM,MACf,CAAC;EACD,KAAK,OAAO;EACZ,KAAK,OAAO,MAAM,MAAM;EACxB,KAAK,QAAQ,MAAM;CACrB;AACF;AAEA,SAAgB,2BACd,OACmC;CACnC,OAAO,iBAAiB;AAC1B;AAcA,SAAgB,qCACd,OACiC;CACjC,IAAI,2BAA2B,MAAM,KAAK,GACxC,OAAO,MAAM;CAEf,MAAM,QAAQ,0BAA0B,KAAK;CAC7C,OAAO,MAAM,SAAS,kCAClB,OACA,IAAI,yBAAyB;EAC3B;EACA,OAAO,MAAM;CACf,CAAC;AACP;AAEA,SAAgB,0BACd,OACmB;CACnB,MAAM,aAAa,oBAAoB,MAAM,KAAK;CAClD,MAAM,SAAS,iBAAiB,MAAM,KAAK;CAE3C,IAAI,eAAe,YAAY,eAAe,UAC5C,OAAO;EACL,eAAe;EACf,MAAM;EACN,WAAW,MAAM;EACjB,gBAAgB;EAChB,SACE;EACF,eAAe;EACf,aAAa;GACX;GACA;EACF;CACF;CAGF,IACE,eAAe,YACb,MAAM,cAAc,iBACpB,MAAM,cAAc,yBACnB,eAAe,YAAY,eAAe,UAE7C,OAAO;EACL,eAAe;EACf,MAAM;EACN,WAAW,MAAM;EACjB,gBAAgB;EAChB,SAAS;EACT,eAAe;EACf,aAAa;GACX;GACA;EACF;CACF;CAGF,IACE,eAAe,YACf,eAAe,WACf,eAAe,SAEf,OAAO;EACL,eAAe;EACf,MAAM;EACN,WAAW,MAAM;EACjB,gBAAgB;EAChB,SACE;EACF,eACE;EACF,aAAa;GACX;GACA;EACF;CACF;CAGF,IACE,eAAe,YACf,eAAe,YACf,eAAe,UAEf,OAAO;EACL,eAAe;EACf,MAAM;EACN,WAAW,MAAM;EACjB,gBAAgB;EAChB,SACE;EACF,eAAe;EACf,aAAa;GACX;GACA;EACF;CACF;CAGF,OAAO;EACL,eAAe;EACf,MAAM;EACN,WAAW,MAAM;EACjB,gBAAgB;EAChB,SAAS;EACT,eAAe;EACf,aAAa;GACX;GACA;EACF;CACF;AACF;AAEA,SAAgB,sCAAsC,OAEhC;CACpB,OAAO;EACL,eAAe;EACf,MAAM;EACN,WAAW;EACX,gBAAgB;EAChB,SAAS;EACT,eACE;EACF,aAAa;GACX,YAAY;GACZ,QAAQ,MAAM,QAAQ,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI,KAAK;EACjD;CACF;AACF;AAEA,SAAgB,kCAAkC,OAG5B;CACpB,OAAO;EACL,eAAe;EACf,MAAM;EACN,WAAW;EACX,gBAAgB;EAChB,SAAS;EACT,eAAe,MAAM;EACrB,aAAa;GACX,YAAY;GACZ,QAAQ,MAAM,QAAQ,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI,KAAK;EACjD;CACF;AACF;AAEA,SAAgB,oCAAoC,OAG9B;CACpB,OAAO,oCAAoC;EACzC,GAAG;EACH,SAAS;CACX,CAAC;AACH;AAEA,SAAgB,oCAAoC,OAI9B;CACpB,OAAO;EACL,eAAe;EACf,MAAM;EACN,WAAW;EACX,gBAAgB;EAChB,SAAS,MAAM;EACf,eAAe,MAAM;EACrB,aAAa;GACX,YAAY;GACZ,QAAQ,MAAM,QAAQ,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI,KAAK;EACjD;CACF;AACF;AAEA,SAAS,oBAAoB,OAA+B;CAC1D,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B,OAAO;CAET,MAAM,OAAQ,MAA6B;CAC3C,OAAO,OAAO,SAAS,YAAY,KAAK,KAAK,CAAC,CAAC,SAAS,IAAI,OAAO;AACrE;AAEA,SAAS,iBAAiB,OAA+B;CACvD,IAAI,iBAAiB,SAAS,MAAM,QAAQ,KAAK,CAAC,CAAC,SAAS,GAC1D,OAAO,MAAM,QAAQ,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI;CAE3C,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,CAAC,CAAC,SAAS,GACrD,OAAO,MAAM,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI;CAEnC,OAAO;AACT;;;AC5NA,SAAgB,8BAA8B,OAInB;CACzB,MAAM,MAAM,OAAO,OAAO,QAAQ;CAClC,MAAM,SAAS,yBAAyB;EACtC,MAAM,OAAO;EACb;EACA,SAAS,OAAO;CAClB,CAAC;CACD,MAAM,UAAU,mBAAmB,MAAM;CACzC,OAAO;EACL;EACA;EACA,cAAc,uBAAuB;GACnC,MAAM,OAAO;GACb;GACA,SAAS,OAAO;EAClB,CAAC;EACD,yBAAyB;EACzB,eAAe,GAAG,QAAQ;EAC1B,eAAe,WAAW,WAAW,gCAAgC;EACrE,cAAc,GAAG,QAAQ;CAC3B;AACF;AAEA,SAAgB,wBACd,MACQ;CACR,OAAO,yBAAyB,KAAK,QAAQ,WAAW,KAAK,aAAa;AAC5E;AAeA,SAAS,mBACP,QACmC;CACnC,IAAI,WAAW,aACb,OAAO;CAET,IAAI,WAAW,UACb,OAAO;CAET,OAAO;AACT;;;AC/DA,MAAa,+BAA+B;AAC5C,MAAa,wCACX;AAEF,MAAa,uBAAuB,CAClC,8BACA,qCACF;AAEA,MAAM,0BAA0B;AAChC,MAAM,2BAA2B;AAgBjC,SAAgB,kBACd,gBAC6B;CAC7B,MAAM,WAAW,mBAAmB,cAAc;CAClD,IAAI,UACF,OAAO;EACL,cAAc;EACd,QAAQ;CACV;CAGF,KAAK,MAAM,OAAO,sBAAsB;EACtC,MAAM,YAAY,mBAAmB,QAAQ,IAAI,IAAI;EACrD,IAAI,WACF,OAAO;GACL,cAAc;GACd,QAAQ,eAAe;EACzB;CAEJ;CAEA,OAAO,yBAAyB;AAClC;AAEA,SAAgB,oBAAoB,gBAAwC;CAC1E,OAAO,kBAAkB,cAAc,CAAC,EAAE,gBAAgB;AAC5D;AAgDA,SAAS,uBAAuB,KAA6B;CAC3D,MAAM,QAAQ,OAAO,OAAO,EAAE,CAAC,CAAC,KAAK;CACrC,IAAI,CAAC,OACH,OAAO;CAET,OAAO;AACT;AAoBA,eAAsB,oBAAoB,OAEJ;CACpC,MAAM,eAAe,sBAAsB,OAAO,SAAS;CAC3D,IAAI,CAAC,cACH,OAAO;CAGT,MAAM,MAAM,MAAM,SAAS,oBAAoB,YAAY,GAAG,MAAM,CAAC,CAAC,YAC9D,IACR;CACA,IAAI,CAAC,KACH,OAAO;CAGT,OAAO,qBAAqB,GAAG;AACjC;AAEA,eAAsB,uBAAqD;CACzE,MAAM,aAAa,MAAM,QAAQ,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;CAC9D,MAAM,SAA8B,CAAC;CACrC,KAAK,MAAM,aAAa,YAAY;EAClC,IAAI,CAAC,UAAU,SAAS,OAAO,GAC7B;EAEF,MAAM,MAAM,MAAM,SAAS,KAAK,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC,YAC3D,IACR;EACA,IAAI,CAAC,KACH;EAEF,MAAM,SAAS,qBAAqB,GAAG;EACvC,IAAI,CAAC,QACH;EAEF,OAAO,KAAK,MAAM;CACpB;CACA,OAAO,OAAO,MAAM,MAAM,UACxB,KAAK,UAAU,cAAc,MAAM,SAAS,CAC9C;AACF;AAEA,eAAsB,qBAAqB,OAKtB;CACnB,MAAM,aAAa,4BAA4B,KAAK,KAAK,kBAAkB;CAC3E,IAAI,CAAC,YACH,OAAO;CAGT,MAAM,MAAM,YAAY,GAAG,EAAE,WAAW,KAAK,CAAC;CAC9C,MAAM,WAAW,MAAM,oBAAoB,EACzC,WAAW,WAAW,aACxB,CAAC;CACD,MAAM,wBAAwB,oCAC5B,UACA,KACF;CACA,MAAM,gCAAgC,qCACpC,UACA,KACF;CACA,MAAM,aAAa,oBAAoB,WAAW,YAAY;CAE9D,IAAI,EAAE,yBAAyB,gCAAgC;EAC7D,MAAM,GAAG,YAAY,EAAE,OAAO,KAAK,CAAC;EACpC,OAAO;CACT;CAgBA,MAAM,yBAAyB,YAAY;EAbzC,GAAG;EACH,WAAW,WAAW;EACtB,kBACE,WAAW,UAAU,UAAU,oBAAoB;EACrD,GAAI,wBACA,EAAE,mBAAmB,sBAAsB,IAC3C,CAAC;EACL,GAAI,gCACA,EAAE,2BAA2B,8BAA8B,IAC3D,CAAC;EACL,4BAAW,IAAI,KAAK,EAAA,CAAE,YAAY;CAGa,CAAC;CAClD,OAAO;AACT;AAEA,SAAgB,oBAAoB,WAA2B;CAC7D,OAAO,KAAK,YAAY,GAAG,GAAG,kBAAkB,SAAS,EAAE,MAAM;AACnE;AAEA,SAAS,kBAAkB,OAAuB;CAChD,MAAM,OAAO,WAAW,MAAM,CAAC,CAC5B,OAAO,OAAO,MAAM,CAAC,CACrB,OAAO,KAAK,CAAC,CACb,MAAM,GAAG,wBAAwB;CACpC,MAAM,cAAc,MAAM,QAAQ,qBAAqB,GAAG;CAC1D,MAAM,WAAW,YAAY,SAAS,IAAI,cAAc;CACxD,MAAM,gBAAgB,KAAK,IACzB,GACA,0BAA0B,2BAA2B,CACvD;CAEA,OAAO,GADe,SAAS,MAAM,GAAG,aAClB,EAAE,GAAG;AAC7B;AAEA,SAAS,4BAA4B,OAGL;CAC9B,MAAM,YAAY,mBAAmB,MAAM,SAAS;CACpD,IAAI,CAAC,WACH,OAAO;CAET,OAAO;EACL,cAAc;EACd,QAAQ,uBAAuB,MAAM,aAAa,KAAK;CACzD;AACF;AAEA,SAAS,sBAAsB,WAAmC;CAChE,MAAM,WAAW,mBAAmB,SAAS;CAC7C,IAAI,UACF,OAAO;CAET,OAAO,kBAAkB,CAAC,EAAE,gBAAgB;AAC9C;AAEA,SAAS,qBAAqB,KAAuC;CACnE,IAAI;CAGJ,IAAI;EACF,SAAS,KAAK,MAAM,GAAG;CAGzB,QAAQ;EACN,OAAO;CACT;CAEA,IAAI,OAAO,MAAM,GACf,OAAO;CAET,MAAM,YAAY,mBAAmB,OAAO,SAAS;CACrD,IAAI,CAAC,WACH,OAAO;CAET,MAAM,oBAAoB,sCAAsC,MAAM;CACtE,MAAM,4BACJ,uCAAuC,MAAM;CAC/C,IAAI,EAAE,qBAAqB,4BACzB,OAAO;CAET,MAAM,mBAAmB,uBAAuB,OAAO,gBAAgB;CACvE,OAAO;EACL,GAAG;EACH;EACA,GAAI,mBAAmB,EAAE,iBAAiB,IAAI,CAAC;EAC/C,GAAI,oBAAoB,EAAE,kBAAkB,IAAI,CAAC;EACjD,GAAI,4BAA4B,EAAE,0BAA0B,IAAI,CAAC;EACjE,WACE,OAAO,OAAO,cAAc,YAAY,OAAO,UAAU,KAAK,CAAC,CAAC,SAAS,IACrE,OAAO,6BACP,IAAI,KAAK,CAAC,EAAA,CAAE,YAAY;CAChC;AACF;AAEA,SAAS,oCACP,UACA,OAIoB;CACpB,IAAI,EAAE,uBAAuB,QAC3B,OAAO,UAAU;CAEnB,OACE,mCAAmC,MAAM,iBAAiB,KAAK,KAAA;AAEnE;AAEA,SAAS,qCACP,UACA,OAIoB;CACpB,IAAI,EAAE,+BAA+B,QACnC,OAAO,UAAU;CAEnB,OACE,mCAAmC,MAAM,yBAAyB,KAClE,KAAA;AAEJ;AAEA,eAAe,yBACb,YACA,SACe;CACf,MAAM,WAAW,GAAG,WAAW,OAAO,QAAQ,IAAI,GAAG,KAAK,IAAI;CAC9D,MAAM,OAAO,MAAM,KAAK,UAAU,GAAG;CACrC,IAAI,eAAwB;CAC5B,IAAI;EACF,MAAM,KAAK,UAAU,GAAG,KAAK,UAAU,SAAS,MAAM,CAAC,EAAE,KAAK,MAAM;EACpE,MAAM,KAAK,KAAK;CAClB,SAAS,OAAO;EACd,eAAe;CACjB;CACA,IAAI;EACF,MAAM,KAAK,MAAM;CACnB,SAAS,OAAO;EACd,IAAI,CAAC,cACH,eAAe;CAEnB;CACA,IAAI,cAAc;EAChB,MAAM,GAAG,UAAU,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,KAAA,CAAS;EACzD,MAAM;CACR;CAEA,IAAI;EACF,MAAM,OAAO,UAAU,UAAU;CACnC,SAAS,OAAO;EACd,MAAM,GAAG,UAAU,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,KAAA,CAAS;EACzD,MAAM;CACR;AACF;AAEA,SAAS,mBAAmB,OAA+B;CACzD,MAAM,MAAM,OAAO,SAAS,EAAE,CAAC,CAAC,KAAK;CACrC,IAAI,CAAC,KACH,OAAO;CAET,OAAO,IAAI,MAAM,GAAG,GAAG;AACzB;AAEA,SAAS,2BAAwD;CAC/D,IAAI,EAAE,QAAQ,MAAM,SAAS,QAAQ,OAAO,QAC1C,OAAO;CAGT,MAAM,YAAY,OAAO,QAAQ,IAAI;CACrC,IAAI,CAAC,OAAO,UAAU,SAAS,KAAK,aAAa,GAC/C,OAAO;CAGT,OAAO;EACL,cAAc,iBAAiB;EAC/B,QAAQ,iBAAiB;CAC3B;AACF;AAEA,SAAS,sCAAsC,OAGlB;CAC3B,MAAM,oBAAoB,mCACxB,MAAM,iBACR;CACA,MAAM,gBAAgB,mCAAmC,MAAM,OAAO;CACtE,IACE,qBACA,iBACA,sBAAsB,eAEtB,MAAM,IAAI,MACR,mEAAmE,kBAAkB,YAAY,cAAc,gFACjH;CAEF,OAAO,qBAAqB;AAC9B;AAEA,SAAS,uCAAuC,OAEnB;CAC3B,OAAO,mCAAmC,MAAM,yBAAyB;AAC3E;AAEA,SAAS,mCACP,OAC0B;CAC1B,IAAI,OAAO,UAAU,UACnB,OAAO;CAET,IAAI;EACF,OAAO,2BAA2B,KAAK;CACzC,QAAQ;EACN,OAAO;CACT;AACF;;;ACxYA,MAAM,mCAAmC;AACzC,MAAM,iCACJ;AAEF,IAAa,oBAAb,cAAuC,MAAM;CAC3C,OAAgB;CAChB;CACA;CACA;CACA;CACA;CAEA,YAAY,OAKT;EACD,MAAM,oBAAoB,iBAAiB,MAAM,OAAO;EACxD,MAAM,kBAAkB,MAAM,mBAAmB;EACjD,MACE,8BACE,MAAM,MACN,mBACA,eACF,CACF;EACA,KAAK,OAAO;EACZ,KAAK,WAAW,MAAM;EACtB,KAAK,UAAU,MAAM;EACrB,KAAK,UAAU;EACf,KAAK,OAAO,sBAAsB,iBAAiB;EACnD,KAAK,kBAAkB;CACzB;AACF;AAEA,SAAgB,oBACd,OAC4B;CAC5B,OAAO,iBAAiB;AAC1B;AAEA,SAAgB,4BACd,OAC4B;CAC5B,OAAO,oBAAoB,KAAK,KAAK,MAAM,oBAAoB;AACjE;AAEA,SAAgB,iCACd,OAC0B;CAC1B,IAAI,CAAC,4BAA4B,KAAK,GACpC,OAAO;CAET,OAAO,oCAAoC;EACzC,SAAS;EACT,eAAe,gCAAgC;EAC/C,QAAQ,MAAM;CAChB,CAAC;AACH;AAEA,SAAgB,kCAA0C;CAExD,OAAO,iDADe,8BAA8B,CAAC,CAAC,cACgB;AACxE;AAEA,eAAsB,YAAY,OAKR;CACxB,MAAM,oBAAoB,2BAA2B,MAAM,iBAAiB;CAC5E,MAAM,YAAY,oBAAoB;CACtC,MAAM,MAAMA,SAAgB,mBAAmB,MAAM,cAAc;CACnE,MAAM,OAAO,gBAAgB;EAC3B;EACA,KAAK,MAAM;EACX,gBAAgB,MAAM;CACxB,CAAC;CACD,MAAM,UAAU,WAAW;CAC3B,IAAI;EACF,MAAM,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;CACtC,SAAS,OAAO;EACd,mCAAmC;GACjC,WAAW;GACX;EACF,CAAC;CACH;CAKA,KAAK,IAAI,UAAU,GAAG,UAAU,GAAG,WAAW;EAC5C,MAAM,WAAW,GAAG,KAAK,UAAU;GACjC,GAAI,MAAM,OAAO,EAAE,GAAG,MAAM,KAAK,IAAI,CAAC;GACtC,KAAKC,UAAQ;GACb;GACA,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;GACjC,qBAAI,IAAI,KAAK,EAAA,CAAE,YAAY;GAC3B;EACF,CAAC,EAAE;EACH,IAAI;EACJ,IAAI;GACF,YAAY,MAAM,eAAe,MAAM,SAAS,QAAQ;EAC1D,SAAS,OAAO;GACd,mCAAmC;IACjC,WAAW;IACX;GACF,CAAC;EACH;EACA,IAAI,WACF,OAAO;GAAE;GAAS;EAAK;EAGzB,IAAI;GACF,MAAM,eAAe,MAAM,iBAAiB,IAAI;GAChD,IACE,CAAC,aAAa,UACb,MAAM,wBAAwB,MAAM,YAAY,GAEjD;GAGF,MAAM,IAAI,kBAAkB;IAC1B;IACA,KAAK,MAAM;IACX,SAAS,aAAa,WAAW,KAAA;IACjC,iBAAiB,2BAA2B,YAAY;GAC1D,CAAC;EACH,SAAS,OAAO;GACd,IAAI,oBAAoB,KAAK,GAC3B,MAAM;GAER,mCAAmC;IACjC,WAAW;IACX;GACF,CAAC;EACH;CACF;CAEA,MAAM,IAAI,kBAAkB;EAC1B;EACA,KAAK,MAAM;CACb,CAAC;AACH;AAEA,eAAsB,YAAY,MAAmC;CAEnE,IAAI,CAAC,MAD2B,0BAA0B,IAAI,GAE5D;CAEF,MAAM,MAAM,KAAK,IAAI;AACvB;AAEA,SAAgB,gBAAgB,MAA0B;CACxD,IAAI;EACF,WAAW,sBAAsB,KAAK,MAAM,KAAK,OAAO,CAAC;CAC3D,SAAS,OAAO;EACd,IAAI,aAAa,KAAK,MAAM,YAAY,aAAa,KAAK,MAAM,WAC9D;EAEF,MAAM;CACR;CAEA,IAAI;EACF,UAAU,KAAK,IAAI;CACrB,SAAS,OAAO;EACd,IAAI,aAAa,KAAK,MAAM,UAC1B;EAEF,MAAM;CACR;AACF;AAEA,eAAsB,iCAAoC,OAI3C;CACb,IAAI;CACJ,IAAI,eAAe;CACnB,IAAI;CAEJ,IAAI;EACF,YAAY,MAAM,MAAM,IAAI;EAC5B,eAAe;CACjB,SAAS,OAAO;EACd,WAAW;CACb;CAEA,IAAI;EACF,MAAM,MAAM,QAAQ;CACtB,SAAS,cAAc;EACrB,IAAI,CAAC,cAAc;GACjB,MAAM,gCAAgC,YAAY;GAClD,MAAM;EACR;EACA,MAAM;CACR;CAEA,IAAI,CAAC,cACH,MAAM;CAGR,OAAO;AACT;AAEA,eAAsB,gBAAmB,OAI1B;CACb,OAAO,MAAM,iCAAiC;EAC5C,KAAK,MAAM;EACX,eAAe,YAAY,MAAM,IAAI;EACrC,gCAAgC,iBAAiB;GAC/C,uBAAuB;IACrB,OAAO;IACP,MAAM,MAAM;IACZ,gBAAgB,MAAM;GACxB,CAAC;EACH;CACF,CAAC;AACH;AAEA,eAAsB,aAAa,OAIE;CAQnC,QAAO,MAPoB,iBACzB,gBAAgB;EACd,mBAAmB,MAAM;EACzB,KAAK,MAAM;EACX,gBAAgB,MAAM;CACxB,CAAC,CACH,EAAA,CACoB;AACtB;AAEA,eAAsB,oBAAoB,OAIrB;CACnB,OAAO,MAAM,wBACX,gBAAgB;EACd,mBAAmB,MAAM;EACzB,KAAK,MAAM;EACX,gBAAgB,MAAM;CACxB,CAAC,CACH;AACF;AAaA,eAAsB,4BAAqE;CACzF,MAAM,gBAAgB,KAAKC,WAAkB,GAAG,OAAO;CACvD,MAAM,iBAAiB,MAAM,qBAAqB,aAAa;CAC/D,IAAI,6BAA6B;CAEjC,KAAK,MAAM,gBAAgB,eAAe,MAAM,MAAM,UACpD,KAAK,KAAK,cAAc,MAAM,IAAI,CACpC,GAAG;EACD,IAAI,CAAC,aAAa,YAAY,GAC5B;EAEF,MAAM,mBAAmB,KAAK,eAAe,aAAa,IAAI;EAC9D,MAAM,cAAc,MAAM,qBAAqB,gBAAgB;EAC/D,KAAK,MAAM,aAAa,YAAY,MAAM,MAAM,UAC9C,KAAK,KAAK,cAAc,MAAM,IAAI,CACpC,GAAG;GACD,IAAI,EAAE,UAAU,OAAO,KAAK,UAAU,KAAK,SAAS,OAAO,IACzD;GAEF,IACE,MAAM,6BACJ,KAAK,kBAAkB,UAAU,IAAI,CACvC,GAEA,8BAA8B;EAElC;CACF;CAEA,OAAO,EAAE,2BAA2B;AACtC;AAEA,eAAe,6BAA6B,MAAgC;CAC1E,MAAM,gBAAgB,MAAM,iBAAiB,IAAI;CACjD,IACE,cAAc,gBAAgB,iBAC9B,CAAC,uBAAuB,aAAa,GAErC,OAAO;CAIT,IAAI,CAAC,8BAA8B,eAAe,MADlB,iBAAiB,IAAI,CACc,GACjE,OAAO;CAGT,IAAI;EAKF,MAAM,OAAO,IAAI;EACjB,OAAO;CACT,SAAS,OAAO;EACd,IAAI,aAAa,KAAK,MAAM,YAAY,aAAa,KAAK,MAAM,UAC9D,OAAO;EAET,MAAM;CACR;AACF;AAEA,eAAe,qBAAqB,MAAc;CAChD,OAAO,MAAM,QAAQ,MAAM,EAAE,eAAe,KAAK,CAAC,CAAC,CAAC,OAAO,UAAU;EACnE,IAAI,aAAa,KAAK,MAAM,UAC1B,OAAO,CAAC;EAEV,MAAM;CACR,CAAC;AACH;AAcA,SAAS,gBAAgB,OAId;CAET,OAAO,KACLF,SAFwB,2BAA2B,MAAM,iBAEzB,GAAG,MAAM,cAAc,GACvD,GAAG,iBAAiB,MAAM,GAAG,EAAE,MACjC;AACF;AAEA,SAAS,iBAAiB,OAAuB;CAC/C,OAAO,MAAM,QAAQ,qBAAqB,GAAG;AAC/C;AAEA,SAAS,UAAU,OAAwB;CACzC,IAAI;EACF,OAAO,KAAK,MAAM,KAAK;CACzB,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,iBAAiB,SAA4C;CACpE,IAAI,OAAO,YAAY,UACrB,OAAO;CAET,MAAM,aAAa,QAAQ,KAAK;CAChC,OAAO,WAAW,SAAS,IAAI,aAAa;AAC9C;AAEA,SAAS,sBACP,SACyB;CACzB,IAAI,CAAC,SACH,OAAO;CAET,MAAM,SAAS,UAAU,OAAO;CAChC,IAAI,CAAC,UAAU,OAAO,WAAW,UAC/B,OAAO;CAET,OAAO;AACT;AAEA,SAAS,8BACP,MACA,SACA,iBACQ;CACR,MAAM,aAAa,UACf,oBAAoB,KAAK,WAAW,YACpC,oBAAoB,KAAK;CAC7B,IAAI,oBAAoB,YACtB,OAAO;CAET,OAAO,GAAG,WAAW,IAAI,+BAA+B,GAAG,gCAAgC;AAC7F;AAEA,SAAS,eAAe,MAA8B;CACpD,IAAI,CAAC,QAAQ,OAAO,SAAS,UAC3B,OAAO;CAET,MAAM,MAAO,KAAiC;CAC9C,OAAO,OAAO,QAAQ,WAAW,MAAM;AACzC;AAEA,SAAS,sBAAoC;CAC3C,OAAO;EACL,QAAQ;EACR,cAAc;EACd,gBAAgB;EAChB,cAAc;EACd,SAAS;EACT,MAAM;EACN,KAAK;EACL,aAAa;EACb,aAAa;CACf;AACF;AAEA,eAAe,iBACb,MACA,uBAAuB,GACA;CACvB,MAAM,YAAY,MAAM,MAAM,IAAI,CAAC,CAAC,OAAO,UAAU;EACnD,IAAI,aAAa,KAAK,MAAM,UAC1B,OAAO;EAET,MAAM;CACR,CAAC;CACD,IAAI,CAAC,WACH,OAAO,oBAAoB;CAG7B,IAAI,UAAU,YAAY,GACxB,IAAI;EACF,OAAO,MAAM,0BAA0B,MAAM,SAAS;CACxD,SAAS,OAAO;EACd,IACE,uBAAuB,MACtB,aAAa,KAAK,MAAM,YAAY,aAAa,KAAK,MAAM,YAE7D,OAAO,MAAM,iBAAiB,MAAM,uBAAuB,CAAC;EAE9D,MAAM;CACR;CAGF,MAAM,SAAS,MAAM,KAAK,MAAM,GAAG,CAAC,CAAC,OAAO,UAAU;EACpD,IAAI,aAAa,KAAK,MAAM,UAC1B,OAAO;EAET,IAAI,uBAAuB,KAAK,aAAa,KAAK,MAAM,UACtD,OAAO;EAET,MAAM;CACR,CAAC;CACD,IAAI,WAAW,SACb,OAAO,MAAM,iBAAiB,MAAM,uBAAuB,CAAC;CAE9D,IAAI,CAAC,QACH,OAAO,oBAAoB;CAG7B,IAAI;EACF,MAAM,CAAC,SAAS,SAAS,MAAM,QAAQ,IAAI,CACzC,OAAO,SAAS,MAAM,GACtB,OAAO,KAAK,CACd,CAAC;EACD,MAAM,oBAAoB,iBAAiB,OAAO;EAClD,MAAM,OAAO,sBAAsB,iBAAiB;EACpD,MAAM,MAAM,eAAe,IAAI;EAC/B,OAAO;GACL,QAAQ;GACR,cAAc,GAAG,MAAM,IAAI,GAAG,MAAM,IAAI,GAAG,MAAM,QAAQ,GAAG,MAAM;GAClE,gBAAgB;GAChB,cAAc,MAAM;GACpB,SAAS;GACT;GACA;GACA,aAAa,QAAQ,QAAQ,CAAC,WAAW,GAAG;GAC5C,aAAa;EACf;CACF,UAAU;EACR,MAAM,OAAO,MAAM;CACrB;AACF;AAEA,eAAe,0BACb,MACA,WACuB;CACvB,MAAM,gBAAgB,MAAM,QAAQ,MAAM,EAAE,eAAe,KAAK,CAAC,EAAA,CAC9D,QAAQ,UAAU,MAAM,OAAO,KAAK,MAAM,KAAK,SAAS,aAAa,CAAC,CAAC,CACvE,KAAK,UAAU,MAAM,IAAI,CAAC,CAC1B,KAAK;CACR,MAAM,iBAAiB,aAAa,WAAW,IAAI,aAAa,KAAK;CACrE,MAAM,oBAAoB,GAAG,UAAU,IAAI,GAAG,UAAU,IAAI,GAAG,UAAU;CAEzE,IAAI,CAAC,gBACH,OAAO;EACL,QAAQ;EACR,cAAc,GAAG,kBAAkB;EACnC,gBAAgB;EAChB,cAAc,OAAO,UAAU,OAAO;EACtC,SAAS;EACT,MAAM;EACN,KAAK;EACL,aAAa;EACb,aAAa;CACf;CAIF,MAAM,SAAS,MAAM,KADE,KAAK,MAAM,cACK,GAAG,GAAG;CAC7C,IAAI;EACF,MAAM,CAAC,SAAS,SAAS,MAAM,QAAQ,IAAI,CACzC,OAAO,SAAS,MAAM,GACtB,OAAO,KAAK,CACd,CAAC;EACD,MAAM,oBAAoB,iBAAiB,OAAO;EAClD,MAAM,OAAO,sBAAsB,iBAAiB;EACpD,MAAM,MAAM,eAAe,IAAI;EAC/B,OAAO;GACL,QAAQ;GACR,cAAc,GAAG,kBAAkB,GAAG,eAAe,GAAG,MAAM,IAAI,GAAG,MAAM,IAAI,GAAG,MAAM,QAAQ,GAAG,MAAM;GACzG;GACA,cAAc,MAAM;GACpB,SAAS;GACT;GACA;GACA,aAAa,QAAQ,QAAQ,CAAC,WAAW,GAAG;GAC5C,aAAa;EACf;CACF,UAAU;EACR,MAAM,OAAO,MAAM;CACrB;AACF;AAEA,eAAe,wBACb,MACA,iBACkB;CAClB,MAAM,gBAAgB,mBAAoB,MAAM,iBAAiB,IAAI;CAErE,IAAI,CAAC,uBAAuB,aAAa,GACvC,OAAO;CAOT,IAAI,cAAc,gBAAgB,eAChC,OAAO;CAGT,MAAM,oBAAoB,MAAM,iBAAiB,IAAI;CACrD,IAAI,CAAC,8BAA8B,eAAe,iBAAiB,GACjE,OAAO;CAGT,IAAI,kBAAkB,gBAAgB,aACpC,OAAO,MAAM,0BAA0B,MAAM,iBAAiB;CAGhE,OAAO;AACT;AAEA,SAAS,8BACP,eACA,mBACS;CACT,OACE,kBAAkB,UAClB,kBAAkB,iBAAiB,cAAc,gBACjD,kBAAkB,mBAAmB,cAAc,kBACnD,kBAAkB,YAAY,cAAc,WAC5C,kBAAkB,QAAQ,cAAc,OACxC,kBAAkB,gBAAgB,cAAc,eAChD,uBAAuB,iBAAiB;AAE5C;AAEA,SAAS,2BACP,UAC6B;CAC7B,IACE,SAAS,gBAAgB,iBACzB,uBAAuB,QAAQ,GAE/B,OAAO;CAET,IACE,SAAS,gBAAgB,SACxB,SAAS,QAAQ,QAAQ,CAAC,SAAS,cAEpC,OAAO;CAET,OAAO;AACT;AAEA,eAAe,0BACb,MACA,UACkB;CAClB,IAAI,SAAS,gBACX,IAAI;EACF,MAAM,OAAO,KAAK,MAAM,SAAS,cAAc,CAAC;CAClD,SAAS,OAAO;EACd,IAAI,aAAa,KAAK,MAAM,UAC1B,OAAO;EAET,MAAM;CACR;CAEF,IAAI;EACF,MAAM,MAAM,IAAI;EAChB,OAAO;CACT,SAAS,OAAO;EACd,IAAI,aAAa,KAAK,MAAM,UAC1B,OAAO;EAET,IAAI,aAAa,KAAK,MAAM,aAC1B,OAAO;EAET,MAAM;CACR;AACF;AAEA,eAAe,eACb,MACA,SACA,UACkB;CAClB,IAAI;EACF,MAAM,MAAM,IAAI;CAClB,SAAS,OAAO;EACd,IAAI,aAAa,KAAK,MAAM,UAC1B,OAAO;EAET,MAAM;CACR;CAEA,MAAM,iBAAiB,sBAAsB,MAAM,OAAO;CAC1D,IAAI;EACF,MAAM,UAAU,gBAAgB,UAAU;GACxC,UAAU;GACV,MAAM;EACR,CAAC;EACD,OAAO;CACT,SAAS,OAAO;EACd,MAAM,OAAO,cAAc,CAAC,CAAC,OAAO,iBAAiB;GACnD,IAAI,aAAa,YAAY,MAAM,UACjC,QAAQ,KAAK,+CAA+C;IAC1D;IACA,cAAcG,iBAAe,YAAY;GAC3C,CAAC;EAEL,CAAC;EACD,MAAM,MAAM,IAAI,CAAC,CAAC,OAAO,iBAAiB;GACxC,IAAI,aAAa,YAAY,MAAM,UACjC,QAAQ,KAAK,6CAA6C;IACxD,UAAU;IACV,cAAcA,iBAAe,YAAY;GAC3C,CAAC;EAEL,CAAC;EACD,MAAM;CACR;AACF;AAEA,eAAe,0BAA0B,MAAsC;CAC7E,IAAI;EACF,MAAM,OAAO,sBAAsB,KAAK,MAAM,KAAK,OAAO,CAAC;EAC3D,OAAO;CACT,SAAS,OAAO;EACd,IAAI,aAAa,KAAK,MAAM,YAAY,aAAa,KAAK,MAAM,WAC9D,OAAO;EAET,MAAM;CACR;AACF;AAEA,SAAS,sBAAsB,MAAc,SAAyB;CACpE,OAAO,KAAK,MAAM,GAAG,mBAAmB,OAAO,EAAE,YAAY;AAC/D;AAEA,SAAS,uBAAuB,UAAiC;CAC/D,IAAI,CAAC,SAAS,QACZ,OAAO;CAET,IAAI,SAAS,QAAQ,MACnB,OAAO,SAAS;CAElB,OACE,SAAS,iBAAiB,QAC1B,KAAK,IAAI,IAAI,SAAS,gBAAgB;AAE1C;AAEA,SAAS,WAAW,KAAsB;CACxC,IAAI;EACF,UAAQ,KAAK,KAAK,CAAC;EACnB,OAAO;CACT,SAAS,KAAK;EACZ,IAAI,aAAa,GAAG,MAAM,SACxB,OAAO;EAET,OAAO;CACT;AACF;AAEA,SAAS,aAAa,KAAkC;CACtD,IAAI,CAAC,OAAO,OAAO,QAAQ,UACzB;CAEF,MAAM,OAAQ,IAA2B;CACzC,OAAO,OAAO,SAAS,WAAW,OAAO,KAAA;AAC3C;AAEA,SAAS,mCAAmC,OAGlC;CAER,MAD0B,qCAAqC,KACzC,KAAK,MAAM;AACnC;AAEA,SAAS,uBAAuB,OAIvB;CACP,QAAQ,KAAK,mCAAmC;EAC9C,UAAU,MAAM,KAAK;EACrB,cAAcA,iBAAe,MAAM,KAAK;EACxC,gBAAgB,MAAM,kBAAkB,CAAC;CAC3C,CAAC;AACH;AAEA,SAASA,iBAAe,OAAwB;CAC9C,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC9D;;;ACtxBA,MAAM,yBAAyB;AAC/B,MAAM,kBAAkB;AAExB,SAAgB,iBAAiB,SAAyB;CACxD,MAAM,MAAM,IAAI,IAAI,OAAO;CAC3B,IAAI,CAAC,gBAAgB,KAAK,IAAI,QAAQ,GACpC,MAAM,IAAI,MAAM,8CAA8C;CAEhE,IAAI,IAAI,UAAU,IAAI,MACpB,MAAM,IAAI,MAAM,gDAAgD;CAElE,IAAI,WAAW;CACf,IAAI,SAAS;CACb,IAAI,OAAO;CACX,OAAO,IAAI,SAAS,CAAC,CAAC,QAAQ,wBAAwB,EAAE;AAC1D;AAQA,SAAgB,iBAAiB,SAAyB;CACxD,MAAM,MAAM,IAAI,IAAI,iBAAiB,OAAO,CAAC;CAC7C,IAAI,WAAW;CACf,OAAO,IAAI,SAAS;AACtB;AAEA,SAAgB,iBAAiB,SAAiB,OAAuB;CACvE,MAAM,MAAM,IAAI,IAAI,iBAAiB,OAAO,CAAC;CAC7C,IAAI,WAAW,cAAc,mBAAmB,KAAK;CACrD,OAAO,IAAI,SAAS;AACtB;AAEA,SAAgB,eAAe,SAAiB,OAAuB;CACrE,MAAM,MAAM,IAAI,IAAI,iBAAiB,OAAO,CAAC;CAC7C,IAAI,WAAW,cAAc,mBAAmB,KAAK,EAAE;CACvD,OAAO,IAAI,SAAS;AACtB;AAEA,SAAgB,mBAAmB,SAAiB,OAAuB;CACzE,MAAM,MAAM,IAAI,IAAI,iBAAiB,OAAO,CAAC;CAC7C,IAAI,WAAW,cAAc,mBAAmB,KAAK,EAAE;CACvD,OAAO,IAAI,SAAS;AACtB;AAEA,SAAgB,gBAAgB,SAAiB,OAAuB;CACtE,MAAM,MAAM,IAAI,IAAI,iBAAiB,OAAO,CAAC;CAC7C,IAAI,WAAW,cAAc,mBAAmB,KAAK,EAAE;CACvD,OAAO,IAAI,SAAS;AACtB;AAEA,SAAgB,kBAAkB,SAAiB,OAAuB;CACxE,MAAM,MAAM,IAAI,IAAI,iBAAiB,OAAO,CAAC;CAC7C,IAAI,WAAW,cAAc,mBAAmB,KAAK,EAAE;CACvD,OAAO,IAAI,SAAS;AACtB;AAQA,SAAgB,iBAAiB,SAAiB,OAAuB;CACvE,MAAM,MAAM,IAAI,IAAI,iBAAiB,OAAO,CAAC;CAC7C,IAAI,WAAW,cAAc,mBAAmB,KAAK,EAAE;CACvD,OAAO,IAAI,SAAS;AACtB;AAEA,SAAgB,kBAAkB,SAAiB,OAAuB;CACxE,MAAM,MAAM,IAAI,IAAI,iBAAiB,OAAO,CAAC;CAC7C,IAAI,WAAW,cAAc,mBAAmB,KAAK,EAAE;CACvD,OAAO,IAAI,SAAS;AACtB;AAEA,SAAgB,wBACd,SACA,OACQ;CACR,MAAM,MAAM,IAAI,IAAI,iBAAiB,OAAO,CAAC;CAC7C,IAAI,WAAW,cAAc,mBAAmB,KAAK,EAAE;CACvD,OAAO,IAAI,SAAS;AACtB;AAEA,SAAgB,gBAAgB,SAAiB,OAAuB;CACtE,MAAM,MAAM,IAAI,IAAI,iBAAiB,OAAO,CAAC;CAC7C,IAAI,WAAW,cAAc,mBAAmB,KAAK,EAAE;CACvD,OAAO,IAAI,SAAS;AACtB;AAEA,SAAgB,wBACd,SACA,OACA,YACQ;CACR,MAAM,MAAM,IAAI,IAAI,iBAAiB,OAAO,CAAC;CAC7C,IAAI,WAAW,cAAc,mBAAmB,KAAK,EAAE,cAAc,mBAAmB,UAAU,EAAE;CACpG,OAAO,IAAI,SAAS;AACtB;AAEA,SAAgB,yBACd,SACA,OACQ;CACR,MAAM,MAAM,IAAI,IAAI,iBAAiB,OAAO,CAAC;CAC7C,IAAI,WAAW,cAAc,mBAAmB,KAAK,EAAE;CACvD,OAAO,IAAI,SAAS;AACtB;AAEA,SAAgB,4BACd,SACA,WACQ;CACR,MAAM,MAAM,IAAI,IAAI,iBAAiB,OAAO,CAAC;CAC7C,IAAI,WAAW,qBAAqB,mBAAmB,SAAS;CAChE,OAAO,IAAI,SAAS;AACtB;AAEA,SAAgB,mBAAmB,SAAiB,OAAuB;CACzE,MAAM,MAAM,IAAI,IAAI,iBAAiB,OAAO,CAAC;CAC7C,IAAI,WAAW,cAAc,mBAAmB,KAAK,EAAE;CACvD,OAAO,IAAI,SAAS;AACtB;AAEA,SAAgB,iBACd,SACA,OACA,WACQ;CACR,MAAM,MAAM,IAAI,IAAI,iBAAiB,OAAO,CAAC;CAC7C,IAAI,WAAW,cAAc,mBAAmB,KAAK,EAAE,WAAW,mBAAmB,SAAS;CAC9F,OAAO,IAAI,SAAS;AACtB;AAEA,SAAgB,aAAa,SAAiB,OAAuB;CACnE,MAAM,OAAO,IAAI,IAAI,iBAAiB,OAAO,CAAC;CAC9C,IAAI;CACJ,IAAI,KAAK,aAAa,SACpB,WAAW;MACN,IAAI,KAAK,aAAa,UAC3B,WAAW;MACN,IAAI,KAAK,aAAa,SAAS,KAAK,aAAa,QACtD,WAAW,KAAK;MAEhB,MAAM,IAAI,MACR,mDAAmD,KAAK,UAC1D;CAEF,OAAO,GAAG,SAAS,IAAI,KAAK,KAAK,aAAa,mBAAmB,KAAK,EAAE;AAC1E;;;AC/CA,MAAa,uCACX;AACF,MAAa,uCACX;AAOF,MAAa,6CACX;AAiGF,MAAM,0BAA0B;AAChC,MAAM,0BAA0B;AAChC,MAAM,8BAA8B;AACpC,MAAM,0BAA0B;AAChC,MAAM,mCAAmC;AACzC,MAAM,qCAAqC;AAC3C,MAAM,wBAAwB;AAC9B,MAAM,0BAA0B;AAChC,MAAM,iBAAiB;AACvB,MAAM,uBAAuB;AAC7B,MAAM,8BAA8B;AAEpC,SAAgB,mCAAmC,OAGxC;CACT,MAAM,aACJ,OAAO,MAAM,OAAO,YAAY,MAAM,GAAG,KAAK,CAAC,CAAC,SAAS,IACrD,MAAM,GAAG,KAAK,IACd;CACN,IAAI,YACF,OAAO;CAET,MAAM,gBAAgB,yBAAyB,MAAM,GAAG;CACxD,MAAM,SAAS,WAAW,QAAQ,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,OAAO,KAAK;CACtE,OAAO,GAAG,0BAA0B,OAAO,MAAM,GAAG,uBAAuB;AAC7E;AAEA,SAAgB,sCACd,UACQ;CACR,OAAO;AACT;AAEA,SAAgB,4CACd,SACgC;CAChC,OAAO;EACL,eAAe;EACf,eAAe,wCAAwC;EACvD,WAAA;EACA,OAAA;EACA,sBAAsB;GACpB,aAAa,sCAAsC,OAAO;GAC1D,gBAAA;EACF;CACF;AACF;AAEA,MAAM,gDAC6B;CAC/B,MAAM,SAAS,yBAAyB;CACxC,IAAI,WAAW,eAAe,WAAW,UACvC,OAAO;CAET,OAAO;AACT;AAEF,eAAsB,uBAA+C;CACnE,MAAM,SAAS,MAAM,kBAAkB;CACvC,IAAI,CAAC,QAAQ,SACX,OAAO;CAET,OAAO,wBAAwB,OAAO,OAAO;AAC/C;AAEA,eAAsB,iCAA2E;CAE/F,QAAO,MADc,kBAAkB,EAAA,EACxB,qBAAqB;AACtC;AAEA,eAAsB,4BAAiE;CAErF,QAAO,MADc,kBAAkB,EAAA,EACxB,UAAU;AAC3B;AAEA,eAAsB,kCAA6E;CAEjG,QAAO,MADc,kBAAkB,EAAA,EACxB,sBAAsB;AACvC;AAEA,eAAsB,oCAA0E;CAE9F,OAAO,oCAAmC,MADrB,kBAAkB,EAAA,EACW,QAAQ,QAAQ;AACpE;AAEA,eAAsB,gCAAyE;CAE7F,QAAO,MADc,kBAAkB,EAAA,EACxB,cAAc;AAC/B;AAEA,eAAsB,8CAEpB;CAEA,QAAO,MADkB,8BAA8B,EAAA,EACpC,wBAAwB;AAC7C;AAOA,eAAsB,6BAA+D;CAEnF,QAAO,MADc,0BAA0B,EAAA,CACjC;AAChB;AAEA,eAAsB,4BAGnB;CACD,OAAO,MAAM,sBAAsB,YAAY;EAC7C,MAAM,QAAQ,MAAM,+BAA+B;EACnD,MAAM,SAAS,MAAM,gCAAgC;EACrD,MAAM,kBAAkB,MAAM,WAAW,wBAAwB,CAAC;EAElE,IAAI,OAAO,WAAW,CAAC,MAAM,YAAY,MAAM,OAAO,gBAAgB;GACpE,MAAM,mBAAmB,OAAO,MAAM;GACtC,OAAO;IACL,sBAAsB;IACtB,qBAAqB;GACvB;EACF;EAEA,IAAI,mBAAmB,MAAM,UAAU;GACrC,MAAM,GAAG,wBAAwB,GAAG,EAAE,OAAO,KAAK,CAAC;GACnD,OAAO;IACL,sBAAsB;IACtB,qBAAqB;GACvB;EACF;EAEA,OAAO;GACL,sBAAsB;GACtB,qBAAqB;EACvB;CACF,CAAC;AACH;AAEA,eAAsB,qBAAqB,SAAgC;CACzE,MAAM,sBAAsB,YAAY;EACtC,MAAM,aAAa,wBAAwB,OAAO;EAIlD,MAAM,mBAFO,gBAAgB,MADN,kBAAkB,GACF,EAAE,SAAS,WAAW,CAEjC,CAAC;CAC/B,CAAC;AACH;AAEA,eAAsB,0BACpB,QACe;CACf,MAAM,sBAAsB,YAAY;EAItC,MAAM,mBAFO,gBAAgB,MADN,kBAAkB,GACF,EAAE,OAAO,CAEpB,CAAC;CAC/B,CAAC;AACH;AAEA,eAAsB,6BACpB,SACe;CACf,MAAM,sBAAsB,YAAY;EACtC,MAAM,WAAW,MAAM,kBAAkB;EACzC,MAAM,iBAAiB,UAAU,UAAU;EAC3C,MAAM,aAAa,QAAQ,cAAc;EAIzC,IAF2B,KAAK,UAAU,cAErB,MADE,KAAK,UAAU,UACE,GACtC;EAKF,MAAM,mBAFO,gBAAgB,UAAU,EAAE,QAAQ,WAAW,CAEhC,CAAC;CAC/B,CAAC;AACH;AAaA,eAAsB,mCACpB,SAGe;CACf,MAAM,sBAAsB,YAAY;EACtC,MAAM,WAAW,MAAM,kBAAkB;EACzC,MAAM,6BAA6B,UAAU,sBAAsB;EACnE,MAAM,yBAAyB,QAAQ,0BAA0B;EAIjE,IAF2B,KAAK,UAAU,0BAErB,MADE,KAAK,UAAU,sBACE,GACtC;EAOF,MAAM,mBAJO,gBAAgB,UAAU,EACrC,oBAAoB,uBACtB,CAE4B,CAAC;CAC/B,CAAC;AACH;AAEA,eAAsB,uCACpB,SAGe;CACf,MAAM,sBAAsB,YAAY;EACtC,MAAM,WAAW,MAAM,kBAAkB;EACzC,MAAM,qBAAqB,UAAU,cAAc;EACnD,MAAM,kBAAkB,oBAAoB,WAAW;EACvD,MAAM,cAAc,QAAQ,eAAe;EAI3C,IAF2B,KAAK,UAAU,eAErB,MADE,KAAK,UAAU,WACE,GACtC;EAkBF,MAAM,mBAJO,gBAAgB,UAAU,EACrC,YAXA,eAAe,oBAAoB,uBAC/B;GACE,GAAI,oBAAoB,uBACpB,EACE,sBAAsB,mBAAmB,qBAC3C,IACA,CAAC;GACL,GAAI,cAAc,EAAE,SAAS,YAAY,IAAI,CAAC;EAChD,IACA,KAGN,CAE4B,CAAC;CAC/B,CAAC;AACH;AAEA,eAAsB,iCACpB,SAGe;CACf,MAAM,sBAAsB,YAAY;EACtC,MAAM,WAAW,MAAM,kBAAkB;EACzC,MAAM,qBAAqB,UAAU,cAAc;EACnD,MAAM,iBAAiB,QAAQ,kBAAkB;EAIjD,IAF2B,KAAK,UAAU,kBAErB,MADE,KAAK,UAAU,cACE,GACtC;EAOF,MAAM,mBAJO,gBAAgB,UAAU,EACrC,YAAY,eACd,CAE4B,CAAC;CAC/B,CAAC;AACH;AAEA,SAAS,gBACP,UACA,WACiB;CACjB,MAAM,UAAU,uBAAuB,UAAU,SAAS,SAAS;CACnE,MAAM,oBAAoB,sBACxB,qBACA,UAAU,mBACV,SACF;CACA,MAAM,SAAS,sBAAsB,UAAU,UAAU,QAAQ,SAAS;CAC1E,MAAM,SAAS,sBAAsB,UAAU,UAAU,QAAQ,SAAS;CAC1E,MAAM,qBAAqB,sBACzB,sBACA,UAAU,oBACV,SACF;CACA,MAAM,aAAa,sBACjB,cACA,UAAU,YACV,SACF;CAEA,OAAO;EACL,GAAG;EACH,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;EAC7B,GAAI,oBAAoB,EAAE,kBAAkB,IAAI,CAAC;EACjD,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;EAC3B,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;EAC3B,GAAI,qBAAqB,EAAE,mBAAmB,IAAI,CAAC;EACnD,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC;EACnC,4BAAW,IAAI,KAAK,EAAA,CAAE,YAAY;CACpC;AACF;AAEA,SAAS,uBACP,UACA,WACoB;CACpB,IAAI,EAAE,aAAa,YACjB,OAAO;CAET,IAAI,OAAO,UAAU,YAAY,YAAY,UAAU,QAAQ,WAAW,GACxE;CAEF,OAAO,UAAU;AACnB;AAEA,SAAS,sBACP,KAMA,UACA,WACe;CACf,IAAI,EAAE,OAAO,YACX,OAAO;CAGT,OADc,UAAU,QACR,KAAA;AAClB;AAEA,eAAe,2BAAkD;CAC/D,KACE,IAAI,UAAU,GACd,UAAU,kCACV,WAAW,GAEX,IAAI;EACF,OAAO,MAAM,YAAY;GACvB,mBAAmB;GACnB,KAAK;EACP,CAAC;CACH,SAAS,OAAO;EACd,IACE,CAAC,oBAAoB,KAAK,KAC1B,4BAA4B,KAAK,KACjC,YAAY,mCAAmC,GAE/C,MAAM;EAER,MAAM,MAAM,kCAAkC;CAChD;CAGF,MAAM,IAAI,MAAM,uCAAuC;AACzD;AAEA,eAAe,sBAAyB,KAAmC;CAEzE,OAAO,MAAM,gBAAgB;EAC3B,MAAA,MAFiB,yBAAyB;EAG1C;EACA,gBAAgB;GACd,WAAW;GACX,SAAS;GACT,mBAAmB;EACrB;CACF,CAAC;AACH;AAEA,eAAe,oBAAqD;CAElE,QAAO,MADc,0BAA0B,EAAA,CACjC;AAChB;AAEA,eAAe,4BAGZ;CACD,MAAM,QAAQ,MAAM,+BAA+B;CACnD,IAAI,MAAM,UACR,OAAO;EACL,QAAQ,MAAM;EACd,QAAQ,MAAM;CAChB;CAEF,OAAO,MAAM,gCAAgC;AAC/C;AAEA,SAAS,uBAAuB,OAAoC;CAClE,IAAI,OAAO,UAAU,UACnB;CAEF,IAAI;EACF,OAAO,wBAAwB,KAAK;CACtC,QAAQ;EACN;CACF;AACF;AAEA,SAAS,8BACP,OACsC;CACtC,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B;CAGF,MAAM,MAAM;CAKZ,MAAM,WAAW,0BAA0B,IAAI,QAAQ;CACvD,MAAM,SAAS,yBAAyB,IAAI,MAAM;CAElD,IAAI,EAAE,YAAY,SAChB;CAGF,OAAO;EACL,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;EAC/B,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;CAC7B;AACF;AAEA,SAAS,yBACP,OACiC;CACjC,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B;CAGF,MAAM,MAAM;CAOZ,MAAM,WACJ,OAAO,IAAI,aAAa,YAAY,IAAI,SAAS,KAAK,CAAC,CAAC,SAAS,IAC7D,IAAI,SAAS,KAAK,IAClB,KAAA;CACN,MAAM,SAAS,yBAAyB,IAAI,MAAM;CAClD,MAAM,WAAW,iCAAiC,IAAI,QAAQ;CAC9D,MAAM,gBAAgB,gCACpB,IAAI,eACJ,+BAA+B,QAAQ,CACzC;CAEA,IAAI,EAAE,YAAY,UAAU,iBAAiB,WAC3C;CAGF,OAAO;EACL,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;EAC/B,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;EAC3B,GAAI,gBAAgB,EAAE,cAAc,IAAI,CAAC;EACzC,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;CACjC;AACF;AAEA,SAAS,yBACP,OACiC;CACjC,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B;CAKF,MAAM,WAAW,iCAAiCC,MAAI,QAAQ;CAC9D,IAAI,CAAC,UACH;CAEF,OAAO,EAAE,SAAS;AACpB;AAEA,SAAS,iCACP,OACyC;CACzC,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B;CAEF,MAAM,MAAM;CAIZ,MAAM,oBAAoB,qBAAqB,IAAI,iBAAiB;CACpE,MAAM,WAAW,qBAAqB,IAAI,QAAQ;CAClD,IAAI,sBAAsB,KAAA,KAAa,aAAa,KAAA,GAClD;CAEF,OAAO;EACL,GAAI,sBAAsB,KAAA,IAAY,CAAC,IAAI,EAAE,kBAAkB;EAC/D,GAAI,aAAa,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS;CAC/C;AACF;AAEA,SAAS,+BACP,OACuC;CAEvC,OAD+B,qCAAqC,KACxC;AAC9B;AAEA,SAAS,qCACP,OACuC;CACvC,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B;CAMF,MAAM,cAAc,kCAAkCA,MAAI,WAAW;CACrE,IAAI,CAAC,aACH;CAGF,OAAO,EACL,YACF;AACF;AAEA,SAAS,6BACP,OACqC;CACrC,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B;CAEF,MAAM,MAAM;CAIZ,MAAM,uBAAuB,2BAC3B,IAAI,oBACN;CACA,MAAM,UAAU,mCAAmC,IAAI,OAAO;CAC9D,IAAI,EAAE,wBAAwB,UAC5B;CAEF,OAAO;EACL,GAAI,uBAAuB,EAAE,qBAAqB,IAAI,CAAC;EACvD,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;CAC/B;AACF;AAEA,SAAS,mCACP,OAC2C;CAC3C,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B;CAEF,MAAM,MAAM;CAKZ,MAAM,4BAA4B,2BAChC,IAAI,yBACN;CACA,MAAM,kBAAkB,2BAA2B,IAAI,eAAe;CACtE,MAAM,8BAA8B,2BAClC,IAAI,2BACN;CACA,IACE,EACE,6BACA,mBACA,8BAGF;CAEF,OAAO;EACL,GAAI,4BAA4B,EAAE,0BAA0B,IAAI,CAAC;EACjE,GAAI,kBAAkB,EAAE,gBAAgB,IAAI,CAAC;EAC7C,GAAI,8BAA8B,EAAE,4BAA4B,IAAI,CAAC;CACvE;AACF;AAEA,eAAe,mBAAmB,MAAsC;CACtE,MAAM,MAAM,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;CAC5C,MAAM,MAAM,gBAAgB,GAAG,EAAE,WAAW,KAAK,CAAC;CAElD,MAAM,6BAAY,IAAI,KAAK,EAAA,CAAE,YAAY;CACzC,MAAM,sBACJ,sBAAsB,GACtB,4BAA4B,MAAM,SAAS,CAC7C;CACA,MAAM,sBACJ,uBAAuB,GACvB,6BAA6B,MAAM,SAAS,CAC9C;CACA,MAAM,sBACJ,sBAAsB,GACtB,4BAA4B,MAAM,SAAS,CAC7C;CACA,MAAM,sBACJ,8BAA8B,GAC9B,oCAAoC,MAAM,SAAS,CACrD;CACA,MAAM,sBACJ,yBAAyB,GACzB,+BAA+B,MAAM,SAAS,CAChD;CACA,MAAM,GAAG,wBAAwB,GAAG,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,KAAA,CAAS;AAC5E;AAEA,SAAS,MAAM,IAA2B;CACxC,OAAO,IAAI,SAAS,YAAY;EAC9B,WAAW,SAAS,EAAE;CACxB,CAAC;AACH;AAEA,SAAS,0BACP,OACyC;CACzC,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B;CAGF,MAAM,MAAM;CAKZ,MAAM,QAAQ,YAAY,IAAI,KAAK;CACnC,MAAM,QAAQ,YAAY,IAAI,KAAK;CAEnC,IAAI,EAAE,SAAS,QACb;CAGF,OAAO;EACL,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;EACzB,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC3B;AACF;AAEA,SAAS,yBACP,OACwC;CACxC,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B;CAGF,MAAM,MAAM;CAKZ,MAAM,WAAW,IAAI;CACrB,MAAM,WAAW,IAAI;CAErB,MAAM,QACJ,UAAU,aAAa,aAAa,UAAU,aAAa,aACvD,EAAE,UAAU,SAAS,SAAS,IAC9B,KAAA;CAEN,MAAM,QACJ,UAAU,iBAAiB,aAAa,UAAU,iBAAiB,YAC/D,EAAE,cAAc,SAAS,aAAa,IACtC,KAAA;CAEN,IAAI,EAAE,SAAS,QACb;CAGF,OAAO;EACL,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;EACzB,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC3B;AACF;AAEA,SAAS,yBACP,OACsD;CACtD,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B;CAGF,MAAM,UAAU,OAAO,QAAQ,KAAK,CAAC,CAAC,SAAS,CAAC,WAAW,gBAAgB;EACzE,IAAI,CAAC,cAAc,OAAO,eAAe,UACvC,OAAO,CAAC;EAEV,MAAM,WAAW;EAIjB,MAAM,YACJ,OAAO,SAAS,cAAc,YAC9B,SAAS,UAAU,KAAK,CAAC,CAAC,SAAS,IAC/B,SAAS,UAAU,KAAK,IACxB,KAAA;EACN,MAAM,kBACJ,OAAO,SAAS,oBAAoB,YACpC,SAAS,gBAAgB,KAAK,CAAC,CAAC,SAAS,IACrC,SAAS,gBAAgB,KAAK,IAC9B,KAAA;EACN,IAAI,EAAE,aAAa,kBACjB,OAAO,CAAC;EAEV,OAAO,CACL,CACE,WACA;GACE,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;GACjC,GAAI,kBAAkB,EAAE,gBAAgB,IAAI,CAAC;EAC/C,CACF,CACF;CACF,CAAC;CAED,IAAI,QAAQ,WAAW,GACrB;CAGF,OAAO,OAAO,YAAY,OAAO;AACnC;AAEA,SAAS,gCACP,OACA,2BACyC;CACzC,IAAI,CAAC,MAAM,QAAQ,KAAK,GACtB;CAGF,MAAM,UAAU,MAAM,SAAS,SAAS;EACtC,IAAI,CAAC,QAAQ,OAAO,SAAS,UAC3B,OAAO,CAAC;EAEV,MAAM,MAAM;EACZ,MAAM,OACJ,OAAO,IAAI,SAAS,YAAY,IAAI,KAAK,KAAK,CAAC,CAAC,SAAS,IACrD,IAAI,KAAK,KAAK,IACd;EACN,MAAM,MACJ,OAAO,IAAI,QAAQ,YAAY,IAAI,IAAI,KAAK,CAAC,CAAC,SAAS,IACnD,yBAAyB,IAAI,GAAG,IAChC;EACN,IAAI,EAAE,QAAQ,MACZ,OAAO,CAAC;EAEV,MAAM,aAAa,2BAA2B,IAAI,EAAE;EACpD,MAAM,mBAAmB,2BAA2B,IAAI,GAAG;EAM3D,OAAO,CAAC;GAAE,IALC,mCAAmC;IAC5C;IACA,GAAI,aAAa,EAAE,IAAI,WAAW,IAAI,CAAC;IACvC,GAAI,CAAC,cAAc,mBAAmB,EAAE,IAAI,iBAAiB,IAAI,CAAC;GACpE,CACW;GAAG;GAAM;EAAI,CAAC;CAC3B,CAAC;CAED,IAAI,QAAQ,WAAW,GACrB;CAGF,OAAO;AACT;AAEA,SAAS,iCACP,OAC0C;CAC1C,IAAI,CAAC,MAAM,QAAQ,KAAK,GACtB;CAGF,MAAM,UAAU,MACb,KAAK,SAAS,gCAAgC,IAAI,CAAC,CAAC,CACpD,QAAQ,WAAiD,WAAW,IAAI;CAE3E,IAAI,QAAQ,WAAW,GACrB;CAGF,OAAO;AACT;AAEA,SAAS,+BACP,UACqB;CACrB,MAAM,wBAAQ,IAAI,IAAoB;CACtC,KAAK,MAAM,WAAW,YAAY,CAAC,GAAG;EACpC,IAAI,CAAC,QAAQ,SAAS,WAAW,uBAAuB,GACtD;EAEF,MAAM,sBAAsB,yBAAyB,QAAQ,SAAS;EACtE,IAAI,CAAC,qBACH;EAEF,MAAM,IAAI,qBAAqB,QAAQ,QAAQ;CACjD;CACA,OAAO;AACT;AAEA,SAAS,gCACP,OACmC;CACnC,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B,OAAO;CAGT,MAAM,MAAM;CASZ,MAAM,WAAW,uBAAuB,IAAI,QAAQ;CAEpD,MAAM,YADe,uBAAuB,IAAI,SACnB;CAC7B,MAAM,OAAO,uBAAuB,IAAI,IAAI;CAC5C,MAAM,SAAS,yBAAyB,IAAI,MAAM;CAClD,MAAM,WAAW,MAAM,QAAQ,IAAI,QAAQ,IACvC,IAAI,SACD,KAAK,UAAW,OAAO,UAAU,WAAW,MAAM,KAAK,IAAI,EAAG,CAAC,CAC/D,QAAQ,UAA2B,MAAM,SAAS,CAAC,IACtD,CAAC;CACL,MAAM,YAAY,uBAAuB,IAAI,SAAS;CACtD,MAAM,SAAS,2BAA2B,IAAI,MAAM;CAEpD,IAAI,EAAE,YAAY,aAAa,QAAQ,UAAU,YAC/C,OAAO;CAGT,OAAO;EACL;EACA;EACA;EACA;EACA;EACA,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;EAC3B;CACF;AACF;AAEA,SAAS,kCACP,OAC2C;CAC3C,IAAI,CAAC,MAAM,QAAQ,KAAK,GACtB;CAGF,MAAM,SAAS,MACZ,KAAK,UAAU,iCAAiC,KAAK,CAAC,CAAC,CACvD,QAAQ,UAAgD,UAAU,IAAI;CAEzE,IAAI,OAAO,WAAW,GACpB;CAGF,MAAM,0BAAU,IAAI,IAAyC;CAC7D,KAAK,MAAM,SAAS,QAClB,QAAQ,IAAI,MAAM,SAAS,KAAK;CAGlC,OAAO,CAAC,GAAG,QAAQ,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,MACpC,EAAE,QAAQ,cAAc,EAAE,OAAO,CACnC;AACF;AAEA,SAAS,iCACP,OACoC;CACpC,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B,OAAO;CAGT,MAAM,MAAM;CAaZ,MAAM,UAAU,uBAAuB,IAAI,OAAO;CAClD,MAAM,cAAc,uBAAuB,IAAI,WAAW;CAC1D,MAAM,UAAU,OAAO,IAAI,YAAY,YAAY,IAAI,UAAU;CACjE,MAAM,iBAAiB,0CACrB,IAAI,cACN;CACA,MAAM,WAAW,4CAA4C,OAAO;CACpE,MAAM,qBAAqB,oCACzB;EACE,eAAe,IAAI;EACnB,eAAe,IAAI;EACnB,WAAW,IAAI;EACf,OAAO,IAAI;EACX,sBAAsB,IAAI;CAC5B,GACA,QACF;CACA,MAAM,eAAe,uBAAuB,IAAI,YAAY;CAC5D,MAAM,YAAY,uBAAuB,IAAI,SAAS;CAEtD,IACE,EACE,WACA,eACA,YAAY,QACZ,sBACA,gBACA,YAGF,OAAO;CAGT,OAAO;EACL;EACA;EACA;EACA,GAAI,iBAAiB,EAAE,eAAe,IAAI,CAAC;EAC3C,eAAe,mBAAmB;EAClC,eAAe,mBAAmB;EAClC,WAAW,mBAAmB;EAC9B,OAAO,mBAAmB;EAC1B,sBAAsB,mBAAmB;EACzC;EACA;CACF;AACF;AAEA,SAAS,0CACP,OACkD;CAClD,IAAI,EAAE,SAAS,OAAO,UAAU,WAC9B;CAEF,MAAM,SAAS,2CAA2C,UAAU,KAAK;CACzE,OAAO,OAAO,UAAU,OAAO,OAAO,KAAA;AACxC;AAEA,SAAS,oCACP,KAOA,UACuC;CACvC,MAAM,0BAA0B,8BAC9B,IAAI,aACN;CACA,MAAM,SAAS,qCAAqC,UAAU;EAC5D,gBAAgB,IAAI,iBAAiB,SAAS;EAC9C,gBAAgB,2BAA2B,SAAS;EACpD,YACE,IAAI,cAAc,KAAA,IAAY,SAAS,YAAY,IAAI;EACzD,OAAO,IAAI,SAAS,SAAS;EAC7B,yBACE,IAAI,wBAAwB,SAAS;CACzC,CAAC;CACD,IAAI,CAAC,OAAO,SACV,OAAO;CAGT,OAAO;EACL,eAAe,OAAO,KAAK;EAC3B,eAAe,OAAO,KAAK;EAC3B,WAAW,+BAA+B;GACxC;GACA,WAAW,OAAO,KAAK;EACzB,CAAC;EACD,OAAO,OAAO,KAAK;EACnB,sBACE,yDAAyD;GACvD,sBAAsB,OAAO,KAAK;GAClC;EACF,CAAC;CACL;AACF;AAEA,SAAS,+BAA+B,OAGtB;CAGhB,IAAI,MAAM,cAAc,MACtB,OAAO,MAAM,SAAS;CAExB,OAAO,MAAM;AACf;AAEA,SAAS,yDAAyD,OAGd;CAClD,IACE,MAAM,qBAAqB,gBAAA,2BAG3B,OAAO,MAAM,SAAS;CAExB,OAAO,MAAM;AACf;AAEA,SAAS,mCACP,QAC6B;CAC7B,OAAO;EACL,mBACE,qBAAqB,QAAQ,iBAAiB,KAAA;EAEhD,UACE,qBAAqB,QAAQ,QAAQ,KAAA;CAEzC;AACF;AAEA,SAAS,8BACP,OACkC;CAClC,IAAI,UAAU,WAAW,UAAU,UACjC,OAAO;CAET,OAAO;AACT;AAEA,SAAS,uBACP,OAC2C;CAC3C,IAAI,UAAU,aAAa,UAAU,QACnC,OAAO;CAET,OAAO;AACT;AAEA,SAAS,yBACP,OAC6C;CAC7C,IAAI,UAAU,eAAe,UAAU,aAAa,UAAU,UAC5D,OAAO;CAET,OAAO;AACT;AAEA,SAAS,qBAAqB,OAAoC;CAChE,IAAI,CAAC,OAAO,UAAU,KAAK,GACzB;CAEF,MAAM,eAAe,OAAO,KAAK;CACjC,IAAI,gBAAgB,GAClB;CAEF,OAAO;AACT;AAEA,SAAS,uBAAuB,OAAwB;CACtD,IAAI,OAAO,UAAU,UACnB,OAAO;CAET,MAAM,UAAU,MAAM,KAAK;CAC3B,OAAO,QAAQ,SAAS,IAAI,UAAU;AACxC;AAEA,SAAS,2BAA2B,OAAoC;CACtE,IAAI,OAAO,UAAU,UACnB;CAEF,MAAM,UAAU,MAAM,KAAK;CAC3B,OAAO,QAAQ,SAAS,IAAI,UAAU,KAAA;AACxC;AAEA,SAAS,yBAAyB,OAAuB;CACvD,MAAM,UAAU,MAAM,KAAK;CAC3B,IAAI,CAAC,SACH,OAAO;CAET,IAAI,sBAAsB,KAAK,OAAO,GACpC,OAAO,GAAG,QAAQ,EAAE,EAAE,YAAY,KAAK,GAAG;CAI5C,MAAM,iBADJ,wBAAwB,KAAK,OAAO,KAAK,eAAe,KAAK,OAAO,WAE3D;EACL,MAAM,wBAAwB,MAAM,UAAU,OAAO;EACrD,IAAI,qBAAqB,KAAK,qBAAqB,GACjD,OAAO,GAAG,sBAAsB,EAAE,EAAE,YAAY,KAAK,KAAK,sBAAsB,MAAM,CAAC;EAEzF,OAAO;CACT,EAAA,CAAG,IACH,UAAU,OAAO;CACrB,MAAM,cAAc,mBAAmB,MAAM,MAAM,cAAc,CAAC,CAAC;CACnE,MAAM,gBAAgB,mBAAmB,MAAM,MAAM,cAAc,CAAC,CAAC;CACrE,IAAI,eAAe,eACjB,OAAO;CAET,OAAO,eAAe,QAAQ,6BAA6B,EAAE;AAC/D;AAEA,SAAS,YAAY,OAAoD;CACvE,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B;CAGF,MAAM,UAAU,OAAO,QAAQ,KAAK,CAAC,CAAC,QACnC,UAAqC,OAAO,MAAM,OAAO,QAC5D;CACA,IAAI,QAAQ,WAAW,GACrB;CAGF,OAAO,OAAO,YAAY,OAAO;AACnC;AAEA,SAAS,oBAAoB,OAAyB;CACpD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACT,MAA4B,SAAS;AAE1C;AAEA,eAAe,iCAIZ;CACD,MAAM,CACJ,iBACA,kBACA,iBACA,mBACA,gBACE,MAAM,QAAQ,IAAI;EACpB,qBAAqB,sBAAsB,CAAC;EAC5C,qBAAqB,uBAAuB,CAAC;EAC7C,qBAAqB,sBAAsB,CAAC;EAC5C,qBAAqB,8BAA8B,CAAC;EACpD,qBAAqB,yBAAyB,CAAC;CACjD,CAAC;CAED,MAAM,QAAQ;EACZ;EACA;EACA;EACA;EACA;CACF;CAEA,IAAI,CADa,MAAM,MAAM,SAAS,KAAK,KAC/B,GACV,OAAO;EACL,QAAQ;EACR,UAAU;EACV,QAAQ,EACN,eAAe,MACjB;CACF;CAGF,MAAM,cAAc,MAAM,MAAM,SAAS,KAAK,KAAK;CACnD,MAAM,cAAc,6BAA6B,gBAAgB,KAAK;CACtE,MAAM,eAAe,8BAA8B,iBAAiB,KAAK;CAOzE,MAAM,SAAS,yBAAyB;EACtC,OAPkB,6BAA6B,gBAAgB,KAO9C;EACjB,eAPoB,qCACpB,kBAAkB,KAMN;EACZ,UALe,gCAAgC,aAAa,KAKrD;CACT,CAAC;CAUD,OAAO;EACL,QAVa,4BAA4B;GACzC,SAAS,YAAY;GACrB,mBAAmB,YAAY;GAC/B,QAAQ,YAAY;GACpB,YAAY,YAAY;GACxB,oBAAoB;GACpB;EACF,CAGO;EACL,UAAU;EACV,QAAQ,cACJ;GACE,eAAe;GACf,QAAQ,YAAY,SAAS;EAC/B,IACA,EACE,eAAe,MACjB;CACN;AACF;AAEA,eAAe,kCAGZ;CACD,IAAI;CACJ,IAAI;EACF,MAAM,MAAM,SAAS,wBAAwB,GAAG,MAAM;CACxD,SAAS,OAAO;EACd,IAAI,oBAAoB,KAAK,GAC3B,OAAO;GACL,QAAQ;GACR,QAAQ,EACN,eAAe,MACjB;EACF;EAEF,MAAM;CACR;CAEA,IAAI,IAAI,KAAK,CAAC,CAAC,WAAW,GACxB,OAAO;EACL,QAAQ;EACR,QAAQ,EACN,eAAe,MACjB;CACF;CAGF,IAAI;CAKJ,IAAI;EACF,SAAS,KAAK,MAAM,GAAG;CAKzB,QAAQ;EACN,OAAO;GACL,QAAQ;GACR,QAAQ;IACN,eAAe;IACf,QAAQ;GACV;EACF;CACF;CAEA,IAAI,OAAO,MAAM,GACf,OAAO;EACL,QAAQ;EACR,QAAQ;GACN,eAAe;GACf,QAAQ;EACV;CACF;CAGF,IAAI,OAAO,WAAW,KAAA,GACpB,MAAM,IAAI,MACR,kKACF;CAGF,OAAO;EACL,QAAQ,4BAA4B;GAClC,SAAS,uBAAuB,OAAO,OAAO;GAC9C,mBAAmB,8BACjB,OAAO,iBACT;GACA,QAAQ,yBAAyB,OAAO,MAAM;GAC9C,QAAQ,yBAAyB,OAAO,MAAM;GAC9C,oBAAoB,+BAClB,OAAO,kBACT;GACA,YAAY,6BAA6B,OAAO,UAAU;GAC1D,WACE,OAAO,OAAO,cAAc,WACxB,OAAO,6BACP,IAAI,KAAK,EAAA,CAAE,YAAY;EAC/B,CAAC;EACD,QAAQ,EACN,eAAe,MACjB;CACF;AACF;AAEA,SAAS,4BAA4B,OAQV;CACzB,MAAM,YAAY,MAAM,8BAAa,IAAI,KAAK,EAAA,CAAE,YAAY;CAC5D,IACE,EACE,MAAM,WACN,MAAM,qBACN,MAAM,UACN,MAAM,UACN,MAAM,sBACN,MAAM,aAGR,OAAO;CAGT,OAAO;EACL,GAAG;EACH,GAAI,MAAM,UAAU,EAAE,SAAS,MAAM,QAAQ,IAAI,CAAC;EAClD,GAAI,MAAM,oBACN,EAAE,mBAAmB,MAAM,kBAAkB,IAC7C,CAAC;EACL,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;EAC/C,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;EAC/C,GAAI,MAAM,qBACN,EAAE,oBAAoB,MAAM,mBAAmB,IAC/C,CAAC;EACL,GAAI,MAAM,aAAa,EAAE,YAAY,MAAM,WAAW,IAAI,CAAC;EAC3D;CACF;AACF;AAEA,SAAS,6BACP,OAIA;CACA,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B,OAAO,CAAC;CAEV,MAAM,SAAS;CACf,IAAI,OAAO,MAAM,GACf,OAAO,CAAC;CAEV,OAAO;EACL,GAAI,uBAAuB,OAAO,OAAO,IACrC,EAAE,SAAS,uBAAuB,OAAO,OAAO,EAAE,IAClD,CAAC;EACL,GAAI,8BAA8B,OAAO,iBAAiB,IACtD,EACE,mBAAmB,8BACjB,OAAO,iBACT,EACF,IACA,CAAC;EACL,GAAI,yBAAyB,OAAO,MAAM,IACtC,EAAE,QAAQ,yBAAyB,OAAO,MAAM,EAAE,IAClD,CAAC;EACL,GAAI,6BAA6B,OAAO,UAAU,IAC9C,EAAE,YAAY,6BAA6B,OAAO,UAAU,EAAE,IAC9D,CAAC;CACP;AACF;AAEA,SAAS,8BACP,OACuC;CACvC,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B;CAEF,MAAM,SAAS;CACf,IAAI,OAAO,MAAM,GACf;CAEF,OAAO,+BAA+B,OAAO,kBAAkB;AACjE;AAEA,SAAS,6BACP,OAC8D;CAC9D,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B;CAEF,MAAM,SAAS;CACf,IAAI,OAAO,MAAM,GACf;CAEF,MAAM,WACJ,OAAO,OAAO,aAAa,YAAY,OAAO,SAAS,KAAK,CAAC,CAAC,SAAS,IACnE,OAAO,SAAS,KAAK,IACrB,KAAA;CACN,MAAM,SAAS,yBAAyB,OAAO,MAAM;CACrD,IAAI,EAAE,YAAY,SAChB;CAEF,OAAO;EACL,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;EAC/B,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;CAC7B;AACF;AAEA,SAAS,qCACP,OACyC;CACzC,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B;CAEF,MAAM,SAAS;CACf,IAAI,OAAO,MAAM,GACf;CAEF,OAAO,gCAAgC,OAAO,eAAe,KAAA,CAAS;AACxE;AAEA,SAAS,gCACP,OAC0C;CAC1C,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B;CAEF,MAAM,SAAS;CACf,IAAI,OAAO,MAAM,GACf;CAEF,OAAO,iCAAiC,OAAO,QAAQ;AACzD;AAEA,SAAS,yBAAyB,OAIE;CAClC,IAAI,EAAE,MAAM,SAAS,MAAM,iBAAiB,MAAM,WAChD;CAEF,OAAO;EACL,GAAI,MAAM,OAAO,WAAW,EAAE,UAAU,MAAM,MAAM,SAAS,IAAI,CAAC;EAClE,GAAI,MAAM,OAAO,SAAS,EAAE,QAAQ,MAAM,MAAM,OAAO,IAAI,CAAC;EAC5D,GAAI,MAAM,gBAAgB,EAAE,eAAe,MAAM,cAAc,IAAI,CAAC;EACpE,GAAI,MAAM,WAAW,EAAE,UAAU,MAAM,SAAS,IAAI,CAAC;CACvD;AACF;AAEA,SAAS,4BACP,MACA,WAC4B;CAC5B,IACE,EAAE,KAAK,WAAW,KAAK,qBAAqB,KAAK,UAAU,KAAK,aAEhE,OAAO;CAET,OAAO;EACL,GAAG;EACH,GAAI,KAAK,UAAU,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;EAChD,GAAI,KAAK,oBACL,EAAE,mBAAmB,KAAK,kBAAkB,IAC5C,CAAC;EACL,GAAI,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAO,IAAI,CAAC;EAC7C,GAAI,KAAK,aAAa,EAAE,YAAY,KAAK,WAAW,IAAI,CAAC;EACzD;CACF;AACF;AAEA,SAAS,6BACP,MACA,WAC6B;CAC7B,IAAI,CAAC,KAAK,oBACR,OAAO;CAET,OAAO;EACL,GAAG;EACH,oBAAoB,KAAK;EACzB;CACF;AACF;AAEA,SAAS,4BACP,MACA,WAC4B;CAC5B,IAAI,EAAE,KAAK,QAAQ,YAAY,KAAK,QAAQ,SAC1C,OAAO;CAET,OAAO;EACL,GAAG;EACH,GAAI,KAAK,QAAQ,WAAW,EAAE,UAAU,KAAK,OAAO,SAAS,IAAI,CAAC;EAClE,GAAI,KAAK,QAAQ,SAAS,EAAE,QAAQ,KAAK,OAAO,OAAO,IAAI,CAAC;EAC5D;CACF;AACF;AAEA,SAAS,oCACP,MACA,WACoC;CACpC,IAAI,EAAE,KAAK,QAAQ,iBAAiB,KAAK,OAAO,cAAc,SAAS,IACrE,OAAO;CAET,OAAO;EACL,GAAG;EACH,eAAe,KAAK,OAAO;EAC3B;CACF;AACF;AAEA,SAAS,+BACP,MACA,WAC+B;CAC/B,IAAI,EAAE,KAAK,QAAQ,YAAY,KAAK,OAAO,SAAS,SAAS,IAC3D,OAAO;CAET,OAAO;EACL,GAAG;EACH,UAAU,KAAK,OAAO;EACtB;CACF;AACF;AAEA,eAAe,sBACb,MACA,SACe;CACf,IAAI,CAAC,SAAS;EACZ,MAAM,GAAG,MAAM,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,KAAA,CAAS;EACrD;CACF;CAEA,MAAM,MAAM,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;CAC9C,MAAM,WAAW,GAAG,KAAK,OAAO,QAAQ,IAAI,GAAG,KAAK,IAAI;CACxD,MAAM,UAAU,UAAU,GAAG,KAAK,UAAU,SAAS,MAAM,CAAC,EAAE,KAAK,MAAM;CACzE,IAAI;EACF,MAAM,OAAO,UAAU,IAAI;CAC7B,SAAS,OAAO;EACd,MAAM,GAAG,UAAU,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,KAAA,CAAS;EACzD,MAAM;CACR;AACF;AAEA,eAAe,qBAAqB,MAIjC;CACD,MAAM,MAAM,MAAM,SAAS,MAAM,MAAM,CAAC,CAAC,OAAO,UAAU;EACxD,IAAI,oBAAoB,KAAK,GAC3B,OAAO;EAET,MAAM;CACR,CAAC;CACD,IAAI,QAAQ,MACV,OAAO;EACL,OAAO;EACP,OAAO;CACT;CAEF,IAAI,IAAI,KAAK,CAAC,CAAC,WAAW,GACxB,OAAO;EACL,OAAO;EACP,OAAO;CACT;CAEF,IAAI;EACF,OAAO;GACL,OAAO;GACP,OAAO,KAAK,MAAM,GAAG;EACvB;CACF,QAAQ;EACN,OAAO;GACL,OAAO;GACP,OAAO;GACP,OAAO;EACT;CACF;AACF;AAEA,eAAe,WAAW,MAAgC;CACxD,OAAO,MAAM,SAAS,MAAM,MAAM,CAAC,CAChC,WAAW,IAAI,CAAC,CAChB,OAAO,UAAU;EAChB,IAAI,oBAAoB,KAAK,GAC3B,OAAO;EAET,MAAM;CACR,CAAC;AACL;;;;;;;;;;;;;AC9wDA,MAAa,2BAA2B;AACxC,MAAa,6BAA6B;AAC1C,MAAM,kBAAkB;AACxB,MAAM,mBAAmB;AACzB,MAAM,kBAAkB;AAExB,eAAsB,eACpB,UACA,QAAqC,CAAC,GACrB;CACjB,MAAM,MAAM,MAAM,OAAO,QAAQ;CACjC,MAAM,UAAU,OAAO,YAAY,EAAE,CAAC,CAAC,KAAK;CAC5C,IAAI,SACF,OAAO,wBAAwB,OAAO;CAKxC,MAAM,UAAU,OAAO,IAAI,wBAAwB,EAAE,CAAC,CAAC,KAAK;CAC5D,IAAI,SACF,OAAO,wBAAwB,OAAO;CAGxC,MAAM,aAAa,MAAM,qBAAqB;CAC9C,IAAI,YACF,OAAO,wBAAwB,UAAU;CAG3C,OAAO,wBAAwB,6BAA6B,EAAE,IAAI,CAAC,CAAC;AACtE;AAEA,eAAsB,qBACpB,UACwB;CACxB,IAAI;EACF,OAAO,MAAM,eAAe,QAAQ;CACtC,QAAQ;EACN,OAAO;CACT;AACF;AAEA,eAAsB,iCACpB,UAC6B;CAC7B,MAAM,qBAAqB,wBAAwB,QAAQ;CAC3D,IAAI,CAAC,oBACH;CAGF,IAAI;EACF,OAAO,MAAM,QAAQ,QAAQ,CAAC,CAAC,WAC7B,wBAAwB,kBAAkB,CAC5C;CACF,SAAS,OAAO;EACd,MAAM,IAAI,MACR,iCAAiC,mBAAmB,KAAK,eAAe,KAAK,GAC/E;CACF;AACF;AAEA,SAAgB,wBAAwB,YAA4B;CAClE,MAAM,uBAAuB,iBAAiB,UAAU;CAExD,IAAI,gBAAgB,IADS,IAAI,oBACE,CAAC,GAClC,MAAM,IAAI,MACR,8EACF;CAEF,OAAO;AACT;AAEA,SAAgB,8BACd,YACe;CACf,MAAM,uBAAuB,wBAAwB,UAAU;CAC/D,IAAI,CAAC,sBACH,OAAO;CAET,IAAI;EACF,OAAO,wBAAwB,oBAAoB;CACrD,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,wBAAwB,OAA+B;CAC9D,MAAM,aAAa,OAAO,SAAS,EAAE,CAAC,CAAC,KAAK;CAC5C,OAAO,WAAW,SAAS,IAAI,aAAa;AAC9C;AAEA,SAAgB,6BACd,QAAqC,CAAC,GAC9B;CACR,MAAM,SAAS,yBAAyB,KAAK;CAC7C,IAAI,WAAW,eAAe,WAAW,UACvC,OAAO;CAET,OAAO;AACT;AAEA,SAAS,gBAAgB,KAAmB;CAC1C,IAAI,mBAAmB,IAAI,QAAQ,GACjC,OAAO,eAAe,GAAG,MAAM;CAGjC,MAAM,CAAC,aAAa,MAAM,IAAI,SAAS,YAAY,CAAC,CAAC,MAAM,GAAG;CAC9D,OACE,eAAe,mBAAmB,WAAW,WAAW,gBAAgB;AAE5E;AAEA,SAAS,mBAAmB,UAA2B;CACrD,MAAM,qBAAqB,SAAS,YAAY;CAChD,OACE,uBAAuB,eACvB,uBAAuB,eACvB,uBAAuB;AAE3B;AAEA,SAAS,eAAe,KAAkB;CACxC,IAAI,IAAI,MACN,OAAO,IAAI;CAEb,IAAI,IAAI,aAAa,WAAW,IAAI,aAAa,OAC/C,OAAO;CAET,IAAI,IAAI,aAAa,YAAY,IAAI,aAAa,QAChD,OAAO;CAET,OAAO;AACT;AAEA,SAAS,eAAe,OAAwB;CAC9C,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC9D"}