wyrm-mcp 7.3.2 → 7.3.3
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/README.md +8 -14
- package/dist/activation.js +59 -1
- package/dist/agent-daemon.js +281 -4
- package/dist/agent-loop.js +332 -7
- package/dist/analytics.js +236 -13
- package/dist/attribution.js +49 -1
- package/dist/audit.js +457 -2
- package/dist/auto-capture.js +138 -3
- package/dist/auto-orchestrator.js +325 -1
- package/dist/autoconfig.d.ts +50 -0
- package/dist/autoconfig.d.ts.map +1 -1
- package/dist/autoconfig.js +1115 -39
- package/dist/autoconfig.js.map +1 -1
- package/dist/buddy-runner.js +109 -1
- package/dist/buddy.js +564 -14
- package/dist/build-flags.js +15 -1
- package/dist/capabilities.js +183 -3
- package/dist/capture.js +56 -1
- package/dist/causality.js +148 -8
- package/dist/cli.js +281 -20
- package/dist/cloud/cli.js +541 -5
- package/dist/cloud/client.js +221 -1
- package/dist/cloud/crypto.js +85 -1
- package/dist/cloud/machine-id.js +113 -2
- package/dist/cloud/recovery.js +60 -1
- package/dist/cloud/sync-engine.js +543 -7
- package/dist/cloud-backup.js +579 -5
- package/dist/cloud-profile.js +138 -1
- package/dist/cloud-sync-entrypoint.js +47 -1
- package/dist/cloud-sync.js +309 -2
- package/dist/connectors/bridge-source.d.ts +46 -0
- package/dist/connectors/bridge-source.d.ts.map +1 -0
- package/dist/connectors/bridge-source.js +77 -0
- package/dist/connectors/bridge-source.js.map +1 -0
- package/dist/connectors/index.d.ts +24 -0
- package/dist/connectors/index.d.ts.map +1 -0
- package/dist/connectors/index.js +69 -0
- package/dist/connectors/index.js.map +1 -0
- package/dist/connectors/ingest.d.ts +16 -0
- package/dist/connectors/ingest.d.ts.map +1 -0
- package/dist/connectors/ingest.js +116 -0
- package/dist/connectors/ingest.js.map +1 -0
- package/dist/connectors/types.d.ts +99 -0
- package/dist/connectors/types.d.ts.map +1 -0
- package/dist/connectors/types.js +17 -0
- package/dist/connectors/types.js.map +1 -0
- package/dist/constellation.js +168 -12
- package/dist/content-signature.js +45 -1
- package/dist/context-build-budgeted.js +144 -4
- package/dist/context-ranking.js +69 -1
- package/dist/crypto.js +179 -1
- package/dist/daemon-write-endpoint.js +290 -1
- package/dist/daemon-writer.js +406 -2
- package/dist/database.js +1278 -53
- package/dist/deprecations.js +162 -2
- package/dist/design.js +141 -13
- package/dist/event-replication.js +112 -1
- package/dist/events-sse.js +43 -7
- package/dist/events.js +238 -6
- package/dist/failure-patterns.d.ts +107 -0
- package/dist/failure-patterns.d.ts.map +1 -1
- package/dist/failure-patterns.js +924 -43
- package/dist/failure-patterns.js.map +1 -1
- package/dist/federation.js +236 -12
- package/dist/goals.js +101 -13
- package/dist/golden.js +355 -3
- package/dist/handlers/agent.js +165 -4
- package/dist/handlers/alias-adapters.js +129 -1
- package/dist/handlers/aliases.js +171 -1
- package/dist/handlers/audit.js +87 -1
- package/dist/handlers/boundary.js +221 -1
- package/dist/handlers/capture.js +1114 -73
- package/dist/handlers/causality.js +119 -9
- package/dist/handlers/cloud.js +382 -85
- package/dist/handlers/companion.js +459 -28
- package/dist/handlers/datalake.js +187 -7
- package/dist/handlers/dispatch-context.js +22 -0
- package/dist/handlers/entity.js +256 -25
- package/dist/handlers/events.js +335 -16
- package/dist/handlers/failure.d.ts.map +1 -1
- package/dist/handlers/failure.js +408 -13
- package/dist/handlers/failure.js.map +1 -1
- package/dist/handlers/goals.js +296 -4
- package/dist/handlers/intelligence.js +681 -126
- package/dist/handlers/invoicing.js +70 -1
- package/dist/handlers/mcpclient.js +137 -6
- package/dist/handlers/orchestration.js +125 -40
- package/dist/handlers/output-schemas.js +24 -1
- package/dist/handlers/presence.js +99 -3
- package/dist/handlers/project.js +182 -28
- package/dist/handlers/prompts.js +157 -6
- package/dist/handlers/quest.js +224 -4
- package/dist/handlers/recall.js +237 -13
- package/dist/handlers/registry.js +167 -1
- package/dist/handlers/resources.js +288 -1
- package/dist/handlers/review.js +74 -11
- package/dist/handlers/run.js +498 -16
- package/dist/handlers/search.js +338 -15
- package/dist/handlers/session.js +643 -31
- package/dist/handlers/share.js +184 -8
- package/dist/handlers/shims.js +464 -1
- package/dist/handlers/skill.js +449 -67
- package/dist/handlers/survivors.js +120 -1
- package/dist/handlers/symbols.js +109 -8
- package/dist/handlers/syncops.js +302 -4
- package/dist/handlers/types.js +27 -1
- package/dist/harvest.js +191 -5
- package/dist/hours.js +156 -7
- package/dist/http-auth.js +321 -3
- package/dist/http-fast.js +1302 -22
- package/dist/icons.js +47 -1
- package/dist/importers.js +268 -1
- package/dist/index.js +840 -2
- package/dist/indexer.js +145 -4
- package/dist/intelligence.js +261 -31
- package/dist/internal-dispatch.js +212 -3
- package/dist/keyset.js +110 -1
- package/dist/knowledge-graph.js +176 -12
- package/dist/license.js +441 -2
- package/dist/logger.js +199 -2
- package/dist/maintenance.js +148 -2
- package/dist/mcp-client.js +262 -6
- package/dist/memory-artifacts.js +596 -32
- package/dist/migrate-prompt.js +124 -2
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +799 -42
- package/dist/migrations.js.map +1 -1
- package/dist/performance.js +228 -1
- package/dist/presence.js +140 -11
- package/dist/priority-embed.js +164 -5
- package/dist/providers/embedding-provider.js +196 -1
- package/dist/readonly-gate.js +29 -1
- package/dist/receipt.js +43 -1
- package/dist/rehydration.js +157 -9
- package/dist/reindex.js +88 -1
- package/dist/render-target.js +544 -21
- package/dist/render.js +280 -4
- package/dist/repl-guard.js +173 -1
- package/dist/replication-daemon-entrypoint.js +31 -1
- package/dist/replication-daemon.js +262 -2
- package/dist/rerank.js +142 -1
- package/dist/resilience.js +591 -1
- package/dist/reverse-bridge.js +360 -5
- package/dist/security.js +244 -1
- package/dist/session-seen.js +51 -3
- package/dist/setup.js +260 -1
- package/dist/skill-author.js +168 -5
- package/dist/spec-kit.js +191 -1
- package/dist/sqlite-busy.js +154 -1
- package/dist/statusline.js +315 -11
- package/dist/sub-agent.js +262 -13
- package/dist/summarizer.js +139 -13
- package/dist/symbols.js +283 -7
- package/dist/sync.js +359 -5
- package/dist/tasks-dispatch.js +84 -1
- package/dist/tasks.js +282 -1
- package/dist/token-budget.js +143 -1
- package/dist/tool-analytics.js +129 -7
- package/dist/tool-annotations.js +365 -1
- package/dist/tool-manifest-v2.json +1 -1
- package/dist/tool-manifest.json +1 -1
- package/dist/tool-profiles.js +75 -1
- package/dist/trace-harvest.js +244 -6
- package/dist/types.js +30 -1
- package/dist/ui-dashboard.js +50 -41
- package/dist/ulid.js +81 -1
- package/dist/usage-tracker.js +66 -1
- package/dist/validate.js +129 -1
- package/dist/vault.js +534 -1
- package/dist/vector-init.js +67 -1
- package/dist/vectors.js +184 -3
- package/dist/version-check.js +136 -4
- package/dist/visibility.js +155 -19
- package/dist/wyrm-cli.js +2845 -101
- package/dist/wyrm-cli.js.map +1 -1
- package/dist/wyrm-guard.d.ts.map +1 -1
- package/dist/wyrm-guard.js +475 -14
- package/dist/wyrm-guard.js.map +1 -1
- package/dist/wyrm-loop.js +150 -3
- package/dist/wyrm-manifest.json +1 -1
- package/dist/wyrm-statusline-daemon.js +11 -1
- package/dist/wyrm-statusline.js +56 -4
- package/dist/wyrm-ui.js +77 -9
- package/package.json +1 -1
package/dist/wyrm-guard.js
CHANGED
|
@@ -1,15 +1,476 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
2
|
+
/**
|
|
3
|
+
* wyrm-guard — deterministic PreToolUse hook bin (v7 F2, T016; spec FR-2/G2).
|
|
4
|
+
*
|
|
5
|
+
* Harness-side negative learning: Claude Code pipes the PreToolUse payload for
|
|
6
|
+
* Bash/Edit/Write(/MultiEdit/NotebookEdit) to this bin; the bin runs the SAME
|
|
7
|
+
* deterministic failure_check the MCP tool runs (FailurePatterns.checkVerdict —
|
|
8
|
+
* Article III: bm25/match-tier arithmetic, zero LLM calls, zero network)
|
|
9
|
+
* against the LOCAL SQLite DB opened READ-ONLY, and answers on the Claude Code
|
|
10
|
+
* hook contract:
|
|
11
|
+
*
|
|
12
|
+
* BLOCK — exit 2, the failure pattern on stderr (Claude Code feeds stderr
|
|
13
|
+
* back to the model and does not execute the tool call).
|
|
14
|
+
* The deterministic block rule — identity blocks, similarity warns:
|
|
15
|
+
* · an EXACT signature match (checkVerdict tier 'exact'), or
|
|
16
|
+
* · a TARGET-IDENTITY match: a stored failure whose scope+target
|
|
17
|
+
* normalize identical to the probed command / file path under
|
|
18
|
+
* normalizeIdentity — the FULL, UNCAPPED form of the signature
|
|
19
|
+
* normalization. Identity spans the whole command/path: the
|
|
20
|
+
* 200-char signature cap is range-scan recall only, so two
|
|
21
|
+
* long actions differing only past it never alias into one
|
|
22
|
+
* block, and the lookup filters identity BEFORE its result
|
|
23
|
+
* cap, so same-prefix cousins can never crowd an
|
|
24
|
+
* identical-target row out. v7 F2 review fix: this tier runs
|
|
25
|
+
* as a DEDICATED signature-prefix lookup
|
|
26
|
+
* (FailurePatterns.targetIdentityMatches) — production rows
|
|
27
|
+
* always carry a non-empty description, so full-signature
|
|
28
|
+
* equality against this bin's empty-description probe could
|
|
29
|
+
* never fire, and a block never depends on FTS recall.
|
|
30
|
+
* WARN — exit 0, hookSpecificOutput.additionalContext JSON on stdout
|
|
31
|
+
* (non-blocking context injection — the wyrm-push.py shape) for any
|
|
32
|
+
* other match.
|
|
33
|
+
* SILENT — exit 0, no output, when clean.
|
|
34
|
+
*
|
|
35
|
+
* Run/scope semantics (T014/T015): the caller's run identity comes from
|
|
36
|
+
* WYRM_RUN_ID (the F2 fleet convention — the orchestrator exports it once for
|
|
37
|
+
* the whole fleet) and is passed EXPLICITLY to checkVerdict, so same-run
|
|
38
|
+
* quarantined failures bite instantly while runless callers only ever see the
|
|
39
|
+
* project/global tiers. Project scoping: the payload `cwd` (or the edited
|
|
40
|
+
* file's directory) is walked up against projects.path — unenrolled paths
|
|
41
|
+
* still check the global (project-NULL) failures.
|
|
42
|
+
*
|
|
43
|
+
* Probe construction (recall under FTS5 implicit-AND, see query() in
|
|
44
|
+
* failure-patterns.ts):
|
|
45
|
+
* · Bash → scope 'command', probe target = the command string.
|
|
46
|
+
* · Files → scopes 'file' + 'edit', probe target = the BASENAME (a full path
|
|
47
|
+
* would AND-in every directory token and miss relpath-keyed rows); the
|
|
48
|
+
* identity rule then compares the stored target against the absolute,
|
|
49
|
+
* project-relative, and as-given path forms — equality on any blocks.
|
|
50
|
+
* The edit content signal is extracted/validated but NOT fed to the FTS
|
|
51
|
+
* probe: under implicit-AND it strictly narrows recall, and it can never
|
|
52
|
+
* produce an exact signature against recorder-authored descriptions.
|
|
53
|
+
*
|
|
54
|
+
* Budget (the wyrm-push.py ~200ms discipline): readonly open + fileMustExist,
|
|
55
|
+
* busy_timeout=100ms (a locked DB fails open instead of hanging the harness),
|
|
56
|
+
* a small fixed number of prepared statements per scope (the two checkVerdict
|
|
57
|
+
* stages + one identity range-probe per identity candidate), no migrations,
|
|
58
|
+
* no index work. Measured by bench/guard-budget.mjs (Article VIII).
|
|
59
|
+
*
|
|
60
|
+
* Analytics (v7 F2 review fix): a BLOCK files one failure_blocks row — the
|
|
61
|
+
* prevented-repeat ROI counter behind `wyrm_stats view=failures` — via a
|
|
62
|
+
* separate short-lived RW connection (busy_timeout=50ms). Strictly
|
|
63
|
+
* best-effort and fail-open: the CHECK connection stays readonly, and any
|
|
64
|
+
* ledger failure is swallowed without affecting the verdict. Blocks are rare
|
|
65
|
+
* (they abort the tool call), so the extra write never touches the hot path.
|
|
66
|
+
*
|
|
67
|
+
* A broken guard must NEVER block the operator's harness: ANY internal error →
|
|
68
|
+
* silent exit 0 (fail-open). Set WYRM_GUARD_DEBUG=1 to surface the swallowed
|
|
69
|
+
* reason on stderr (still exit 0 — debug output never blocks).
|
|
70
|
+
*
|
|
71
|
+
* Operator escape hatch: WYRM_GUARD_MODE=warn (downgrade blocks to warns) |
|
|
72
|
+
* off (disable entirely). Article I: fully offline, local DB only. Article
|
|
73
|
+
* VII: read-only handle, every value a bound parameter (inside
|
|
74
|
+
* FailurePatterns), stored text control-char-stripped + length-capped before
|
|
75
|
+
* it is rendered into hook output.
|
|
76
|
+
*
|
|
77
|
+
* Install: scripts/hooks/install.sh wires the PreToolUse matchers
|
|
78
|
+
* (`Bash` and `Edit|Write|MultiEdit|NotebookEdit`) into ~/.claude/settings.json.
|
|
79
|
+
*
|
|
80
|
+
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
81
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
82
|
+
*/
|
|
83
|
+
import Database from 'better-sqlite3';
|
|
84
|
+
import { readFileSync, realpathSync } from 'node:fs';
|
|
85
|
+
import { homedir } from 'node:os';
|
|
86
|
+
import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
87
|
+
import { fileURLToPath } from 'node:url';
|
|
88
|
+
import { FailurePatterns, normalizeIdentity, STALE_ANCHOR_FLAG, } from './failure-patterns.js';
|
|
89
|
+
import { LEGACY_ENVELOPE, runWithActor, sanitizeActorId } from './handlers/boundary.js';
|
|
90
|
+
const SILENT = { exitCode: 0, stdout: '', stderr: '' };
|
|
91
|
+
/** Tools whose signal is a file path (+ content). Mirrors wyrm-push.py. */
|
|
92
|
+
const FILE_TOOLS = new Set(['Edit', 'Write', 'MultiEdit', 'NotebookEdit']);
|
|
93
|
+
/** How many warn-context matches to render at most. */
|
|
94
|
+
const WARN_MATCH_CAP = 3;
|
|
95
|
+
/** Max levels walked up when resolving cwd → projects.path. */
|
|
96
|
+
const PROJECT_WALK_LEVELS = 10;
|
|
97
|
+
// ── small helpers (all pure) ────────────────────────────────────────────────
|
|
98
|
+
function asString(v) {
|
|
99
|
+
return typeof v === 'string' && v.length > 0 ? v : null;
|
|
100
|
+
}
|
|
101
|
+
/** Strip control chars + cap length before stored text reaches hook output. */
|
|
102
|
+
function clean(s, max) {
|
|
103
|
+
if (!s)
|
|
104
|
+
return '';
|
|
105
|
+
// eslint-disable-next-line no-control-regex
|
|
106
|
+
return s.replace(/[\x00-\x1f\x7f]/g, ' ').replace(/\s+/g, ' ').trim().slice(0, max);
|
|
107
|
+
}
|
|
108
|
+
/** Extract the deterministic check signal from a PreToolUse payload, or null
|
|
109
|
+
* when the payload is not ours to judge (wrong event/tool/shape → SILENT). */
|
|
110
|
+
function extractSignal(payload) {
|
|
111
|
+
const event = payload['hook_event_name'];
|
|
112
|
+
if (event !== undefined && event !== 'PreToolUse')
|
|
113
|
+
return null;
|
|
114
|
+
const toolName = payload['tool_name'];
|
|
115
|
+
const input = payload['tool_input'];
|
|
116
|
+
if (typeof toolName !== 'string' || typeof input !== 'object' || input === null)
|
|
117
|
+
return null;
|
|
118
|
+
const toolInput = input;
|
|
119
|
+
const cwd = asString(payload['cwd']);
|
|
120
|
+
if (toolName === 'Bash') {
|
|
121
|
+
const command = asString(toolInput['command'])?.trim();
|
|
122
|
+
if (!command)
|
|
123
|
+
return null;
|
|
124
|
+
const capped = command.slice(0, 1000); // FTS probe + display stay bounded
|
|
125
|
+
return {
|
|
126
|
+
scopes: ['command'],
|
|
127
|
+
probeTarget: capped,
|
|
128
|
+
// Identity is the FULL command, uncapped: commands differing only past
|
|
129
|
+
// any cap are DIFFERENT actions, and the comparison cost is one linear
|
|
130
|
+
// normalize pass — the cap above bounds only the recall/display paths.
|
|
131
|
+
identity: [command],
|
|
132
|
+
display: clean(capped, 80),
|
|
133
|
+
startDir: cwd,
|
|
134
|
+
absPath: null,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
if (FILE_TOOLS.has(toolName)) {
|
|
138
|
+
const filePath = asString(toolInput['file_path']) ?? asString(toolInput['notebook_path']);
|
|
139
|
+
if (!filePath)
|
|
140
|
+
return null;
|
|
141
|
+
// Content signal — extracted/shape-checked (see header for why it is not
|
|
142
|
+
// fed to the FTS probe).
|
|
143
|
+
const edits = toolInput['edits'];
|
|
144
|
+
const content = asString(toolInput['new_string'])
|
|
145
|
+
?? asString(toolInput['content'])
|
|
146
|
+
?? asString(toolInput['new_source'])
|
|
147
|
+
?? (Array.isArray(edits)
|
|
148
|
+
? edits.map((e) => asString(e?.['new_string']) ?? '').join(' ')
|
|
149
|
+
: '');
|
|
150
|
+
const abs = isAbsolute(filePath)
|
|
151
|
+
? resolve(filePath)
|
|
152
|
+
: cwd && isAbsolute(cwd) ? resolve(cwd, filePath) : null;
|
|
153
|
+
return {
|
|
154
|
+
scopes: ['file', 'edit'],
|
|
155
|
+
probeTarget: basename(filePath).slice(0, 200),
|
|
156
|
+
// identity candidates: as-given + absolute, RAW and uncapped (same
|
|
157
|
+
// full-identity rule as the Bash candidate — deep paths must not alias
|
|
158
|
+
// at a truncation boundary); the project-relative form is appended in
|
|
159
|
+
// runGuard once the project root is known.
|
|
160
|
+
identity: dedupe([filePath, ...(abs ? [abs] : [])]),
|
|
161
|
+
display: clean(filePath, 80),
|
|
162
|
+
startDir: abs ? dirname(abs) : cwd,
|
|
163
|
+
absPath: abs,
|
|
164
|
+
content,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
/** Dedupe identity candidates by their normalizeIdentity image (the form
|
|
170
|
+
* every identity comparison uses), keeping the first raw spelling. */
|
|
171
|
+
function dedupe(xs) {
|
|
172
|
+
const seen = new Set();
|
|
173
|
+
const out = [];
|
|
174
|
+
for (const x of xs) {
|
|
175
|
+
const key = normalizeIdentity(x);
|
|
176
|
+
if (key.length === 0 || seen.has(key))
|
|
177
|
+
continue;
|
|
178
|
+
seen.add(key);
|
|
179
|
+
out.push(x);
|
|
180
|
+
}
|
|
181
|
+
return out;
|
|
182
|
+
}
|
|
183
|
+
/** Walk up from startDir matching projects.path (indexed UNIQUE lookup per
|
|
184
|
+
* level, ≤PROJECT_WALK_LEVELS). Unenrolled → null (global failures still apply). */
|
|
185
|
+
function resolveProject(db, startDir) {
|
|
186
|
+
if (!startDir)
|
|
187
|
+
return { id: null, root: null };
|
|
188
|
+
const stmt = db.prepare('SELECT id FROM projects WHERE path = ?');
|
|
189
|
+
let p = resolve(startDir);
|
|
190
|
+
for (let i = 0; i < PROJECT_WALK_LEVELS; i++) {
|
|
191
|
+
const row = stmt.get(p);
|
|
192
|
+
if (row)
|
|
193
|
+
return { id: row.id, root: p };
|
|
194
|
+
const parent = dirname(p);
|
|
195
|
+
if (parent === p)
|
|
196
|
+
break;
|
|
197
|
+
p = parent;
|
|
198
|
+
}
|
|
199
|
+
return { id: null, root: null };
|
|
200
|
+
}
|
|
201
|
+
// ── rendering (plain ASCII — spec FR-3 renderer discipline) ─────────────────
|
|
202
|
+
function attributionLine(m) {
|
|
203
|
+
if (m.recorded_by_agent === 'legacy' && m.run_id === null)
|
|
204
|
+
return '';
|
|
205
|
+
const run = m.run_id
|
|
206
|
+
? ` (run ${clean(m.run_id, 32)}${m.quarantine_scope === 'run' ? ', run-quarantined' : ''})`
|
|
207
|
+
: '';
|
|
208
|
+
return ` recorded by: ${clean(m.recorded_by_agent, 64)}${run}\n`;
|
|
209
|
+
}
|
|
210
|
+
function renderBlock(m, reason, extra) {
|
|
211
|
+
const desc = m.description ? ` description: ${clean(m.description, 200)}\n` : '';
|
|
212
|
+
const why = m.why_failed ? ` failed because: ${clean(m.why_failed, 300)}\n` : '';
|
|
213
|
+
const reasonText = reason === 'exact'
|
|
214
|
+
? 'this exact action is a recorded unresolved failure'
|
|
215
|
+
: reason === 'content'
|
|
216
|
+
? 'this edit re-introduces the code of a recorded unresolved failure'
|
|
217
|
+
: 'this exact target previously failed and the failure is unresolved';
|
|
218
|
+
return (`wyrm-guard: BLOCKED — ${reasonText} (deterministic ${reason} match).\n` +
|
|
219
|
+
` failure #${m.id} [${m.severity}/${m.scope}] seen ${m.occurrences}x, last ${clean(m.last_seen, 32)}\n` +
|
|
220
|
+
` target: ${clean(m.target, 120)}\n` +
|
|
221
|
+
desc +
|
|
222
|
+
why +
|
|
223
|
+
attributionLine(m) +
|
|
224
|
+
'Do NOT retry the same action — pick a different approach. If the underlying\n' +
|
|
225
|
+
`issue is truly fixed, resolve the failure first (wyrm_failure_resolve id=${m.id})\n` +
|
|
226
|
+
'and then retry.\n' +
|
|
227
|
+
(extra > 0 ? `(+${extra} more recorded match${extra === 1 ? '' : 'es'} — wyrm_failure_list)\n` : ''));
|
|
228
|
+
}
|
|
229
|
+
function renderWarn(matches, display) {
|
|
230
|
+
const shown = matches.slice(0, WARN_MATCH_CAP);
|
|
231
|
+
const lines = shown.map((m) => {
|
|
232
|
+
const why = m.why_failed ?? m.description;
|
|
233
|
+
return `- #${m.id} [${m.severity}/${m.scope}] ${clean(m.target, 80)} ` +
|
|
234
|
+
`(seen ${m.occurrences}x, confidence ${m.confidence}): ${clean(why, 160)}` +
|
|
235
|
+
// Staleness oracle: a downgraded block surfaces here as a WARN carrying
|
|
236
|
+
// the SAME flag text the MCP verdict emits (stale_anchor).
|
|
237
|
+
(m.stale_anchor ? `\n stale_anchor: ${m.stale_anchor}` : '');
|
|
238
|
+
});
|
|
239
|
+
const extra = matches.length - shown.length;
|
|
240
|
+
return [
|
|
241
|
+
'<wyrm-memory>',
|
|
242
|
+
`wyrm-guard: ${matches.length} recorded unresolved failure(s) look similar to \`${display}\` — check before proceeding:`,
|
|
243
|
+
...lines,
|
|
244
|
+
...(extra > 0 ? [`(+${extra} more — wyrm_failure_list)`] : []),
|
|
245
|
+
'If one applies, do not repeat it — adjust the approach or resolve it first (wyrm_failure_resolve).',
|
|
246
|
+
'</wyrm-memory>',
|
|
247
|
+
].join('\n');
|
|
248
|
+
}
|
|
249
|
+
function warnResult(matches, display) {
|
|
250
|
+
const body = {
|
|
251
|
+
hookSpecificOutput: {
|
|
252
|
+
hookEventName: 'PreToolUse',
|
|
253
|
+
additionalContext: renderWarn(matches, display),
|
|
254
|
+
},
|
|
255
|
+
};
|
|
256
|
+
return { exitCode: 0, stdout: JSON.stringify(body) + '\n', stderr: '' };
|
|
257
|
+
}
|
|
258
|
+
// ── the guard ───────────────────────────────────────────────────────────────
|
|
259
|
+
/**
|
|
260
|
+
* The whole guard as a pure-ish function of (stdin, env) — exported so tests
|
|
261
|
+
* exercise every path in-process. NEVER throws: any internal error returns
|
|
262
|
+
* SILENT (fail-open — a broken guard must never block the operator's harness).
|
|
263
|
+
*/
|
|
264
|
+
export function runGuard(stdinText, env = process.env) {
|
|
265
|
+
let db = null;
|
|
266
|
+
try {
|
|
267
|
+
const mode = (env.WYRM_GUARD_MODE ?? 'block').toLowerCase();
|
|
268
|
+
if (mode === 'off')
|
|
269
|
+
return SILENT;
|
|
270
|
+
if (!stdinText || !stdinText.trim())
|
|
271
|
+
return SILENT;
|
|
272
|
+
const parsed = JSON.parse(stdinText);
|
|
273
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
274
|
+
return SILENT;
|
|
275
|
+
const signal = extractSignal(parsed);
|
|
276
|
+
if (!signal)
|
|
277
|
+
return SILENT;
|
|
278
|
+
const dbPath = env.WYRM_DB_PATH ?? join(homedir(), '.wyrm', 'wyrm.db');
|
|
279
|
+
db = new Database(dbPath, { readonly: true, fileMustExist: true });
|
|
280
|
+
db.pragma('busy_timeout = 100'); // a locked DB fails open, never hangs the harness
|
|
281
|
+
const { id: projectId, root } = resolveProject(db, signal.startDir);
|
|
282
|
+
// Project-relative identity candidate for file probes (recorders commonly
|
|
283
|
+
// key file failures by relpath). RAW like every identity candidate.
|
|
284
|
+
const identity = [...signal.identity];
|
|
285
|
+
if (root && signal.absPath && signal.absPath.startsWith(root + sep)) {
|
|
286
|
+
identity.push(relative(root, signal.absPath));
|
|
287
|
+
}
|
|
288
|
+
// The caller's run identity — explicit (deterministic in (stdin, env)),
|
|
289
|
+
// honoring the same WYRM_RUN_ID convention the ambient envelope uses.
|
|
290
|
+
const callerRunId = sanitizeActorId(env.WYRM_RUN_ID) ?? null;
|
|
291
|
+
const failures = new FailurePatterns(db);
|
|
292
|
+
const seen = new Set();
|
|
293
|
+
const matches = [];
|
|
294
|
+
const identityCandidates = dedupe(identity);
|
|
295
|
+
// (a) The checkVerdict stages: the exact-signature tier + FTS fuzzy
|
|
296
|
+
// recall for the WARN context. Runs first so a genuine full-signature
|
|
297
|
+
// match keeps its 'exact' classification.
|
|
298
|
+
for (const scope of signal.scopes) {
|
|
299
|
+
try {
|
|
300
|
+
const verdict = failures.checkVerdict(scope, signal.probeTarget, '', projectId, { callerRunId });
|
|
301
|
+
for (const m of verdict.matches) {
|
|
302
|
+
if (!seen.has(m.id)) {
|
|
303
|
+
seen.add(m.id);
|
|
304
|
+
matches.push(m);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
// e.g. a probe that sanitizes to an empty FTS query — skip this scope
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
// (b) The deterministic TARGET-IDENTITY tier (v7 F2 review fix): a
|
|
313
|
+
// dedicated description-independent signature-prefix lookup per identity
|
|
314
|
+
// candidate — production rows (whose descriptions are never empty) block
|
|
315
|
+
// on it. Candidates go in RAW: identity equality runs over the FULL
|
|
316
|
+
// normalizeIdentity forms, and the lookup filters identity before its
|
|
317
|
+
// result cap — so neither the 200-char signature cap nor higher-ranked
|
|
318
|
+
// same-prefix cousins (colon-extended npm scripts, URLs, host:port) can
|
|
319
|
+
// alias or crowd out an identical-target row. Stage (a)'s FTS LIMIT 5
|
|
320
|
+
// can still be crowded, but it only feeds WARN context — a block never
|
|
321
|
+
// depends on FTS recall.
|
|
322
|
+
for (const scope of signal.scopes) {
|
|
323
|
+
for (const cand of identityCandidates) {
|
|
324
|
+
try {
|
|
325
|
+
for (const row of failures.targetIdentityMatches(scope, cand, projectId, { callerRunId })) {
|
|
326
|
+
if (!seen.has(row.id)) {
|
|
327
|
+
seen.add(row.id);
|
|
328
|
+
matches.push(failures.toVerdictMatch(row, 'target'));
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
catch {
|
|
333
|
+
// identity probe failure is never fatal — the other stages still ran
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
// (c) v7 Failure Firewall v2 — CONTENT tier (opt-in WYRM_GUARD_CONTENT): an
|
|
338
|
+
// Edit/Write whose code re-introduces a recorded failed pattern blocks even
|
|
339
|
+
// when the target path differs. Precision-gated in contentMatch; readonly;
|
|
340
|
+
// any error degrades to the path tiers above.
|
|
341
|
+
let contentHit = null;
|
|
342
|
+
if (signal.content && signal.scopes.includes('edit') &&
|
|
343
|
+
/^(1|true|yes|on)$/i.test(env.WYRM_GUARD_CONTENT ?? '')) {
|
|
344
|
+
try {
|
|
345
|
+
const row = failures.contentMatch(signal.content, 'edit', projectId);
|
|
346
|
+
if (row && !seen.has(row.id)) {
|
|
347
|
+
seen.add(row.id);
|
|
348
|
+
contentHit = failures.toVerdictMatch(row, 'target');
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
catch { /* content probe failure is never fatal */ }
|
|
352
|
+
}
|
|
353
|
+
if (matches.length === 0 && !contentHit)
|
|
354
|
+
return SILENT;
|
|
355
|
+
// Fuzzy→target upgrade set: FULL normalized identity forms — same truth
|
|
356
|
+
// predicate as targetIdentityMatches, so a fuzzy-recalled row upgrades to
|
|
357
|
+
// a block only on whole-string identity, never on a shared capped prefix.
|
|
358
|
+
const identitySet = new Set(identityCandidates.map((c) => normalizeIdentity(c)));
|
|
359
|
+
const RANK = { exact: 0, target: 1, content: 2 };
|
|
360
|
+
const blockers = [
|
|
361
|
+
...matches
|
|
362
|
+
.map((m) => ({
|
|
363
|
+
m,
|
|
364
|
+
reason: m.match === 'exact'
|
|
365
|
+
? 'exact'
|
|
366
|
+
: m.match === 'target' || identitySet.has(normalizeIdentity(m.target))
|
|
367
|
+
? 'target' : null,
|
|
368
|
+
}))
|
|
369
|
+
.filter((x) => x.reason !== null),
|
|
370
|
+
...(contentHit ? [{ m: contentHit, reason: 'content' }] : []),
|
|
371
|
+
]
|
|
372
|
+
// exact identity outranks target, target outranks content
|
|
373
|
+
.sort((a, b) => RANK[a.reason] - RANK[b.reason]);
|
|
374
|
+
// STALENESS ORACLE (migration 30, PROTOCOL.md §10.2.5) — the SAME shared
|
|
375
|
+
// helper the MCP failure_check handler calls (FailurePatterns.
|
|
376
|
+
// staleAnchorIds), so the two surfaces cannot drift: a file/symbol-scoped
|
|
377
|
+
// blocker whose anchored source has POSITIVELY drifted since its failure
|
|
378
|
+
// was recorded downgrades from BLOCK to WARN, carrying the stale_anchor
|
|
379
|
+
// flag. An exact-signature match keeps its block, and so does every
|
|
380
|
+
// command/edit-attempt match (code moving on does not unprove a command
|
|
381
|
+
// failure) — both enforced inside the helper. Latency: evaluated ONLY
|
|
382
|
+
// when blockers exist (blocks are rare and abort the tool call anyway),
|
|
383
|
+
// stat-only fast path per anchor, readonly handle — the clean/hot path
|
|
384
|
+
// does not change. Fail-open: no root / missing files / any error ⇒
|
|
385
|
+
// empty set ⇒ verdict unchanged.
|
|
386
|
+
let firmBlockers = blockers;
|
|
387
|
+
let warnMatches = matches;
|
|
388
|
+
if (blockers.length > 0 && root) {
|
|
389
|
+
try {
|
|
390
|
+
const stale = failures.staleAnchorIds(blockers.map((b) => b.m), root);
|
|
391
|
+
if (stale.size > 0) {
|
|
392
|
+
firmBlockers = blockers.filter((b) => !stale.has(b.m.id));
|
|
393
|
+
warnMatches = matches.map((m) => stale.has(m.id) ? { ...m, stale_anchor: STALE_ANCHOR_FLAG } : m);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
catch {
|
|
397
|
+
// staleness is advisory — an oracle error never changes the verdict
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
if (firmBlockers.length > 0 && mode !== 'warn') {
|
|
401
|
+
const top = firmBlockers[0];
|
|
402
|
+
// v7 F2 review fix: count the prevented repeat (the FR-2 ROI number).
|
|
403
|
+
// The check connection stays READONLY; the block row rides a separate
|
|
404
|
+
// short-lived RW connection — strictly best-effort and fail-open.
|
|
405
|
+
try {
|
|
406
|
+
const rw = new Database(dbPath, { fileMustExist: true });
|
|
407
|
+
try {
|
|
408
|
+
rw.pragma('busy_timeout = 50'); // a contended ledger is dropped, never waited on
|
|
409
|
+
const agentId = sanitizeActorId(env.WYRM_AGENT_ID);
|
|
410
|
+
const envelope = agentId !== null || callerRunId !== null
|
|
411
|
+
? { agent_id: agentId, run_id: callerRunId, source: 'env' }
|
|
412
|
+
: LEGACY_ENVELOPE;
|
|
413
|
+
runWithActor(envelope, () => new FailurePatterns(rw).recordBlock({
|
|
414
|
+
blocked: true,
|
|
415
|
+
matches: [top.m],
|
|
416
|
+
recorded_by_agent: top.m.recorded_by_agent,
|
|
417
|
+
run_id: top.m.run_id,
|
|
418
|
+
confidence: top.m.confidence,
|
|
419
|
+
}, projectId));
|
|
420
|
+
}
|
|
421
|
+
finally {
|
|
422
|
+
rw.close();
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
catch {
|
|
426
|
+
// fail-open: analytics must never affect the block verdict
|
|
427
|
+
}
|
|
428
|
+
return {
|
|
429
|
+
exitCode: 2,
|
|
430
|
+
stdout: '',
|
|
431
|
+
stderr: renderBlock(top.m, top.reason, matches.length - 1),
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
return warnResult(warnMatches, signal.display);
|
|
435
|
+
}
|
|
436
|
+
catch (err) {
|
|
437
|
+
if (env.WYRM_GUARD_DEBUG === '1') {
|
|
438
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
439
|
+
return { exitCode: 0, stdout: '', stderr: `wyrm-guard: internal error (fail-open): ${clean(msg, 200)}\n` };
|
|
440
|
+
}
|
|
441
|
+
return SILENT;
|
|
442
|
+
}
|
|
443
|
+
finally {
|
|
444
|
+
try {
|
|
445
|
+
db?.close();
|
|
446
|
+
}
|
|
447
|
+
catch { /* readonly close failure is irrelevant */ }
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
// ── bin entry ───────────────────────────────────────────────────────────────
|
|
451
|
+
// realpathSync so the npm bin symlink (wyrm-guard → dist/wyrm-guard.js) still
|
|
452
|
+
// counts as "run directly"; importing this module (tests) never reads stdin.
|
|
453
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
454
|
+
let isMain = false;
|
|
455
|
+
try {
|
|
456
|
+
isMain = typeof process.argv[1] === 'string' && realpathSync(process.argv[1]) === __filename;
|
|
457
|
+
}
|
|
458
|
+
catch {
|
|
459
|
+
isMain = false;
|
|
460
|
+
}
|
|
461
|
+
if (isMain) {
|
|
462
|
+
let stdinText = '';
|
|
463
|
+
try {
|
|
464
|
+
stdinText = readFileSync(0, 'utf-8'); // fd 0 — blocks to EOF, like wyrm-push.py
|
|
465
|
+
}
|
|
466
|
+
catch {
|
|
467
|
+
stdinText = '';
|
|
468
|
+
}
|
|
469
|
+
const result = runGuard(stdinText);
|
|
470
|
+
if (result.stdout)
|
|
471
|
+
process.stdout.write(result.stdout);
|
|
472
|
+
if (result.stderr)
|
|
473
|
+
process.stderr.write(result.stderr);
|
|
474
|
+
process.exit(result.exitCode);
|
|
475
|
+
}
|
|
476
|
+
//# sourceMappingURL=wyrm-guard.js.map
|
package/dist/wyrm-guard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wyrm-guard.js","sourceRoot":"","sources":["../src/wyrm-guard.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wyrm-guard.js","sourceRoot":"","sources":["../src/wyrm-guard.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,iBAAiB,GAGlB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAaxF,MAAM,MAAM,GAAgB,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAEpE,2EAA2E;AAC3E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;AAE3E,uDAAuD;AACvD,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,+DAA+D;AAC/D,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAuB/B,+EAA+E;AAE/E,SAAS,QAAQ,CAAC,CAAU;IAC1B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED,+EAA+E;AAC/E,SAAS,KAAK,CAAC,CAA4B,EAAE,GAAW;IACtD,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,4CAA4C;IAC5C,OAAO,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACtF,CAAC;AAED;8EAC8E;AAC9E,SAAS,aAAa,CAAC,OAAgC;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACzC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACpC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC7F,MAAM,SAAS,GAAG,KAAgC,CAAC;IACnD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAErC,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACvD,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,mCAAmC;QAC1E,OAAO;YACL,MAAM,EAAE,CAAC,SAAS,CAAC;YACnB,WAAW,EAAE,MAAM;YACnB,uEAAuE;YACvE,uEAAuE;YACvE,uEAAuE;YACvE,QAAQ,EAAE,CAAC,OAAO,CAAC;YACnB,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B,QAAQ,EAAE,GAAG;YACb,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,yEAAyE;QACzE,yBAAyB;QACzB,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,OAAO,GACX,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;eAC9B,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;eAC9B,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;eACjC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACtB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAE,CAAoC,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBACnG,CAAC,CAAC,EAAE,CAAC,CAAC;QACV,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC;YAC9B,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACnB,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3D,OAAO;YACL,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;YACxB,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC7C,mEAAmE;YACnE,uEAAuE;YACvE,sEAAsE;YACtE,2CAA2C;YAC3C,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnD,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC5B,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG;YAClC,OAAO,EAAE,GAAG;YACZ,OAAO;SACR,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;sEACsE;AACtE,SAAS,MAAM,CAAC,EAAY;IAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAChD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;oFACoF;AACpF,SAAS,cAAc,CACrB,EAAqB,EACrB,QAAuB;IAEvB,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;IAClE,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAA+B,CAAC;QACtD,IAAI,GAAG;YAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,MAAM,KAAK,CAAC;YAAE,MAAM;QACxB,CAAC,GAAG,MAAM,CAAC;IACb,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,+EAA+E;AAE/E,SAAS,eAAe,CAAC,CAAsB;IAC7C,IAAI,CAAC,CAAC,iBAAiB,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACrE,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM;QAClB,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,gBAAgB,KAAK,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,GAAG;QAC3F,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,kBAAkB,KAAK,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC;AACpE,CAAC;AAED,SAAS,WAAW,CAAC,CAAsB,EAAE,MAAsC,EAAE,KAAa;IAChG,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,KAAK,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,qBAAqB,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,UAAU,GAAG,MAAM,KAAK,OAAO;QACnC,CAAC,CAAC,oDAAoD;QACtD,CAAC,CAAC,MAAM,KAAK,SAAS;YACpB,CAAC,CAAC,mEAAmE;YACrE,CAAC,CAAC,mEAAmE,CAAC;IAC1E,OAAO,CACL,yBAAyB,UAAU,mBAAmB,MAAM,YAAY;QACxE,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,WAAW,WAAW,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI;QACxG,aAAa,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI;QACrC,IAAI;QACJ,GAAG;QACH,eAAe,CAAC,CAAC,CAAC;QAClB,+EAA+E;QAC/E,4EAA4E,CAAC,CAAC,EAAE,KAAK;QACrF,mBAAmB;QACnB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,uBAAuB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,CACrG,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,OAA8B,EAAE,OAAe;IACjE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,WAAW,CAAC;QAC1C,OAAO,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG;YACpE,SAAS,CAAC,CAAC,WAAW,iBAAiB,CAAC,CAAC,UAAU,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;YAC1E,wEAAwE;YACxE,2DAA2D;YAC3D,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5C,OAAO;QACL,eAAe;QACf,eAAe,OAAO,CAAC,MAAM,qDAAqD,OAAO,+BAA+B;QACxH,GAAG,KAAK;QACR,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,4BAA4B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,oGAAoG;QACpG,gBAAgB;KACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,OAA8B,EAAE,OAAe;IACjE,MAAM,IAAI,GAAG;QACX,kBAAkB,EAAE;YAClB,aAAa,EAAE,YAAY;YAC3B,iBAAiB,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;SAChD;KACF,CAAC;IACF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAC1E,CAAC;AAED,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CACtB,SAAiB,EACjB,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,EAAE,GAA6B,IAAI,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5D,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,MAAM,CAAC;QAClC,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC;QAEnD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;QACjE,MAAM,MAAM,GAAG,aAAa,CAAC,MAAiC,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM;YAAE,OAAO,MAAM,CAAC;QAE3B,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACvE,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,kDAAkD;QAEnF,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpE,0EAA0E;QAC1E,oEAAoE;QACpE,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,IAAI,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACpE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,wEAAwE;QACxE,sEAAsE;QACtE,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;QAE7D,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,MAAM,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE5C,oEAAoE;QACpE,sEAAsE;QACtE,0CAA0C;QAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;gBACjG,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;wBAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,sEAAsE;YACxE,CAAC;QACH,CAAC;QAED,mEAAmE;QACnE,yEAAyE;QACzE,yEAAyE;QACzE,oEAAoE;QACpE,sEAAsE;QACtE,uEAAuE;QACvE,wEAAwE;QACxE,sEAAsE;QACtE,uEAAuE;QACvE,yBAAyB;QACzB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,CAAC;gBACtC,IAAI,CAAC;oBACH,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;wBAC1F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;4BAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;4BAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;wBAAC,CAAC;oBACpG,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,qEAAqE;gBACvE,CAAC;YACH,CAAC;QACH,CAAC;QACD,4EAA4E;QAC5E,4EAA4E;QAC5E,2EAA2E;QAC3E,8CAA8C;QAC9C,IAAI,UAAU,GAA+B,IAAI,CAAC;QAClD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAChD,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;gBACrE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAAC,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAAC,CAAC;YAC1G,CAAC;YAAC,MAAM,CAAC,CAAC,0CAA0C,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,MAAM,CAAC;QAEvD,wEAAwE;QACxE,0EAA0E;QAC1E,0EAA0E;QAC1E,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAW,CAAC;QAC1D,MAAM,QAAQ,GAAG;YACf,GAAG,OAAO;iBACP,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACX,CAAC;gBACD,MAAM,EAAE,CAAC,CAAC,KAAK,KAAK,OAAO;oBACzB,CAAC,CAAE,OAAiB;oBACpB,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;wBACpE,CAAC,CAAE,QAAkB,CAAC,CAAC,CAAC,IAAI;aACjC,CAAC,CAAC;iBACF,MAAM,CAAC,CAAC,CAAC,EAA+D,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC;YAChG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACvE;YACC,0DAA0D;aACzD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAEnD,yEAAyE;QACzE,+DAA+D;QAC/D,0EAA0E;QAC1E,yEAAyE;QACzE,wEAAwE;QACxE,oEAAoE;QACpE,wEAAwE;QACxE,sEAAsE;QACtE,wEAAwE;QACxE,uEAAuE;QACvE,oEAAoE;QACpE,iCAAiC;QACjC,IAAI,YAAY,GAAG,QAAQ,CAAC;QAC5B,IAAI,WAAW,GAAG,OAAO,CAAC;QAC1B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBACtE,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;oBACnB,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC1D,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,oEAAoE;YACtE,CAAC;QACH,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC/C,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC5B,sEAAsE;YACtE,sEAAsE;YACtE,kEAAkE;YAClE,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzD,IAAI,CAAC;oBACH,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,iDAAiD;oBACjF,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBACnD,MAAM,QAAQ,GAAG,OAAO,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI;wBACvD,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAc,EAAE;wBACpE,CAAC,CAAC,eAAe,CAAC;oBACpB,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC,WAAW,CAC9D;wBACE,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;wBAChB,iBAAiB,EAAE,GAAG,CAAC,CAAC,CAAC,iBAAiB;wBAC1C,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM;wBACpB,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU;qBAC7B,EACD,SAAS,CACV,CAAC,CAAC;gBACL,CAAC;wBAAS,CAAC;oBACT,EAAE,CAAC,KAAK,EAAE,CAAC;gBACb,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,2DAA2D;YAC7D,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE,CAAC;gBACX,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;aAC3D,CAAC;QACJ,CAAC;QACD,OAAO,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,CAAC,gBAAgB,KAAK,GAAG,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,2CAA2C,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7G,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YAAC,EAAE,EAAE,KAAK,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,0CAA0C,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,8EAA8E;AAC9E,6EAA6E;AAE7E,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,IAAI,CAAC;IACH,MAAM,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC;AAC/F,CAAC;AAAC,MAAM,CAAC;IACP,MAAM,GAAG,KAAK,CAAC;AACjB,CAAC;AAED,IAAI,MAAM,EAAE,CAAC;IACX,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC;QACH,SAAS,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,0CAA0C;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,SAAS,GAAG,EAAE,CAAC;IACjB,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC"}
|