@treeseed/dsh-chapters 0.1.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/LICENSE +14 -0
- package/README.md +644 -0
- package/cordis.patch.yml +88 -0
- package/docs/architecture.md +460 -0
- package/docs/contract.md +375 -0
- package/docs/development.md +437 -0
- package/docs/host-compaction-seam.md +117 -0
- package/docs/knowledge-repo.md +730 -0
- package/docs/provider.md +98 -0
- package/docs/verify.md +200 -0
- package/lib/archive.d.ts +88 -0
- package/lib/archive.js +114 -0
- package/lib/archive.js.map +1 -0
- package/lib/arrival.d.ts +23 -0
- package/lib/arrival.js +86 -0
- package/lib/arrival.js.map +1 -0
- package/lib/artifact-query.d.ts +53 -0
- package/lib/artifact-query.js +130 -0
- package/lib/artifact-query.js.map +1 -0
- package/lib/client.js +234 -0
- package/lib/client.js.map +1 -0
- package/lib/commands.d.ts +28 -0
- package/lib/commands.js +305 -0
- package/lib/commands.js.map +1 -0
- package/lib/compose.d.ts +30 -0
- package/lib/compose.js +131 -0
- package/lib/compose.js.map +1 -0
- package/lib/continue-core.d.ts +153 -0
- package/lib/continue-core.js +252 -0
- package/lib/continue-core.js.map +1 -0
- package/lib/engine-core.d.ts +219 -0
- package/lib/engine-core.js +405 -0
- package/lib/engine-core.js.map +1 -0
- package/lib/engine.d.ts +211 -0
- package/lib/engine.js +571 -0
- package/lib/engine.js.map +1 -0
- package/lib/enrich-queue.d.ts +66 -0
- package/lib/enrich-queue.js +100 -0
- package/lib/enrich-queue.js.map +1 -0
- package/lib/enrich-store.d.ts +31 -0
- package/lib/enrich-store.js +103 -0
- package/lib/enrich-store.js.map +1 -0
- package/lib/enrich-wire.d.ts +73 -0
- package/lib/enrich-wire.js +209 -0
- package/lib/enrich-wire.js.map +1 -0
- package/lib/enrich.d.ts +73 -0
- package/lib/enrich.js +150 -0
- package/lib/enrich.js.map +1 -0
- package/lib/gitops.d.ts +107 -0
- package/lib/gitops.js +539 -0
- package/lib/gitops.js.map +1 -0
- package/lib/index.d.ts +81 -0
- package/lib/index.js +305 -0
- package/lib/index.js.map +1 -0
- package/lib/indexing.d.ts +85 -0
- package/lib/indexing.js +212 -0
- package/lib/indexing.js.map +1 -0
- package/lib/injections.d.ts +66 -0
- package/lib/injections.js +83 -0
- package/lib/injections.js.map +1 -0
- package/lib/notice.d.ts +60 -0
- package/lib/notice.js +84 -0
- package/lib/notice.js.map +1 -0
- package/lib/provider.d.ts +44 -0
- package/lib/provider.js +66 -0
- package/lib/provider.js.map +1 -0
- package/lib/redact.d.ts +24 -0
- package/lib/redact.js +85 -0
- package/lib/redact.js.map +1 -0
- package/lib/registry.d.ts +120 -0
- package/lib/registry.js +130 -0
- package/lib/registry.js.map +1 -0
- package/lib/render.d.ts +40 -0
- package/lib/render.js +280 -0
- package/lib/render.js.map +1 -0
- package/lib/repo.d.ts +78 -0
- package/lib/repo.js +184 -0
- package/lib/repo.js.map +1 -0
- package/lib/rules-commands.d.ts +24 -0
- package/lib/rules-commands.js +138 -0
- package/lib/rules-commands.js.map +1 -0
- package/lib/rules.d.ts +90 -0
- package/lib/rules.js +185 -0
- package/lib/rules.js.map +1 -0
- package/lib/search.d.ts +48 -0
- package/lib/search.js +152 -0
- package/lib/search.js.map +1 -0
- package/lib/signature.d.ts +28 -0
- package/lib/signature.js +149 -0
- package/lib/signature.js.map +1 -0
- package/lib/store.d.ts +130 -0
- package/lib/store.js +235 -0
- package/lib/store.js.map +1 -0
- package/lib/sync.d.ts +183 -0
- package/lib/sync.js +719 -0
- package/lib/sync.js.map +1 -0
- package/lib/tools.d.ts +84 -0
- package/lib/tools.js +581 -0
- package/lib/tools.js.map +1 -0
- package/lib/treedx/client.d.ts +57 -0
- package/lib/treedx/client.js +82 -0
- package/lib/treedx/client.js.map +1 -0
- package/lib/treedx/provider.d.ts +39 -0
- package/lib/treedx/provider.js +479 -0
- package/lib/treedx/provider.js.map +1 -0
- package/lib/treedx/state.d.ts +27 -0
- package/lib/treedx/state.js +65 -0
- package/lib/treedx/state.js.map +1 -0
- package/lib/types.d.ts +100 -0
- package/lib/types.js +19 -0
- package/lib/types.js.map +1 -0
- package/lib/vocabulary.d.ts +41 -0
- package/lib/vocabulary.js +118 -0
- package/lib/vocabulary.js.map +1 -0
- package/package.json +132 -0
- package/presets/chapters/agent.cordis.yml +272 -0
- package/presets/chapters/preset.yml +3 -0
- package/presets/probe-roots/agent.cordis.yml +11 -0
- package/presets/probe-roots/preset.yml +3 -0
package/lib/engine.js
ADDED
|
@@ -0,0 +1,571 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChaptersCompactionEngine — the cordis-facing adapter over the pure
|
|
3
|
+
* engine-core logic. Mounted INSIDE a preset realm's compaction group (never
|
|
4
|
+
* the host plane beside `basic`: two engines double-fire across planes,
|
|
5
|
+
* FINDINGS § Phase 0b), it overrides exactly the sanctioned hook plus the two
|
|
6
|
+
* entry points whose results the finalizer needs.
|
|
7
|
+
*
|
|
8
|
+
* Everything decision-shaped lives in engine-core.ts, where it is
|
|
9
|
+
* harness-free testable. This file is glue: service resolution, durable
|
|
10
|
+
* reads/writes, and the never-break-the-caller containment the base's own
|
|
11
|
+
* listeners already model.
|
|
12
|
+
*/
|
|
13
|
+
import { BasicCompactionEngine } from '@deepseek-ai/dsh-compaction-basic';
|
|
14
|
+
import { extractSignature, turnSpanOf } from "./signature.js";
|
|
15
|
+
import { appendCollection } from "./registry.js";
|
|
16
|
+
import { appendFileSync } from 'node:fs';
|
|
17
|
+
import z from '@deepseek-ai/schemastery';
|
|
18
|
+
import { CHAPTERS_PROVIDER, DETERMINISTIC_MODEL, buildFinalizedChapters, findOpenCompactionId, planSummarize, reconstructShadowedSeqs, scanChaptersSummaries, } from "./engine-core.js";
|
|
19
|
+
import { composeChapters } from "./compose.js";
|
|
20
|
+
import { BlockAssembler, createUserMessage } from '@deepseek-ai/dsh-llm';
|
|
21
|
+
import { applyArrivalStubs } from "./arrival.js";
|
|
22
|
+
import { extractPlot } from "./engine-core.js";
|
|
23
|
+
import { appendChapters, isFinalized, markFinalized, rememberPlan, reserve } from "./registry.js";
|
|
24
|
+
import { acquireChapterStore, makeAllocator, makeArchiveFs } from "./store.js";
|
|
25
|
+
import { createSyncScheduler, makeCollectionsReader, projectForCwd, readToken, DEFAULT_CLONE_DIR } from "./sync.js";
|
|
26
|
+
import { registerProvider } from "./provider.js";
|
|
27
|
+
import { createTreedxProvider } from "./treedx/provider.js";
|
|
28
|
+
import { createEnrichWiring } from "./enrich-wire.js";
|
|
29
|
+
import { writeArchive } from "./archive.js";
|
|
30
|
+
/**
|
|
31
|
+
* Per-turn deterministic signature listener (knowledge-repo.md §4.1), as a
|
|
32
|
+
* plain factory so the LOGIC is unit-testable against the real host Session
|
|
33
|
+
* shape without a full cordis Service context. Never-break containment: the
|
|
34
|
+
* handler reports through `warn`, it never throws into the session.
|
|
35
|
+
*
|
|
36
|
+
* r28 found the load-bearing fact: the host Session is a CLASS exposing
|
|
37
|
+
* snapshotEvents() — a `.events` property does not exist, and the first cut
|
|
38
|
+
* read `.events`, no-op'd silently in every real boot, and passed its L0
|
|
39
|
+
* test because the test stubbed the shape that does not exist.
|
|
40
|
+
*/
|
|
41
|
+
export function makeSignatureListener(deps) {
|
|
42
|
+
// Per-session promise chain: the store write is a read-modify-append, so
|
|
43
|
+
// two turn-ends landing the same tick must serialize or the second put
|
|
44
|
+
// clobbers the first's collection (real sessions are minutes apart, but
|
|
45
|
+
// burst steer/resume exists; the queue makes the listener honest anyway).
|
|
46
|
+
const chains = new Map();
|
|
47
|
+
return (session, event) => {
|
|
48
|
+
try {
|
|
49
|
+
if (event?.type !== 'turn/end')
|
|
50
|
+
return;
|
|
51
|
+
const id = session?.id;
|
|
52
|
+
const events = session?.snapshotEvents?.();
|
|
53
|
+
if (id === undefined || events === undefined)
|
|
54
|
+
return;
|
|
55
|
+
const endSeq = event.seq;
|
|
56
|
+
if (endSeq === undefined)
|
|
57
|
+
return;
|
|
58
|
+
const span = turnSpanOf(events, endSeq);
|
|
59
|
+
if (span.length === 0)
|
|
60
|
+
return;
|
|
61
|
+
const sig = extractSignature(span);
|
|
62
|
+
deps.onCollected?.(id, sig);
|
|
63
|
+
const job = () => deps.store().then(({ store }) => {
|
|
64
|
+
const state = store.get(id);
|
|
65
|
+
return state.then((st) => store.put(id, appendCollection(st, sig)));
|
|
66
|
+
}).then(() => undefined).catch(deps.warn);
|
|
67
|
+
const prev = chains.get(id);
|
|
68
|
+
const next = prev === undefined ? job() : prev.then(job);
|
|
69
|
+
chains.set(id, next);
|
|
70
|
+
void next.finally(() => { if (chains.get(id) === next)
|
|
71
|
+
chains.delete(id); });
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
deps.warn(error);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Pull-on-first-turn (§5.1) as a plain factory, same testability discipline
|
|
80
|
+
* as the signature listener. Process-scoped "first turn seen" — a resumed
|
|
81
|
+
* old session pulling once more is harmless and bounded.
|
|
82
|
+
*/
|
|
83
|
+
export function makeFirstTurnPullListener(deps) {
|
|
84
|
+
const pulled = new Set();
|
|
85
|
+
return (session, event) => {
|
|
86
|
+
try {
|
|
87
|
+
if (event?.type !== 'turn/start')
|
|
88
|
+
return;
|
|
89
|
+
const id = session?.id;
|
|
90
|
+
const cwd = session?.header?.cwd;
|
|
91
|
+
if (id === undefined || cwd === undefined || pulled.has(id))
|
|
92
|
+
return;
|
|
93
|
+
pulled.add(id);
|
|
94
|
+
void deps.pull(cwd).catch(() => undefined);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// never break the session path (§5.3)
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
export class ChaptersCompactionEngine extends BasicCompactionEngine {
|
|
102
|
+
// Base inject is ['llm','tokenMeter','sessions']; subclassing INHERITS statics,
|
|
103
|
+
// so re-declare with what the chapter flow adds (r12's crash, FINDINGS).
|
|
104
|
+
static inject = ['llm', 'tokenMeter', 'sessions', 'storageDomain'];
|
|
105
|
+
static Config = z.object({
|
|
106
|
+
thresholdRatio: z.number(),
|
|
107
|
+
retainRatio: z.number(),
|
|
108
|
+
retainTokens: z.number().step(1).min(0),
|
|
109
|
+
summarizationProvider: z.string(),
|
|
110
|
+
summarizationModel: z.string(),
|
|
111
|
+
maxTokens: z.number().step(1).min(1),
|
|
112
|
+
compactionRetries: z.number().step(1).min(0),
|
|
113
|
+
maxOverflowRetries: z.number().step(1).min(0),
|
|
114
|
+
// Mirrors the base's modelPolicy shape (compaction-basic/src/index.ts:79-90)
|
|
115
|
+
// exactly: a narrower schema here could strip per-model ratios before
|
|
116
|
+
// super's resolveConfig sees them. Stage 3 probe asserts survival.
|
|
117
|
+
modelPolicies: z.array(z.object({
|
|
118
|
+
provider: z.string().required(),
|
|
119
|
+
model: z.string().required(),
|
|
120
|
+
thresholdRatio: z.number(),
|
|
121
|
+
retainRatio: z.number(),
|
|
122
|
+
retainTokens: z.number().step(1).min(0),
|
|
123
|
+
summarizationProvider: z.string(),
|
|
124
|
+
summarizationModel: z.string(),
|
|
125
|
+
maxTokens: z.number().step(1).min(1),
|
|
126
|
+
compactionRetries: z.number().step(1).min(0),
|
|
127
|
+
maxOverflowRetries: z.number().step(1).min(0),
|
|
128
|
+
})),
|
|
129
|
+
auto: z.boolean(),
|
|
130
|
+
artifactStoreRoot: z.string(),
|
|
131
|
+
chapterTokenTarget: z.number().step(1).min(1),
|
|
132
|
+
toolResultDeferFloorTokens: z.number().step(1).min(0),
|
|
133
|
+
// The composition knobs ride the same row so the engine path and the fork
|
|
134
|
+
// path honor one configuration (found undeclared 2026-09-18: destructured
|
|
135
|
+
// by the constructor, stripped by the schema).
|
|
136
|
+
mergeThreshold: z.number().default(0.3),
|
|
137
|
+
chapterLimit: z.number().step(1).min(1).default(8000),
|
|
138
|
+
syncDebounceMs: z.number().step(1).min(0).default(30000),
|
|
139
|
+
toolResultArtifactTokens: z.number().step(1).min(256).default(8000),
|
|
140
|
+
elicitedPlot: z.boolean().default(true),
|
|
141
|
+
enrichmentEnabled: z.boolean().default(true),
|
|
142
|
+
enrichmentModel: z.string().default(''),
|
|
143
|
+
enrichmentTrigger: z.string().default('both'),
|
|
144
|
+
enrichmentIdleMs: z.number().step(1).min(0).default(60000),
|
|
145
|
+
enrichmentBatchCap: z.number().step(1).min(1).default(5),
|
|
146
|
+
vocabApply: z.boolean().default(false),
|
|
147
|
+
vocabCoMin: z.number().step(1).min(2).default(3),
|
|
148
|
+
vocabOverlapMin: z.number().default(0.5),
|
|
149
|
+
// §15 amendment: TreeDX transport tunables ride the same row so both
|
|
150
|
+
// planes sync through identically-configured providers.
|
|
151
|
+
treedxFetchTimeoutMs: z.number().step(1).min(1000).default(15000),
|
|
152
|
+
treedxWorkspaceTtlSeconds: z.number().step(1).min(30).default(900),
|
|
153
|
+
treedxLeaseRetries: z.number().step(1).min(0).default(3),
|
|
154
|
+
treedxLeaseRetryDelayMs: z.number().step(1).min(0).default(1000),
|
|
155
|
+
});
|
|
156
|
+
chaptersConfig;
|
|
157
|
+
storePromise = null;
|
|
158
|
+
constructor(ctx, config = {}) {
|
|
159
|
+
// The base's resolveConfig rejects unknown keys at runtime (measured r18:
|
|
160
|
+
// `BasicCompactionConfig: unknown key "artifactStoreRoot"`) — the archive's
|
|
161
|
+
// own keys are peeled off and held here; the base receives exactly its
|
|
162
|
+
// documented shape. (The loader does not strip them for us either.)
|
|
163
|
+
const { artifactStoreRoot, chapterTokenTarget, toolResultDeferFloorTokens, mergeThreshold, chapterLimit, syncDebounceMs, toolResultArtifactTokens, elicitedPlot, enrichmentEnabled, enrichmentModel, enrichmentTrigger, enrichmentIdleMs, enrichmentBatchCap, vocabApply, vocabCoMin, vocabOverlapMin, treedxFetchTimeoutMs, treedxWorkspaceTtlSeconds, treedxLeaseRetries, treedxLeaseRetryDelayMs, ...baseConfig } = config;
|
|
164
|
+
super(ctx, baseConfig);
|
|
165
|
+
// The realm's module copy owns its own provider registry (cordis isolation
|
|
166
|
+
// between planes): register the configured TreeDX transport HERE, exactly
|
|
167
|
+
// as the host plane does in its apply(). Row defaults keep this correct
|
|
168
|
+
// even when a preset omits every treedx key.
|
|
169
|
+
registerProvider(createTreedxProvider({
|
|
170
|
+
fetchTimeoutMs: treedxFetchTimeoutMs ?? 15000,
|
|
171
|
+
workspaceTtlSeconds: treedxWorkspaceTtlSeconds ?? 900,
|
|
172
|
+
leaseRetries: treedxLeaseRetries ?? 3,
|
|
173
|
+
leaseRetryDelayMs: treedxLeaseRetryDelayMs ?? 1000,
|
|
174
|
+
}));
|
|
175
|
+
this.chaptersConfig = {
|
|
176
|
+
artifactStoreRoot: artifactStoreRoot ?? '.dsh-chapters',
|
|
177
|
+
chapterTokenTarget: chapterTokenTarget ?? 8000,
|
|
178
|
+
toolResultDeferFloorTokens: toolResultDeferFloorTokens ?? 200,
|
|
179
|
+
mergeThreshold: mergeThreshold ?? 0.3,
|
|
180
|
+
chapterLimit: chapterLimit ?? 8000,
|
|
181
|
+
toolResultArtifactTokens: toolResultArtifactTokens ?? 8000,
|
|
182
|
+
elicitedPlot: elicitedPlot ?? true,
|
|
183
|
+
};
|
|
184
|
+
this.syncDebounceMs = syncDebounceMs ?? 30000;
|
|
185
|
+
this.vocabCfg = { apply: vocabApply ?? false, coMin: vocabCoMin ?? 3, overlapMin: vocabOverlapMin ?? 0.5 };
|
|
186
|
+
this.enrichCfg = {
|
|
187
|
+
enabled: enrichmentEnabled ?? true,
|
|
188
|
+
model: enrichmentModel ?? '',
|
|
189
|
+
trigger: (enrichmentTrigger ?? 'both'),
|
|
190
|
+
idleMs: enrichmentIdleMs ?? 60000,
|
|
191
|
+
batchCap: enrichmentBatchCap ?? 5,
|
|
192
|
+
};
|
|
193
|
+
this.#listenForSignatures();
|
|
194
|
+
this.#listenForFirstTurnPull();
|
|
195
|
+
ctx.logger?.info?.('dsh-chapters: engine constructed for a mount (signature listener live)');
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Per-turn deterministic signatures at turn/end (knowledge-repo §4.1):
|
|
199
|
+
* synchronous extraction, async store append, and never-break containment —
|
|
200
|
+
* a signature failure must never touch the compaction path (AGENTS hard
|
|
201
|
+
* rule: the listener reports, it never throws into the session). The base
|
|
202
|
+
* engine's own listeners model the same shape.
|
|
203
|
+
*/
|
|
204
|
+
/** The realm's own scheduler (§5): same code as the host plane's; the file
|
|
205
|
+
* lock and debounce keep the two honest against each other. */
|
|
206
|
+
syncDebounceMs = 30000;
|
|
207
|
+
vocabCfg = { apply: false, coMin: 3, overlapMin: 0.5 };
|
|
208
|
+
enrichCfg = { enabled: false, model: '', trigger: 'both', idleMs: 60000, batchCap: 5 };
|
|
209
|
+
enrichPromise = null;
|
|
210
|
+
lastCwd = null;
|
|
211
|
+
lastRoute = null;
|
|
212
|
+
schedulerPromise = null;
|
|
213
|
+
#scheduler() {
|
|
214
|
+
this.schedulerPromise ??= this.store().then(({ store }) => createSyncScheduler({
|
|
215
|
+
storeRoot: this.chaptersConfig.artifactStoreRoot,
|
|
216
|
+
cloneDir: DEFAULT_CLONE_DIR,
|
|
217
|
+
debounceMs: this.syncDebounceMs,
|
|
218
|
+
// The realm never AUTO-links (linking is the host command's job); it
|
|
219
|
+
// reads what the project table knows.
|
|
220
|
+
resolveProject: (cwd) => projectForCwd(store.projects(), cwd),
|
|
221
|
+
tokenFor: (cwd, projectKey) => readToken(cwd, this.chaptersConfig.artifactStoreRoot, projectKey),
|
|
222
|
+
collectionsFor: makeCollectionsReader(store.sessions.bind(store), this.chaptersConfig.artifactStoreRoot),
|
|
223
|
+
vocab: this.vocabCfg,
|
|
224
|
+
// P2: a completed sync pass is the enrichment afterPush idle point.
|
|
225
|
+
onSyncDone: (cwd, ok) => {
|
|
226
|
+
void this.#enrich().then((w) => { w.rememberCwd(cwd); if (ok)
|
|
227
|
+
w.queue.onSyncDone('afterPush'); }).catch(() => undefined);
|
|
228
|
+
},
|
|
229
|
+
}));
|
|
230
|
+
return this.schedulerPromise;
|
|
231
|
+
}
|
|
232
|
+
/** P2 enrichment wiring (realm plane owns auto triggers; route + heartbeat
|
|
233
|
+
* persist through the shared settings table, so the host command surface
|
|
234
|
+
* and /chapters-status read one truth). Lazy; failures degrade silently —
|
|
235
|
+
* the corpus simply stays signatures-only (kill-switch parity). */
|
|
236
|
+
#enrich() {
|
|
237
|
+
this.enrichPromise ??= this.store().then(({ store }) => createEnrichWiring({
|
|
238
|
+
store,
|
|
239
|
+
cwd: () => this.lastCwd ?? undefined,
|
|
240
|
+
config: this.enrichCfg,
|
|
241
|
+
fetch: async (prompt, route) => {
|
|
242
|
+
const r = route ?? this.lastRoute;
|
|
243
|
+
if (r === null || r.provider === '' || r.model === '')
|
|
244
|
+
throw new Error('no auxiliary route yet');
|
|
245
|
+
return await this.#auxComplete(prompt, r, 900);
|
|
246
|
+
},
|
|
247
|
+
conversationRoute: () => this.lastRoute,
|
|
248
|
+
scheduler: { schedule: (cwd, why) => { void this.#scheduler().then((s) => s.schedule(cwd, why)).catch(() => undefined); } },
|
|
249
|
+
log: (m) => this.ctx.logger?.info?.(`dsh-chapters: ${m}`),
|
|
250
|
+
warn: (m) => this.ctx.logger?.warn?.(`dsh-chapters: ${m}`),
|
|
251
|
+
}));
|
|
252
|
+
return this.enrichPromise;
|
|
253
|
+
}
|
|
254
|
+
/** one tools-free completion (shared plumbing: enrichment + plot). */
|
|
255
|
+
async #auxComplete(prompt, route, maxTokens, signal, sessionId) {
|
|
256
|
+
const llm = this.ctx.llm;
|
|
257
|
+
if (llm === undefined)
|
|
258
|
+
throw new Error('llm absent');
|
|
259
|
+
const assembler = new BlockAssembler();
|
|
260
|
+
for await (const chunk of llm.stream({
|
|
261
|
+
provider: route.provider, model: route.model,
|
|
262
|
+
messages: [createUserMessage({ content: [{ type: 'text', text: prompt }], source: { kind: 'plugin', plugin: 'dsh-chapters' } })],
|
|
263
|
+
maxTokens,
|
|
264
|
+
...(sessionId !== undefined ? { sessionId } : {}),
|
|
265
|
+
purpose: 'compaction',
|
|
266
|
+
...(signal !== undefined ? { signal } : {}),
|
|
267
|
+
}))
|
|
268
|
+
assembler.push(chunk);
|
|
269
|
+
return assembler.blocks().filter((b) => b.type === 'text').map((b) => b.text ?? '').join('');
|
|
270
|
+
}
|
|
271
|
+
/** Capture workspace cwd + routed model at every compaction entry; arm the
|
|
272
|
+
* idle timer (turn activity). Advisory only — never disturbs compaction. */
|
|
273
|
+
#observeRoute(agent) {
|
|
274
|
+
try {
|
|
275
|
+
const session = agent.session;
|
|
276
|
+
if (session === undefined)
|
|
277
|
+
return;
|
|
278
|
+
const cwd = session.header?.cwd;
|
|
279
|
+
if (cwd !== undefined)
|
|
280
|
+
this.lastCwd = cwd;
|
|
281
|
+
const cfg = session.requestHeader?.()?.config;
|
|
282
|
+
if (cfg?.provider !== undefined && cfg?.model !== undefined)
|
|
283
|
+
this.lastRoute = { provider: cfg.provider, model: cfg.model };
|
|
284
|
+
void this.#enrich().then((w) => w.queue.noteActivity()).catch(() => undefined);
|
|
285
|
+
}
|
|
286
|
+
catch { /* observation is advisory */ }
|
|
287
|
+
}
|
|
288
|
+
/** §5.1: a new session pulls before its first turn — the corpus is fresh. */
|
|
289
|
+
#listenForFirstTurnPull() {
|
|
290
|
+
try {
|
|
291
|
+
this.ctx.on('session/event', makeFirstTurnPullListener({
|
|
292
|
+
pull: (cwd) => this.#scheduler().then((s) => s.pullFor(cwd)),
|
|
293
|
+
}));
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
// L0 ctx without an event bus: same containment rule as signatures.
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
#listenForSignatures() {
|
|
300
|
+
try {
|
|
301
|
+
this.ctx.on('session/event', makeSignatureListener({
|
|
302
|
+
store: () => this.store(),
|
|
303
|
+
warn: (error) => { this.ctx.logger?.warn?.(`dsh-chapters: signature capture failed (${String(error)})`); },
|
|
304
|
+
onCollected: (id, sig) => {
|
|
305
|
+
this.ctx.logger?.info?.(`dsh-chapters: signature collected for ${id} (${sig.seqs.length} events, ${sig.paths.length} paths, ${sig.size} est tokens)`);
|
|
306
|
+
},
|
|
307
|
+
}));
|
|
308
|
+
}
|
|
309
|
+
catch {
|
|
310
|
+
// A non-cordis ctx (L0 construction) has no event bus — signatures are
|
|
311
|
+
// optional there by design; the compaction path is unaffected.
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/** Lazy, once. `storageDomain` is a host-plane singleton the realm resolves;
|
|
315
|
+
* acquire (never bare-open): a mounted tools-plugin may already own the reservation. */
|
|
316
|
+
store() {
|
|
317
|
+
this.storePromise ??= (async () => {
|
|
318
|
+
const sd = this.ctx.get?.('storageDomain');
|
|
319
|
+
if (sd === undefined)
|
|
320
|
+
throw new Error('chapters: storageDomain service absent — cannot archive');
|
|
321
|
+
return acquireChapterStore(sd);
|
|
322
|
+
})();
|
|
323
|
+
return this.storePromise;
|
|
324
|
+
}
|
|
325
|
+
// ------------------------------------------------------------ the sanctioned hook
|
|
326
|
+
async summarize(input, agent, _signal) {
|
|
327
|
+
const session = agent.session;
|
|
328
|
+
const cwd = session.header?.cwd ?? null;
|
|
329
|
+
const cid = findOpenCompactionId(session);
|
|
330
|
+
if (cid === null || cwd === null || input.messages.length === 0) {
|
|
331
|
+
// Degraded but honest: compaction proceeds with a plain deterministic
|
|
332
|
+
// digest; NO chapter path is cited, so nothing can dangle. A distinct
|
|
333
|
+
// provider tag keeps the finalizer's scan from claiming this record.
|
|
334
|
+
return {
|
|
335
|
+
summary: [{ type: 'text', text: `Compacted ${input.messages.length} messages (deterministic digest; no chapter: ${cwd === null ? 'no workspace cwd' : cid === null ? 'no open transaction' : 'empty region'}).` }],
|
|
336
|
+
provider: `${CHAPTERS_PROVIDER}-degraded`,
|
|
337
|
+
model: DETERMINISTIC_MODEL,
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
const { store } = await this.store();
|
|
341
|
+
const state = await store.get(session.id);
|
|
342
|
+
// Topic-sequential composition inside AUTO compaction (r29 — the record's
|
|
343
|
+
// §4.2 applied where sessions actually meet pressure, not only at the
|
|
344
|
+
// fork). Reconstruction maps the prepared region back to log seqs; any
|
|
345
|
+
// uncertainty (no Session mapping API, no collections, ambiguous match,
|
|
346
|
+
// thrown anywhere) falls to the legacy single-chapter plan, which is the
|
|
347
|
+
// behavior that has always been correct.
|
|
348
|
+
let composition = null;
|
|
349
|
+
try {
|
|
350
|
+
const seqs = reconstructShadowedSeqs(session, input);
|
|
351
|
+
if (seqs !== null && state.collections.length > 0) {
|
|
352
|
+
const spanStart = seqs[0];
|
|
353
|
+
const spanEnd = seqs[seqs.length - 1];
|
|
354
|
+
const spanEvents = seqs
|
|
355
|
+
.map((seq) => session.eventAt(seq))
|
|
356
|
+
.filter((e) => e !== undefined);
|
|
357
|
+
const composed = composeChapters(spanEvents, spanStart, spanEnd, state.collections, {
|
|
358
|
+
mergeThreshold: this.chaptersConfig.mergeThreshold,
|
|
359
|
+
chapterLimit: this.chaptersConfig.chapterLimit,
|
|
360
|
+
});
|
|
361
|
+
if (composed.chapters.length > 0) {
|
|
362
|
+
const chs = [...composed.chapters];
|
|
363
|
+
// Compaction SHADOWS the whole selected span — unlike the fork, its
|
|
364
|
+
// span need not end on a turn boundary. Absorb head/tail strays so
|
|
365
|
+
// nothing is ever shadowed unarchived.
|
|
366
|
+
if (chs[0].startSeq > spanStart)
|
|
367
|
+
chs[0] = { ...chs[0], startSeq: spanStart };
|
|
368
|
+
const lastIdx = chs.length - 1;
|
|
369
|
+
if (chs[lastIdx].endSeq < spanEnd)
|
|
370
|
+
chs[lastIdx] = { ...chs[lastIdx], endSeq: spanEnd };
|
|
371
|
+
composition = chs;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
catch (error) {
|
|
376
|
+
this.ctx.logger?.warn?.(`dsh-chapters: compaction composition fell back to legacy (${String(error)})`);
|
|
377
|
+
}
|
|
378
|
+
// Plot carriage (architecture.md amendment): the model's own forward-
|
|
379
|
+
// maintained note survives the shadowing; when the agent never wrote one,
|
|
380
|
+
// one BOUNDED elicited call over the region being condensed (tail-heavy,
|
|
381
|
+
// ~8K chars in, ≤150 words out) — approved exception to zero-inference,
|
|
382
|
+
// gated by config. Any failure degrades to no plot; it never breaks the
|
|
383
|
+
// compaction path.
|
|
384
|
+
let plot = extractPlot(input.messages);
|
|
385
|
+
if (plot === null && this.chaptersConfig.elicitedPlot)
|
|
386
|
+
plot = await this.#elicitPlot(agent, input, _signal);
|
|
387
|
+
const { plan, state: next } = planSummarize(session, state, input, this.chaptersConfig, reserve, cid, composition, plot);
|
|
388
|
+
const stored = rememberPlan(next, cid, {
|
|
389
|
+
number: plan.numbers[0], path: plan.chapter.path, title: plan.chapter.title, summary: plan.chapter.summary,
|
|
390
|
+
...(plan.chapters !== undefined ? { chapters: plan.chapters } : {}),
|
|
391
|
+
});
|
|
392
|
+
await store.put(session.id, stored); // reservation + manifest durable BEFORE the text cites them
|
|
393
|
+
return { summary: [{ type: 'text', text: plan.tocText }], provider: CHAPTERS_PROVIDER, model: DETERMINISTIC_MODEL };
|
|
394
|
+
}
|
|
395
|
+
// ------------------------------------------------------------ entry points (finalize after commit)
|
|
396
|
+
/**
|
|
397
|
+
* Arrival-time artifacting (architecture.md amendment): heads EVERY
|
|
398
|
+
* compaction entry — pre-step pressure, overflow retries, manual compact —
|
|
399
|
+
* so oversized tool results are stubbed at the tail node before the next
|
|
400
|
+
* request composes (the base listener awaits this call before next(),
|
|
401
|
+
* compaction-basic/lib/index.js:799-812). Never throws; degradation is
|
|
402
|
+
* logged and the blob simply stays inline (today's behavior).
|
|
403
|
+
*/
|
|
404
|
+
async #elicitPlot(agent, input, signal) {
|
|
405
|
+
try {
|
|
406
|
+
const session = agent.session;
|
|
407
|
+
// tail-heavy flattening: the plan lives in what the model said RECENTLY
|
|
408
|
+
let flat = '';
|
|
409
|
+
for (let i = input.messages.length - 1; i >= 0 && flat.length < 8000; i--) {
|
|
410
|
+
const m = input.messages[i];
|
|
411
|
+
const text = (m.content ?? []).filter((b) => b.type === 'text').map((b) => b.text ?? '').join(' ').slice(0, 1200);
|
|
412
|
+
if (text.length > 0)
|
|
413
|
+
flat = `${m.role ?? '?'}: ${text}\n${flat}`;
|
|
414
|
+
}
|
|
415
|
+
const instruction = 'You maintain a plot note for a conversation about to be compacted. From the excerpt below, state in at most 60 words, on one line beginning exactly with "PLOT:", what the agent is mid-way through: objective, current hypothesis, immediate next step. No tools, no prose around the line.\n\nEXCERPT:\n' + flat.slice(-8000);
|
|
416
|
+
// Unified auxiliary route (P2 decision): the enrichment resolver (override
|
|
417
|
+
// > config > persisted heartbeat > live conversation route) serves plot
|
|
418
|
+
// too; the summarization row fields remain a legacy prefix override.
|
|
419
|
+
const w = await this.#enrich().catch(() => null);
|
|
420
|
+
const shared = w?.auxRoute() ?? null;
|
|
421
|
+
const cfg = this.config ?? {};
|
|
422
|
+
const legacy = (typeof cfg.summarizationProvider === 'string' && cfg.summarizationProvider !== ''
|
|
423
|
+
&& typeof cfg.summarizationModel === 'string' && cfg.summarizationModel !== '')
|
|
424
|
+
? { provider: cfg.summarizationProvider, model: cfg.summarizationModel } : null;
|
|
425
|
+
const route = legacy ?? (shared !== null && shared.provider !== '' && shared.model !== '' ? shared : this.lastRoute);
|
|
426
|
+
if (route === null)
|
|
427
|
+
return null;
|
|
428
|
+
const text = await this.#auxComplete(instruction, route, 220, signal, session.id);
|
|
429
|
+
const at = text.indexOf('PLOT:');
|
|
430
|
+
if (at === -1)
|
|
431
|
+
return null;
|
|
432
|
+
const para = text.slice(at + 5).split(/\n\s*\n/)[0].trim();
|
|
433
|
+
return para.length === 0 ? null : para.slice(0, 900);
|
|
434
|
+
}
|
|
435
|
+
catch {
|
|
436
|
+
return null;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
async #arrive(agent) {
|
|
440
|
+
const session = agent.session;
|
|
441
|
+
const cwd = session.header?.cwd;
|
|
442
|
+
if (cwd === undefined || cwd === '')
|
|
443
|
+
return;
|
|
444
|
+
const meter = this.ctx.tokenMeter;
|
|
445
|
+
if (meter === undefined)
|
|
446
|
+
return;
|
|
447
|
+
const r = await applyArrivalStubs(session, {
|
|
448
|
+
cwd,
|
|
449
|
+
storeRoot: this.chaptersConfig.artifactStoreRoot,
|
|
450
|
+
floorTokens: this.chaptersConfig.toolResultArtifactTokens,
|
|
451
|
+
estimate: (m) => meter.estimateMessage(m),
|
|
452
|
+
});
|
|
453
|
+
if (r.detail !== undefined)
|
|
454
|
+
this.ctx.logger?.warn?.(`dsh-chapters: arrival stubbing degraded (${r.detail})`);
|
|
455
|
+
}
|
|
456
|
+
async compactIfNeeded(agent, trigger, signal) {
|
|
457
|
+
this.#observeRoute(agent);
|
|
458
|
+
await this.#arrive(agent);
|
|
459
|
+
// Finalization runs whether super resolves OR throws: the pressure retry
|
|
460
|
+
// loop can commit one compaction and then reject on a later attempt (shrink
|
|
461
|
+
// floor — measured r19: 3 reserved plans, 1 finalized, zero errors, because
|
|
462
|
+
// success-path-only finalization skipped the committed record). The scan is
|
|
463
|
+
// session-based and idempotent; the original error is rethrown untouched.
|
|
464
|
+
let result;
|
|
465
|
+
try {
|
|
466
|
+
result = await super.compactIfNeeded(agent, trigger, signal);
|
|
467
|
+
}
|
|
468
|
+
catch (error) {
|
|
469
|
+
await this.#finalizeGuarded(agent);
|
|
470
|
+
throw error;
|
|
471
|
+
}
|
|
472
|
+
if (result !== null)
|
|
473
|
+
await this.#finalizeGuarded(agent);
|
|
474
|
+
return result;
|
|
475
|
+
}
|
|
476
|
+
async compactNow(agent, signal, sourceCommandId) {
|
|
477
|
+
this.#observeRoute(agent);
|
|
478
|
+
await this.#arrive(agent);
|
|
479
|
+
let result;
|
|
480
|
+
try {
|
|
481
|
+
result = await super.compactNow(agent, signal, sourceCommandId);
|
|
482
|
+
}
|
|
483
|
+
catch (error) {
|
|
484
|
+
await this.#finalizeGuarded(agent);
|
|
485
|
+
throw error;
|
|
486
|
+
}
|
|
487
|
+
if (result !== null)
|
|
488
|
+
await this.#finalizeGuarded(agent);
|
|
489
|
+
return result;
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Finalization failure must never break a committed compaction (the surface
|
|
493
|
+
* is already correct and the log holds everything needed to retry) — it
|
|
494
|
+
* warns, and the per-session reconciliation scan retries it on next touch.
|
|
495
|
+
*/
|
|
496
|
+
async #finalizeGuarded(agent) {
|
|
497
|
+
const session = agent.session;
|
|
498
|
+
try {
|
|
499
|
+
await this.#finalizeAllOutstanding(session);
|
|
500
|
+
}
|
|
501
|
+
catch (error) {
|
|
502
|
+
const message = `dsh-chapters: chapter finalization deferred (session ${session.id}): ${String(error?.stack ?? error)}`;
|
|
503
|
+
this.ctx.logger?.warn?.(message);
|
|
504
|
+
// Headless profiles route ctx.logger where the operator cannot see it
|
|
505
|
+
// (measured r19: every useful warn vanished). Mirror engine failures to
|
|
506
|
+
// an append file when the operator opts in — diagnostics seam, not a tunable.
|
|
507
|
+
const sink = process.env.DSH_CHAPTERS_ENGINE_ERRORS;
|
|
508
|
+
if (sink !== undefined) {
|
|
509
|
+
try {
|
|
510
|
+
appendFileSync(sink, `[${new Date().toISOString()}] ${message}\n`);
|
|
511
|
+
}
|
|
512
|
+
catch { /* diagnostics must never mask the real failure */ }
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
/** Every provider-tagged summary without a finalized manifest, oldest first. */
|
|
517
|
+
async #finalizeAllOutstanding(session) {
|
|
518
|
+
const { store } = await this.store();
|
|
519
|
+
const state = await store.get(session.id);
|
|
520
|
+
for (const found of scanChaptersSummaries(session)) {
|
|
521
|
+
if (isFinalized(state, found.compactionId))
|
|
522
|
+
continue;
|
|
523
|
+
await this.#finalizeOne(session, store, found.compactionId, found.shadowedSeqs);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
async #finalizeOne(session, store, compactionId, shadowedSeqs) {
|
|
527
|
+
const state = await store.get(session.id);
|
|
528
|
+
if (isFinalized(state, compactionId))
|
|
529
|
+
return;
|
|
530
|
+
const plan = state.plans[compactionId];
|
|
531
|
+
const numbers = state.reservations[`compaction:${compactionId}`];
|
|
532
|
+
if (plan === undefined || numbers === undefined) {
|
|
533
|
+
throw new Error(`chapters: no durable plan/reservation for ${compactionId} (summarize never committed its manifest)`);
|
|
534
|
+
}
|
|
535
|
+
const cwd = session.header?.cwd;
|
|
536
|
+
if (cwd === undefined)
|
|
537
|
+
throw new Error('chapters: session has no cwd — nowhere reachable to write');
|
|
538
|
+
const renderedList = buildFinalizedChapters(session, shadowedSeqs, {
|
|
539
|
+
tocText: '', numbers, chapter: plan, ...(plan.chapters !== undefined ? { chapters: plan.chapters } : {}),
|
|
540
|
+
}, this.chaptersConfig);
|
|
541
|
+
const fs = makeArchiveFs(cwd);
|
|
542
|
+
const wrote = await writeArchive({
|
|
543
|
+
fs,
|
|
544
|
+
allocator: makeAllocator(store, session.id),
|
|
545
|
+
storeRoot: this.chaptersConfig.artifactStoreRoot,
|
|
546
|
+
rootSessionId: state.rootSession,
|
|
547
|
+
chapters: renderedList,
|
|
548
|
+
attemptId: `compaction:${compactionId}`,
|
|
549
|
+
});
|
|
550
|
+
if (wrote.records.length !== renderedList.length) {
|
|
551
|
+
// read-back failed or went missing — leaving this UNFINALIZED is the
|
|
552
|
+
// point: the reconciliation scan will retry; nothing lies in the TOC.
|
|
553
|
+
throw new Error(`chapters: write did not verify for ${compactionId}: ${wrote.warnings.join('; ')}`);
|
|
554
|
+
}
|
|
555
|
+
// Every record of this compaction carries the full shadowed span: they
|
|
556
|
+
// jointly account for what the surface replacement hid (legacy single-
|
|
557
|
+
// chapter behavior generalized).
|
|
558
|
+
const records = wrote.records.map((r) => ({ ...r, shadowedSeqs: [...shadowedSeqs] }));
|
|
559
|
+
let next = appendChapters(state, records);
|
|
560
|
+
next = markFinalized(next, compactionId, numbers);
|
|
561
|
+
await store.put(session.id, next);
|
|
562
|
+
// §5.1: compaction finalization is a push point (debounced).
|
|
563
|
+
const cwdNow = session.header?.cwd;
|
|
564
|
+
if (cwdNow !== undefined)
|
|
565
|
+
void this.#scheduler().then((s) => s.schedule(cwdNow, 'archive:compaction')).catch(() => undefined);
|
|
566
|
+
for (const w of wrote.warnings)
|
|
567
|
+
this.ctx.logger?.warn?.(`dsh-chapters: ${w}`);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
export default ChaptersCompactionEngine;
|
|
571
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAKhD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAIxC,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,EACL,iBAAiB,EAAE,mBAAmB,EAAyB,sBAAsB,EACrF,oBAAoB,EAAE,aAAa,EAAE,uBAAuB,EAAE,qBAAqB,GAEpF,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAA2B,MAAM,cAAc,CAAA;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEjG,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAA2B,MAAM,YAAY,CAAA;AACvG,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AACnH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAqB,MAAM,kBAAkB,CAAA;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AA8B3C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAIrC;IACC,yEAAyE;IACzE,uEAAuE;IACvE,wEAAwE;IACxE,0EAA0E;IAC1E,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAA;IAC/C,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,IAAK,KAA2B,EAAE,IAAI,KAAK,UAAU;gBAAE,OAAM;YAC7D,MAAM,EAAE,GAAI,OAAuC,EAAE,EAAE,CAAA;YACvD,MAAM,MAAM,GAAI,OAA8E,EAAE,cAAc,EAAE,EAAE,CAAA;YAClH,IAAI,EAAE,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAM;YACpD,MAAM,MAAM,GAAI,KAA0B,CAAC,GAAG,CAAA;YAC9C,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAM;YAChC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAC7B,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;YAClC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;YAC3B,MAAM,GAAG,GAAG,GAAkB,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;YACrE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACzC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAC3B,MAAM,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACxD,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;YACpB,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI;gBAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QAC7E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClB,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAiD;IACzF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAA;IAChC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,IAAK,KAA2B,EAAE,IAAI,KAAK,YAAY;gBAAE,OAAM;YAC/D,MAAM,EAAE,GAAI,OAAuC,EAAE,EAAE,CAAA;YACvD,MAAM,GAAG,GAAI,OAAqD,EAAE,MAAM,EAAE,GAAG,CAAA;YAC/E,IAAI,EAAE,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,OAAM;YACnE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACd,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAED,MAAM,OAAO,wBAAyB,SAAQ,qBAAqB;IACjE,gFAAgF;IAChF,yEAAyE;IACzE,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,CAAC,CAAA;IAElE,MAAM,CAAU,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QAChC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;QAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvC,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE;QACjC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE;QAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5C,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,6EAA6E;QAC7E,sEAAsE;QACtE,mEAAmE;QACnE,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC5B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;YAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;YACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvC,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE;YACjC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE;YAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SAC9C,CAAC,CAAC;QACH,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;QACjB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;QAC7B,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,0BAA0B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,0EAA0E;QAC1E,0EAA0E;QAC1E,+CAA+C;QAC/C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;QACvC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACrD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QACxD,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACnE,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACvC,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC5C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QAC7C,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAC1D,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACxD,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;QACxC,qEAAqE;QACrE,wDAAwD;QACxD,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QACjE,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QAClE,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACxD,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;KACjE,CAAC,CAAA;IAEe,cAAc,CAAc;IACrC,YAAY,GAAuC,IAAI,CAAA;IAE/D,YAAY,GAAY,EAAE,SAA4B,EAAE;QACtD,0EAA0E;QAC1E,4EAA4E;QAC5E,uEAAuE;QACvE,oEAAoE;QACpE,MAAM,EACJ,iBAAiB,EAAE,kBAAkB,EAAE,0BAA0B,EACjE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,wBAAwB,EAAE,YAAY,EACpF,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB,EAC3F,UAAU,EAAE,UAAU,EAAE,eAAe,EACvC,oBAAoB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,uBAAuB,EAC5F,GAAG,UAAU,EACd,GAAG,MAAM,CAAA;QACV,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QACtB,2EAA2E;QAC3E,0EAA0E;QAC1E,wEAAwE;QACxE,6CAA6C;QAC7C,gBAAgB,CAAC,oBAAoB,CAAC;YACpC,cAAc,EAAE,oBAAoB,IAAI,KAAK;YAC7C,mBAAmB,EAAE,yBAAyB,IAAI,GAAG;YACrD,YAAY,EAAE,kBAAkB,IAAI,CAAC;YACrC,iBAAiB,EAAE,uBAAuB,IAAI,IAAI;SACnD,CAAC,CAAC,CAAA;QACH,IAAI,CAAC,cAAc,GAAG;YACpB,iBAAiB,EAAE,iBAAiB,IAAI,eAAe;YACvD,kBAAkB,EAAE,kBAAkB,IAAI,IAAI;YAC9C,0BAA0B,EAAE,0BAA0B,IAAI,GAAG;YAC7D,cAAc,EAAE,cAAc,IAAI,GAAG;YACrC,YAAY,EAAE,YAAY,IAAI,IAAI;YAClC,wBAAwB,EAAE,wBAAwB,IAAI,IAAI;YAC1D,YAAY,EAAE,YAAY,IAAI,IAAI;SACnC,CAAA;QACD,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,KAAK,CAAA;QAC7C,IAAI,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,UAAU,IAAI,KAAK,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC,EAAE,UAAU,EAAE,eAAe,IAAI,GAAG,EAAE,CAAA;QAC1G,IAAI,CAAC,SAAS,GAAG;YACf,OAAO,EAAE,iBAAiB,IAAI,IAAI;YAClC,KAAK,EAAE,eAAe,IAAI,EAAE;YAC5B,OAAO,EAAE,CAAC,iBAAiB,IAAI,MAAM,CAA6C;YAClF,MAAM,EAAE,gBAAgB,IAAI,KAAK;YACjC,QAAQ,EAAE,kBAAkB,IAAI,CAAC;SAClC,CAAA;QACD,IAAI,CAAC,oBAAoB,EAAE,CAAA;QAC3B,IAAI,CAAC,uBAAuB,EAAE,CAAA;QAC9B,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,wEAAwE,CAAC,CAAA;IAC9F,CAAC;IAED;;;;;;OAMG;IACH;mEAC+D;IACvD,cAAc,GAAG,KAAK,CAAA;IACtB,QAAQ,GAA0D,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAA;IAC7G,SAAS,GACf,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAA;IACpE,aAAa,GAAiC,IAAI,CAAA;IAClD,OAAO,GAAkB,IAAI,CAAA;IAC7B,SAAS,GAA+C,IAAI,CAAA;IAC5D,gBAAgB,GAAsD,IAAI,CAAA;IAClF,UAAU;QACR,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,mBAAmB,CAAC;YAC7E,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,iBAAiB;YAChD,QAAQ,EAAE,iBAAiB;YAC3B,UAAU,EAAE,IAAI,CAAC,cAAc;YAC/B,qEAAqE;YACrE,sCAAsC;YACtC,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC;YAC7D,QAAQ,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,UAAU,CAAC;YAChG,cAAc,EAAE,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC;YACxG,KAAK,EAAE,IAAI,CAAC,QAAQ;YACpB,oEAAoE;YACpE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE;gBACtB,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;oBAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;YACzH,CAAC;SACF,CAAC,CAAC,CAAA;QACH,OAAO,IAAI,CAAC,gBAAgB,CAAA;IAC9B,CAAC;IAED;;;uEAGmE;IACnE,OAAO;QACL,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,kBAAkB,CAAC;YACzE,KAAK;YACL,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,SAAS;YACpC,MAAM,EAAE,IAAI,CAAC,SAAS;YACtB,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC7B,MAAM,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,SAAS,CAAA;gBACjC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;gBAChG,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;YAChD,CAAC;YACD,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS;YACvC,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC,EAAE;YAC1H,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACzD,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;SAC3D,CAAC,CAAC,CAAA;QACH,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;IAED,sEAAsE;IACtE,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,KAA0C,EAAE,SAAiB,EAAE,MAAoB,EAAE,SAAkB;QACxI,MAAM,GAAG,GAAI,IAAI,CAAC,GAA+E,CAAC,GAAG,CAAA;QACrG,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAA;QACpD,MAAM,SAAS,GAAG,IAAI,cAAc,EAAE,CAAA;QACtC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;YAC5C,QAAQ,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;YAChI,SAAS;YACT,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO,EAAE,YAAY;YACrB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,KAAc,CAAC,CAAA;QAClC,OAAQ,SAAS,CAAC,MAAM,EAAyC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACtI,CAAC;IAED;gFAC4E;IAC5E,aAAa,CAAC,KAAc;QAC1B,IAAI,CAAC;YACH,MAAM,OAAO,GAAI,KAAsD,CAAC,OAAO,CAAA;YAC/E,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAM;YACjC,MAAM,GAAG,GAAI,OAAoD,CAAC,MAAM,EAAE,GAAG,CAAA;YAC7E,IAAI,GAAG,KAAK,SAAS;gBAAE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAA;YACzC,MAAM,GAAG,GAAI,OAAmG,CAAC,aAAa,EAAE,EAAE,EAAE,MAAM,CAAA;YAC1I,IAAI,GAAG,EAAE,QAAQ,KAAK,SAAS,IAAI,GAAG,EAAE,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,SAAS,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAA;YAC1H,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAChF,CAAC;QAAC,MAAM,CAAC,CAAC,6BAA6B,CAAC,CAAC;IAC3C,CAAC;IAED,6EAA6E;IAC7E,uBAAuB;QACrB,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,eAAe,EAAE,yBAAyB,CAAC;gBACrD,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;aAC7D,CAAC,CAAC,CAAA;QACL,CAAC;QAAC,MAAM,CAAC;YACP,oEAAoE;QACtE,CAAC;IACH,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,eAAe,EAAE,qBAAqB,CAAC;gBACjD,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE;gBACzB,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,2CAA2C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC;gBACzG,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE;oBACvB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,yCAAyC,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,MAAM,WAAW,GAAG,CAAC,IAAI,cAAc,CAAC,CAAA;gBACvJ,CAAC;aACF,CAAC,CAAC,CAAA;QACL,CAAC;QAAC,MAAM,CAAC;YACP,uEAAuE;YACvE,+DAA+D;QACjE,CAAC;IACH,CAAC;IAED;4FACwF;IAChF,KAAK;QACX,IAAI,CAAC,YAAY,KAAK,CAAC,KAAK,IAAI,EAAE;YAChC,MAAM,EAAE,GAAI,IAAI,CAAC,GAC2E,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAA;YACnH,IAAI,EAAE,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;YAChG,OAAO,mBAAmB,CAAC,EAAW,CAAC,CAAA;QACzC,CAAC,CAAC,EAAE,CAAA;QACJ,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED,mFAAmF;IAEhE,KAAK,CAAC,SAAS,CAChC,KAAyB,EACzB,KAAc,EACd,OAAqB;QAErB,MAAM,OAAO,GAAI,KAAoC,CAAC,OAAO,CAAA;QAC7D,MAAM,GAAG,GAAI,OAAoD,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAA;QACrF,MAAM,GAAG,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAA;QAEzC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChE,sEAAsE;YACtE,sEAAsE;YACtE,qEAAqE;YACrE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,KAAK,CAAC,QAAQ,CAAC,MAAM,gDAAgD,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC;gBAClN,QAAQ,EAAE,GAAG,iBAAiB,WAAW;gBACzC,KAAK,EAAE,mBAAmB;aAC3B,CAAA;QACH,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QACpC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAEzC,0EAA0E;QAC1E,sEAAsE;QACtE,uEAAuE;QACvE,wEAAwE;QACxE,yEAAyE;QACzE,yCAAyC;QACzC,IAAI,WAAW,GAAmC,IAAI,CAAA;QACtD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YACpD,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClD,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;gBAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;gBACtC,MAAM,UAAU,GAAG,IAAI;qBACpB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;qBAClC,MAAM,CAAC,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,KAAK,SAAS,CAAkC,CAAA;gBAC9F,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE;oBAClF,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,cAAc;oBAClD,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY;iBAC/C,CAAC,CAAA;gBACF,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjC,MAAM,GAAG,GAAmB,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;oBAClD,oEAAoE;oBACpE,mEAAmE;oBACnE,uCAAuC;oBACvC,IAAI,GAAG,CAAC,CAAC,CAAE,CAAC,QAAQ,GAAG,SAAS;wBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;oBAC9E,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA;oBAC9B,IAAI,GAAG,CAAC,OAAO,CAAE,CAAC,MAAM,GAAG,OAAO;wBAAE,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,CAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;oBACxF,WAAW,GAAG,GAAG,CAAA;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,6DAA6D,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACxG,CAAC;QAED,sEAAsE;QACtE,0EAA0E;QAC1E,yEAAyE;QACzE,wEAAwE;QACxE,wEAAwE;QACxE,mBAAmB;QACnB,IAAI,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACtC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY;YAAE,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;QAE3G,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAA;QACxH,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE;YACrC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC3G,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpE,CAAC,CAAA;QACF,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA,CAAC,4DAA4D;QAChG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAA;IACrH,CAAC;IAED,oGAAoG;IAEpG;;;;;;;OAOG;IACH,KAAK,CAAC,WAAW,CAAC,KAAc,EAAE,KAAyB,EAAE,MAAoB;QAC/E,IAAI,CAAC;YACH,MAAM,OAAO,GAAI,KAAqD,CAAC,OAAO,CAAA;YAC9E,wEAAwE;YACxE,IAAI,IAAI,GAAG,EAAE,CAAA;YACb,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1E,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAoE,CAAA;gBAC9F,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;gBACjH,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;oBAAE,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI,EAAE,CAAA;YAClE,CAAC;YACD,MAAM,WAAW,GAAG,4SAA4S,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAA;YACpV,2EAA2E;YAC3E,wEAAwE;YACxE,qEAAqE;YACrE,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;YAChD,MAAM,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAA;YACpC,MAAM,GAAG,GAAI,IAAgG,CAAC,MAAM,IAAI,EAAE,CAAA;YAC1H,MAAM,MAAM,GAAG,CAAC,OAAO,GAAG,CAAC,qBAAqB,KAAK,QAAQ,IAAI,GAAG,CAAC,qBAAqB,KAAK,EAAE;mBAC5F,OAAO,GAAG,CAAC,kBAAkB,KAAK,QAAQ,IAAI,GAAG,CAAC,kBAAkB,KAAK,EAAE,CAAC;gBAC/E,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;YACjF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,EAAE,IAAI,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACpH,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAA;YAC/B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;YACjF,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAChC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAA;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAA;YAC3D,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAY;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAwE,CAAA;QAC9F,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,CAAA;QAC/B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;YAAE,OAAM;QAC3C,MAAM,KAAK,GAAI,IAAI,CAAC,GAA+E,CAAC,UAAU,CAAA;QAC9G,IAAI,KAAK,KAAK,SAAS;YAAE,OAAM;QAC/B,MAAM,CAAC,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE;YACzC,GAAG;YACH,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,iBAAiB;YAChD,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,wBAAwB;YACzD,QAAQ,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;SACnD,CAAC,CAAA;QACF,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,4CAA4C,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IAC9G,CAAC;IAEQ,KAAK,CAAC,eAAe,CAC5B,KAAY,EAAE,OAA0B,EAAE,MAAmB;QAE7D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QACzB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACzB,yEAAyE;QACzE,4EAA4E;QAC5E,4EAA4E;QAC5E,4EAA4E;QAC5E,0EAA0E;QAC1E,IAAI,MAA+B,CAAA;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;YAClC,MAAM,KAAK,CAAA;QACb,CAAC;QACD,IAAI,MAAM,KAAK,IAAI;YAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACvD,OAAO,MAAM,CAAA;IACf,CAAC;IAEQ,KAAK,CAAC,UAAU,CACvB,KAAY,EAAE,MAAmB,EAAE,eAA2B;QAE9D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QACzB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACzB,IAAI,MAA+B,CAAA;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,CAAA;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;YAClC,MAAM,KAAK,CAAA;QACb,CAAC;QACD,IAAI,MAAM,KAAK,IAAI;YAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACvD,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAAY;QACjC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAmC,CAAA;QACzD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAA;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,wDAAwD,OAAO,CAAC,EAAE,MAAM,MAAM,CAAE,KAAe,EAAE,KAAK,IAAI,KAAK,CAAC,EAAE,CAAA;YAClI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,CAAA;YAChC,sEAAsE;YACtE,wEAAwE;YACxE,8EAA8E;YAC9E,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAA;YACnD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,IAAI,CAAC;oBACH,cAAc,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,IAAI,CAAC,CAAA;gBACpE,CAAC;gBAAC,MAAM,CAAC,CAAC,kDAAkD,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,KAAK,CAAC,uBAAuB,CAAC,OAAsB;QAClD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QACpC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACzC,KAAK,MAAM,KAAK,IAAI,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC;gBAAE,SAAQ;YACpD,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAA;QACjF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,OAAsB,EACtB,KAAoB,EACpB,YAAoB,EACpB,YAA+B;QAE/B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACzC,IAAI,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC;YAAE,OAAM;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,cAAc,YAAY,EAAE,CAAC,CAAA;QAChE,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,6CAA6C,YAAY,2CAA2C,CAAC,CAAA;QACvH,CAAC;QACD,MAAM,GAAG,GAAI,OAAoD,CAAC,MAAM,EAAE,GAAG,CAAA;QAC7E,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;QAEnG,MAAM,YAAY,GAAG,sBAAsB,CAAC,OAAO,EAAE,YAAY,EAAE;YACjE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QAEvB,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QAC7B,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC;YAC/B,EAAE;YACF,SAAS,EAAE,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;YAC3C,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,iBAAiB;YAChD,aAAa,EAAE,KAAK,CAAC,WAAW;YAChC,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,cAAc,YAAY,EAAE;SACxC,CAAC,CAAA;QACF,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;YACjD,qEAAqE;YACrE,sEAAsE;YACtE,MAAM,IAAI,KAAK,CAAC,sCAAsC,YAAY,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACrG,CAAC;QACD,uEAAuE;QACvE,uEAAuE;QACvE,iCAAiC;QACjC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC,CAAA;QACrF,IAAI,IAAI,GAAiB,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACvD,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,CAAA;QACjD,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACjC,6DAA6D;QAC7D,MAAM,MAAM,GAAI,OAAoD,CAAC,MAAM,EAAE,GAAG,CAAA;QAChF,IAAI,MAAM,KAAK,SAAS;YAAE,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAC7H,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ;YAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAA;IAC/E,CAAC;;AAGH,eAAe,wBAAwB,CAAA"}
|