dsh-pause-session 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +79 -0
- package/DEVELOPMENT.md +78 -0
- package/LICENSE +21 -0
- package/README.md +140 -2
- package/README.zh.md +101 -0
- package/REHEARSAL.md +90 -0
- package/cordis.patch.yml +3 -0
- package/docs/images/pause-controls.webp +0 -0
- package/icon.svg +5 -0
- package/lib/client.js +2024 -0
- package/lib/client.js.map +1 -0
- package/lib/index.js +2996 -0
- package/lib/index.js.map +1 -0
- package/lib/typert.host.d.ts +3 -0
- package/lib/typert.host.js +339 -0
- package/lib/typert.remote-client.d.ts +38 -0
- package/lib/typert.remote-client.d.ts.map +1 -0
- package/lib/typert.remote-client.js +244 -0
- package/lib/types/client/control.d.ts +99 -0
- package/lib/types/client/global.d.ts +125 -0
- package/lib/types/client/icons.d.ts +24 -0
- package/lib/types/client/index.d.ts +78 -0
- package/lib/types/client/locales.d.ts +67 -0
- package/lib/types/client/pill.d.ts +49 -0
- package/lib/types/client/remote.d.ts +71 -0
- package/lib/types/client/view.d.ts +151 -0
- package/lib/types/coldlog.d.ts +111 -0
- package/lib/types/composition.d.ts +94 -0
- package/lib/types/control.d.ts +95 -0
- package/lib/types/gate.d.ts +110 -0
- package/lib/types/global.d.ts +103 -0
- package/lib/types/history.d.ts +47 -0
- package/lib/types/index.d.ts +64 -0
- package/lib/types/park-state.d.ts +51 -0
- package/lib/types/park.d.ts +50 -0
- package/lib/types/registry.d.ts +117 -0
- package/lib/types/release-order.d.ts +21 -0
- package/lib/types/remote-adapter.d.ts +22 -0
- package/lib/types/remote.d.ts +158 -0
- package/lib/types/resume-activation.d.ts +27 -0
- package/lib/types/resume-text.d.ts +67 -0
- package/lib/types/resume.d.ts +126 -0
- package/lib/types/shared.d.ts +221 -0
- package/lib/types/snapshot.d.ts +29 -0
- package/lib/types/tree.d.ts +71 -0
- package/lib/types/triage.d.ts +120 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +166 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","names":[],"sources":["../src/client/control.ts","../src/client/view.ts","../src/client/global.ts","../src/client/remote.ts","../src/client/zod-lite.ts","../../../deepseek-harness/packages/typert/protocol/src/remote-info.ts","typert.remote-client.js","../src/client/icons.tsx","../src/client/pill.tsx","../src/client/locales.ts","../src/client/index.tsx"],"sourcesContent":["/**\n * Browser-side reading and driving of the host's park state for one session.\n *\n * The browser reads the native `pauseSession` stream; actions travel through\n * the same Remote namespace. No slash command is involved. The stream is\n * host-authoritative, so this module never derives a state from its own press.\n * The snapshot also carries the record's goal opt-out, so the switch beside the\n * pause button can show it without a second host round-trip.\n *\n * The stream is the change feed. A pushed snapshot triggers one cached read per\n * shown header; a press or goal switch reads the host's answer once after the\n * action.\n * @module dsh-pause-session/client/control\n */\n\nimport { createSnapshotStore } from '@deepseek-ai/dsh-client-store'\nimport type { SnapshotStore } from '@deepseek-ai/dsh-client-store'\nimport type { SessionId } from '@deepseek-ai/dsh-session/types'\nimport type { PauseTransport } from './remote.js'\n\n/**\n * What the Session-header control knows about one session: what the host\n * reported, or that no answer has arrived (`undefined`) or the last read\n * failed. Neither of the latter claims a state the host never reported.\n *\n * `draining` and `parking` are the host's own two answers on the way to\n * `safe`; the control shows them rather than rounding them up, because only\n * `safe` means the pending input is durably stored.\n */\nexport type PausePhase = 'active' | 'draining' | 'parking' | 'safe' | 'flush-failed' | 'unavailable'\n\n/** One host answer about one session. */\nexport interface PauseReading {\n readonly phase: PausePhase\n /** Tools the host reported in flight; empty unless the phase is `draining`. */\n readonly runningTools: readonly string[]\n /**\n * Whether the host's own record lets the next resume re-open this session's\n * goal. Absent — not `true` — when the host did not say: the control shows no\n * switch rather than the product default, because a default here would tell\n * the user their rounds are safe when nobody has answered.\n */\n readonly rearmGoal?: boolean\n}\n\n/** Per-session control state, keyed by Session id so a slot selector can watch one session. */\nexport interface PauseState {\n /** Reading per Session id; absent means no host answer yet. Writable: the store updates through a draft. */\n bySession: Record<string, PauseReading | undefined>\n}\n\nconst INITIAL: PauseState = { bySession: {} }\n\n/** Owns the published reading per session; nothing else writes that state. */\nexport class PauseControl {\n /** State source the Session-header contribution binds its selector hook to. */\n readonly store: SnapshotStore<PauseState> = createSnapshotStore(INITIAL)\n\n /** Sessions this control has shown; a pushed snapshot applies to every one. */\n private readonly shown = new Set<SessionId>()\n /** Highest read sequence requested per session: an answer older than it is dropped. */\n private readonly latest = new Map<SessionId, number>()\n private reads = 0\n\n /**\n * @param transport - the native namespace source and actions.\n * @param lifetime - aborts in-flight reads when the plugin unloads.\n */\n constructor(\n private readonly transport: PauseTransport,\n private readonly lifetime: AbortSignal,\n ) {}\n\n /**\n * Read the host's state for one session.\n * @param sessionId - session whose control was rendered.\n * @returns after this read's answer is published or superseded by a newer one.\n */\n async refresh(sessionId: SessionId): Promise<void> {\n await this.readOne(sessionId)\n }\n\n /** Apply one pushed snapshot without spending a read per shown header. */\n apply(snapshot: { readonly sessions: Readonly<Record<string, { readonly phase: PausePhase; readonly runningTools: readonly string[]; readonly rearmGoal?: boolean }>> } | undefined): void {\n for (const sessionId of this.shown) {\n if (snapshot === undefined) {\n this.publish(sessionId, { phase: 'unavailable', runningTools: [] })\n continue\n }\n const status = snapshot.sessions[String(sessionId)]\n this.publish(sessionId, status === undefined\n ? { phase: 'active', runningTools: [] }\n : {\n phase: status.phase,\n runningTools: status.runningTools,\n ...status.rearmGoal === undefined ? {} : { rearmGoal: status.rearmGoal },\n })\n }\n }\n\n /** A new pushed snapshot may have moved every header; read them once. */\n refreshAll(): void {\n if (this.shown.size === 0 || this.lifetime.aborted) return\n void this.readAll()\n }\n\n private async readAll(): Promise<void> {\n if (this.lifetime.aborted) return\n for (const sessionId of [...this.shown]) await this.readOne(sessionId)\n }\n\n /** One session's read, published unless a newer read of that session supersedes it. */\n private async readOne(sessionId: SessionId): Promise<void> {\n this.shown.add(sessionId)\n const sequence = ++this.reads\n this.latest.set(sessionId, sequence)\n const reading = await this.read(sessionId)\n // A newer read was requested while this one was in flight; its answer is\n // the current one, so publishing this stale one would show the browser a\n // state the host has already moved past.\n if (this.latest.get(sessionId) !== sequence) return\n this.publish(sessionId, reading)\n }\n\n /**\n * Press the control: pause an active session, or take back a pause that is\n * still on its way in (or already settled). The phase shown afterwards is the\n * host's answer, never an assumed flip.\n * @param sessionId - session whose control was pressed.\n * @returns after the control re-reads the host.\n */\n async toggle(sessionId: SessionId): Promise<void> {\n const current = this.store.getSnapshot().bySession[String(sessionId)]?.phase\n const action = current === undefined || current === 'active' ? 'pause' : 'resume'\n const answer = await this.transport.act({ action, sessionId: String(sessionId) }, this.lifetime)\n if (!answer.ok) {\n this.publish(sessionId, { phase: 'unavailable', runningTools: [] })\n return\n }\n await this.refresh(sessionId)\n }\n\n /**\n * Flip this session's goal opt-out. The verb belongs to the session it\n * changes; the switch shows the host's next answer, never a local flip.\n * @param sessionId - session whose switch was pressed.\n * @returns after the control re-reads the host.\n */\n async toggleGoal(sessionId: SessionId): Promise<void> {\n const answer = await this.transport.act({ action: 'goal', sessionId: String(sessionId) }, this.lifetime)\n if (!answer.ok) {\n this.publish(sessionId, { phase: 'unavailable', runningTools: [] })\n return\n }\n await this.refresh(sessionId)\n }\n\n /** Ask the native stream what this session's park state is. */\n private async read(sessionId: SessionId): Promise<PauseReading> {\n const snapshot = await this.transport.source.read(this.lifetime)\n if (snapshot === undefined) return { phase: 'unavailable', runningTools: [] }\n const status = snapshot.sessions[String(sessionId)]\n if (status === undefined) return { phase: 'active', runningTools: [] }\n return {\n phase: status.phase,\n runningTools: status.runningTools,\n ...status.rearmGoal === undefined ? {} : { rearmGoal: status.rearmGoal },\n }\n }\n\n private publish(sessionId: SessionId, reading: PauseReading): void {\n this.store.update((state) => {\n const previous = state.bySession[String(sessionId)]\n if (previous !== undefined\n && previous.phase === reading.phase\n && previous.rearmGoal === reading.rearmGoal\n && previous.runningTools.length === reading.runningTools.length\n && previous.runningTools.every((tool, index) => tool === reading.runningTools[index])) return\n state.bySession = { ...state.bySession, [String(sessionId)]: reading }\n })\n }\n}\n","/**\n * The controls' phase → view mapping.\n *\n * Kept pure functions of the published reading so the rendering decision — what\n * the button says, whether it accepts a press, and which state label is visible\n * — is asserted without a browser renderer. Labels are KEYS, not copy: the\n * visible sentence is localized, and the host's own names join it as data.\n * @module dsh-pause-session/client/view\n */\n\nimport type { GlobalReading, TriageReading } from './global.js'\nimport type { PauseReading } from './control.js'\nimport type { PauseKey } from './locales.js'\nimport type { TriageRow } from '../shared.js'\nimport type { TriageAction } from '../shared.js'\n\n/** What one reading renders as. */\nexport interface PauseView {\n /** Whether the host reported this session paused. */\n readonly paused: boolean\n /** Whether the control accepts a press; an unknown or failed reading does not. */\n readonly enabled: boolean\n /** Accessible name of the button. */\n readonly ariaKey: PauseKey\n /** Label shown beside the button while the control has something to say. */\n readonly labelKey?: PauseKey\n /** Tools in flight, taken verbatim from the host; rendered only with `labelKey`. */\n readonly runningTools: readonly string[]\n /**\n * The host-reported goal opt-out, or `undefined` when the host did not answer\n * it. Absent means the goal switch is not rendered at all: a switch has to\n * state a fact, and the only fact available is the one the record holds.\n */\n readonly rearmGoal?: boolean\n}\n\n/**\n * Whether the pause control renders on one session at all.\n *\n * The control is the user's button for a session's work, and that work includes\n * the subagents under it — which is why the press covers the tree and why the\n * button does not belong inside the tree. The client can tell: a Session\n * snapshot carries a `subagent` field, the same signal the read-only composer\n * reads. A subagent's service is not the user's to pause: its parent's control\n * already speaks for it, and a second button here would offer to stop \"a\n * session\" from inside a child.\n * @param subagent - the session snapshot's own subagent fact, absent when unknown.\n * @returns whether this session's header renders the control.\n */\nexport function showsPauseControl(subagent: { readonly address: unknown } | null | undefined): boolean {\n return subagent === null || subagent === undefined\n}\n\n/**\n * One reading's goal opt-out, as the view carries it. Only an answered flag\n * becomes a field: a missing one must stay missing through the mapping, or the\n * renderer would show the product default as if the host had said it.\n * @param reading - the host's answer.\n * @returns the field to spread into the view, empty when the host said nothing.\n */\nfunction goalOf(reading: PauseReading): { rearmGoal?: boolean } {\n return reading.rearmGoal === undefined ? {} : { rearmGoal: reading.rearmGoal }\n}\n\n/**\n * Map one reading to its view.\n * @param reading - the host-reported reading, or `undefined` before the first answer.\n * @returns the view for that reading.\n */\nexport function pauseView(reading: PauseReading | undefined, running = true): PauseView {\n switch (reading?.phase) {\n case 'active':\n // Not parked, so no record exists for a resume to obey: there is nothing\n // to switch, and an idle session has no work to park.\n return { paused: false, enabled: running, ariaKey: 'pause.aria', runningTools: [] }\n case 'draining':\n // Still working: pressing again is exactly how the user takes the pause\n // back, so the control stays live.\n return {\n paused: true,\n enabled: true,\n ariaKey: 'draining.aria',\n labelKey: 'state.draining',\n runningTools: reading.runningTools,\n }\n case 'parking':\n return {\n paused: true,\n enabled: true,\n ariaKey: 'parking.aria',\n labelKey: 'state.parking',\n runningTools: [],\n }\n case 'safe':\n return {\n paused: true,\n enabled: true,\n ariaKey: 'safe.aria',\n labelKey: 'state.safe',\n runningTools: [],\n ...goalOf(reading),\n }\n case 'flush-failed':\n return {\n paused: true,\n enabled: true,\n ariaKey: 'flushFailed.aria',\n labelKey: 'state.flushFailed',\n runningTools: [],\n }\n case 'unavailable':\n return { paused: false, enabled: false, ariaKey: 'unavailable.aria', runningTools: [] }\n case undefined:\n return { paused: false, enabled: false, ariaKey: 'checking.aria', runningTools: [] }\n }\n}\n\n/** One named fact from the whole-app report, with the copy key that introduces it. */\nexport interface GlobalCaveat {\n /** What this list of names is. */\n readonly key: PauseKey\n /** Host names, rendered verbatim. */\n readonly names: readonly string[]\n}\n\n/** Which verb a whole-app press runs. */\nexport type GlobalAction = 'pause-all' | 'resume-all' | 'cancel-all' | 'none'\n\n/** One decision as the list renders it. */\nexport interface TriageActionView {\n /** The decision this button takes. */\n readonly action: TriageAction\n /** Visible label. */\n readonly labelKey: PauseKey\n /** What it does, for the accessible name. */\n readonly ariaKey: PauseKey\n}\n\n/** The four decisions, in the order a user reads them: least to most cautious. */\nexport const TRIAGE_ACTION_VIEWS: readonly TriageActionView[] = [\n { action: 'continue', labelKey: 'triage.continue', ariaKey: 'triage.continue.aria' },\n { action: 'note', labelKey: 'triage.note', ariaKey: 'triage.note.aria' },\n { action: 'review', labelKey: 'triage.review', ariaKey: 'triage.review.aria' },\n { action: 'leave', labelKey: 'triage.leave', ariaKey: 'triage.leave.aria' },\n]\n\n/**\n * The decisions one row may offer. Continue and note both deliver the owed\n * request, so they are absent when the log is unreadable or the host says it\n * cannot wake the entry; the remaining decisions still give the user a way out.\n * @param row - the rendered row.\n * @returns the actions that can be taken on it.\n */\nexport function triageActionsFor(row: TriageRowView): readonly TriageActionView[] {\n return TRIAGE_ACTION_VIEWS.filter(action =>\n action.action !== 'continue' && action.action !== 'note' ? true : row.readable && row.wakeable)\n}\n\n/**\n * The fifth listed verb, rendered apart from the four decisions: it is a\n * switch on what the NEXT resume may spend, not a way to decide this row.\n */\nexport const TRIAGE_GOAL_VIEW: TriageActionView = {\n action: 'goal',\n labelKey: 'triage.goal',\n ariaKey: 'triage.goal.aria',\n}\n\n/** One listed session, as the panel renders it. */\nexport interface TriageRowView {\n /** Host data, rendered verbatim. */\n readonly sessionId: string\n /** The durable outcome, as a word. */\n readonly phaseKey: PauseKey\n /** Stop position: the event the log ends on and the step it belongs to. */\n readonly stopped?: string\n /** The tools whose outcomes were never recorded. */\n readonly unknownTools: readonly string[]\n /** Whether the host said it can hand this session the request it owes. */\n readonly wakeable: boolean\n /** Whether the log could be read at all. */\n readonly readable: boolean\n /** Whether resuming this session may re-open its goal and spend its rounds. */\n readonly rearmGoal: boolean\n}\n\n/** What the decision-list panel renders. */\nexport interface TriageView {\n /** Whether the host answered the list read at all. */\n readonly visible: boolean\n /** Whether the last list read failed rather than returning rows. */\n readonly unavailable: boolean\n /** The rows the host reported. */\n readonly rows: readonly TriageRowView[]\n}\n\n/** The word each non-clean phase is shown as. */\nconst PHASE_KEY: Readonly<Record<TriageRow['phase'], PauseKey>> = {\n draining: 'triage.phase.draining',\n parking: 'triage.phase.parking',\n 'flush-failed': 'triage.phase.flushFailed',\n}\n\n/**\n * Map one decision-list reading to its view.\n * @param reading - the host-reported list, or `undefined` before the panel asked.\n * @returns the rows as the panel renders them.\n */\nexport function triageView(reading: TriageReading | undefined): TriageView {\n if (reading === undefined) return { visible: false, unavailable: false, rows: [] }\n if (reading.kind === 'unavailable') return { visible: true, unavailable: true, rows: [] }\n return {\n visible: true,\n unavailable: false,\n rows: reading.rows.map(row => ({\n sessionId: row.sessionId,\n phaseKey: PHASE_KEY[row.phase],\n ...row.lastEvent === undefined\n ? {}\n : {\n stopped: row.turn === undefined\n ? row.lastEvent\n : `${row.lastEvent} · turn ${String(row.turn)}${row.step === undefined ? '' : ` step ${String(row.step)}`}`,\n },\n unknownTools: row.traces.map(trace => trace.tool),\n wakeable: row.wakeable,\n readable: row.reading === 'read',\n rearmGoal: row.rearmGoal,\n })),\n }\n}\n\n/** What the whole-app reading renders as. */\nexport interface GlobalPauseView {\n /** Whether the control renders at all; a control with no host answer claims nothing. */\n readonly visible: boolean\n /** Whether the control accepts a press. */\n readonly enabled: boolean\n /** Accessible name of the button. */\n readonly ariaKey: PauseKey\n /**\n * Headline shown beside the button. Absent while there is nothing to report:\n * an untouched park renders the bare affordance, not a sentence about itself.\n */\n readonly labelKey?: PauseKey\n /** Verb the press runs. */\n readonly action: GlobalAction\n /** Host numbers, rendered verbatim beside the label. */\n readonly detail: string\n /** How many decisions are waiting; shown on the panel's own entry point. */\n readonly unclean: number\n /** Named facts the user must not miss; rendered on the tooltip. */\n readonly caveats: readonly GlobalCaveat[]\n /** Draining sessions and what each is running, when the host still has work. */\n readonly running?: string\n}\n\n/**\n * Map one whole-app reading to its view.\n * @param reading - the host-reported reading, or `undefined` before the first answer.\n * @returns the view for that reading.\n */\nexport function globalPauseView(\n reading: GlobalReading | undefined,\n sessions?: Readonly<Record<string, { readonly runningTools: readonly string[] }>>,\n): GlobalPauseView {\n if (reading === undefined) {\n return { visible: false, enabled: false, ariaKey: 'all.checking.aria', action: 'none', detail: '', caveats: [], unclean: 0 }\n }\n // A host that cannot answer gets no control: this plugin never renders a\n // button whose state it would have to invent.\n if (reading.kind === 'unavailable') {\n return { visible: false, enabled: false, ariaKey: 'unavailable.aria', action: 'none', detail: '', caveats: [], unclean: 0 }\n }\n const { status } = reading\n const caveats: GlobalCaveat[] = []\n // A missing surface subsumes its per-session names: the absence itself is the\n // fact, and listing every session it blinds would say less.\n if (status.blind.includes('jobs')) caveats.push({ key: 'all.caveat.blindJobs', names: [] })\n else if (status.jobs.length > 0) caveats.push({ key: 'all.caveat.jobs', names: status.jobs })\n if (status.blind.includes('trees')) caveats.push({ key: 'all.caveat.blindTrees', names: [] })\n else if (status.unreadTrees.length > 0) caveats.push({ key: 'all.caveat.unread', names: status.unreadTrees })\n if (status.unresumable.length > 0) caveats.push({ key: 'all.caveat.unresumable', names: status.unresumable })\n const verdict = status.verdict\n // The stalled names are the sessions this process will not wake, so they\n // belong on the tooltip whenever there are any — as the whole story when\n // nothing is still moving, and beside the moving ones when there are.\n if (verdict !== 'safe' && status.stalled.length > 0) {\n caveats.push({ key: 'all.caveat.stalled', names: status.stalled })\n }\n // The whole-app verdict calls these \"not safe\"; the list is where the user\n // decides them, so the panel's entry point counts the same set.\n const unclean = status.stalled.length\n const base = { visible: true, enabled: true, caveats, unclean } as const\n switch (verdict) {\n case 'idle':\n // Nothing parked: the pill is the affordance itself, so it carries no\n // sentence about a park that does not exist.\n return { ...base, ariaKey: 'all.pause.aria', action: 'pause-all', detail: '' }\n case 'safe':\n return {\n ...base,\n ariaKey: 'all.resume.aria',\n action: 'resume-all',\n labelKey: 'all.safe',\n detail: `${String(status.safe)}/${String(status.registered)}`,\n }\n case 'waiting':\n // Only a session still on its way can be released from here. When every\n // registered session is one this process will not wake — an adopted\n // pause, a failed flush, a record it cannot read — the release would be\n // an action the host refuses, so the pill states the fact and hands the\n // user to the list instead of offering it. A session holding the park\n // point with its flush pending is still releasable, so it keeps the verb.\n return status.draining.length > 0 || status.parking > 0\n ? {\n ...base,\n ariaKey: 'all.cancel.aria',\n action: 'cancel-all',\n labelKey: 'all.finishing',\n detail: `${String(status.safe)}/${String(status.registered)}`,\n running: status.draining.map((id) => {\n const tools = sessions?.[id]?.runningTools ?? []\n return tools.length === 0 ? id : `${id}: ${tools.join(', ')}`\n }).join(', ') || undefined,\n }\n : {\n ...base,\n enabled: false,\n ariaKey: 'all.unclean.aria',\n action: 'none',\n labelKey: 'all.unclean',\n detail: String(status.stalled.length),\n }\n }\n}\n","/**\n * Browser-side reading and driving of the host's whole-app park state.\n *\n * The aggregate arrives from the native `pauseSession` stream. The stream is\n * process-wide and writes nothing into any Session; actions travel through the\n * same Remote namespace. A pushed snapshot is applied directly; a settled park\n * costs nothing while its last answer stays on screen.\n * @module dsh-pause-session/client/global\n */\n\nimport { createSnapshotStore } from '@deepseek-ai/dsh-client-store'\nimport type { SnapshotStore } from '@deepseek-ai/dsh-client-store'\nimport type { SessionId } from '@deepseek-ai/dsh-session/types'\nimport type { GlobalStatus, TriageAction, TriageRow } from '../shared.js'\nimport type { TriageRowWire } from '../remote.js'\nimport { globalPauseView } from './view.js'\nimport type { PauseTransport } from './remote.js'\n\n\n/** Map one Remote row to the list's structured row. */\nfunction wireTriageRow(row: TriageRowWire): TriageRow {\n return {\n sessionId: row.sessionId,\n phase: row.phase,\n updatedAt: row.updatedAt,\n reading: row.reading,\n ...row.lastEvent === undefined ? {} : { lastEvent: row.lastEvent },\n ...row.turn === undefined ? {} : { turn: row.turn },\n ...row.step === undefined ? {} : { step: row.step },\n traces: row.traces.map(trace => ({ tool: trace.tool, callId: trace.callId ?? '' })),\n owed: row.owed,\n wakeable: row.wakeable,\n rearmGoal: row.rearmGoal,\n }\n}\n/** What the whole-app control knows: the host's answer, or that it could not ask. */\nexport type GlobalReading =\n | { readonly kind: 'reported'; readonly status: GlobalStatus }\n | { readonly kind: 'unavailable' }\n\n/** What the decision-list panel knows: the host's rows, or that it could not ask. */\nexport type TriageReading =\n | { readonly kind: 'reported'; readonly rows: readonly TriageRow[] }\n | { readonly kind: 'unavailable' }\n\n/** Whole-app control state. */\nexport interface GlobalPauseState {\n /** The host's answer; absent until one arrives. Writable: the store updates through a draft. */\n global: GlobalReading | undefined\n /** Whether the user asked for the decision list; the panel reads only when it is open. */\n panelOpen: boolean\n /** The host's decision list; absent until the panel asks for it. */\n triage: TriageReading | undefined\n /** The last action or read refusal, shown verbatim in the panel. */\n error?: string\n /** The last snapshot's per-session details, for the draining progress copy. */\n sessions?: Readonly<Record<string, { readonly runningTools: readonly string[] }>>\n}\n\nconst INITIAL: GlobalPauseState = { global: undefined, panelOpen: false, triage: undefined }\n\n\n/**\n * The session a whole-app action is addressed to.\n *\n * A subagent's own session is never addressed: its agent belongs to a parent\n * and is not the host's business to drive from the shell. Among the rest, the\n * one on screen is the best address (its agent is live by construction), then\n * any session the host reports as running, then any at all.\n * @param state - the session list snapshot the shell provides.\n * @returns the address, or `undefined` when the app has no session to ask through.\n */\nexport function addressingSession(state: {\n readonly ids: readonly SessionId[]\n readonly byId: Readonly<Record<string, {\n readonly running?: boolean\n readonly origin?: string\n readonly parentId?: unknown\n readonly retainedBy?: { readonly mainView?: number }\n } | undefined>>\n}): SessionId | undefined {\n const usable = state.ids.filter((id) => {\n const row = state.byId[String(id)]\n return row !== undefined && row.origin !== 'subagent' && row.parentId === undefined\n })\n return usable.find(id => (state.byId[String(id)]?.retainedBy?.mainView ?? 0) > 0)\n ?? usable.find(id => state.byId[String(id)]?.running === true)\n ?? usable[0]\n}\n\n/** Owns the published whole-app reading; nothing else writes that state. */\nexport class PauseGlobalControl {\n /** State source the whole-app contribution binds its selector hook to. */\n readonly store: SnapshotStore<GlobalPauseState> = createSnapshotStore(INITIAL)\n\n /** The session the shell asked this control through; list reads use it. */\n private address: SessionId | undefined\n /** Highest decision-list read requested: an answer older than it is dropped. */\n private latestTriage = 0\n\n /**\n * @param transport - the native namespace source and actions.\n * @param lifetime - aborts in-flight reads when the plugin unloads.\n */\n constructor(\n private readonly transport: PauseTransport,\n private readonly lifetime: AbortSignal,\n ) {}\n\n /**\n * The shell handed this control a session. The first call reads the aggregate;\n * later calls only move where list reads and actions are addressed.\n * @param sessionId - the session the shell asks through.\n */\n async refresh(sessionId: SessionId): Promise<void> {\n this.address = sessionId\n await this.readAggregate()\n }\n\n /** Apply one pushed snapshot directly. */\n apply(snapshot: { readonly global: GlobalStatus; readonly sessions: Readonly<Record<string, { readonly runningTools: readonly string[] }>> } | undefined): void {\n this.store.update((state) => { state.sessions = snapshot?.sessions })\n this.publish(snapshot === undefined ? { kind: 'unavailable' } : { kind: 'reported', status: snapshot.global })\n }\n\n /** A pushed snapshot may have moved the aggregate and the open list. */\n refreshAll(): void {\n if (this.lifetime.aborted) return\n void this.readAggregate()\n if (this.store.getSnapshot().panelOpen) void this.refreshTriage()\n }\n\n /**\n * Open or close the decision list. Opening asks for the rows; there is no\n * state to show without that answer.\n * @param open - whether the panel should be showing.\n */\n setPanel(open: boolean): void {\n this.store.update((state) => { state.panelOpen = open })\n if (open) void this.refreshTriage()\n }\n\n /** Ask the host for the decision list for the session the user is on. */\n async refreshTriage(): Promise<void> {\n await this.readTriage()\n }\n\n /**\n * Take one listed verb on one listed session, addressed through the session\n * the user is on. A refusal is published verbatim rather than silently\n * leaving the previous rows in place.\n * @param sessionId - the listed session to act on.\n * @param action - which listed verb was taken.\n */\n async decide(sessionId: string, action: TriageAction): Promise<void> {\n const address = this.address\n if (address === undefined) return\n const answer = await this.transport.decide(String(address), sessionId, action, this.lifetime)\n if (!answer.ok) {\n this.store.update((state) => { state.error = answer.message })\n return\n }\n this.store.update((state) => { state.error = undefined })\n await this.refreshTriage()\n await this.reread(address)\n }\n\n /**\n * Press the pill: park everything, or release everything the park owns.\n * Which one it is comes from the host's own last answer, never from a local\n * flip; the state shown afterwards is the host's answer again.\n * @param sessionId - the session to address the verb to.\n */\n async toggle(sessionId: SessionId): Promise<void> {\n const current = this.store.getSnapshot().global\n if (current === undefined || current.kind !== 'reported') return\n const action = globalPauseView(current).action\n if (action === 'none') return\n const answer = await this.transport.act({ action, sessionId: String(sessionId) }, this.lifetime)\n if (!answer.ok) {\n this.store.update((state) => { state.error = answer.message })\n return\n }\n this.store.update((state) => { state.error = undefined })\n await this.reread(sessionId)\n }\n\n /** Read the aggregate once and publish it. */\n private async readAggregate(): Promise<void> {\n const snapshot = await this.transport.source.read(this.lifetime)\n if (snapshot === undefined) {\n this.publish({ kind: 'unavailable' })\n return\n }\n this.store.update((state) => { state.sessions = snapshot.sessions })\n this.publish({ kind: 'reported', status: snapshot.global })\n }\n\n private async reread(sessionId: SessionId): Promise<void> {\n this.address = sessionId\n await this.readAggregate()\n }\n\n /** One decision-list read, addressed at the session the user is on. */\n private async readTriage(): Promise<void> {\n const address = this.address\n if (address === undefined) return\n const sequence = ++this.latestTriage\n const reading = await this.readTriageRows(address)\n if (this.latestTriage !== sequence) return\n this.store.update((state) => { state.triage = reading })\n }\n\n /** Ask the native namespace for the decision list. */\n private async readTriageRows(sessionId: SessionId): Promise<TriageReading> {\n const rows = await this.transport.triage(String(sessionId), this.lifetime)\n return rows === undefined ? { kind: 'unavailable' } : { kind: 'reported', rows: rows.map(wireTriageRow) }\n }\n\n private publish(reading: GlobalReading): void {\n this.store.update((state) => {\n if (state.global?.kind === reading.kind\n && (reading.kind === 'unavailable'\n || (state.global?.kind === 'reported'\n && JSON.stringify(state.global.status) === JSON.stringify(reading.status)))) return\n state.global = reading\n })\n }\n}\n","/**\n * Client-side bridge from the generated `pauseSession` Remote namespace to the\n * control state machines.\n *\n * The native namespace is the only transport: the stream supplies snapshots and\n * the action methods drive every button. No slash command is involved.\n * @module dsh-pause-session/client/remote\n */\n\nimport type {\n PauseActionResultWire, PauseDecisionRequest, PauseSnapshotWire, TriageRowWire,\n} from '../remote.js'\nimport type { GlobalBlindSpot, GlobalStatus, ParkStatus, TriageRow } from '../shared.js'\n\n/** The generated namespace shape this bridge needs. */\nexport interface RemotePauseNamespace {\n observe(signal?: AbortSignal): AsyncIterable<PauseSnapshotWire>\n act(request: {\n readonly action: 'pause' | 'resume' | 'pause-all' | 'resume-all' | 'cancel-all' | 'goal'\n readonly sessionId: string\n }, signal?: AbortSignal): Promise<{ readonly ok: boolean; readonly value?: PauseActionResultWire; readonly error?: { readonly code: string } }>\n triage(request: { readonly caller: string }, signal?: AbortSignal): Promise<{\n readonly ok: boolean\n readonly value?: readonly TriageRowWire[]\n }>\n decide(request: PauseDecisionRequest, signal?: AbortSignal): Promise<{\n readonly ok: boolean\n readonly value?: PauseActionResultWire\n }>\n}\n\n/** Convert one wire snapshot to the host-status vocabulary the controls already use. */\nfunction snapshotOf(wire: PauseSnapshotWire): PauseSnapshotLike {\n return {\n global: {\n ...wire.global,\n parkedAt: wire.global.parkedAt as never,\n draining: wire.global.draining as never,\n stalled: wire.global.stalled as never,\n unresumable: wire.global.unresumable as never,\n unreadTrees: wire.global.unreadTrees as never,\n jobs: wire.global.jobs as never,\n blind: wire.global.blind as GlobalBlindSpot[],\n },\n sessions: Object.fromEntries(Object.entries(wire.sessions).map(([id, status]) => [id, status as ParkStatus])),\n }\n}\n\n/** The status shape shared by the controls, with branded ids erased at this boundary. */\nexport interface PauseSnapshotLike {\n readonly global: GlobalStatus\n readonly sessions: Readonly<Record<string, ParkStatus>>\n}\n\n/** A remote-backed status source with a change subscription. */\nexport interface RemoteStatusSource {\n /** Read the latest host snapshot; undefined before the first answer or after failure. */\n read(signal?: AbortSignal): Promise<PauseSnapshotLike | undefined>\n onChange(listener: () => void): () => void\n /** Receive each pushed snapshot directly; `undefined` means the stream failed. */\n onSnapshot(listener: (snapshot: PauseSnapshotLike | undefined) => void): () => void\n}\n\n/**\n * Open the native status stream and expose its latest snapshot to both controls.\n * @param remote - the generated Remote namespace.\n * @param lifetime - client lifetime; aborting it releases the stream.\n * @returns the cached source and its change subscription.\n */\nexport function openRemoteSource(remote: RemotePauseNamespace, lifetime: AbortSignal): RemoteStatusSource {\n let latest: PauseSnapshotLike | undefined\n let failed = false\n let first: (() => void) | undefined\n const listeners = new Set<() => void>()\n const snapshotListeners = new Set<(snapshot: PauseSnapshotLike | undefined) => void>()\n const notify = (): void => {\n for (const listener of [...listeners]) listener()\n for (const listener of [...snapshotListeners]) listener(failed ? undefined : latest)\n }\n const ready = new Promise<void>((resolve) => { first = resolve })\n\n void (async () => {\n try {\n for await (const snapshot of remote.observe(lifetime)) {\n latest = snapshotOf(snapshot)\n first?.()\n first = undefined\n notify()\n }\n } catch {\n failed = true\n latest = undefined\n notify()\n } finally {\n // A stream that ended without a cancellation is not a live transport; the\n // controls must report unavailable rather than keep serving the last value.\n if (!lifetime.aborted) {\n failed = true\n latest = undefined\n }\n first?.()\n first = undefined\n notify()\n }\n })()\n\n return {\n onChange: (listener) => {\n listeners.add(listener)\n return () => { listeners.delete(listener) }\n },\n onSnapshot: (listener) => {\n snapshotListeners.add(listener)\n return () => { snapshotListeners.delete(listener) }\n },\n read: async (signal) => {\n if (latest === undefined && !failed) {\n await new Promise<void>((resolve) => {\n const done = (): void => { signal?.removeEventListener('abort', done); resolve() }\n first = () => { first = undefined; done() }\n signal?.addEventListener('abort', done, { once: true })\n if (latest !== undefined || failed) done()\n })\n }\n signal?.throwIfAborted()\n return failed ? undefined : latest\n },\n }\n}\n\n/** Direct browser transport over the generated namespace. */\nexport interface PauseTransport {\n readonly source: RemoteStatusSource\n act(request: {\n readonly action: 'pause' | 'resume' | 'pause-all' | 'resume-all' | 'cancel-all' | 'goal'\n readonly sessionId: string\n }, signal?: AbortSignal): Promise<PauseActionResultWire>\n triage(caller: string, signal?: AbortSignal): Promise<readonly TriageRowWire[] | undefined>\n decide(\n caller: string,\n target: string,\n decision: 'continue' | 'note' | 'review' | 'leave' | 'goal',\n signal?: AbortSignal,\n ): Promise<PauseActionResultWire>\n}\n\n/**\n * Build the direct transport over one mounted Remote namespace.\n * @param remote - the generated `pauseSession` namespace.\n * @param lifetime - client lifetime.\n * @returns the source and action methods the controls use.\n */\nexport function remoteTransport(remote: RemotePauseNamespace, lifetime: AbortSignal): PauseTransport {\n const source = openRemoteSource(remote, lifetime)\n const failed = (): PauseActionResultWire => ({ ok: false, message: 'pause action failed' })\n return {\n source,\n act: async (request, signal) => {\n const answer = await remote.act(request, signal)\n return answer.ok ? (answer.value ?? failed()) : failed()\n },\n triage: async (caller, signal) => {\n const answer = await remote.triage({ caller }, signal)\n return answer.ok ? answer.value : undefined\n },\n decide: async (caller, target, decision, signal) => {\n const answer = await remote.decide({ caller, target, decision }, signal)\n return answer.ok ? (answer.value ?? failed()) : failed()\n },\n }\n}\n","/**\n * The tiny builder surface generated Remote client codecs use in the browser.\n *\n * The Gateway validates every browser-to-host argument before dispatch, and\n * host-result values are produced by this plugin itself. The client therefore\n * needs the codec builder shape, not a second validating copy of Zod; this\n * shim keeps the generated contribution small and bundle-time only.\n * @module dsh-pause-session/client/zod-lite\n */\n\n/** One chainable codec node; parsing is identity on the trusted client side. */\ninterface CodecNode {\n parse(value: unknown): unknown\n safeParse(value: unknown): { readonly success: true; readonly data: unknown }\n readonly(): CodecNode\n optional(): CodecNode\n describe(): CodecNode\n}\n\n/** Build one identity codec node. */\nfunction node(): CodecNode {\n return {\n parse: value => value,\n safeParse: value => ({ success: true, data: value }),\n readonly() { return this },\n optional() { return this },\n describe() { return this },\n }\n}\n\n/** The `z` namespace the generated client contribution expects. */\nexport const z = {\n string: node,\n number: node,\n boolean: node,\n undefined: node,\n literal: node,\n union: node,\n array: node,\n record: node,\n object: node,\n strictObject: node,\n enum: node,\n}\n","/** Lazy assembly of generated Remote definitions using caller-supplied Zod; no runtime imports. */\n\nimport type { z } from 'zod'\nimport type {\n InvocationDescriptor,\n TypertClientRemote,\n TypertRemoteCodecSpec,\n TypertRemoteInfo,\n TypertRemoteInputOptions,\n TypertRemoteMethod,\n TypertRemoteParameterSpec,\n TypertRemoteSpec,\n TypertRemoteValue,\n} from './types.ts'\n\ntype Method = TypertRemoteMethod<object, unknown> | TypertRemoteMethod<object, unknown, 'stream', unknown>\ntype Parameter = TypertRemoteParameterSpec & { readonly wire: string }\ntype Index = Pick<TypertRemoteInfo, 'descriptors' | 'methods'>\n\n/**\n * Retain one generated definition per endpoint without constructing parsers or projections.\n * The class instance builds its shared descriptor/method index on first access;\n * input schemas and JSON Schema projections are cached only when requested.\n * @param spec - compiler-produced method facts and Zod factories.\n * @param zod - the generated artifact's Zod runtime for named-input parsers.\n * @returns a lazy, mountable info instance with no registration or transport effects.\n */\nexport function createTypertRemoteInfo(spec: TypertRemoteSpec, zod: typeof z): TypertRemoteInfo {\n return new RemoteInfo(spec, zod)\n}\n\nclass RemoteInfo implements TypertRemoteInfo {\n private index?: Index\n\n constructor(private readonly spec: TypertRemoteSpec, private readonly zod: typeof z) {}\n\n get package(): string { return this.spec.package }\n get descriptors(): readonly InvocationDescriptor[] { return this.resolve().descriptors }\n get methods(): TypertRemoteInfo['methods'] { return this.resolve().methods }\n\n private resolve(): Index {\n if (this.index !== undefined) return this.index\n const zod = this.zod\n const descriptors: InvocationDescriptor[] = []\n const methods = Object.create(null) as Record<string, Method>\n for (const [endpoint, definition] of Object.entries(this.spec.methods)) {\n const separator = endpoint.indexOf('/')\n const namespace = endpoint.slice(0, separator)\n const method = endpoint.slice(separator + 1)\n const parameters = definition.parameters.map(parameter => ({ ...parameter, wire: parameter.wire ?? parameter.name }))\n const descriptor = {\n ...definition,\n id: `${this.spec.package}#${endpoint}`,\n namespace,\n method,\n parameters,\n result: definition.result.description === undefined ? definition.result : new ResultValue(definition.result),\n }\n if (definition.invocation.kind === 'direct') {\n const inputs: [NamedInput?, NamedInput?] = []\n const direct = Object.assign(descriptor, {\n input(options?: TypertRemoteInputOptions) {\n const strict = options?.strict === true\n return inputs[strict ? 1 : 0] ??= new NamedInput(parameters, strict, zod)\n },\n invoke(remote: TypertClientRemote, input: object, signal?: AbortSignal) {\n const named = input as Readonly<Record<string, unknown>>\n const values = parameters.map(parameter => named[parameter.wire])\n if (definition.cancellation !== undefined) values.push(signal)\n // Namespace access retains the Gateway's mount checks and scoped receiver policy.\n const receiver = Reflect.get(remote, namespace) as object\n const call = Reflect.get(receiver, method) as (...args: unknown[]) => ReturnType<Method['invoke']>\n return call.apply(receiver, values)\n },\n })\n // The generated namespace return type is selected by this same descriptor's mode.\n methods[endpoint] = direct as Method\n }\n descriptors.push(descriptor)\n }\n return this.index = { descriptors, methods }\n }\n}\n\n/**\n * Narrow a Registry descriptor to its generated direct-method capabilities.\n * @param descriptor - a live descriptor, including possible source fallback or Context-only receivers.\n * @returns whether generated named input and direct invocation are available.\n */\nexport function isTypertRemoteMethod(descriptor: InvocationDescriptor): descriptor is Method {\n return descriptor.invocation.kind === 'direct' && descriptor.result.mode === 'strict'\n && 'input' in descriptor && typeof descriptor.input === 'function'\n && 'invoke' in descriptor && typeof descriptor.invoke === 'function'\n}\n\nfunction optional(parameter: Parameter): boolean {\n return parameter.source === 'json' && parameter.acceptsUndefined === true\n}\n\nclass NamedInput implements TypertRemoteValue<object> {\n private schema?: z.ZodType<object>\n private projection?: Pick<TypertRemoteValue, 'jsonSchema' | 'jsonSchemaError'>\n\n constructor(\n private readonly parameters: readonly Parameter[],\n private readonly strict: boolean,\n private readonly zod: typeof z,\n ) {}\n\n private codec(parameter: Parameter): TypertRemoteCodecSpec {\n return this.strict ? parameter.strictCodec : parameter.codec\n }\n\n readonly create = (): z.ZodType<object> => this.schema ??= this.zod.strictObject(Object.fromEntries(this.parameters.map((parameter) => {\n const value = this.codec(parameter).create()\n return [parameter.wire, optional(parameter) ? value.optional() : value.nonoptional()]\n })))\n\n get jsonSchema(): TypertRemoteValue['jsonSchema'] { return this.project().jsonSchema }\n get jsonSchemaError(): string | undefined { return this.project().jsonSchemaError }\n\n private project(): NonNullable<NamedInput['projection']> {\n if (this.projection !== undefined) return this.projection\n const unavailable = this.parameters.find(parameter => this.codec(parameter).jsonSchema === undefined)\n if (unavailable !== undefined) {\n return this.projection = { jsonSchemaError: this.codec(unavailable).jsonSchemaError ?? `No JSON Schema for parameter ${unavailable.wire}` }\n }\n return this.projection = {\n jsonSchema: {\n type: 'object',\n properties: Object.fromEntries(this.parameters.map(parameter => [parameter.wire, {\n ...this.codec(parameter).jsonSchema,\n ...(parameter.description === undefined ? {} : { description: parameter.description }),\n }])),\n required: this.parameters.filter(parameter => !optional(parameter)).map(parameter => parameter.wire),\n additionalProperties: false,\n },\n }\n }\n}\n\nclass ResultValue implements TypertRemoteCodecSpec {\n private projection?: { readonly value: TypertRemoteValue['jsonSchema'] }\n\n constructor(private readonly spec: TypertRemoteCodecSpec) {}\n\n get mode(): 'strict' { return this.spec.mode }\n get typeSymbol(): string { return this.spec.typeSymbol }\n get create(): TypertRemoteCodecSpec['create'] { return this.spec.create }\n get decode(): TypertRemoteCodecSpec['decode'] { return this.spec.decode }\n get encode(): TypertRemoteCodecSpec['encode'] { return this.spec.encode }\n get description(): string | undefined { return this.spec.description }\n get jsonSchemaError(): string | undefined { return this.spec.jsonSchemaError }\n get jsonSchema(): TypertRemoteValue['jsonSchema'] {\n if (this.projection === undefined) {\n const schema = this.spec.jsonSchema\n this.projection = { value: schema === undefined ? undefined : { ...schema, description: this.spec.description } }\n }\n return this.projection.value\n }\n}\n","/* Generated by @deepseek-ai/dsh-typert-generator from the Host FaceModel — do not edit. */\nimport { z } from 'zod'\n\nimport { createTypertRemoteInfo } from '@deepseek-ai/dsh-typert-protocol/remote-info'\n\nlet dsh_pause_session_pauseSession_act_parameter_0$schema$value\nconst dsh_pause_session_pauseSession_act_parameter_0$schema = () => (dsh_pause_session_pauseSession_act_parameter_0$schema$value ??= z.object({\n 'action': z.union([z.literal(\"pause\"), z.literal(\"resume\"), z.literal(\"pause-all\"), z.literal(\"resume-all\"), z.literal(\"cancel-all\"), z.literal(\"goal\")]).readonly(),\n 'sessionId': z.string().readonly().describe('The Session the control is addressed through.'),\n}))\nlet dsh_pause_session_pauseSession_act_result$schema$value\nconst dsh_pause_session_pauseSession_act_result$schema = () => (dsh_pause_session_pauseSession_act_result$schema$value ??= z.object({\n 'ok': z.boolean().readonly(),\n 'message': z.string().readonly(),\n}))\nlet dsh_pause_session_pauseSession_decide_parameter_0$schema$value\nconst dsh_pause_session_pauseSession_decide_parameter_0$schema = () => (dsh_pause_session_pauseSession_decide_parameter_0$schema$value ??= z.object({\n 'caller': z.string().readonly(),\n 'target': z.string().readonly(),\n 'decision': z.union([z.literal(\"goal\"), z.literal(\"continue\"), z.literal(\"note\"), z.literal(\"review\"), z.literal(\"leave\")]).readonly(),\n}))\nlet dsh_pause_session_pauseSession_decide_result$schema$value\nconst dsh_pause_session_pauseSession_decide_result$schema = () => (dsh_pause_session_pauseSession_decide_result$schema$value ??= z.object({\n 'ok': z.boolean().readonly(),\n 'message': z.string().readonly(),\n}))\nlet dsh_pause_session_pauseSession_observe_result$schema$value\nconst dsh_pause_session_pauseSession_observe_result$schema = () => (dsh_pause_session_pauseSession_observe_result$schema$value ??= z.object({\n 'global': z.object({\n 'verdict': z.union([z.literal(\"idle\"), z.literal(\"waiting\"), z.literal(\"safe\")]).readonly(),\n 'registered': z.number().readonly(),\n 'safe': z.number().readonly(),\n 'parkedAt': z.union([z.undefined(), z.string()]).readonly().optional(),\n 'draining': z.array(z.string()).readonly(),\n 'parking': z.number().readonly(),\n 'stalled': z.array(z.string()).readonly(),\n 'unresumable': z.array(z.string()).readonly(),\n 'unreadTrees': z.array(z.string()).readonly(),\n 'jobs': z.array(z.string()).readonly(),\n 'blind': z.array(z.string()).readonly(),\n}).readonly(),\n 'sessions': z.record(z.string(), z.object({\n 'phase': z.union([z.literal(\"safe\"), z.literal(\"active\"), z.literal(\"draining\"), z.literal(\"parking\"), z.literal(\"flush-failed\")]).readonly(),\n 'runningTools': z.array(z.string()).readonly(),\n 'rearmGoal': z.union([z.undefined(), z.literal(false), z.literal(true)]).readonly().optional(),\n})).readonly().readonly(),\n}))\nlet dsh_pause_session_pauseSession_snapshot_result$schema$value\nconst dsh_pause_session_pauseSession_snapshot_result$schema = () => (dsh_pause_session_pauseSession_snapshot_result$schema$value ??= z.object({\n 'global': z.object({\n 'verdict': z.union([z.literal(\"idle\"), z.literal(\"waiting\"), z.literal(\"safe\")]).readonly(),\n 'registered': z.number().readonly(),\n 'safe': z.number().readonly(),\n 'parkedAt': z.union([z.undefined(), z.string()]).readonly().optional(),\n 'draining': z.array(z.string()).readonly(),\n 'parking': z.number().readonly(),\n 'stalled': z.array(z.string()).readonly(),\n 'unresumable': z.array(z.string()).readonly(),\n 'unreadTrees': z.array(z.string()).readonly(),\n 'jobs': z.array(z.string()).readonly(),\n 'blind': z.array(z.string()).readonly(),\n}).readonly(),\n 'sessions': z.record(z.string(), z.object({\n 'phase': z.union([z.literal(\"safe\"), z.literal(\"active\"), z.literal(\"draining\"), z.literal(\"parking\"), z.literal(\"flush-failed\")]).readonly(),\n 'runningTools': z.array(z.string()).readonly(),\n 'rearmGoal': z.union([z.undefined(), z.literal(false), z.literal(true)]).readonly().optional(),\n})).readonly().readonly(),\n}))\nlet dsh_pause_session_pauseSession_triage_parameter_0$schema$value\nconst dsh_pause_session_pauseSession_triage_parameter_0$schema = () => (dsh_pause_session_pauseSession_triage_parameter_0$schema$value ??= z.object({\n 'caller': z.string().readonly(),\n}))\nlet dsh_pause_session_pauseSession_triage_result$schema$value\nconst dsh_pause_session_pauseSession_triage_result$schema = () => (dsh_pause_session_pauseSession_triage_result$schema$value ??= z.array(z.object({\n 'sessionId': z.string().readonly(),\n 'phase': z.union([z.literal(\"draining\"), z.literal(\"parking\"), z.literal(\"flush-failed\")]).readonly(),\n 'updatedAt': z.number().readonly(),\n 'reading': z.union([z.literal(\"read\"), z.literal(\"unreadable\")]).readonly(),\n 'lastEvent': z.union([z.undefined(), z.string()]).readonly().optional(),\n 'turn': z.union([z.undefined(), z.number()]).readonly().optional(),\n 'step': z.union([z.undefined(), z.number()]).readonly().optional(),\n 'traces': z.array(z.object({\n 'tool': z.string().readonly(),\n 'callId': z.string().readonly(),\n})).readonly(),\n 'owed': z.boolean().readonly(),\n 'wakeable': z.boolean().readonly(),\n 'rearmGoal': z.boolean().readonly(),\n})))\nlet dsh_pause_session_pauseSession_act_parameter_0_strict$schema$value\nconst dsh_pause_session_pauseSession_act_parameter_0_strict$schema = () => (dsh_pause_session_pauseSession_act_parameter_0_strict$schema$value ??= z.strictObject({\n 'action': z.union([z.literal(\"pause\"), z.literal(\"resume\"), z.literal(\"pause-all\"), z.literal(\"resume-all\"), z.literal(\"cancel-all\"), z.literal(\"goal\")]).readonly(),\n 'sessionId': z.string().readonly().describe('The Session the control is addressed through.'),\n}))\nlet dsh_pause_session_pauseSession_decide_parameter_0_strict$schema$value\nconst dsh_pause_session_pauseSession_decide_parameter_0_strict$schema = () => (dsh_pause_session_pauseSession_decide_parameter_0_strict$schema$value ??= z.strictObject({\n 'caller': z.string().readonly(),\n 'target': z.string().readonly(),\n 'decision': z.union([z.literal(\"goal\"), z.literal(\"continue\"), z.literal(\"note\"), z.literal(\"review\"), z.literal(\"leave\")]).readonly(),\n}))\nlet dsh_pause_session_pauseSession_triage_parameter_0_strict$schema$value\nconst dsh_pause_session_pauseSession_triage_parameter_0_strict$schema = () => (dsh_pause_session_pauseSession_triage_parameter_0_strict$schema$value ??= z.strictObject({\n 'caller': z.string().readonly(),\n}))\n\nexport const TYPERT_REMOTE = createTypertRemoteInfo({\n package: 'dsh-pause-session',\n methods: {\n 'pauseSession/act': {\n service: 'pauseSession',\n description: 'Pause, resume, press every tree, resume every clean park, or flip one Session\\'s goal re-arm.',\n invocation: { kind: 'direct' },\n parameters: [\n {\n name: 'request',\n description: 'the button action.',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: 'dsh-pause-session/types#PauseActionRequest',\n create: dsh_pause_session_pauseSession_act_parameter_0$schema,\n jsonSchema: {\"type\":\"object\",\"properties\":{\"action\":{\"type\":\"string\",\"enum\":[\"pause\",\"resume\",\"pause-all\",\"resume-all\",\"cancel-all\",\"goal\"]},\"sessionId\":{\"type\":\"string\",\"description\":\"The Session the control is addressed through.\"}},\"required\":[\"action\",\"sessionId\"],\"additionalProperties\":true},\n },\n strictCodec: {\n mode: 'strict',\n typeSymbol: 'dsh-pause-session/types#PauseActionRequest',\n create: dsh_pause_session_pauseSession_act_parameter_0_strict$schema,\n jsonSchema: {\"type\":\"object\",\"properties\":{\"action\":{\"type\":\"string\",\"enum\":[\"pause\",\"resume\",\"pause-all\",\"resume-all\",\"cancel-all\",\"goal\"]},\"sessionId\":{\"type\":\"string\",\"description\":\"The Session the control is addressed through.\"}},\"required\":[\"action\",\"sessionId\"],\"additionalProperties\":false},\n },\n },\n ],\n cancellation: { parameter: 'signal' },\n result: {\n mode: 'strict',\n typeSymbol: 'dsh-pause-session/types#PauseActionResultWire',\n create: dsh_pause_session_pauseSession_act_result$schema,\n description: 'the user-facing outcome.',\n jsonSchema: {\"type\":\"object\",\"properties\":{\"ok\":{\"type\":\"boolean\"},\"message\":{\"type\":\"string\"}},\"required\":[\"ok\",\"message\"],\"additionalProperties\":true},\n },\n sourceLocation: {\"file\":\"packages/dsh-pause-session/src/remote.ts\",\"line\":239,\"column\":9},\n },\n 'pauseSession/decide': {\n service: 'pauseSession',\n description: 'Take one decision on one listed Session.',\n invocation: { kind: 'direct' },\n parameters: [\n {\n name: 'request',\n description: 'the caller, target, and decision.',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: 'dsh-pause-session/types#PauseDecisionRequest',\n create: dsh_pause_session_pauseSession_decide_parameter_0$schema,\n jsonSchema: {\"type\":\"object\",\"properties\":{\"caller\":{\"type\":\"string\"},\"target\":{\"type\":\"string\"},\"decision\":{\"type\":\"string\",\"enum\":[\"goal\",\"continue\",\"note\",\"review\",\"leave\"]}},\"required\":[\"caller\",\"target\",\"decision\"],\"additionalProperties\":true},\n },\n strictCodec: {\n mode: 'strict',\n typeSymbol: 'dsh-pause-session/types#PauseDecisionRequest',\n create: dsh_pause_session_pauseSession_decide_parameter_0_strict$schema,\n jsonSchema: {\"type\":\"object\",\"properties\":{\"caller\":{\"type\":\"string\"},\"target\":{\"type\":\"string\"},\"decision\":{\"type\":\"string\",\"enum\":[\"goal\",\"continue\",\"note\",\"review\",\"leave\"]}},\"required\":[\"caller\",\"target\",\"decision\"],\"additionalProperties\":false},\n },\n },\n ],\n cancellation: { parameter: 'signal' },\n result: {\n mode: 'strict',\n typeSymbol: 'dsh-pause-session/types#PauseActionResultWire',\n create: dsh_pause_session_pauseSession_decide_result$schema,\n description: 'the user-facing outcome.',\n jsonSchema: {\"type\":\"object\",\"properties\":{\"ok\":{\"type\":\"boolean\"},\"message\":{\"type\":\"string\"}},\"required\":[\"ok\",\"message\"],\"additionalProperties\":true},\n },\n sourceLocation: {\"file\":\"packages/dsh-pause-session/src/remote.ts\",\"line\":264,\"column\":9},\n },\n 'pauseSession/observe': {\n service: 'pauseSession',\n description: 'Live status: the opening snapshot, then one new snapshot whenever the host reports a change.',\n mode: 'stream',\n invocation: { kind: 'direct' },\n parameters: [\n ],\n cancellation: { parameter: 'signal' },\n result: {\n mode: 'strict',\n typeSymbol: 'dsh-pause-session/types#PauseSnapshotWire',\n create: dsh_pause_session_pauseSession_observe_result$schema,\n description: 'the snapshot stream.',\n jsonSchemaError: 'typert tool schema: selected dictionaries require string keys and unconstrained JSON values',\n },\n sourceLocation: {\"file\":\"packages/dsh-pause-session/src/remote.ts\",\"line\":201,\"column\":10},\n },\n 'pauseSession/snapshot': {\n service: 'pauseSession',\n description: 'One exact snapshot, used by tests and by a reconnect that cannot wait for the first stream item.',\n invocation: { kind: 'direct' },\n parameters: [\n ],\n cancellation: { parameter: 'signal' },\n result: {\n mode: 'strict',\n typeSymbol: 'dsh-pause-session/types#PauseSnapshotWire',\n create: dsh_pause_session_pauseSession_snapshot_result$schema,\n description: 'the current aggregate and session states.',\n jsonSchemaError: 'typert tool schema: selected dictionaries require string keys and unconstrained JSON values',\n },\n sourceLocation: {\"file\":\"packages/dsh-pause-session/src/remote.ts\",\"line\":175,\"column\":9},\n },\n 'pauseSession/triage': {\n service: 'pauseSession',\n description: 'Read the morning decision list.',\n invocation: { kind: 'direct' },\n parameters: [\n {\n name: 'request',\n description: 'the calling Session whose list is read.',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: 'dsh-pause-session/types#PauseTriageRequest',\n create: dsh_pause_session_pauseSession_triage_parameter_0$schema,\n jsonSchema: {\"type\":\"object\",\"properties\":{\"caller\":{\"type\":\"string\"}},\"required\":[\"caller\"],\"additionalProperties\":true},\n },\n strictCodec: {\n mode: 'strict',\n typeSymbol: 'dsh-pause-session/types#PauseTriageRequest',\n create: dsh_pause_session_pauseSession_triage_parameter_0_strict$schema,\n jsonSchema: {\"type\":\"object\",\"properties\":{\"caller\":{\"type\":\"string\"}},\"required\":[\"caller\"],\"additionalProperties\":false},\n },\n },\n ],\n cancellation: { parameter: 'signal' },\n result: {\n mode: 'strict',\n typeSymbol: 'dsh-pause-session#pauseSession/triage:result',\n create: dsh_pause_session_pauseSession_triage_result$schema,\n description: 'the listed rows.',\n jsonSchema: {\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"sessionId\":{\"type\":\"string\"},\"phase\":{\"type\":\"string\",\"enum\":[\"draining\",\"parking\",\"flush-failed\"]},\"updatedAt\":{\"type\":\"number\"},\"reading\":{\"type\":\"string\",\"enum\":[\"read\",\"unreadable\"]},\"lastEvent\":{\"type\":\"string\"},\"turn\":{\"type\":\"number\"},\"step\":{\"type\":\"number\"},\"traces\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"tool\":{\"type\":\"string\"},\"callId\":{\"type\":\"string\"}},\"required\":[\"tool\",\"callId\"],\"additionalProperties\":true}},\"owed\":{\"type\":\"boolean\"},\"wakeable\":{\"type\":\"boolean\"},\"rearmGoal\":{\"type\":\"boolean\"}},\"required\":[\"sessionId\",\"phase\",\"updatedAt\",\"reading\",\"traces\",\"owed\",\"wakeable\",\"rearmGoal\"],\"additionalProperties\":true}},\n },\n sourceLocation: {\"file\":\"packages/dsh-pause-session/src/remote.ts\",\"line\":252,\"column\":9},\n },\n },\n}, z)\n\nexport default TYPERT_REMOTE\n","/**\n * The glyphs both pause controls are drawn with, so the session-header\n * control and the whole-app pill cannot drift apart.\n * @module dsh-pause-session/client/icons\n */\n\nimport type { ReactNode } from 'react'\n\n/** 16px stroke icon (currentColor): the two bars of a pause. */\nexport function PauseIcon(): ReactNode {\n return (\n <svg\n aria-hidden=\"true\"\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M9 5v14\" />\n <path d=\"M15 5v14\" />\n </svg>\n )\n}\n\n/** 16px stroke icon (currentColor): the triangle of a resume. */\nexport function ResumeIcon(): ReactNode {\n return (\n <svg\n aria-hidden=\"true\"\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M7 4.5v15l12-7.5z\" />\n </svg>\n )\n}\n\n/**\n * 16px stroke icon (currentColor): the rings of a target, for the goal switch\n * on the session header. Drawn at 16px like the pause and resume glyphs it sits\n * beside rather than the 14px marks the two reports use.\n */\nexport function GoalIcon(): ReactNode {\n return (\n <svg\n aria-hidden=\"true\"\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n )\n}\n\n/**\n * 14px stroke icon (currentColor): the mark that a report carries a caveat.\n * A glyph rather than copy, so the facts it stands for stay in the locale\n * dictionaries beside everything else the user reads.\n */\nexport function CaveatIcon(): ReactNode {\n return (\n <svg\n aria-hidden=\"true\"\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 7.5v5.5\" />\n <path d=\"M12 16.5v.5\" />\n </svg>\n )\n}\n\n/** 14px stroke icon (currentColor): the chevron that opens the decision list. */\nexport function ChevronIcon(): ReactNode {\n return (\n <svg\n aria-hidden=\"true\"\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M6 15l6-6 6 6\" />\n </svg>\n )\n}\n","/**\n * The whole-app control: one pill in the conversation header's utilities row\n * that answers \"can I close the lid?\", presses the park or the release, and —\n * when something did not stop cleanly — opens the morning decision list.\n *\n * The header's right-aligned utilities row is inside the conversation column,\n * which is where this control belongs: it answers for every session tree, but\n * it is read while looking at one, and a surface inside the layout is covered\n * by whatever covers that column — a sidebar or a drawer — instead of floating\n * above the whole frame. The decision list hangs from the control into the\n * conversation area below.\n *\n * The pill reads the native status stream through `./global.ts`. With no\n * answer, or with no session to address an action through, it renders nothing\n * rather than a state it would have to invent. The decision list is\n * deliberately NOT part of that first read; the panel asks for its own rows\n * when it opens.\n * @module dsh-pause-session/client/pill\n */\n\nimport { useEffect } from 'react'\nimport type { ReactNode } from 'react'\nimport type { SessionId } from '@deepseek-ai/dsh-session/types'\nimport type { ObservableSnapshot } from '@deepseek-ai/dsh-client-store'\nimport type { InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\n// Type-only: pulls the ui-conversation SlotMap merge (header.utilities).\nimport type {} from '@deepseek-ai/dsh-client-ui-conversation/client'\n// Type-only: pulls the ui-session GlobalStandardProps merge (useSessions).\nimport type {} from '@deepseek-ai/dsh-client-ui-session/client'\nimport type { TriageAction } from '../shared.js'\nimport { addressingSession } from './global.js'\nimport type { GlobalPauseState } from './global.js'\nimport { globalPauseView, showsPauseControl, triageActionsFor, triageView, TRIAGE_GOAL_VIEW } from './view.js'\nimport type { TriageRowView } from './view.js'\nimport { CaveatIcon, ChevronIcon, PauseIcon, ResumeIcon } from './icons.js'\nimport styles from './button.module.css'\n\n/** Browser state and operations injected into the whole-app pill. */\nexport interface PausePillInjected {\n hooks: { pauseGlobal: ObservableSnapshot<GlobalPauseState> }\n /** Hand the control the session the shell is on; it reads there until it has an answer. */\n refresh: (sessionId: SessionId) => void\n /** Press the pill for one session. */\n toggle: (sessionId: SessionId) => void\n /** Show or hide the decision list; opening it also reads its rows. */\n setPanel: (open: boolean) => void\n /** Take one of the four decisions on one listed session. */\n decide: (sessionId: string, action: TriageAction) => void\n}\n\n/** Full props of the whole-app pause control. */\nexport type PausePillProps = PropsRuntime<'conversation.session.header.utilities'>\n & InjectFace<PausePillInjected>\n & PropsLocale<'pause'>\n\n/** One listed session's row, with the four decisions. */\nfunction TriageSessionRow(props: {\n readonly row: TriageRowView\n readonly decide: (sessionId: string, action: TriageAction) => void\n readonly t: PausePillProps['t']\n}): ReactNode {\n const { row, decide, t } = props\n return (\n <li className={styles.dspPillRow}>\n <div className={styles.dspPillRowHead}>\n <span className={styles.dspPillRowId}>{row.sessionId}</span>\n <span className={styles.dspPillRowPhase}>{t(row.phaseKey)}</span>\n </div>\n <div className={styles.dspPillRowFacts}>\n {row.readable\n ? (\n <>\n <span>{t('triage.stopped')}: {row.stopped ?? '-'}</span>\n <span>\n {row.unknownTools.length === 0\n ? t('triage.toolsNone')\n : `${t('triage.tools')}: ${row.unknownTools.join(', ')}`}\n </span>\n </>\n )\n : <span>{t('triage.stoppedUnknown')}</span>}\n {row.readable && !row.wakeable ? <span>{t('triage.noWake')}</span> : null}\n </div>\n <div className={styles.dspPillRowActions}>\n {triageActionsFor(row).map(action => (\n <button\n key={action.action}\n type=\"button\"\n className={styles.dspPillAction}\n aria-label={t(action.ariaKey)}\n onClick={() => { decide(row.sessionId, action.action) }}\n >\n {t(action.labelKey)}\n </button>\n ))}\n {/* A switch, not a decision: it says what the next resume of this\n session may spend, and the host's own reading is its state. */}\n <button\n type=\"button\"\n className={styles.dspPillAction}\n aria-label={t(TRIAGE_GOAL_VIEW.ariaKey)}\n aria-pressed={row.rearmGoal}\n onClick={() => { decide(row.sessionId, TRIAGE_GOAL_VIEW.action) }}\n >\n {t(TRIAGE_GOAL_VIEW.labelKey)}\n </button>\n </div>\n </li>\n )\n}\n\n/**\n * The whole-app control: what the host says about the whole park, the one\n * press that parks or releases all of it, and the decision list for whatever\n * did not stop cleanly.\n * @param props - session-header runtime, host operations, and localized copy.\n * @returns the control and its panel, or nothing while the host has not answered.\n */\nexport function PausePill(props: PausePillProps): ReactNode {\n const { refresh, toggle, setPanel, decide, t, useSessions, useSession } = props\n const reading = props.usePauseGlobal(state => state.global)\n const triage = props.usePauseGlobal(state => state.triage)\n const open = props.usePauseGlobal(state => state.panelOpen)\n const error = props.usePauseGlobal(state => state.error)\n const sessions = props.usePauseGlobal(state => state.sessions)\n // Actions address one user session; the status stream is process-wide.\n const address = useSessions(addressingSession)\n const view = globalPauseView(reading, sessions)\n const list = triageView(triage)\n // A subagent's own header gets nothing, exactly like the per-session control:\n // its work is its parent's, and the parent's header already speaks for the\n // whole tree. The mount read below waits for the same gate, so a header that\n // renders nothing spends no host round-trip either.\n const visible = showsPauseControl(useSession(snapshot => snapshot.subagent))\n // Hand the control the session the shell is on. It reads there once, when it\n // has no answer yet; afterwards the address follows the view while the reads\n // follow the park (see `./global.ts`).\n useEffect(() => {\n if (visible && address !== undefined) refresh(address)\n }, [refresh, address, visible])\n if (!visible || !view.visible || address === undefined) return null\n const tip = view.caveats\n .map(caveat => caveat.names.length === 0\n ? t(caveat.key)\n : `${t(caveat.key)} (${caveat.names.join(', ')})`)\n .join('\\n')\n return (\n <span className={styles.dspPill}>\n {!open\n ? null\n : (\n <div className={styles.dspPillPanel} role=\"dialog\" aria-label={t('triage.title')}>\n <div className={styles.dspPillPanelHead}>\n <span className={styles.dspPillText}>{t('triage.title')}</span>\n <button\n type=\"button\"\n className={styles.dspPillAction}\n aria-label={t('triage.refresh.aria')}\n onClick={() => { setPanel(true) }}\n >\n {t('triage.refresh.aria')}\n </button>\n </div>\n {!list.visible\n ? <p className={styles.dspPillPanelNote}>{t('triage.reading')}</p>\n : list.unavailable\n ? <p className={styles.dspPillPanelNote}>{t('triage.unavailable')}</p>\n : list.rows.length === 0\n ? <p className={styles.dspPillPanelNote}>{t('triage.empty')}</p>\n : (\n <ul className={styles.dspPillRows}>\n {list.rows.map(row => (\n <TriageSessionRow key={row.sessionId} row={row} decide={decide} t={t} />\n ))}\n </ul>\n )}\n </div>\n )}\n {view.unclean === 0\n ? null\n : (\n <button\n type=\"button\"\n className={styles.dspPillTriage}\n aria-label={t('triage.open.aria')}\n aria-expanded={open}\n title={`${String(view.unclean)} ${t('all.triage')}`}\n onClick={() => { setPanel(!open) }}\n >\n <ChevronIcon />\n <span className={styles.dspPillDetail}>{view.unclean}</span>\n </button>\n )}\n <button\n type=\"button\"\n className={view.labelKey === undefined && view.detail.length === 0\n ? `${styles.dspPillBtn} ${styles.dspPillIcon}`\n : styles.dspPillBtn}\n aria-label={t(view.ariaKey)}\n aria-pressed={view.action === 'resume-all' || view.action === 'cancel-all'}\n disabled={!view.enabled}\n {...tip.length === 0 ? {} : { title: tip }}\n onClick={() => { toggle(address) }}\n >\n {view.action === 'resume-all' || view.action === 'cancel-all' ? <ResumeIcon /> : <PauseIcon />}\n {view.labelKey === undefined ? null : <span className={styles.dspPillText}>{t(view.labelKey)}</span>}\n {view.detail.length === 0 ? null : <span className={styles.dspPillDetail}>{view.detail}</span>}\n {view.caveats.length === 0 ? null : <span className={styles.dspPillWarn}><CaveatIcon /></span>}\n </button>\n </span>\n )\n}\n","/** `pause` namespace dictionaries. */\n\n/** Simplified Chinese dictionary (the key-set source of truth). */\nexport const zh = {\n 'pause.aria': '暂停这个会话及其子代理:下一条模型请求不会发出',\n 'resume.tip': '恢复这个会话及其子代理',\n 'draining.aria': '正在暂停:还有工具在运行,工具运行完之后、下一条模型请求发出之前,会话会停住;按下可取消这次暂停',\n 'parking.aria': '正在暂停:正在保存待发输入;按下可取消这次暂停',\n 'safe.aria': '已暂停:待发输入已保存;按下可恢复',\n 'flushFailed.aria': '已暂停,但保存待发输入失败;按下可恢复',\n 'state.draining': '正在暂停',\n 'state.parking': '正在保存',\n 'state.safe': '已暂停',\n 'state.flushFailed': '保存失败',\n 'goal.aria': '恢复时重开目标:恢复这个会话时是否重新打开目标并让它继续运行;按下切换',\n 'goal.on.tip': '恢复这个会话会重新打开目标,它会自己继续运行;按下改为不重开',\n 'goal.off.tip': '恢复这个会话不会重新打开目标;按下改为重开',\n 'checking.aria': '正在读取暂停状态',\n 'checking.tip': '正在读取暂停状态',\n 'unavailable.aria': '暂停状态不可用',\n 'unavailable.tip': '暂停状态不可用',\n 'all.pause.aria': '暂停所有运行中的会话及其子代理',\n 'all.resume.aria': '恢复所有已暂停的会话',\n 'all.idle': '暂停所有会话',\n 'all.finishing': '正在暂停',\n 'all.cancel': '取消这次暂停',\n 'all.cancel.aria': '取消这次暂停并恢复会话',\n 'all.unclean': '有会话未暂停',\n 'all.unclean.aria': '有会话未暂停,不能在这里恢复;打开清单逐行处理',\n 'all.safe': '已暂停',\n 'all.checking.aria': '正在读取暂停状态',\n 'all.caveat.jobs': '后台任务仍在运行',\n 'all.caveat.unresumable': '含无法恢复的子代理',\n 'all.caveat.stalled': '未暂停,需要你决定',\n 'all.caveat.unread': '子代理列表读不出来',\n 'all.caveat.blindTrees': '子代理服务未加载,无法检查子代理',\n 'all.caveat.blindJobs': '作业服务未加载,无法检查后台任务',\n 'triage.open.aria': '查看未暂停的会话清单',\n 'triage.title': '未暂停的会话',\n 'triage.empty': '没有需要决定的会话',\n 'triage.reading': '正在读取清单',\n 'triage.unavailable': '清单暂不可读',\n 'triage.refresh.aria': '重新读取清单',\n 'triage.session.aria': '会话',\n 'triage.stopped': '停在',\n 'triage.stoppedUnknown': '读不到它的日志,停止位置未知',\n 'triage.tools': '未知的工具结果',\n 'triage.toolsNone': '没有缺少结果的工具调用',\n 'triage.noWake': '这个会话没有待发的模型请求,继续不会发出请求',\n 'triage.phase.draining': '工具还在运行时中断',\n 'triage.phase.parking': '已暂停,但待发输入未保存',\n 'triage.phase.flushFailed': '已暂停,但保存失败',\n 'triage.continue': '继续',\n 'triage.continue.aria': '继续:不添加消息,直接恢复',\n 'triage.note': '继续并附说明',\n 'triage.note.aria': '继续并附说明:告诉模型工具结果未知,不要盲目重试',\n 'triage.review': '只看不运行',\n 'triage.review.aria': '只看不运行:不启动会话、不发请求;需要查看时在会话历史里打开',\n 'triage.leave': '保持暂停',\n 'triage.leave.aria': '保持暂停:不恢复,也不写入任何内容',\n 'triage.goal': '恢复时重开目标',\n 'triage.goal.aria': '恢复时重开目标:恢复这个会话时是否重新打开目标并让它自己继续运行;按下切换',\n 'all.triage': '有待决定的会话',\n} satisfies Record<string, string>\n\n/** The pause namespace key union. */\nexport type PauseKey = keyof typeof zh\n\n/** English dictionary, checked complete against the zh key set. */\nexport const en: Record<PauseKey, string> = {\n 'pause.aria': 'Pause this session and its subagents: their next model request will not be sent',\n 'resume.tip': 'Resume this session and its subagents',\n 'draining.aria': 'Pausing: a tool is still running. The session pauses after the tool finishes and before its next model request; press to cancel the pause',\n 'parking.aria': 'Pausing: saving pending input; press to cancel the pause',\n 'safe.aria': 'Paused: pending input is saved; press to resume',\n 'flushFailed.aria': 'Paused, but saving pending input failed; press to resume',\n 'state.draining': 'Pausing',\n 'state.parking': 'Saving',\n 'state.safe': 'Paused',\n 'state.flushFailed': 'Save failed',\n 'goal.aria': 'Re-open goal on resume: whether resuming this session re-opens its goal and lets it run on its own; press to switch',\n 'goal.on.tip': 'Resuming re-opens the goal, which runs on its own; press to keep it closed',\n 'goal.off.tip': 'Resuming will not re-open the goal; press to re-open it',\n 'checking.aria': 'Reading pause state',\n 'checking.tip': 'Reading pause state',\n 'unavailable.aria': 'Pause state unavailable',\n 'unavailable.tip': 'Pause state unavailable',\n 'all.pause.aria': 'Pause all running sessions and their subagents',\n 'all.resume.aria': 'Resume all paused sessions',\n 'all.idle': 'Pause all sessions',\n 'all.finishing': 'Pausing',\n 'all.cancel': 'Cancel this pause',\n 'all.cancel.aria': 'Cancel this pause and resume the sessions',\n 'all.unclean': 'Some sessions are not paused',\n 'all.unclean.aria': 'Some sessions are not paused and cannot be resumed here; open the list to decide',\n 'all.safe': 'Paused',\n 'all.checking.aria': 'Reading pause state',\n 'all.caveat.jobs': 'background jobs are still running',\n 'all.caveat.unresumable': 'contains a subagent that cannot be resumed',\n 'all.caveat.stalled': 'did not pause; needs your decision',\n 'all.caveat.unread': 'subagent list could not be read',\n 'all.caveat.blindTrees': 'subagent service is not loaded, so subagents cannot be checked',\n 'all.caveat.blindJobs': 'job service is not loaded, so background jobs cannot be checked',\n 'triage.open.aria': 'Review sessions that did not pause',\n 'triage.title': 'Sessions that did not pause',\n 'triage.empty': 'No sessions need a decision',\n 'triage.reading': 'Reading list',\n 'triage.unavailable': 'List unavailable',\n 'triage.refresh.aria': 'Read the list again',\n 'triage.session.aria': 'Session',\n 'triage.stopped': 'Stopped at',\n 'triage.stoppedUnknown': 'Its log cannot be read, so where it stopped is unknown',\n 'triage.tools': 'Unknown tool results',\n 'triage.toolsNone': 'No tool call is missing a result',\n 'triage.noWake': 'This session has no pending model request; continuing sends nothing',\n 'triage.phase.draining': 'stopped while a tool was still running',\n 'triage.phase.parking': 'paused but pending input was not saved',\n 'triage.phase.flushFailed': 'paused but saving failed',\n 'triage.continue': 'Continue',\n 'triage.continue.aria': 'Continue: resume without adding a message',\n 'triage.note': 'Continue with a note',\n 'triage.note.aria': 'Continue with a note: tell the model the tool result is unknown and not to retry blindly',\n 'triage.review': 'View only',\n 'triage.review.aria': 'View only: do not start the session or send a request; open it from your session history to read it',\n 'triage.leave': 'Leave it paused',\n 'triage.leave.aria': 'Leave it paused: keep the pause and write nothing',\n 'triage.goal': 'Re-open goal on resume',\n 'triage.goal.aria': 'Re-open goal on resume: whether resuming this session re-opens its goal, which then runs on its own; press to switch',\n 'all.triage': 'sessions need a decision',\n}\n","/**\n * Browser half of dsh-pause-session.\n *\n * Registers two controls: one in the session header's title-adjacent action\n * group (`conversation.session.header.actions`), which pauses or resumes the\n * session it sits on, and one in the header's right-aligned utilities row\n * (`conversation.session.header.utilities`), which answers for the whole app.\n * Both seats are session-scoped and their props carry `sessionId`, so every\n * open session header renders its own pair and switching sessions follows\n * automatically; the whole-app control speaks for every session from the\n * header of the one on screen.\n *\n * The whole-app control sits inside the conversation column rather than in the\n * frame-wide overlay layer: it is read while looking at one conversation, and\n * a sidebar or drawer that covers that area covers the control with it.\n *\n * Both controls are host-authoritative. On a browser Host they read the\n * native `pauseSession` stream, which keeps status reads out of the Session\n * log. The same path serves Web and Desktop.\n * User actions and status both use the generated native Remote namespace;\n * no slash command is involved. Each control stays inert wherever no\n * round-trip is available rather than rendering a state it cannot support. The\n * header control also reads the whole-app answer the whole-app control\n * publishes, so a park that holds nothing does not cost a host round-trip per\n * header.\n * @module dsh-pause-session/client\n */\n\nimport { useEffect } from 'react'\nimport type { ReactNode } from 'react'\nimport type { Context as ClientContext } from '@deepseek-ai/cordis'\nimport type { SessionId } from '@deepseek-ai/dsh-session/types'\nimport type { ObservableSnapshot } from '@deepseek-ai/dsh-client-store'\nimport type { InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\n// Type-only: pulls the api-remotes Client face and its forwarded-event key set.\nimport type {} from '@deepseek-ai/dsh-api-remotes/client'\n// Type-only: pulls the ui-conversation SlotMap merge (header.actions, header.utilities).\nimport type {} from '@deepseek-ai/dsh-client-ui-conversation/client'\n// Type-only: pulls the renderer-owned slots service (ctx.slots).\nimport type {} from '@deepseek-ai/dsh-client-ui-renderer/client'\n// Type-only: pulls the locale plugin's Context merge (ctx.locale).\nimport type {} from '@deepseek-ai/dsh-client-locale/client'\nimport { PauseControl } from './control.js'\nimport type { PauseState } from './control.js'\nimport { PauseGlobalControl } from './global.js'\nimport { remoteTransport } from './remote.js'\nimport pauseRemote from 'dsh-pause-session/remote'\nimport type {} from 'dsh-pause-session/remote'\nimport { GoalIcon, PauseIcon, ResumeIcon } from './icons.js'\nimport { PausePill } from './pill.js'\nimport type { PausePillInjected } from './pill.js'\nimport { pauseView, showsPauseControl } from './view.js'\nimport { en, zh, type PauseKey } from './locales.js'\nimport styles from './button.module.css'\n\ndeclare module '@deepseek-ai/dsh-client-ui-slots' {\n interface LocaleNamespaceMap {\n /** The pause control's copy. */\n 'pause': PauseKey\n }\n}\n\n/** Dictionary namespace owned by this plugin. */\nconst NS = 'pause'\n\n/** Required services: the slot registry, the locale registry, and the host round-trip. */\nexport const inject = ['slots', 'locale', 'remote']\n\n/** Browser state and operations injected into the Session-header contribution. */\nexport interface PauseInjected {\n hooks: { pause: ObservableSnapshot<PauseState> }\n /** Read the host's state for one session (the control calls this once per mount). */\n refresh: (sessionId: SessionId) => void\n /** Press the control for one session. */\n toggle: (sessionId: SessionId) => void\n /** Flip one session's own goal opt-out. */\n toggleGoal: (sessionId: SessionId) => void\n}\n\n/** Full props of the Session-header pause control. */\nexport type PauseButtonProps = PropsRuntime<'conversation.session.header.actions'>\n & InjectFace<PauseInjected>\n & PropsLocale<'pause'>\n\n/**\n * The session's pause control: pause the session and its subagents before\n * their next model request, or resume them, with the host's own state on screen.\n * Once the host reports the park's goal opt-out, a second switch sits beside it\n * — the only place a session that stopped CLEANLY can be told not to re-open its\n * goal on the next resume, because the decision list shows only the sessions\n * that did not stop cleanly.\n *\n * A subagent session renders nothing: its work is its parent's, the parent's\n * control already covers it, and a button here would offer to pause \"a session\"\n * from inside a child.\n * @param props - session runtime, host operations, and localized copy.\n * @returns the header action, or nothing on a subagent session.\n */\nexport function PauseButton(props: PauseButtonProps): ReactNode {\n const { sessionId, refresh, toggle, toggleGoal, t, useSession } = props\n const reading = props.usePause(state => state.bySession[String(sessionId)])\n const running = useSession(snapshot => snapshot.running) ?? false\n const view = pauseView(reading, running)\n const visible = showsPauseControl(useSession(snapshot => snapshot.subagent))\n // Read once per mounted control: the host is the source of truth, and the\n // forwarded registry change keeps it current afterwards.\n useEffect(() => { refresh(sessionId) }, [refresh, sessionId])\n if (!visible) return null\n return (\n <span className={styles.dsp}>\n <button\n type=\"button\"\n className={styles.dspBtn}\n aria-label={t(view.ariaKey)}\n aria-pressed={view.paused}\n disabled={!view.enabled}\n onClick={() => { toggle(sessionId) }}\n >\n {view.paused ? <ResumeIcon /> : <PauseIcon />}\n </button>\n {/* No host answer, no switch: the state has to come from the record, and\n a switch sitting in the default state would claim its own answer. */}\n {view.rearmGoal === undefined\n ? null\n : (\n <button\n type=\"button\"\n className={styles.dspGoal}\n aria-label={t('goal.aria')}\n aria-pressed={view.rearmGoal}\n title={t(view.rearmGoal ? 'goal.on.tip' : 'goal.off.tip')}\n onClick={() => { toggleGoal(sessionId) }}\n >\n <GoalIcon />\n </button>\n )}\n {view.labelKey === undefined\n ? null\n : (\n <span className={styles.dspState}>\n {t(view.labelKey)}\n {view.runningTools.length === 0 ? null : `: ${view.runningTools.join(', ')}`}\n </span>\n )}\n </span>\n )\n}\n\n/**\n * Client plugin body: register the locale dictionaries, own both controllers,\n * follow the host's registry changes, and contribute the per-session control\n * and the whole-app control into the session header.\n * @param ctx - client context carrying slots, locale, and the Remote face.\n */\n\nexport function apply(ctx: ClientContext): void {\n ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'pause: dictionaries')\n const lifetime = new AbortController()\n ctx.effect(() => () => { lifetime.abort(new Error('pause: client unloaded')) }, 'pause: lifetime')\n\n // The generated contribution is the only transport. It is mounted before\n // the namespace consumer below; that consumer uses a child inject because a\n // Remote namespace does not exist until its contribution is mounted.\n if (typeof ctx.remote.$mount === 'function') {\n ctx.effect(async () => {\n const dispose = await ctx.remote.$mount(pauseRemote)\n return dispose\n }, 'pause: remote transport')\n }\n\n ctx.inject(['remote.pauseSession'], (remoteCtx) => {\n const remote = remoteCtx.remote.pauseSession\n const transport = remoteTransport(remote, lifetime.signal)\n const globalControl = new PauseGlobalControl(transport, lifetime.signal)\n const control = new PauseControl(transport, lifetime.signal)\n // The native stream is the change feed: every fresh snapshot applies to\n // both controls directly, with no re-read timer.\n remoteCtx.effect(\n () => transport.source.onSnapshot((snapshot) => {\n control.apply(snapshot)\n globalControl.apply(snapshot)\n }),\n 'pause: native status stream',\n )\n remoteCtx.slots.inject('conversation.session.header.actions', () =>\n remoteCtx.slots.register(\n {\n name: 'conversation.session.header.actions',\n id: NS,\n order: 40,\n locale: NS,\n inject: (): PauseInjected => ({\n hooks: { pause: control.store },\n refresh: (sessionId) => { void control.refresh(sessionId) },\n toggle: (sessionId) => { void control.toggle(sessionId) },\n toggleGoal: (sessionId) => { void control.toggleGoal(sessionId) },\n }),\n },\n PauseButton,\n ),\n )\n remoteCtx.slots.inject('conversation.session.header.utilities', () =>\n remoteCtx.slots.register(\n {\n name: 'conversation.session.header.utilities',\n id: 'pause-all',\n // Immediately left of open-in-app (`order: -10`).\n order: -11,\n locale: NS,\n inject: (): PausePillInjected => ({\n hooks: { pauseGlobal: globalControl.store },\n refresh: (sessionId) => { void globalControl.refresh(sessionId) },\n toggle: (sessionId) => { void globalControl.toggle(sessionId) },\n setPanel: (open) => { globalControl.setPanel(open) },\n decide: (sessionId, action) => { void globalControl.decide(sessionId, action) },\n }),\n },\n PausePill,\n ),\n )\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;EAmDA,MAAM,YAAsB,EAAE,WAAW,CAAA,EAAE;;EAG3C,IAAa,eAAb,MAAyB;GAeJ;GACA;;GAdV,SAAA,GAAA,8BAAA,oBAAA,CAAuD,SAAO;;GAGtD,wBAAQ,IAAI,IAAG;;GAEf,yBAAS,IAAI,IAAG;GACzB,QAAQ;;;;;GAMhB,YACmB,WACA,UAAqB;IADrB,KAAA,YAAA;IACA,KAAA,WAAA;GAChB;;;;;;GAOH,MAAM,QAAQ,WAAoB;IAChC,MAAM,KAAK,QAAQ,SAAS;GAC9B;;GAGA,MAAM,UAA6K;IACjL,KAAK,MAAM,aAAa,KAAK,OAAO;KAClC,IAAI,aAAa,KAAA,GAAW;MAC1B,KAAK,QAAQ,WAAW;OAAE,OAAO;OAAe,cAAc,CAAA;MAAE,CAAE;MAClE;KACF;KACA,MAAM,SAAS,SAAS,SAAS,OAAO,SAAS;KACjD,KAAK,QAAQ,WAAW,WAAW,KAAA,IAC/B;MAAE,OAAO;MAAU,cAAc,CAAA;KAAE,IACnC;MACE,OAAO,OAAO;MACd,cAAc,OAAO;MACrB,GAAG,OAAO,cAAc,KAAA,IAAY,CAAA,IAAK,EAAE,WAAW,OAAO,UAAS;MACvE;IACP;GACF;;GAGA,aAAU;IACR,IAAI,KAAK,MAAM,SAAS,KAAK,KAAK,SAAS,SAAS;IACpD,KAAU,QAAO;GACnB;GAEQ,MAAM,UAAO;IACnB,IAAI,KAAK,SAAS,SAAS;IAC3B,KAAK,MAAM,aAAa,CAAC,GAAG,KAAK,KAAK,GAAG,MAAM,KAAK,QAAQ,SAAS;GACvE;;GAGQ,MAAM,QAAQ,WAAoB;IACxC,KAAK,MAAM,IAAI,SAAS;IACxB,MAAM,WAAW,EAAE,KAAK;IACxB,KAAK,OAAO,IAAI,WAAW,QAAQ;IACnC,MAAM,UAAU,MAAM,KAAK,KAAK,SAAS;IAIzC,IAAI,KAAK,OAAO,IAAI,SAAS,MAAM,UAAU;IAC7C,KAAK,QAAQ,WAAW,OAAO;GACjC;;;;;;;;GASA,MAAM,OAAO,WAAoB;IAC/B,MAAM,UAAU,KAAK,MAAM,YAAW,CAAE,CAAC,UAAU,OAAO,SAAS,EAAE,EAAE;IACvE,MAAM,SAAS,YAAY,KAAA,KAAa,YAAY,WAAW,UAAU;IAEzE,IAAI,EAAC,MADgB,KAAK,UAAU,IAAI;KAAE;KAAQ,WAAW,OAAO,SAAS;IAAC,GAAI,KAAK,QAAQ,EAAA,CACnF,IAAI;KACd,KAAK,QAAQ,WAAW;MAAE,OAAO;MAAe,cAAc,CAAA;KAAE,CAAE;KAClE;IACF;IACA,MAAM,KAAK,QAAQ,SAAS;GAC9B;;;;;;;GAQA,MAAM,WAAW,WAAoB;IAEnC,IAAI,EAAC,MADgB,KAAK,UAAU,IAAI;KAAE,QAAQ;KAAQ,WAAW,OAAO,SAAS;IAAC,GAAI,KAAK,QAAQ,EAAA,CAC3F,IAAI;KACd,KAAK,QAAQ,WAAW;MAAE,OAAO;MAAe,cAAc,CAAA;KAAE,CAAE;KAClE;IACF;IACA,MAAM,KAAK,QAAQ,SAAS;GAC9B;;GAGQ,MAAM,KAAK,WAAoB;IACrC,MAAM,WAAW,MAAM,KAAK,UAAU,OAAO,KAAK,KAAK,QAAQ;IAC/D,IAAI,aAAa,KAAA,GAAW,OAAO;KAAE,OAAO;KAAe,cAAc,CAAA;IAAE;IAC3E,MAAM,SAAS,SAAS,SAAS,OAAO,SAAS;IACjD,IAAI,WAAW,KAAA,GAAW,OAAO;KAAE,OAAO;KAAU,cAAc,CAAA;IAAE;IACpE,OAAO;KACL,OAAO,OAAO;KACd,cAAc,OAAO;KACrB,GAAG,OAAO,cAAc,KAAA,IAAY,CAAA,IAAK,EAAE,WAAW,OAAO,UAAS;;GAE1E;GAEQ,QAAQ,WAAsB,SAAqB;IACzD,KAAK,MAAM,QAAQ,UAAS;KAC1B,MAAM,WAAW,MAAM,UAAU,OAAO,SAAS;KACjD,IAAI,aAAa,KAAA,KACZ,SAAS,UAAU,QAAQ,SAC3B,SAAS,cAAc,QAAQ,aAC/B,SAAS,aAAa,WAAW,QAAQ,aAAa,UACtD,SAAS,aAAa,OAAO,MAAM,UAAU,SAAS,QAAQ,aAAa,MAAM,GAAG;KACzF,MAAM,YAAY;MAAE,GAAG,MAAM;OAAY,OAAO,SAAS,IAAI;KAAO;IACtE,CAAC;GACH;;;;;;;;;;;;;;;;;;;;;;;;;;ECnIF,SAAgB,kBAAkB,UAA0D;GAC1F,OAAO,aAAa,QAAQ,aAAa,KAAA;EAC3C;;;;;;;;EASA,SAAS,OAAO,SAAqB;GACnC,OAAO,QAAQ,cAAc,KAAA,IAAY,CAAA,IAAK,EAAE,WAAW,QAAQ,UAAS;EAC9E;;;;;;EAOA,SAAgB,UAAU,SAAmC,UAAU,MAAI;GACzE,QAAQ,SAAS,OAAjB;IACE,KAAK,UAGH,OAAO;KAAE,QAAQ;KAAO,SAAS;KAAS,SAAS;KAAc,cAAc,CAAA;IAAE;IACnF,KAAK,YAGH,OAAO;KACL,QAAQ;KACR,SAAS;KACT,SAAS;KACT,UAAU;KACV,cAAc,QAAQ;;IAE1B,KAAK,WACH,OAAO;KACL,QAAQ;KACR,SAAS;KACT,SAAS;KACT,UAAU;KACV,cAAc,CAAA;;IAElB,KAAK,QACH,OAAO;KACL,QAAQ;KACR,SAAS;KACT,SAAS;KACT,UAAU;KACV,cAAc,CAAA;KACd,GAAG,OAAO,OAAO;;IAErB,KAAK,gBACH,OAAO;KACL,QAAQ;KACR,SAAS;KACT,SAAS;KACT,UAAU;KACV,cAAc,CAAA;;IAElB,KAAK,eACH,OAAO;KAAE,QAAQ;KAAO,SAAS;KAAO,SAAS;KAAoB,cAAc,CAAA;IAAE;IACvF,KAAK,KAAA,GACH,OAAO;KAAE,QAAQ;KAAO,SAAS;KAAO,SAAS;KAAiB,cAAc,CAAA;IAAE;GACtF;EACF;;EAwBA,MAAa,sBAAmD;GAC9D;IAAE,QAAQ;IAAY,UAAU;IAAmB,SAAS;GAAsB;GAClF;IAAE,QAAQ;IAAQ,UAAU;IAAe,SAAS;GAAkB;GACtE;IAAE,QAAQ;IAAU,UAAU;IAAiB,SAAS;GAAoB;GAC5E;IAAE,QAAQ;IAAS,UAAU;IAAgB,SAAS;GAAmB;;;;;;;;;EAU3E,SAAgB,iBAAiB,KAAkB;GACjD,OAAO,oBAAoB,QAAO,WAChC,OAAO,WAAW,cAAc,OAAO,WAAW,SAAS,OAAO,IAAI,YAAY,IAAI,QAAQ;EAClG;;;;;EAMA,MAAa,mBAAqC;GAChD,QAAQ;GACR,UAAU;GACV,SAAS;;;EAgCX,MAAM,YAA4D;GAChE,UAAU;GACV,SAAS;GACT,gBAAgB;;;;;;;EAQlB,SAAgB,WAAW,SAAkC;GAC3D,IAAI,YAAY,KAAA,GAAW,OAAO;IAAE,SAAS;IAAO,aAAa;IAAO,MAAM,CAAA;GAAE;GAChF,IAAI,QAAQ,SAAS,eAAe,OAAO;IAAE,SAAS;IAAM,aAAa;IAAM,MAAM,CAAA;GAAE;GACvF,OAAO;IACL,SAAS;IACT,aAAa;IACb,MAAM,QAAQ,KAAK,KAAI,SAAQ;KAC7B,WAAW,IAAI;KACf,UAAU,UAAU,IAAI;KACxB,GAAG,IAAI,cAAc,KAAA,IACjB,CAAA,IACA,EACA,SAAS,IAAI,SAAS,KAAA,IAClB,IAAI,YACJ,GAAG,IAAI,UAAS,UAAW,OAAO,IAAI,IAAI,IAAI,IAAI,SAAS,KAAA,IAAY,KAAK,SAAS,OAAO,IAAI,IAAI,MAAA;KAE5G,cAAc,IAAI,OAAO,KAAI,UAAS,MAAM,IAAI;KAChD,UAAU,IAAI;KACd,UAAU,IAAI,YAAY;KAC1B,WAAW,IAAI;MACf;;EAEN;;;;;;EAgCA,SAAgB,gBACd,SACA,UAAiF;GAEjF,IAAI,YAAY,KAAA,GACd,OAAO;IAAE,SAAS;IAAO,SAAS;IAAO,SAAS;IAAqB,QAAQ;IAAQ,QAAQ;IAAI,SAAS,CAAA;IAAI,SAAS;GAAC;GAI5H,IAAI,QAAQ,SAAS,eACnB,OAAO;IAAE,SAAS;IAAO,SAAS;IAAO,SAAS;IAAoB,QAAQ;IAAQ,QAAQ;IAAI,SAAS,CAAA;IAAI,SAAS;GAAC;GAE3H,MAAM,EAAE,WAAW;GACnB,MAAM,UAA0B,CAAA;GAGhC,IAAI,OAAO,MAAM,SAAS,MAAM,GAAG,QAAQ,KAAK;IAAE,KAAK;IAAwB,OAAO,CAAA;GAAE,CAAE;QACrF,IAAI,OAAO,KAAK,SAAS,GAAG,QAAQ,KAAK;IAAE,KAAK;IAAmB,OAAO,OAAO;GAAI,CAAE;GAC5F,IAAI,OAAO,MAAM,SAAS,OAAO,GAAG,QAAQ,KAAK;IAAE,KAAK;IAAyB,OAAO,CAAA;GAAE,CAAE;QACvF,IAAI,OAAO,YAAY,SAAS,GAAG,QAAQ,KAAK;IAAE,KAAK;IAAqB,OAAO,OAAO;GAAW,CAAE;GAC5G,IAAI,OAAO,YAAY,SAAS,GAAG,QAAQ,KAAK;IAAE,KAAK;IAA0B,OAAO,OAAO;GAAW,CAAE;GAC5G,MAAM,UAAU,OAAO;GAIvB,IAAI,YAAY,UAAU,OAAO,QAAQ,SAAS,GAChD,QAAQ,KAAK;IAAE,KAAK;IAAsB,OAAO,OAAO;GAAO,CAAE;GAKnE,MAAM,OAAO;IAAE,SAAS;IAAM,SAAS;IAAM;IAAS,SADtC,OAAO,QAAQ;GAC8B;GAC7D,QAAQ,SAAR;IACE,KAAK,QAGH,OAAO;KAAE,GAAG;KAAM,SAAS;KAAkB,QAAQ;KAAa,QAAQ;IAAE;IAC9E,KAAK,QACH,OAAO;KACL,GAAG;KACH,SAAS;KACT,QAAQ;KACR,UAAU;KACV,QAAQ,GAAG,OAAO,OAAO,IAAI,EAAC,GAAI,OAAO,OAAO,UAAU;;IAE9D,KAAK,WAOH,OAAO,OAAO,SAAS,SAAS,KAAK,OAAO,UAAU,IAClD;KACA,GAAG;KACH,SAAS;KACT,QAAQ;KACR,UAAU;KACV,QAAQ,GAAG,OAAO,OAAO,IAAI,EAAC,GAAI,OAAO,OAAO,UAAU;KAC1D,SAAS,OAAO,SAAS,KAAK,OAAM;MAClC,MAAM,QAAQ,WAAW,GAAG,EAAE,gBAAgB,CAAA;MAC9C,OAAO,MAAM,WAAW,IAAI,KAAK,GAAG,GAAE,IAAK,MAAM,KAAK,IAAI;KAC5D,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,KAAA;QAEjB;KACA,GAAG;KACH,SAAS;KACT,SAAS;KACT,QAAQ;KACR,UAAU;KACV,QAAQ,OAAO,OAAO,QAAQ,MAAM;;GAE5C;EACF;;;;;;;;;;;;;EC3TA,SAAS,cAAc,KAAkB;GACvC,OAAO;IACL,WAAW,IAAI;IACf,OAAO,IAAI;IACX,WAAW,IAAI;IACf,SAAS,IAAI;IACb,GAAG,IAAI,cAAc,KAAA,IAAY,CAAA,IAAK,EAAE,WAAW,IAAI,UAAS;IAChE,GAAG,IAAI,SAAS,KAAA,IAAY,CAAA,IAAK,EAAE,MAAM,IAAI,KAAI;IACjD,GAAG,IAAI,SAAS,KAAA,IAAY,CAAA,IAAK,EAAE,MAAM,IAAI,KAAI;IACjD,QAAQ,IAAI,OAAO,KAAI,WAAU;KAAE,MAAM,MAAM;KAAM,QAAQ,MAAM,UAAU;IAAE,EAAG;IAClF,MAAM,IAAI;IACV,UAAU,IAAI;IACd,WAAW,IAAI;;EAEnB;EAyBA,MAAM,UAA4B;GAAE,QAAQ,KAAA;GAAW,WAAW;GAAO,QAAQ,KAAA;EAAS;;;;;;;;;;;EAa1F,SAAgB,kBAAkB,OAQjC;GACC,MAAM,SAAS,MAAM,IAAI,QAAQ,OAAM;IACrC,MAAM,MAAM,MAAM,KAAK,OAAO,EAAE;IAChC,OAAO,QAAQ,KAAA,KAAa,IAAI,WAAW,cAAc,IAAI,aAAa,KAAA;GAC5E,CAAC;GACD,OAAO,OAAO,MAAK,QAAO,MAAM,KAAK,OAAO,EAAE,EAAE,EAAE,YAAY,YAAY,KAAK,CAAC,KAC3E,OAAO,MAAK,OAAM,MAAM,KAAK,OAAO,EAAE,EAAE,EAAE,YAAY,IAAI,KAC1D,OAAO;EACd;;EAGA,IAAa,qBAAb,MAA+B;GAcV;GACA;;GAbV,SAAA,GAAA,8BAAA,oBAAA,CAA6D,OAAO;;GAGrE;;GAEA,eAAe;;;;;GAMvB,YACmB,WACA,UAAqB;IADrB,KAAA,YAAA;IACA,KAAA,WAAA;GAChB;;;;;;GAOH,MAAM,QAAQ,WAAoB;IAChC,KAAK,UAAU;IACf,MAAM,KAAK,cAAa;GAC1B;;GAGA,MAAM,UAAkJ;IACtJ,KAAK,MAAM,QAAQ,UAAS;KAAG,MAAM,WAAW,UAAU;IAAS,CAAC;IACpE,KAAK,QAAQ,aAAa,KAAA,IAAY,EAAE,MAAM,cAAa,IAAK;KAAE,MAAM;KAAY,QAAQ,SAAS;IAAM,CAAE;GAC/G;;GAGA,aAAU;IACR,IAAI,KAAK,SAAS,SAAS;IAC3B,KAAU,cAAa;IACvB,IAAI,KAAK,MAAM,YAAW,CAAE,CAAC,WAAW,KAAU,cAAa;GACjE;;;;;;GAOA,SAAS,MAAa;IACpB,KAAK,MAAM,QAAQ,UAAS;KAAG,MAAM,YAAY;IAAK,CAAC;IACvD,IAAI,MAAM,KAAU,cAAa;GACnC;;GAGA,MAAM,gBAAa;IACjB,MAAM,KAAK,WAAU;GACvB;;;;;;;;GASA,MAAM,OAAO,WAAmB,QAAoB;IAClD,MAAM,UAAU,KAAK;IACrB,IAAI,YAAY,KAAA,GAAW;IAC3B,MAAM,SAAS,MAAM,KAAK,UAAU,OAAO,OAAO,OAAO,GAAG,WAAW,QAAQ,KAAK,QAAQ;IAC5F,IAAI,CAAC,OAAO,IAAI;KACd,KAAK,MAAM,QAAQ,UAAS;MAAG,MAAM,QAAQ,OAAO;KAAQ,CAAC;KAC7D;IACF;IACA,KAAK,MAAM,QAAQ,UAAS;KAAG,MAAM,QAAQ,KAAA;IAAU,CAAC;IACxD,MAAM,KAAK,cAAa;IACxB,MAAM,KAAK,OAAO,OAAO;GAC3B;;;;;;;GAQA,MAAM,OAAO,WAAoB;IAC/B,MAAM,UAAU,KAAK,MAAM,YAAW,CAAE,CAAC;IACzC,IAAI,YAAY,KAAA,KAAa,QAAQ,SAAS,YAAY;IAC1D,MAAM,SAAS,gBAAgB,OAAO,CAAC,CAAC;IACxC,IAAI,WAAW,QAAQ;IACvB,MAAM,SAAS,MAAM,KAAK,UAAU,IAAI;KAAE;KAAQ,WAAW,OAAO,SAAS;IAAC,GAAI,KAAK,QAAQ;IAC/F,IAAI,CAAC,OAAO,IAAI;KACd,KAAK,MAAM,QAAQ,UAAS;MAAG,MAAM,QAAQ,OAAO;KAAQ,CAAC;KAC7D;IACF;IACA,KAAK,MAAM,QAAQ,UAAS;KAAG,MAAM,QAAQ,KAAA;IAAU,CAAC;IACxD,MAAM,KAAK,OAAO,SAAS;GAC7B;;GAGQ,MAAM,gBAAa;IACzB,MAAM,WAAW,MAAM,KAAK,UAAU,OAAO,KAAK,KAAK,QAAQ;IAC/D,IAAI,aAAa,KAAA,GAAW;KAC1B,KAAK,QAAQ,EAAE,MAAM,cAAa,CAAE;KACpC;IACF;IACA,KAAK,MAAM,QAAQ,UAAS;KAAG,MAAM,WAAW,SAAS;IAAS,CAAC;IACnE,KAAK,QAAQ;KAAE,MAAM;KAAY,QAAQ,SAAS;IAAM,CAAE;GAC5D;GAEQ,MAAM,OAAO,WAAoB;IACvC,KAAK,UAAU;IACf,MAAM,KAAK,cAAa;GAC1B;;GAGQ,MAAM,aAAU;IACtB,MAAM,UAAU,KAAK;IACrB,IAAI,YAAY,KAAA,GAAW;IAC3B,MAAM,WAAW,EAAE,KAAK;IACxB,MAAM,UAAU,MAAM,KAAK,eAAe,OAAO;IACjD,IAAI,KAAK,iBAAiB,UAAU;IACpC,KAAK,MAAM,QAAQ,UAAS;KAAG,MAAM,SAAS;IAAQ,CAAC;GACzD;;GAGQ,MAAM,eAAe,WAAoB;IAC/C,MAAM,OAAO,MAAM,KAAK,UAAU,OAAO,OAAO,SAAS,GAAG,KAAK,QAAQ;IACzE,OAAO,SAAS,KAAA,IAAY,EAAE,MAAM,cAAa,IAAK;KAAE,MAAM;KAAY,MAAM,KAAK,IAAI,aAAa;IAAC;GACzG;GAEQ,QAAQ,SAAsB;IACpC,KAAK,MAAM,QAAQ,UAAS;KAC1B,IAAI,MAAM,QAAQ,SAAS,QAAQ,SAC7B,QAAQ,SAAS,iBACf,MAAM,QAAQ,SAAS,cACtB,KAAK,UAAU,MAAM,OAAO,MAAM,MAAM,KAAK,UAAU,QAAQ,MAAM,IAAK;KACnF,MAAM,SAAS;IACjB,CAAC;GACH;;;;;;;;;;;;;ECnMF,SAAS,WAAW,MAAuB;GACzC,OAAO;IACL,QAAQ;KACN,GAAG,KAAK;KACR,UAAU,KAAK,OAAO;KACtB,UAAU,KAAK,OAAO;KACtB,SAAS,KAAK,OAAO;KACrB,aAAa,KAAK,OAAO;KACzB,aAAa,KAAK,OAAO;KACzB,MAAM,KAAK,OAAO;KAClB,OAAO,KAAK,OAAO;;IAErB,UAAU,OAAO,YAAY,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,MAAoB,CAAC,CAAC;;EAEhH;;;;;;;EAuBA,SAAgB,iBAAiB,QAA8B,UAAqB;GAClF,IAAI;GACJ,IAAI,SAAS;GACb,IAAI;GACJ,MAAM,4BAAY,IAAI,IAAG;GACzB,MAAM,oCAAoB,IAAI,IAAG;GACjC,MAAM,eAAoB;IACxB,KAAK,MAAM,YAAY,CAAC,GAAG,SAAS,GAAG,SAAQ;IAC/C,KAAK,MAAM,YAAY,CAAC,GAAG,iBAAiB,GAAG,SAAS,SAAS,KAAA,IAAY,MAAM;GACrF;GACc,IAAI,SAAe,YAAW;IAAG,QAAQ;GAAQ,CAAC;GAEhE,CAAM,YAAW;IACf,IAAI;KACF,WAAW,MAAM,YAAY,OAAO,QAAQ,QAAQ,GAAG;MACrD,SAAS,WAAW,QAAQ;MAC5B,QAAO;MACP,QAAQ,KAAA;MACR,OAAM;KACR;IACF,QAAQ;KACN,SAAS;KACT,SAAS,KAAA;KACT,OAAM;IACR,UAAU;KAGR,IAAI,CAAC,SAAS,SAAS;MACrB,SAAS;MACT,SAAS,KAAA;KACX;KACA,QAAO;KACP,QAAQ,KAAA;KACR,OAAM;IACR;GACF,EAAA,CAAE;GAEF,OAAO;IACL,WAAW,aAAY;KACrB,UAAU,IAAI,QAAQ;KACtB,aAAY;MAAG,UAAU,OAAO,QAAQ;KAAE;IAC5C;IACA,aAAa,aAAY;KACvB,kBAAkB,IAAI,QAAQ;KAC9B,aAAY;MAAG,kBAAkB,OAAO,QAAQ;KAAE;IACpD;IACA,MAAM,OAAO,WAAU;KACrB,IAAI,WAAW,KAAA,KAAa,CAAC,QAC3B,MAAM,IAAI,SAAe,YAAW;MAClC,MAAM,aAAkB;OAAG,QAAQ,oBAAoB,SAAS,IAAI;OAAG,QAAO;MAAG;MACjF,cAAa;OAAG,QAAQ,KAAA;OAAW,KAAI;MAAG;MAC1C,QAAQ,iBAAiB,SAAS,MAAM,EAAE,MAAM,KAAI,CAAE;MACtD,IAAI,WAAW,KAAA,KAAa,QAAQ,KAAI;KAC1C,CAAC;KAEH,QAAQ,eAAc;KACtB,OAAO,SAAS,KAAA,IAAY;IAC9B;;EAEJ;;;;;;;EAwBA,SAAgB,gBAAgB,QAA8B,UAAqB;GACjF,MAAM,SAAS,iBAAiB,QAAQ,QAAQ;GAChD,MAAM,gBAAuC;IAAE,IAAI;IAAO,SAAS;GAAqB;GACxF,OAAO;IACL;IACA,KAAK,OAAO,SAAS,WAAU;KAC7B,MAAM,SAAS,MAAM,OAAO,IAAI,SAAS,MAAM;KAC/C,OAAO,OAAO,KAAM,OAAO,SAAS,OAAM,IAAM,OAAM;IACxD;IACA,QAAQ,OAAO,QAAQ,WAAU;KAC/B,MAAM,SAAS,MAAM,OAAO,OAAO,EAAE,OAAM,GAAI,MAAM;KACrD,OAAO,OAAO,KAAK,OAAO,QAAQ,KAAA;IACpC;IACA,QAAQ,OAAO,QAAQ,QAAQ,UAAU,WAAU;KACjD,MAAM,SAAS,MAAM,OAAO,OAAO;MAAE;MAAQ;MAAQ;KAAQ,GAAI,MAAM;KACvE,OAAO,OAAO,KAAM,OAAO,SAAS,OAAM,IAAM,OAAM;IACxD;;EAEJ;;;;ECtJA,SAAS,OAAkB;GACzB,OAAO;IACL,QAAO,UAAS;IAChB,YAAW,WAAU;KAAE,SAAS;KAAM,MAAM;IAAM;IAClD,WAAW;KAAE,OAAO;IAAK;IACzB,WAAW;KAAE,OAAO;IAAK;IACzB,WAAW;KAAE,OAAO;IAAK;GAC3B;EACF;;EAGA,MAAa,IAAI;GACf,QAAQ;GACR,QAAQ;GACR,SAAS;GACT,WAAW;GACX,SAAS;GACT,OAAO;GACP,OAAO;GACP,QAAQ;GACR,QAAQ;GACR,cAAc;GACd,MAAM;EACR;;;;;;;;;;;;EChBA,SAAgB,uBAAuB,MAAwB,KAAa;GAC1E,OAAO,IAAI,WAAW,MAAM,GAAG;EACjC;EAEA,IAAM,aAAN,MAAgB;GAGe;GAAyC;GAF9D;GAER,YAA6B,MAAyC,KAAa;IAAtD,KAAA,OAAA;IAAyC,KAAA,MAAA;GAAgB;GAEtF,IAAI,UAAO;IAAa,OAAO,KAAK,KAAK;GAAQ;GACjD,IAAI,cAAW;IAAsC,OAAO,KAAK,QAAO,CAAE,CAAC;GAAY;GACvF,IAAI,UAAO;IAAkC,OAAO,KAAK,QAAO,CAAE,CAAC;GAAQ;GAEnE,UAAO;IACb,IAAI,KAAK,UAAU,KAAA,GAAW,OAAO,KAAK;IAC1C,MAAM,MAAM,KAAK;IACjB,MAAM,cAAsC,CAAA;IAC5C,MAAM,UAAU,OAAO,OAAO,IAAI;IAClC,KAAK,MAAM,CAAC,UAAU,eAAe,OAAO,QAAQ,KAAK,KAAK,OAAO,GAAG;KACtE,MAAM,YAAY,SAAS,QAAQ,GAAG;KACtC,MAAM,YAAY,SAAS,MAAM,GAAG,SAAS;KAC7C,MAAM,SAAS,SAAS,MAAM,YAAY,CAAC;KAC3C,MAAM,aAAa,WAAW,WAAW,KAAI,eAAc;MAAE,GAAG;MAAW,MAAM,UAAU,QAAQ,UAAU;KAAI,EAAG;KACpH,MAAM,aAAa;MACjB,GAAG;MACH,IAAI,GAAG,KAAK,KAAK,QAAO,GAAI;MAC5B;MACA;MACA;MACA,QAAQ,WAAW,OAAO,gBAAgB,KAAA,IAAY,WAAW,SAAS,IAAI,YAAY,WAAW,MAAM;;KAE7G,IAAI,WAAW,WAAW,SAAS,UAAU;MAC3C,MAAM,SAAqC,CAAA;MAiB3C,QAAQ,YAhBO,OAAO,OAAO,YAAY;OACvC,MAAM,SAAkC;QACtC,MAAM,SAAS,SAAS,WAAW;QACnC,OAAO,OAAO,SAAS,IAAI,OAAO,IAAI,WAAW,YAAY,QAAQ,GAAG;OAC1E;OACA,OAAO,QAA4B,OAAe,QAAoB;QACpE,MAAM,QAAQ;QACd,MAAM,SAAS,WAAW,KAAI,cAAa,MAAM,UAAU,KAAK;QAChE,IAAI,WAAW,iBAAiB,KAAA,GAAW,OAAO,KAAK,MAAM;QAE7D,MAAM,WAAW,QAAQ,IAAI,QAAQ,SAAS;QAE9C,OADa,QAAQ,IAAI,UAAU,MAC5B,CAAI,CAAC,MAAM,UAAU,MAAM;OACpC;OAGkB;KACtB;KACA,YAAY,KAAK,UAAU;IAC7B;IACA,OAAO,KAAK,QAAQ;KAAE;KAAa;IAAO;GAC5C;;EAcF,SAAS,SAAS,WAAoB;GACpC,OAAO,UAAU,WAAW,UAAU,UAAU,qBAAqB;EACvE;EAEA,IAAM,aAAN,MAAgB;GAKK;GACA;GACA;GANX;GACA;GAER,YACmB,YACA,QACA,KAAa;IAFb,KAAA,aAAA;IACA,KAAA,SAAA;IACA,KAAA,MAAA;GAChB;GAEK,MAAM,WAAoB;IAChC,OAAO,KAAK,SAAS,UAAU,cAAc,UAAU;GACzD;GAES,eAAkC,KAAK,WAAW,KAAK,IAAI,aAAa,OAAO,YAAY,KAAK,WAAW,KAAK,cAAa;IACpI,MAAM,QAAQ,KAAK,MAAM,SAAS,CAAC,CAAC,OAAM;IAC1C,OAAO,CAAC,UAAU,MAAM,SAAS,SAAS,IAAI,MAAM,SAAQ,IAAK,MAAM,YAAW,CAAE;GACtF,CAAC,CAAC,CAAC;GAEH,IAAI,aAAU;IAAsC,OAAO,KAAK,QAAO,CAAE,CAAC;GAAW;GACrF,IAAI,kBAAe;IAAyB,OAAO,KAAK,QAAO,CAAE,CAAC;GAAgB;GAE1E,UAAO;IACb,IAAI,KAAK,eAAe,KAAA,GAAW,OAAO,KAAK;IAC/C,MAAM,cAAc,KAAK,WAAW,MAAK,cAAa,KAAK,MAAM,SAAS,CAAC,CAAC,eAAe,KAAA,CAAS;IACpG,IAAI,gBAAgB,KAAA,GAClB,OAAO,KAAK,aAAa,EAAE,iBAAiB,KAAK,MAAM,WAAW,CAAC,CAAC,mBAAmB,gCAAgC,YAAY,OAAM;IAE3I,OAAO,KAAK,aAAa,EACvB,YAAY;KACV,MAAM;KACN,YAAY,OAAO,YAAY,KAAK,WAAW,KAAI,cAAa,CAAC,UAAU,MAAM;MAC/E,GAAG,KAAK,MAAM,SAAS,CAAC,CAAC;MACzB,GAAI,UAAU,gBAAgB,KAAA,IAAY,CAAA,IAAK,EAAE,aAAa,UAAU,YAAW;MACpF,CAAC,CAAC;KACH,UAAU,KAAK,WAAW,QAAO,cAAa,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,KAAI,cAAa,UAAU,IAAI;KACnG,sBAAsB;;GAG5B;;EAGF,IAAM,cAAN,MAAiB;GAGc;GAFrB;GAER,YAA6B,MAA2B;IAA3B,KAAA,OAAA;GAA8B;GAE3D,IAAI,OAAI;IAAe,OAAO,KAAK,KAAK;GAAK;GAC7C,IAAI,aAAU;IAAa,OAAO,KAAK,KAAK;GAAW;GACvD,IAAI,SAAM;IAAsC,OAAO,KAAK,KAAK;GAAO;GACxE,IAAI,SAAM;IAAsC,OAAO,KAAK,KAAK;GAAO;GACxE,IAAI,SAAM;IAAsC,OAAO,KAAK,KAAK;GAAO;GACxE,IAAI,cAAW;IAAyB,OAAO,KAAK,KAAK;GAAY;GACrE,IAAI,kBAAe;IAAyB,OAAO,KAAK,KAAK;GAAgB;GAC7E,IAAI,aAAU;IACZ,IAAI,KAAK,eAAe,KAAA,GAAW;KACjC,MAAM,SAAS,KAAK,KAAK;KACzB,KAAK,aAAa,EAAE,OAAO,WAAW,KAAA,IAAY,KAAA,IAAY;MAAE,GAAG;MAAQ,aAAa,KAAK,KAAK;KAAW,EAAE;IACjH;IACA,OAAO,KAAK,WAAW;GACzB;;;;EC1JF,IAAI;EACJ,MAAM,8DAA+D,gEAAgE,EAAE,OAAO;GAC5I,UAAU,EAAE,MAAM;IAAC,EAAE,QAAQ,OAAO;IAAG,EAAE,QAAQ,QAAQ;IAAG,EAAE,QAAQ,WAAW;IAAG,EAAE,QAAQ,YAAY;IAAG,EAAE,QAAQ,YAAY;IAAG,EAAE,QAAQ,MAAM;GAAC,CAAC,CAAC,CAAC,SAAS;GACnK,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,+CAA+C;EAC7F,CAAC;EACD,IAAI;EACJ,MAAM,yDAA0D,2DAA2D,EAAE,OAAO;GAClI,MAAM,EAAE,QAAQ,CAAC,CAAC,SAAS;GAC3B,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS;EACjC,CAAC;EACD,IAAI;EACJ,MAAM,iEAAkE,mEAAmE,EAAE,OAAO;GAClJ,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;GAC9B,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;GAC9B,YAAY,EAAE,MAAM;IAAC,EAAE,QAAQ,MAAM;IAAG,EAAE,QAAQ,UAAU;IAAG,EAAE,QAAQ,MAAM;IAAG,EAAE,QAAQ,QAAQ;IAAG,EAAE,QAAQ,OAAO;GAAC,CAAC,CAAC,CAAC,SAAS;EACvI,CAAC;EACD,IAAI;EACJ,MAAM,4DAA6D,8DAA8D,EAAE,OAAO;GACxI,MAAM,EAAE,QAAQ,CAAC,CAAC,SAAS;GAC3B,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS;EACjC,CAAC;EACD,IAAI;EACJ,MAAM,6DAA8D,+DAA+D,EAAE,OAAO;GAC1I,UAAU,EAAE,OAAO;IACnB,WAAW,EAAE,MAAM;KAAC,EAAE,QAAQ,MAAM;KAAG,EAAE,QAAQ,SAAS;KAAG,EAAE,QAAQ,MAAM;IAAC,CAAC,CAAC,CAAC,SAAS;IAC1F,cAAc,EAAE,OAAO,CAAC,CAAC,SAAS;IAClC,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS;IAC5B,YAAY,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;IACrE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;IACzC,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS;IAC/B,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;IACxC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;IAC5C,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;IAC5C,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;IACrC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;GACxC,CAAC,CAAC,CAAC,SAAS;GACV,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO;IAC1C,SAAS,EAAE,MAAM;KAAC,EAAE,QAAQ,MAAM;KAAG,EAAE,QAAQ,QAAQ;KAAG,EAAE,QAAQ,UAAU;KAAG,EAAE,QAAQ,SAAS;KAAG,EAAE,QAAQ,cAAc;IAAC,CAAC,CAAC,CAAC,SAAS;IAC5I,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;IAC7C,aAAa,EAAE,MAAM;KAAC,EAAE,UAAU;KAAG,EAAE,QAAQ,KAAK;KAAG,EAAE,QAAQ,IAAI;IAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;GAC/F,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;EACxB,CAAC;EACD,IAAI;EACJ,MAAM,8DAA+D,gEAAgE,EAAE,OAAO;GAC5I,UAAU,EAAE,OAAO;IACnB,WAAW,EAAE,MAAM;KAAC,EAAE,QAAQ,MAAM;KAAG,EAAE,QAAQ,SAAS;KAAG,EAAE,QAAQ,MAAM;IAAC,CAAC,CAAC,CAAC,SAAS;IAC1F,cAAc,EAAE,OAAO,CAAC,CAAC,SAAS;IAClC,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS;IAC5B,YAAY,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;IACrE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;IACzC,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS;IAC/B,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;IACxC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;IAC5C,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;IAC5C,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;IACrC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;GACxC,CAAC,CAAC,CAAC,SAAS;GACV,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO;IAC1C,SAAS,EAAE,MAAM;KAAC,EAAE,QAAQ,MAAM;KAAG,EAAE,QAAQ,QAAQ;KAAG,EAAE,QAAQ,UAAU;KAAG,EAAE,QAAQ,SAAS;KAAG,EAAE,QAAQ,cAAc;IAAC,CAAC,CAAC,CAAC,SAAS;IAC5I,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;IAC7C,aAAa,EAAE,MAAM;KAAC,EAAE,UAAU;KAAG,EAAE,QAAQ,KAAK;KAAG,EAAE,QAAQ,IAAI;IAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;GAC/F,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;EACxB,CAAC;EACD,IAAI;EACJ,MAAM,iEAAkE,mEAAmE,EAAE,OAAO,EAClJ,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS,EAChC,CAAC;EACD,IAAI;EACJ,MAAM,4DAA6D,8DAA8D,EAAE,MAAM,EAAE,OAAO;GAChJ,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS;GACjC,SAAS,EAAE,MAAM;IAAC,EAAE,QAAQ,UAAU;IAAG,EAAE,QAAQ,SAAS;IAAG,EAAE,QAAQ,cAAc;GAAC,CAAC,CAAC,CAAC,SAAS;GACpG,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS;GACjC,WAAW,EAAE,MAAM,CAAC,EAAE,QAAQ,MAAM,GAAG,EAAE,QAAQ,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;GAC1E,aAAa,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;GACtE,QAAQ,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;GACjE,QAAQ,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;GACjE,UAAU,EAAE,MAAM,EAAE,OAAO;IAC3B,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS;IAC5B,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;GAChC,CAAC,CAAC,CAAC,CAAC,SAAS;GACX,QAAQ,EAAE,QAAQ,CAAC,CAAC,SAAS;GAC7B,YAAY,EAAE,QAAQ,CAAC,CAAC,SAAS;GACjC,aAAa,EAAE,QAAQ,CAAC,CAAC,SAAS;EACpC,CAAC,CAAC;EACF,IAAI;EACJ,MAAM,qEAAsE,uEAAuE,EAAE,aAAa;GAChK,UAAU,EAAE,MAAM;IAAC,EAAE,QAAQ,OAAO;IAAG,EAAE,QAAQ,QAAQ;IAAG,EAAE,QAAQ,WAAW;IAAG,EAAE,QAAQ,YAAY;IAAG,EAAE,QAAQ,YAAY;IAAG,EAAE,QAAQ,MAAM;GAAC,CAAC,CAAC,CAAC,SAAS;GACnK,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,+CAA+C;EAC7F,CAAC;EACD,IAAI;EACJ,MAAM,wEAAyE,0EAA0E,EAAE,aAAa;GACtK,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;GAC9B,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;GAC9B,YAAY,EAAE,MAAM;IAAC,EAAE,QAAQ,MAAM;IAAG,EAAE,QAAQ,UAAU;IAAG,EAAE,QAAQ,MAAM;IAAG,EAAE,QAAQ,QAAQ;IAAG,EAAE,QAAQ,OAAO;GAAC,CAAC,CAAC,CAAC,SAAS;EACvI,CAAC;EACD,IAAI;EACJ,MAAM,wEAAyE,0EAA0E,EAAE,aAAa,EACtK,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS,EAChC,CAAC;EAED,MAAa,gBAAgB,uBAAuB;GAClD,SAAS;GACT,SAAS;IACP,oBAAoB;KAClB,SAAS;KACT,aAAa;KACb,YAAY,EAAE,MAAM,SAAS;KAC7B,YAAY,CACV;MACE,MAAM;MACN,aAAa;MACb,QAAQ;MACR,OAAO;OACL,MAAM;OACN,YAAY;OACZ,QAAQ;OACR,YAAY;QAAC,QAAO;QAAS,cAAa;SAAC,UAAS;UAAC,QAAO;UAAS,QAAO;WAAC;WAAQ;WAAS;WAAY;WAAa;WAAa;UAAM;SAAC;SAAE,aAAY;UAAC,QAAO;UAAS,eAAc;SAA+C;QAAC;QAAE,YAAW,CAAC,UAAS,WAAW;QAAE,wBAAuB;OAAI;MACzS;MACA,aAAa;OACX,MAAM;OACN,YAAY;OACZ,QAAQ;OACR,YAAY;QAAC,QAAO;QAAS,cAAa;SAAC,UAAS;UAAC,QAAO;UAAS,QAAO;WAAC;WAAQ;WAAS;WAAY;WAAa;WAAa;UAAM;SAAC;SAAE,aAAY;UAAC,QAAO;UAAS,eAAc;SAA+C;QAAC;QAAE,YAAW,CAAC,UAAS,WAAW;QAAE,wBAAuB;OAAK;MAC1S;KACF,CACF;KACA,cAAc,EAAE,WAAW,SAAS;KACpC,QAAQ;MACN,MAAM;MACN,YAAY;MACZ,QAAQ;MACR,aAAa;MACb,YAAY;OAAC,QAAO;OAAS,cAAa;QAAC,MAAK,EAAC,QAAO,UAAS;QAAE,WAAU,EAAC,QAAO,SAAQ;OAAC;OAAE,YAAW,CAAC,MAAK,SAAS;OAAE,wBAAuB;MAAI;KACzJ;KACA,gBAAgB;MAAC,QAAO;MAA2C,QAAO;MAAI,UAAS;KAAC;IAC1F;IACA,uBAAuB;KACrB,SAAS;KACT,aAAa;KACb,YAAY,EAAE,MAAM,SAAS;KAC7B,YAAY,CACV;MACE,MAAM;MACN,aAAa;MACb,QAAQ;MACR,OAAO;OACL,MAAM;OACN,YAAY;OACZ,QAAQ;OACR,YAAY;QAAC,QAAO;QAAS,cAAa;SAAC,UAAS,EAAC,QAAO,SAAQ;SAAE,UAAS,EAAC,QAAO,SAAQ;SAAE,YAAW;UAAC,QAAO;UAAS,QAAO;WAAC;WAAO;WAAW;WAAO;WAAS;UAAO;SAAC;QAAC;QAAE,YAAW;SAAC;SAAS;SAAS;QAAU;QAAE,wBAAuB;OAAI;MACzP;MACA,aAAa;OACX,MAAM;OACN,YAAY;OACZ,QAAQ;OACR,YAAY;QAAC,QAAO;QAAS,cAAa;SAAC,UAAS,EAAC,QAAO,SAAQ;SAAE,UAAS,EAAC,QAAO,SAAQ;SAAE,YAAW;UAAC,QAAO;UAAS,QAAO;WAAC;WAAO;WAAW;WAAO;WAAS;UAAO;SAAC;QAAC;QAAE,YAAW;SAAC;SAAS;SAAS;QAAU;QAAE,wBAAuB;OAAK;MAC1P;KACF,CACF;KACA,cAAc,EAAE,WAAW,SAAS;KACpC,QAAQ;MACN,MAAM;MACN,YAAY;MACZ,QAAQ;MACR,aAAa;MACb,YAAY;OAAC,QAAO;OAAS,cAAa;QAAC,MAAK,EAAC,QAAO,UAAS;QAAE,WAAU,EAAC,QAAO,SAAQ;OAAC;OAAE,YAAW,CAAC,MAAK,SAAS;OAAE,wBAAuB;MAAI;KACzJ;KACA,gBAAgB;MAAC,QAAO;MAA2C,QAAO;MAAI,UAAS;KAAC;IAC1F;IACA,wBAAwB;KACtB,SAAS;KACT,aAAa;KACb,MAAM;KACN,YAAY,EAAE,MAAM,SAAS;KAC7B,YAAY,CACZ;KACA,cAAc,EAAE,WAAW,SAAS;KACpC,QAAQ;MACN,MAAM;MACN,YAAY;MACZ,QAAQ;MACR,aAAa;MACb,iBAAiB;KACnB;KACA,gBAAgB;MAAC,QAAO;MAA2C,QAAO;MAAI,UAAS;KAAE;IAC3F;IACA,yBAAyB;KACvB,SAAS;KACT,aAAa;KACb,YAAY,EAAE,MAAM,SAAS;KAC7B,YAAY,CACZ;KACA,cAAc,EAAE,WAAW,SAAS;KACpC,QAAQ;MACN,MAAM;MACN,YAAY;MACZ,QAAQ;MACR,aAAa;MACb,iBAAiB;KACnB;KACA,gBAAgB;MAAC,QAAO;MAA2C,QAAO;MAAI,UAAS;KAAC;IAC1F;IACA,uBAAuB;KACrB,SAAS;KACT,aAAa;KACb,YAAY,EAAE,MAAM,SAAS;KAC7B,YAAY,CACV;MACE,MAAM;MACN,aAAa;MACb,QAAQ;MACR,OAAO;OACL,MAAM;OACN,YAAY;OACZ,QAAQ;OACR,YAAY;QAAC,QAAO;QAAS,cAAa,EAAC,UAAS,EAAC,QAAO,SAAQ,EAAC;QAAE,YAAW,CAAC,QAAQ;QAAE,wBAAuB;OAAI;MAC1H;MACA,aAAa;OACX,MAAM;OACN,YAAY;OACZ,QAAQ;OACR,YAAY;QAAC,QAAO;QAAS,cAAa,EAAC,UAAS,EAAC,QAAO,SAAQ,EAAC;QAAE,YAAW,CAAC,QAAQ;QAAE,wBAAuB;OAAK;MAC3H;KACF,CACF;KACA,cAAc,EAAE,WAAW,SAAS;KACpC,QAAQ;MACN,MAAM;MACN,YAAY;MACZ,QAAQ;MACR,aAAa;MACb,YAAY;OAAC,QAAO;OAAQ,SAAQ;QAAC,QAAO;QAAS,cAAa;SAAC,aAAY,EAAC,QAAO,SAAQ;SAAE,SAAQ;UAAC,QAAO;UAAS,QAAO;WAAC;WAAW;WAAU;UAAc;SAAC;SAAE,aAAY,EAAC,QAAO,SAAQ;SAAE,WAAU;UAAC,QAAO;UAAS,QAAO,CAAC,QAAO,YAAY;SAAC;SAAE,aAAY,EAAC,QAAO,SAAQ;SAAE,QAAO,EAAC,QAAO,SAAQ;SAAE,QAAO,EAAC,QAAO,SAAQ;SAAE,UAAS;UAAC,QAAO;UAAQ,SAAQ;WAAC,QAAO;WAAS,cAAa;YAAC,QAAO,EAAC,QAAO,SAAQ;YAAE,UAAS,EAAC,QAAO,SAAQ;WAAC;WAAE,YAAW,CAAC,QAAO,QAAQ;WAAE,wBAAuB;UAAI;SAAC;SAAE,QAAO,EAAC,QAAO,UAAS;SAAE,YAAW,EAAC,QAAO,UAAS;SAAE,aAAY,EAAC,QAAO,UAAS;QAAC;QAAE,YAAW;SAAC;SAAY;SAAQ;SAAY;SAAU;SAAS;SAAO;SAAW;QAAW;QAAE,wBAAuB;OAAI;MAAC;KACntB;KACA,gBAAgB;MAAC,QAAO;MAA2C,QAAO;MAAI,UAAS;KAAC;IAC1F;GACF;EACF,GAAG,CAAC;;;;ECxOJ,SAAgB,YAAS;GACvB,QAAA,GAAA,kBAAA,KAAA,CACE,OAAA;IAAA,eACc;IACZ,OAAO;IACP,QAAQ;IACR,SAAQ;IACR,MAAK;IACL,QAAO;IACP,aAAa;IACb,eAAc;IACd,gBAAe;IAAO,UAAA,EAAA,GAAA,kBAAA,IAAA,CAEtB,QAAA,EAAM,GAAE,UAAS,CAAA,IAAA,GAAA,kBAAA,IAAA,CACjB,QAAA,EAAM,GAAE,WAAU,CAAA,CAAG;GAAA,CAAA;EAG3B;;EAGA,SAAgB,aAAU;GACxB,QAAA,GAAA,kBAAA,IAAA,CACE,OAAA;IAAA,eACc;IACZ,OAAO;IACP,QAAQ;IACR,SAAQ;IACR,MAAK;IACL,QAAO;IACP,aAAa;IACb,eAAc;IACd,gBAAe;IAAO,WAAA,GAAA,kBAAA,IAAA,CAEtB,QAAA,EAAM,GAAE,oBAAmB,CAAA;GAAG,CAAA;EAGpC;;;;;;EAOA,SAAgB,WAAQ;GACtB,QAAA,GAAA,kBAAA,KAAA,CACE,OAAA;IAAA,eACc;IACZ,OAAO;IACP,QAAQ;IACR,SAAQ;IACR,MAAK;IACL,QAAO;IACP,aAAa;IACb,eAAc;IACd,gBAAe;IAAO,UAAA,EAAA,GAAA,kBAAA,IAAA,CAEtB,UAAA;KAAQ,IAAG;KAAK,IAAG;KAAK,GAAE;IAAG,CAAA,IAAA,GAAA,kBAAA,IAAA,CAC7B,UAAA;KAAQ,IAAG;KAAK,IAAG;KAAK,GAAE;IAAG,CAAA,CAAG;GAAA,CAAA;EAGtC;;;;;;EAOA,SAAgB,aAAU;GACxB,QAAA,GAAA,kBAAA,KAAA,CACE,OAAA;IAAA,eACc;IACZ,OAAO;IACP,QAAQ;IACR,SAAQ;IACR,MAAK;IACL,QAAO;IACP,aAAa;IACb,eAAc;IACd,gBAAe;IAAO,UAAA;gCAEtB,UAAA;MAAQ,IAAG;MAAK,IAAG;MAAK,GAAE;KAAG,CAAA;gCAC7B,QAAA,EAAM,GAAE,cAAa,CAAA;gCACrB,QAAA,EAAM,GAAE,cAAa,CAAA;IAAG;GAAA,CAAA;EAG9B;;EAGA,SAAgB,cAAW;GACzB,QAAA,GAAA,kBAAA,IAAA,CACE,OAAA;IAAA,eACc;IACZ,OAAO;IACP,QAAQ;IACR,SAAQ;IACR,MAAK;IACL,QAAO;IACP,aAAa;IACb,eAAc;IACd,gBAAe;IAAO,WAAA,GAAA,kBAAA,IAAA,CAEtB,QAAA,EAAM,GAAE,gBAAe,CAAA;GAAG,CAAA;EAGhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECzDA,SAAS,iBAAiB,OAIzB;GACC,MAAM,EAAE,KAAK,QAAQ,MAAM;GAC3B,QAAA,GAAA,kBAAA,KAAA,CACE,MAAA;IAAI,WAAW,0BAAO;IAAU,UAAA;iCAC9B,OAAA;MAAK,WAAW,0BAAO;MAAc,UAAA,EAAA,GAAA,kBAAA,IAAA,CACnC,QAAA;OAAM,WAAW,0BAAO;OAAY,UAAG,IAAI;MAAS,CAAA,IAAA,GAAA,kBAAA,IAAA,CACpD,QAAA;OAAM,WAAW,0BAAO;OAAe,UAAG,EAAE,IAAI,QAAQ;MAAC,CAAA,CAAQ;KAAA,CAAA;iCAEnE,OAAA;MAAK,WAAW,0BAAO;MAAe,UAAA,CACnC,IAAI,YAAA,GAAA,kBAAA,KAAA,CAED,kBAAA,UAAA,EAAA,UAAA,EAAA,GAAA,kBAAA,KAAA,CACE,QAAA,EAAA,UAAA;OAAO,EAAE,gBAAgB;OAAC;OAAI,IAAI,WAAW;MAAG,EAAA,CAAA,IAAA,GAAA,kBAAA,IAAA,CAChD,QAAA,EAAA,UACG,IAAI,aAAa,WAAW,IACzB,EAAE,kBAAkB,IACpB,GAAG,EAAE,cAAc,EAAC,IAAK,IAAI,aAAa,KAAK,IAAI,IAAG,CAAA,CACrD,EAAA,CAAA,KAAA,GAAA,kBAAA,IAAA,CAGT,QAAA,EAAA,UAAO,EAAE,uBAAuB,EAAC,CAAA,GACpC,IAAI,YAAY,CAAC,IAAI,YAAA,GAAA,kBAAA,IAAA,CAAW,QAAA,EAAA,UAAO,EAAE,eAAe,EAAC,CAAA,IAAW,IAAI;KAAA,CAAA;iCAE3E,OAAA;MAAK,WAAW,0BAAO;MAAiB,UAAA,CACrC,iBAAiB,GAAG,CAAC,CAAC,KAAI,YAAA,GAAA,kBAAA,IAAA,CACzB,UAAA;OAEE,MAAK;OACL,WAAW,0BAAO;OAAa,cACnB,EAAE,OAAO,OAAO;OAC5B,eAAc;QAAG,OAAO,IAAI,WAAW,OAAO,MAAM;OAAE;OAAC,UAEtD,EAAE,OAAO,QAAQ;MAAC,GANd,OAAO,MAAM,CAQrB,IAAA,GAAA,kBAAA,IAAA,CAGD,UAAA;OACE,MAAK;OACL,WAAW,0BAAO;OAAa,cACnB,EAAE,iBAAiB,OAAO;OAAC,gBACzB,IAAI;OAClB,eAAc;QAAG,OAAO,IAAI,WAAW,iBAAiB,MAAM;OAAE;OAAC,UAEhE,EAAE,iBAAiB,QAAQ;MAAC,CAAA,CACtB;KAAA,CAAA;IACL;GAAA,CAAA;EAGZ;;;;;;;;EASA,SAAgB,UAAU,OAAqB;GAC7C,MAAM,EAAE,SAAS,QAAQ,UAAU,QAAQ,GAAG,aAAa,eAAe;GAC1E,MAAM,UAAU,MAAM,gBAAe,UAAS,MAAM,MAAM;GAC1D,MAAM,SAAS,MAAM,gBAAe,UAAS,MAAM,MAAM;GACzD,MAAM,OAAO,MAAM,gBAAe,UAAS,MAAM,SAAS;GAC5C,MAAM,gBAAe,UAAS,MAAM,KAAK;GACvD,MAAM,WAAW,MAAM,gBAAe,UAAS,MAAM,QAAQ;GAE7D,MAAM,UAAU,YAAY,iBAAiB;GAC7C,MAAM,OAAO,gBAAgB,SAAS,QAAQ;GAC9C,MAAM,OAAO,WAAW,MAAM;GAK9B,MAAM,UAAU,kBAAkB,YAAW,aAAY,SAAS,QAAQ,CAAC;GAI3E,CAAA,GAAA,MAAA,UAAA,OAAe;IACb,IAAI,WAAW,YAAY,KAAA,GAAW,QAAQ,OAAO;GACvD,GAAG;IAAC;IAAS;IAAS;GAAO,CAAC;GAC9B,IAAI,CAAC,WAAW,CAAC,KAAK,WAAW,YAAY,KAAA,GAAW,OAAO;GAC/D,MAAM,MAAM,KAAK,QACd,KAAI,WAAU,OAAO,MAAM,WAAW,IACnC,EAAE,OAAO,GAAG,IACZ,GAAG,EAAE,OAAO,GAAG,EAAC,IAAK,OAAO,MAAM,KAAK,IAAI,EAAC,EAAG,CAAC,CACnD,KAAK,IAAI;GACZ,QAAA,GAAA,kBAAA,KAAA,CACE,QAAA;IAAM,WAAW,0BAAO;IAAO,UAAA;KAC5B,CAAC,OACE,QAAA,GAAA,kBAAA,KAAA,CAEA,OAAA;MAAK,WAAW,0BAAO;MAAc,MAAK;MAAQ,cAAa,EAAE,cAAc;MAAC,UAAA,EAAA,GAAA,kBAAA,KAAA,CAC9E,OAAA;OAAK,WAAW,0BAAO;OAAgB,UAAA,EAAA,GAAA,kBAAA,IAAA,CACrC,QAAA;QAAM,WAAW,0BAAO;QAAW,UAAG,EAAE,cAAc;OAAC,CAAA,IAAA,GAAA,kBAAA,IAAA,CACvD,UAAA;QACE,MAAK;QACL,WAAW,0BAAO;QAAa,cACnB,EAAE,qBAAqB;QACnC,eAAc;SAAG,SAAS,IAAI;QAAE;QAAC,UAEhC,EAAE,qBAAqB;OAAC,CAAA,CAClB;MAAA,CAAA,GAEV,CAAC,KAAK,WAAA,GAAA,kBAAA,IAAA,CACH,KAAA;OAAG,WAAW,0BAAO;OAAgB,UAAG,EAAE,gBAAgB;MAAC,CAAA,IAC3D,KAAK,eAAA,GAAA,kBAAA,IAAA,CACH,KAAA;OAAG,WAAW,0BAAO;OAAgB,UAAG,EAAE,oBAAoB;MAAC,CAAA,IAC/D,KAAK,KAAK,WAAW,KAAA,GAAA,kBAAA,IAAA,CACnB,KAAA;OAAG,WAAW,0BAAO;OAAgB,UAAG,EAAE,cAAc;MAAC,CAAA,KAAA,GAAA,kBAAA,IAAA,CAE3D,MAAA;OAAI,WAAW,0BAAO;OAAW,UAC9B,KAAK,KAAK,KAAI,SAAA,GAAA,kBAAA,IAAA,CACZ,kBAAgB;QAA0B;QAAa;QAAW;OAAC,GAA7C,IAAI,SAAS,CACrC;MAAC,CAAA,CAEL;KAAA,CAAA;KAGV,KAAK,YAAY,IACd,QAAA,GAAA,kBAAA,KAAA,CAEA,UAAA;MACE,MAAK;MACL,WAAW,0BAAO;MAAa,cACnB,EAAE,kBAAkB;MAAC,iBAClB;MACf,OAAO,GAAG,OAAO,KAAK,OAAO,EAAC,GAAI,EAAE,YAAY;MAChD,eAAc;OAAG,SAAS,CAAC,IAAI;MAAE;MAAC,UAAA,EAAA,GAAA,kBAAA,IAAA,CAEjC,aAAW,CAAA,CAAA,IAAA,GAAA,kBAAA,IAAA,CACZ,QAAA;OAAM,WAAW,0BAAO;OAAa,UAAG,KAAK;MAAO,CAAA,CAAQ;KAAA,CAAA;iCAGlE,UAAA;MACE,MAAK;MACL,WAAW,KAAK,aAAa,KAAA,KAAa,KAAK,OAAO,WAAW,IAC7D,GAAG,0BAAO,WAAU,GAAI,0BAAO,gBAC/B,0BAAO;MAAU,cACT,EAAE,KAAK,OAAO;MAAC,gBACb,KAAK,WAAW,gBAAgB,KAAK,WAAW;MAC9D,UAAU,CAAC,KAAK;MAAO,GACnB,IAAI,WAAW,IAAI,CAAA,IAAK,EAAE,OAAO,IAAG;MACxC,eAAc;OAAG,OAAO,OAAO;MAAE;MAAC,UAAA;OAEjC,KAAK,WAAW,gBAAgB,KAAK,WAAW,gBAAA,GAAA,kBAAA,IAAA,CAAgB,YAAU,CAAA,CAAA,KAAA,GAAA,kBAAA,IAAA,CAAO,WAAS,CAAA,CAAA;OAC1F,KAAK,aAAa,KAAA,IAAY,QAAA,GAAA,kBAAA,IAAA,CAAO,QAAA;QAAM,WAAW,0BAAO;QAAW,UAAG,EAAE,KAAK,QAAQ;OAAC,CAAA;OAC3F,KAAK,OAAO,WAAW,IAAI,QAAA,GAAA,kBAAA,IAAA,CAAO,QAAA;QAAM,WAAW,0BAAO;QAAa,UAAG,KAAK;OAAM,CAAA;OACrF,KAAK,QAAQ,WAAW,IAAI,QAAA,GAAA,kBAAA,IAAA,CAAO,QAAA;QAAM,WAAW,0BAAO;QAAW,WAAA,GAAA,kBAAA,IAAA,CAAG,YAAU,CAAA,CAAA;OAAG,CAAA;MAAO;KAAA,CAAA;IACvF;GAAA,CAAA;EAGf;;;;;EChNA,MAAa,KAAK;GAChB,cAAc;GACd,cAAc;GACd,iBAAiB;GACjB,gBAAgB;GAChB,aAAa;GACb,oBAAoB;GACpB,kBAAkB;GAClB,iBAAiB;GACjB,cAAc;GACd,qBAAqB;GACrB,aAAa;GACb,eAAe;GACf,gBAAgB;GAChB,iBAAiB;GACjB,gBAAgB;GAChB,oBAAoB;GACpB,mBAAmB;GACnB,kBAAkB;GAClB,mBAAmB;GACnB,YAAY;GACZ,iBAAiB;GACjB,cAAc;GACd,mBAAmB;GACnB,eAAe;GACf,oBAAoB;GACpB,YAAY;GACZ,qBAAqB;GACrB,mBAAmB;GACnB,0BAA0B;GAC1B,sBAAsB;GACtB,qBAAqB;GACrB,yBAAyB;GACzB,wBAAwB;GACxB,oBAAoB;GACpB,gBAAgB;GAChB,gBAAgB;GAChB,kBAAkB;GAClB,sBAAsB;GACtB,uBAAuB;GACvB,uBAAuB;GACvB,kBAAkB;GAClB,yBAAyB;GACzB,gBAAgB;GAChB,oBAAoB;GACpB,iBAAiB;GACjB,yBAAyB;GACzB,wBAAwB;GACxB,4BAA4B;GAC5B,mBAAmB;GACnB,wBAAwB;GACxB,eAAe;GACf,oBAAoB;GACpB,iBAAiB;GACjB,sBAAsB;GACtB,gBAAgB;GAChB,qBAAqB;GACrB,eAAe;GACf,oBAAoB;GACpB,cAAc;;;EAOhB,MAAa,KAA+B;GAC1C,cAAc;GACd,cAAc;GACd,iBAAiB;GACjB,gBAAgB;GAChB,aAAa;GACb,oBAAoB;GACpB,kBAAkB;GAClB,iBAAiB;GACjB,cAAc;GACd,qBAAqB;GACrB,aAAa;GACb,eAAe;GACf,gBAAgB;GAChB,iBAAiB;GACjB,gBAAgB;GAChB,oBAAoB;GACpB,mBAAmB;GACnB,kBAAkB;GAClB,mBAAmB;GACnB,YAAY;GACZ,iBAAiB;GACjB,cAAc;GACd,mBAAmB;GACnB,eAAe;GACf,oBAAoB;GACpB,YAAY;GACZ,qBAAqB;GACrB,mBAAmB;GACnB,0BAA0B;GAC1B,sBAAsB;GACtB,qBAAqB;GACrB,yBAAyB;GACzB,wBAAwB;GACxB,oBAAoB;GACpB,gBAAgB;GAChB,gBAAgB;GAChB,kBAAkB;GAClB,sBAAsB;GACtB,uBAAuB;GACvB,uBAAuB;GACvB,kBAAkB;GAClB,yBAAyB;GACzB,gBAAgB;GAChB,oBAAoB;GACpB,iBAAiB;GACjB,yBAAyB;GACzB,wBAAwB;GACxB,4BAA4B;GAC5B,mBAAmB;GACnB,wBAAwB;GACxB,eAAe;GACf,oBAAoB;GACpB,iBAAiB;GACjB,sBAAsB;GACtB,gBAAgB;GAChB,qBAAqB;GACrB,eAAe;GACf,oBAAoB;GACpB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECjEhB,MAAM,KAAK;;EAGX,MAAa,SAAS;GAAC;GAAS;GAAU;EAAQ;;;;;;;;;;;;;;;EAgClD,SAAgB,YAAY,OAAuB;GACjD,MAAM,EAAE,WAAW,SAAS,QAAQ,YAAY,GAAG,eAAe;GAGlE,MAAM,OAAO,UAFG,MAAM,UAAS,UAAS,MAAM,UAAU,OAAO,SAAS,EAEjD,GADP,YAAW,aAAY,SAAS,OAAO,KAAK,KACrB;GACvC,MAAM,UAAU,kBAAkB,YAAW,aAAY,SAAS,QAAQ,CAAC;GAG3E,CAAA,GAAA,MAAA,UAAA,OAAe;IAAG,QAAQ,SAAS;GAAE,GAAG,CAAC,SAAS,SAAS,CAAC;GAC5D,IAAI,CAAC,SAAS,OAAO;GACrB,QAAA,GAAA,kBAAA,KAAA,CACE,QAAA;IAAM,WAAW,0BAAO;IAAG,UAAA;gCACzB,UAAA;MACE,MAAK;MACL,WAAW,0BAAO;MAAM,cACZ,EAAE,KAAK,OAAO;MAAC,gBACb,KAAK;MACnB,UAAU,CAAC,KAAK;MAChB,eAAc;OAAG,OAAO,SAAS;MAAE;MAAC,UAEnC,KAAK,UAAA,GAAA,kBAAA,IAAA,CAAU,YAAU,CAAA,CAAA,KAAA,GAAA,kBAAA,IAAA,CAAO,WAAS,CAAA,CAAA;KAAG,CAAA;KAI9C,KAAK,cAAc,KAAA,IAChB,QAAA,GAAA,kBAAA,IAAA,CAEA,UAAA;MACE,MAAK;MACL,WAAW,0BAAO;MAAO,cACb,EAAE,WAAW;MAAC,gBACZ,KAAK;MACnB,OAAO,EAAE,KAAK,YAAY,gBAAgB,cAAc;MACxD,eAAc;OAAG,WAAW,SAAS;MAAE;MAAC,WAAA,GAAA,kBAAA,IAAA,CAEvC,UAAQ,CAAA,CAAA;KAAG,CAAA;KAGjB,KAAK,aAAa,KAAA,IACf,QAAA,GAAA,kBAAA,KAAA,CAEA,QAAA;MAAM,WAAW,0BAAO;MAAQ,UAAA,CAC7B,EAAE,KAAK,QAAQ,GACf,KAAK,aAAa,WAAW,IAAI,OAAO,KAAK,KAAK,aAAa,KAAK,IAAI,GAAG;KAAA,CAAA;IAE/E;GAAA,CAAA;EAGT;;;;;;;EASA,SAAgB,MAAM,KAAkB;GACtC,IAAI,aAAa,IAAI,OAAO,SAAS,IAAI;IAAE;IAAI;GAAE,CAAE,GAAG,qBAAqB;GAC3E,MAAM,WAAW,IAAI,gBAAe;GACpC,IAAI,mBAAkB;IAAG,SAAS,sBAAM,IAAI,MAAM,wBAAwB,CAAC;GAAE,GAAG,iBAAiB;GAKjG,IAAI,OAAO,IAAI,OAAO,WAAW,YAC/B,IAAI,OAAO,YAAW;IAEpB,OAAO,MADe,IAAI,OAAO,OAAO,aAAW;GAErD,GAAG,yBAAyB;GAG9B,IAAI,OAAO,CAAC,qBAAqB,IAAI,cAAa;IAChD,MAAM,SAAS,UAAU,OAAO;IAChC,MAAM,YAAY,gBAAgB,QAAQ,SAAS,MAAM;IACzD,MAAM,gBAAgB,IAAI,mBAAmB,WAAW,SAAS,MAAM;IACvE,MAAM,UAAU,IAAI,aAAa,WAAW,SAAS,MAAM;IAG3D,UAAU,aACF,UAAU,OAAO,YAAY,aAAY;KAC7C,QAAQ,MAAM,QAAQ;KACtB,cAAc,MAAM,QAAQ;IAC9B,CAAC,GACD,6BAA6B;IAE/B,UAAU,MAAM,OAAO,6CACrB,UAAU,MAAM,SACd;KACE,MAAM;KACN,IAAI;KACJ,OAAO;KACP,QAAQ;KACR,eAA8B;MAC5B,OAAO,EAAE,OAAO,QAAQ,MAAK;MAC7B,UAAU,cAAa;OAAG,QAAa,QAAQ,SAAS;MAAE;MAC1D,SAAS,cAAa;OAAG,QAAa,OAAO,SAAS;MAAE;MACxD,aAAa,cAAa;OAAG,QAAa,WAAW,SAAS;MAAE;;OAGpE,WAAW,CACZ;IAEH,UAAU,MAAM,OAAO,+CACrB,UAAU,MAAM,SACd;KACE,MAAM;KACN,IAAI;KAEJ,OAAO;KACP,QAAQ;KACR,eAAkC;MAChC,OAAO,EAAE,aAAa,cAAc,MAAK;MACzC,UAAU,cAAa;OAAG,cAAmB,QAAQ,SAAS;MAAE;MAChE,SAAS,cAAa;OAAG,cAAmB,OAAO,SAAS;MAAE;MAC9D,WAAW,SAAQ;OAAG,cAAc,SAAS,IAAI;MAAE;MACnD,SAAS,WAAW,WAAU;OAAG,cAAmB,OAAO,WAAW,MAAM;MAAE;;OAGlF,SAAS,CACV;GAEL,CAAC;EACH"}
|