@intentface/latch-core 0.9.1 → 0.11.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.
@@ -1,569 +0,0 @@
1
- // ---------------------------------------------------------------------- part
2
- export const EXTENSION_PART_TYPE = "data-extension";
3
- /** Thrown when an extension with `onError: "fail"` fails; the turn errors. */
4
- export class ExtensionFailedError extends Error {
5
- extension;
6
- detail;
7
- code = "extension_failed";
8
- /** The user message with the failed part appended — persist it so the failure is in the log. */
9
- partial;
10
- constructor(extension, detail) {
11
- super(`Extension "${extension}" failed: ${detail}`);
12
- this.extension = extension;
13
- this.detail = detail;
14
- this.name = "ExtensionFailedError";
15
- }
16
- }
17
- // ------------------------------------------------------------------- defaults
18
- /** Names the chat channels claim for their own `/` commands — a slash extension may not use them. */
19
- export const RESERVED_SLASH_NAMES = new Set([
20
- "new",
21
- "reset",
22
- "compact",
23
- "cancel",
24
- "skip",
25
- "status",
26
- "help",
27
- "commands",
28
- "start",
29
- ]);
30
- export const EXTENSION_DEFAULTS = {
31
- timeoutMs: 30_000,
32
- maxRenderedChars: 50_000,
33
- maxOutputBytes: 64 * 1024,
34
- /** Same ceiling `web_fetch` applies — Anthropic caps images at 5 MB of source data. */
35
- maxMediaBytes: 4.5 * 1024 * 1024,
36
- };
37
- /** Media types every provider's vision input accepts, plus PDF. */
38
- export const EXTENSION_MEDIA_TYPES = new Set([
39
- "image/png",
40
- "image/jpeg",
41
- "image/gif",
42
- "image/webp",
43
- "application/pdf",
44
- ]);
45
- export function resolveExtension(ext) {
46
- return {
47
- target: ext.target ?? "message",
48
- placement: ext.placement ?? "after",
49
- scope: ext.scope ?? "turn",
50
- reveal: ext.reveal ?? "command",
51
- allowMutations: ext.allowMutations ?? false,
52
- onError: ext.onError ?? "proceed",
53
- timeoutMs: ext.limits?.timeoutMs ?? EXTENSION_DEFAULTS.timeoutMs,
54
- maxRenderedChars: ext.limits?.maxRenderedChars ?? EXTENSION_DEFAULTS.maxRenderedChars,
55
- };
56
- }
57
- // -------------------------------------------------------------------- parsing
58
- /**
59
- * Same grammar as the channel kernel's `/command` parser (Telegram's, with an
60
- * optional `@bot` suffix). Only KNOWN names parse: `/Users/me/notes.txt` or an
61
- * unregistered `/foo` stays an ordinary message.
62
- */
63
- const SLASH_RE = /^\/([A-Za-z0-9_]+)(?:@([A-Za-z0-9_]+))?(?:\s+([\s\S]*))?$/;
64
- export function parseSlashInvocation(text, names) {
65
- const m = SLASH_RE.exec(text.trim());
66
- if (!m)
67
- return null;
68
- const word = m[1].toLowerCase();
69
- let known = false;
70
- for (const n of names) {
71
- if (n.toLowerCase() === word) {
72
- known = true;
73
- break;
74
- }
75
- }
76
- if (!known)
77
- return null;
78
- const args = (m[3] ?? "").trim();
79
- return { name: word, args, argv: args ? args.split(/\s+/) : [] };
80
- }
81
- /** The message's text parts joined — what a slash parser reads. */
82
- export function messageText(message) {
83
- if (!message)
84
- return "";
85
- return message.parts
86
- .filter((p) => p.type === "text" && typeof p.text === "string")
87
- .map((p) => p.text)
88
- .join("\n");
89
- }
90
- export function extensionPartsOf(message) {
91
- const parts = message.parts;
92
- if (!Array.isArray(parts))
93
- return [];
94
- return parts.filter((p) => p.type === EXTENSION_PART_TYPE);
95
- }
96
- /**
97
- * Which extensions run on this turn. `window` is the live context window
98
- * (post-compaction) INCLUDING the current user message as its last element.
99
- *
100
- * - `slash`: a structured `metadata.extension` wins; else the text parses
101
- * against the slash names. At most one slash extension per turn.
102
- * - `every-turn`: always.
103
- * - `chat-start`: when no earlier message in the window carries a result for
104
- * it, or the latest one is older than `refresh.afterMs`. Compaction starts a
105
- * new window, so a chat-start extension re-runs after a compaction.
106
- */
107
- export function selectExtensions(opts) {
108
- const { extensions, message, window, now } = opts;
109
- if (!message || message.role !== "user")
110
- return [];
111
- const out = [];
112
- const earlier = window.filter((m) => m !== message && m.id !== message.id);
113
- const slashes = extensions.filter((e) => e.on === "slash");
114
- if (slashes.length > 0) {
115
- const structured = message.metadata
116
- ?.extension;
117
- const byName = (name) => slashes.find((e) => e.name.toLowerCase() === name.toLowerCase());
118
- if (structured?.name && byName(structured.name)) {
119
- out.push({ ext: byName(structured.name), input: structured.input });
120
- }
121
- else {
122
- const parsed = parseSlashInvocation(messageText(message), slashes.map((e) => e.name));
123
- if (parsed) {
124
- out.push({ ext: byName(parsed.name), input: { args: parsed.args, argv: parsed.argv } });
125
- }
126
- }
127
- }
128
- for (const ext of extensions) {
129
- if (ext.on === "every-turn") {
130
- out.push({ ext });
131
- }
132
- else if (ext.on === "chat-start") {
133
- const latest = latestPart(earlier, ext.name);
134
- if (!latest)
135
- out.push({ ext });
136
- else if (ext.refresh?.afterMs !== undefined && now - latest.data.at > ext.refresh.afterMs) {
137
- out.push({ ext });
138
- }
139
- }
140
- }
141
- return out;
142
- }
143
- function latestPart(messages, name) {
144
- for (let i = messages.length - 1; i >= 0; i--) {
145
- const parts = extensionPartsOf(messages[i]);
146
- for (let j = parts.length - 1; j >= 0; j--) {
147
- if (parts[j].data.name === name)
148
- return parts[j];
149
- }
150
- }
151
- return undefined;
152
- }
153
- /**
154
- * System-prompt blocks for this turn, read from the stored history: the latest
155
- * successful `target: "instructions"` result per extension name. `scope:
156
- * "chat"` results apply from anywhere in the window; `scope: "turn"` only when
157
- * they sit on the window's last user message. Reading from history (not
158
- * re-running) is what makes a resumed turn render identical instructions.
159
- */
160
- export function extensionInstructionBlocks(window) {
161
- let lastUser = -1;
162
- for (let i = window.length - 1; i >= 0; i--) {
163
- if (window[i].role === "user") {
164
- lastUser = i;
165
- break;
166
- }
167
- }
168
- const byName = new Map();
169
- window.forEach((m, i) => {
170
- if (m.role !== "user")
171
- return;
172
- for (const p of extensionPartsOf(m)) {
173
- const d = p.data;
174
- if (d.target !== "instructions" || !d.rendered)
175
- continue;
176
- if (d.scope === "turn" && i !== lastUser)
177
- continue;
178
- byName.delete(d.name);
179
- byName.set(d.name, d.rendered);
180
- }
181
- });
182
- return [...byName.values()];
183
- }
184
- // ---------------------------------------------------------------- projections
185
- /**
186
- * Model projection step: a `data-extension` part becomes what the model reads.
187
- * Message target → a text part with `rendered` before/after the user's text,
188
- * then any `files` as file parts. A failed extension → a short failure note so
189
- * the model can proceed (and call the tools itself). The data part itself is
190
- * always stripped — the SDK would drop it anyway; stripping keeps the rule
191
- * explicit. Projection-only: stored history is untouched.
192
- */
193
- export function applyExtensionParts(messages) {
194
- return messages.map((m) => {
195
- if (m.role !== "user")
196
- return m;
197
- const parts = m.parts;
198
- if (!Array.isArray(parts))
199
- return m;
200
- const ext = parts.filter((p) => p.type === EXTENSION_PART_TYPE);
201
- if (ext.length === 0)
202
- return m;
203
- const base = parts.filter((p) => p.type !== EXTENSION_PART_TYPE);
204
- const before = [];
205
- const after = [];
206
- for (const { data } of ext) {
207
- if (data.rendered && data.target === "message") {
208
- const block = [{ type: "text", text: data.rendered }];
209
- for (const f of data.files ?? [])
210
- block.push({ ...f });
211
- (data.placement === "before" ? before : after).push(...block);
212
- }
213
- else if (data.rendered && data.target === "instructions" && data.files?.length) {
214
- // The text went to the system prompt; media can only ride on a message.
215
- for (const f of data.files)
216
- after.push({ ...f });
217
- }
218
- if (data.error && !data.rendered) {
219
- after.push({
220
- type: "text",
221
- text: `[Extension "${data.name}" failed: ${data.error.message}. Proceed without it.]`,
222
- });
223
- }
224
- }
225
- // `before` goes ahead of the first text part; `after` behind the last text
226
- // part (files the user attached stay where they were).
227
- const firstText = base.findIndex((p) => p.type === "text");
228
- let lastText = -1;
229
- base.forEach((p, i) => {
230
- if (p.type === "text")
231
- lastText = i;
232
- });
233
- const next = [];
234
- base.forEach((p, i) => {
235
- if (i === firstText)
236
- next.push(...before);
237
- next.push(p);
238
- if (i === lastText)
239
- next.push(...after);
240
- });
241
- if (firstText === -1)
242
- next.unshift(...before);
243
- if (lastText === -1)
244
- next.push(...after);
245
- return { ...m, parts: next };
246
- });
247
- }
248
- /**
249
- * Client projection step: with `reveal: "command"` the client learns that an
250
- * extension ran (name, when, error) but not what it produced — the rendered
251
- * prompt and the fetched data stay server-side. `prompt` / `both` pass the
252
- * part through whole; the client decides how to show it. Self-describing:
253
- * the stored part carries its own `reveal`, so editing the agent later does
254
- * not rewrite what an older message shows.
255
- */
256
- export function redactExtensionParts(messages) {
257
- return messages.map((m) => {
258
- const parts = m.parts;
259
- if (!Array.isArray(parts))
260
- return m;
261
- let changed = false;
262
- const next = parts.map((p) => {
263
- if (p.type !== EXTENSION_PART_TYPE)
264
- return p;
265
- const d = p.data;
266
- if (!d || d.reveal !== "command")
267
- return p;
268
- changed = true;
269
- const reduced = {
270
- name: d.name,
271
- on: d.on,
272
- target: d.target,
273
- reveal: d.reveal,
274
- at: d.at,
275
- ...(d.input !== undefined ? { input: d.input } : {}),
276
- ...(d.error ? { error: { message: d.error.message } } : {}),
277
- };
278
- return { ...p, data: reduced };
279
- });
280
- return changed ? { ...m, parts: next } : m;
281
- });
282
- }
283
- // ------------------------------------------------------------------- bounding
284
- /** Keep a script output row-sized: over the cap, store a marked preview instead. */
285
- export function boundOutput(output, maxBytes = EXTENSION_DEFAULTS.maxOutputBytes) {
286
- if (output === undefined)
287
- return { output: undefined, truncated: false };
288
- let json;
289
- try {
290
- json = JSON.stringify(output) ?? "";
291
- }
292
- catch {
293
- return { output: { __unserializable: true }, truncated: true };
294
- }
295
- if (json.length <= maxBytes)
296
- return { output, truncated: false };
297
- return {
298
- output: { __truncated: true, bytes: json.length, preview: json.slice(0, 4000) },
299
- truncated: true,
300
- };
301
- }
302
- /**
303
- * Media the script returned for the model: a `files` list on the output, each
304
- * `{ mediaType, url | data (base64), filename? }` — `web_fetch`'s
305
- * `{ kind: "media", mediaType, data }` result fits as-is. Unsupported types
306
- * and anything past the byte cap are dropped, with a reason. Returns the
307
- * output WITHOUT `files` so the bytes are not stored twice.
308
- */
309
- export function collectFiles(output) {
310
- if (!output || typeof output !== "object" || Array.isArray(output)) {
311
- return { output, files: [], dropped: [] };
312
- }
313
- const { files: raw, ...rest } = output;
314
- if (!Array.isArray(raw))
315
- return { output, files: [], dropped: [] };
316
- const files = [];
317
- const dropped = [];
318
- let total = 0;
319
- raw.forEach((item, i) => {
320
- const f = item;
321
- const label = typeof f?.filename === "string" ? f.filename : `files[${i}]`;
322
- if (typeof f?.mediaType !== "string" || !EXTENSION_MEDIA_TYPES.has(f.mediaType)) {
323
- dropped.push(`${label}: unsupported media type ${String(f?.mediaType)}`);
324
- return;
325
- }
326
- let url;
327
- let bytes = 0;
328
- if (typeof f.url === "string" && /^(https?:|data:)/i.test(f.url)) {
329
- url = f.url;
330
- if (url.startsWith("data:"))
331
- bytes = Math.floor(((url.split(",")[1] ?? "").length * 3) / 4);
332
- }
333
- else if (typeof f.data === "string" && f.data.length > 0) {
334
- bytes = Math.floor((f.data.length * 3) / 4);
335
- url = `data:${f.mediaType};base64,${f.data}`;
336
- }
337
- else {
338
- dropped.push(`${label}: no url or data`);
339
- return;
340
- }
341
- if (total + bytes > EXTENSION_DEFAULTS.maxMediaBytes) {
342
- dropped.push(`${label}: over the ${Math.round(EXTENSION_DEFAULTS.maxMediaBytes / 1024 / 1024 * 10) / 10} MB media cap`);
343
- return;
344
- }
345
- total += bytes;
346
- files.push({
347
- type: "file",
348
- mediaType: f.mediaType,
349
- url,
350
- ...(typeof f.filename === "string" ? { filename: f.filename } : {}),
351
- });
352
- });
353
- return { output: rest, files, dropped };
354
- }
355
- // ------------------------------------------------------------ tool results
356
- /**
357
- * Give a script the VALUE a tool produced, not the wire envelope. MCP tools
358
- * return `{ content: [{ type: "text", text }], structuredContent?, isError? }`
359
- * — fine for the model, useless for `output.changes.files`. Mirrors what an
360
- * MCP client adapter does: `structuredContent` wins; one text part that parses
361
- * as JSON becomes that value; several text parts join; anything else (files,
362
- * images, non-MCP shapes) passes through untouched. `isError` throws, so a
363
- * script's `try/catch` and the step's error branch see it as a failure.
364
- */
365
- export function unwrapToolResult(result) {
366
- if (!result || typeof result !== "object" || Array.isArray(result))
367
- return result;
368
- const r = result;
369
- if (!Array.isArray(r.content))
370
- return result;
371
- const parts = r.content;
372
- if (!parts.every((p) => p && typeof p === "object" && typeof p.type === "string"))
373
- return result;
374
- const texts = parts.filter((p) => p.type === "text" && typeof p.text === "string").map((p) => p.text);
375
- if (r.isError === true) {
376
- throw Object.assign(new Error(texts.join("\n") || "tool returned an error"), { code: "tool_error" });
377
- }
378
- if (r.structuredContent !== undefined && r.structuredContent !== null)
379
- return r.structuredContent;
380
- if (texts.length === parts.length) {
381
- if (texts.length === 1) {
382
- const t = texts[0].trim();
383
- if (/^[[{]/.test(t)) {
384
- try {
385
- return JSON.parse(t);
386
- }
387
- catch {
388
- // not JSON after all — hand back the text
389
- }
390
- }
391
- return texts[0];
392
- }
393
- return texts.join("\n");
394
- }
395
- return result;
396
- }
397
- // ------------------------------------------------------------------- gating
398
- /**
399
- * The approval-gated tool names for a turn: harness gates + each source's
400
- * defaults, with the agent's object-form policy winning per name. A function
401
- * policy cannot be enumerated, so every tool counts as gated (the same
402
- * conservative rule test runs use).
403
- */
404
- export function gatedToolNames(opts) {
405
- const gated = new Set();
406
- for (const [k, v] of Object.entries(opts.harnessApproval))
407
- if (v)
408
- gated.add(k);
409
- for (const s of opts.sourceApproval) {
410
- for (const [k, v] of Object.entries(s ?? {}))
411
- if (v)
412
- gated.add(k);
413
- }
414
- const agent = opts.agentApproval;
415
- if (agent && typeof agent !== "function") {
416
- for (const [k, v] of Object.entries(agent)) {
417
- if (v)
418
- gated.add(k);
419
- else
420
- gated.delete(k);
421
- }
422
- }
423
- else if (typeof agent === "function") {
424
- for (const k of opts.allNames)
425
- gated.add(k);
426
- }
427
- return gated;
428
- }
429
- /**
430
- * Run the selected extensions and build their parts. Pure with respect to
431
- * storage — the caller persists `message` and streams `parts`. Never throws
432
- * for a `proceed` extension; throws `ExtensionFailedError` for a `fail` one.
433
- */
434
- export async function executeExtensions(opts) {
435
- const now = opts.now ?? Date.now;
436
- const newId = opts.newId ?? (() => `ext_${Math.random().toString(36).slice(2, 12)}`);
437
- const parts = [];
438
- const details = [];
439
- for (const { ext, input } of opts.selected) {
440
- const r = resolveExtension(ext);
441
- const startedAt = now();
442
- const data = {
443
- name: ext.name,
444
- on: ext.on,
445
- target: r.target,
446
- placement: r.placement,
447
- scope: r.scope,
448
- reveal: r.reveal,
449
- ...(input !== undefined ? { input } : {}),
450
- at: startedAt,
451
- calls: [],
452
- };
453
- const fail = (message, code, at) => {
454
- data.error = { message, ...(code ? { code } : {}), ...(at ? { at } : {}) };
455
- };
456
- const detail = {};
457
- try {
458
- let scope = { input };
459
- if (ext.script !== undefined) {
460
- const all = opts.mounts();
461
- const names = all.map((t) => t.name);
462
- const inactive = opts.inactiveNames ?? new Set();
463
- const analysis = opts.engine.analyze(ext.script, { tools: names });
464
- if (analysis.plan !== undefined)
465
- detail.plan = analysis.plan;
466
- const inactiveCalls = analysis.calls.filter((c) => inactive.has(c));
467
- const gatedCalls = analysis.calls.filter((c) => opts.gatedNames.has(c));
468
- if (analysis.issues.length > 0) {
469
- const available = names.length
470
- ? ` Tools this script can call: ${names.slice(0, 40).join(", ")}${names.length > 40 ? ", …" : ""}.`
471
- : " No tools are mounted for this agent (are its connections saved and authorized?).";
472
- fail(analysis.issues.join("; ") + available, "invalid_script");
473
- }
474
- else if (inactiveCalls.length > 0) {
475
- fail(`calls tool(s) not enabled for this agent: ${inactiveCalls.join(", ")} (enable them under the agent's tools)`, "tool_not_enabled");
476
- }
477
- else if (gatedCalls.length > 0 && !r.allowMutations) {
478
- fail(`calls approval-gated tool(s) ${gatedCalls.join(", ")}; set allowMutations to permit`, "gated_tool");
479
- }
480
- else {
481
- {
482
- // Only what this extension may run: never inactive; gated only when allowed.
483
- const mounts = all.filter((t) => !inactive.has(t.name) && (r.allowMutations || !opts.gatedNames.has(t.name)));
484
- const ac = new AbortController();
485
- const onOuter = () => ac.abort(opts.signal?.reason);
486
- opts.signal?.addEventListener("abort", onOuter, { once: true });
487
- const timer = setTimeout(() => ac.abort(new Error(`timed out after ${r.timeoutMs} ms`)), r.timeoutMs);
488
- timer.unref?.();
489
- let result;
490
- try {
491
- result = await opts.engine.run(analysis.plan, {
492
- tools: mounts,
493
- input,
494
- signal: ac.signal,
495
- });
496
- }
497
- finally {
498
- clearTimeout(timer);
499
- opts.signal?.removeEventListener("abort", onOuter);
500
- }
501
- data.calls = result.calls;
502
- detail.steps = Object.fromEntries(Object.entries(result.steps).map(([id, v]) => [id, boundOutput(v, 16 * 1024).output]));
503
- if (result.status !== "ok") {
504
- const e = result.error ?? { message: `script ${result.status}` };
505
- fail(result.status === "suspended"
506
- ? "script suspended (approvals inside extensions are not supported yet)"
507
- : e.message, e.code ?? result.status, e.at);
508
- }
509
- else {
510
- const media = collectFiles(result.output);
511
- if (media.files.length > 0)
512
- data.files = media.files;
513
- const bounded = boundOutput(media.output);
514
- data.output = bounded.output;
515
- if (bounded.truncated)
516
- data.outputTruncated = true;
517
- scope = {
518
- input,
519
- output: media.output,
520
- steps: result.steps,
521
- ...result.steps,
522
- ...(media.dropped.length ? { droppedFiles: media.dropped } : {}),
523
- };
524
- if (media.dropped.length > 0) {
525
- // Not a failure — the text still renders; the model just learns
526
- // some media did not make it.
527
- data.error = { message: `media dropped: ${media.dropped.join("; ")}`, code: "media_dropped" };
528
- }
529
- }
530
- }
531
- }
532
- }
533
- if (!data.error || data.error.code === "media_dropped") {
534
- let rendered;
535
- if (ext.template !== undefined) {
536
- rendered = await opts.engine.render(ext.template, scope);
537
- }
538
- else {
539
- const body = scope.output !== undefined ? scope.output : scope.steps;
540
- rendered =
541
- body === undefined
542
- ? ""
543
- : `\`\`\`json\n${JSON.stringify(body, null, 2)}\n\`\`\``;
544
- }
545
- if (rendered.length > r.maxRenderedChars) {
546
- rendered = `${rendered.slice(0, r.maxRenderedChars)}\n[…truncated to ${r.maxRenderedChars} characters]`;
547
- }
548
- data.rendered = rendered;
549
- }
550
- }
551
- catch (e) {
552
- const err = e;
553
- fail(typeof err?.message === "string" ? err.message : String(e), typeof err?.code === "string" ? err.code : undefined);
554
- }
555
- data.durationMs = now() - startedAt;
556
- parts.push({ type: EXTENSION_PART_TYPE, id: newId(), data });
557
- details.push(detail);
558
- if (data.error && !data.rendered && r.onError === "fail") {
559
- const err = new ExtensionFailedError(ext.name, data.error.message);
560
- err.partial = { message: withParts(opts.message, parts), parts, details };
561
- throw err;
562
- }
563
- }
564
- return { message: withParts(opts.message, parts), parts, details };
565
- }
566
- function withParts(message, parts) {
567
- return { ...message, parts: [...message.parts, ...parts] };
568
- }
569
- //# sourceMappingURL=extensions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AA2EA,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAgGpD,8EAA8E;AAC9E,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAKlC;IACA;IALF,IAAI,GAAG,kBAAkB,CAAC;IACnC,gGAAgG;IAChG,OAAO,CAA2B;IAClC,YACW,SAAiB,EACjB,MAAc;QAEvB,KAAK,CAAC,cAAc,SAAS,aAAa,MAAM,EAAE,CAAC,CAAC;QAH3C,cAAS,GAAT,SAAS,CAAQ;QACjB,WAAM,GAAN,MAAM,CAAQ;QAGvB,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,+EAA+E;AAE/E,qGAAqG;AACrG,MAAM,CAAC,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC;IAC/D,KAAK;IACL,OAAO;IACP,SAAS;IACT,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,MAAM;IACN,UAAU;IACV,OAAO;CACR,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,SAAS,EAAE,MAAM;IACjB,gBAAgB,EAAE,MAAM;IACxB,cAAc,EAAE,EAAE,GAAG,IAAI;IACzB,uFAAuF;IACvF,aAAa,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;CACxB,CAAC;AAEX,mEAAmE;AACnE,MAAM,CAAC,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CAAC;IAChE,WAAW;IACX,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,iBAAiB;CAClB,CAAC,CAAC;AAMH,MAAM,UAAU,gBAAgB,CAAC,GAAmB;IAClD,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,SAAS;QAC/B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,OAAO;QACnC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM;QAC1B,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,SAAS;QAC/B,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,KAAK;QAC3C,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,SAAS;QACjC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,IAAI,kBAAkB,CAAC,SAAS;QAChE,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,IAAI,kBAAkB,CAAC,gBAAgB;KACtF,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,QAAQ,GAAG,2DAA2D,CAAC;AAS7E,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,KAAuB;IAEvB,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAChC,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;YAC7B,KAAK,GAAG,IAAI,CAAC;YACb,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACnE,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,WAAW,CAAC,OAA+B;IACzD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,OAAQ,OAAO,CAAC,KAAmD;SAChE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;SAC9D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAc,CAAC;SAC5B,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAmB;IAClD,MAAM,KAAK,GAAI,OAAiD,CAAC,KAAK,CAAC;IACvE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAA+B,CAAC;AAC3F,CAAC;AASD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAKhC;IACC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAClD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IACnD,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;IAE3E,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,UAAU,GAAI,OAAO,CAAC,QAA4D;YACtF,EAAE,SAAS,CAAC;QACd,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACnE,IAAI,UAAU,EAAE,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,oBAAoB,CACjC,WAAW,CAAC,OAAO,CAAC,EACpB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC3B,CAAC;YACF,IAAI,MAAM,EAAE,CAAC;gBACX,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,EAAE,KAAK,YAAY,EAAE,CAAC;YAC5B,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,GAAG,CAAC,EAAE,KAAK,YAAY,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;iBAC1B,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC1F,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,QAA+B,EAAE,IAAY;IAC/D,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAA6B;IACtE,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC9B,QAAQ,GAAG,CAAC,CAAC;YACb,MAAM;QACR,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO;QAC9B,KAAK,MAAM,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACjB,IAAI,CAAC,CAAC,MAAM,KAAK,cAAc,IAAI,CAAC,CAAC,CAAC,QAAQ;gBAAE,SAAS;YACzD,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,KAAK,QAAQ;gBAAE,SAAS;YACnD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,+EAA+E;AAE/E;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAsB;IACxD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACxB,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,CAAC,CAAC;QAChC,MAAM,KAAK,GAAI,CAAgD,CAAC,KAAK,CAAC;QACtE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAA+B,CAAC;QAC9F,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC;QACjE,MAAM,MAAM,GAAmC,EAAE,CAAC;QAClD,MAAM,KAAK,GAAmC,EAAE,CAAC;QACjD,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC/C,MAAM,KAAK,GAAmC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACtF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvD,CAAC,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;YAChE,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,cAAc,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;gBACjF,wEAAwE;gBACxE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACnD,CAAC;YACD,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACjC,KAAK,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,eAAe,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,KAAK,CAAC,OAAO,wBAAwB;iBACtF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,2EAA2E;QAC3E,uDAAuD;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAC3D,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACpB,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;gBAAE,QAAQ,GAAG,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAmC,EAAE,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACpB,IAAI,CAAC,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,IAAI,CAAC,KAAK,QAAQ;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,IAAI,SAAS,KAAK,CAAC,CAAC;YAAE,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;QAC9C,IAAI,QAAQ,KAAK,CAAC,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACzC,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAgB,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAsB;IACzD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACxB,MAAM,KAAK,GAAI,CAAgD,CAAC,KAAK,CAAC;QACtE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACpC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3B,IAAI,CAAC,CAAC,IAAI,KAAK,mBAAmB;gBAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAI,CAA8B,CAAC,IAAI,CAAC;YAC/C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO,CAAC,CAAC;YAC3C,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,OAAO,GAA+B;gBAC1C,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5D,CAAC;YACF,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,CAAC,CAAE,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAE/E,oFAAoF;AACpF,MAAM,UAAU,WAAW,CACzB,MAAe,EACf,WAAmB,kBAAkB,CAAC,cAAc;IAEpD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACzE,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACjE,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACjE,OAAO;QACL,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;QAC/E,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAe;IAK1C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC5C,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,MAAuD,CAAC;IACxF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnE,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACtB,MAAM,CAAC,GAAG,IAAkF,CAAC;QAC7F,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;QAC3E,IAAI,OAAO,CAAC,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;YAChF,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,4BAA4B,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QACD,IAAI,GAAW,CAAC;QAChB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACjE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;YACZ,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9F,CAAC;aAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3D,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,GAAG,GAAG,QAAQ,CAAC,CAAC,SAAS,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,kBAAkB,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QACD,IAAI,KAAK,GAAG,KAAK,GAAG,kBAAkB,CAAC,aAAa,EAAE,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,cAAc,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;YACxH,OAAO;QACT,CAAC;QACD,KAAK,IAAI,KAAK,CAAC;QACf,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,GAAG;YACH,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpE,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC1C,CAAC;AAED,4EAA4E;AAE5E;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAe;IAC9C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAClF,MAAM,CAAC,GAAG,MAIT,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAC;IAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,OAAoD,CAAC;IACrE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC;IACjG,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAc,CAAC,CAAC;IAChH,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,wBAAwB,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,CAAC,CAAC,iBAAiB,KAAK,SAAS,IAAI,CAAC,CAAC,iBAAiB,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,iBAAiB,CAAC;IAClG,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvB,CAAC;gBAAC,MAAM,CAAC;oBACP,0CAA0C;gBAC5C,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6EAA6E;AAE7E;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAK9B;IACC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;QAAE,IAAI,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/E,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACpC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YAAE,IAAI,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;IACjC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;YACtE,IAAI,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;gBACf,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QACvC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAyBD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAcvC;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACrF,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,OAAO,GAA0B,EAAE,CAAC;IAE1C,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;QACxB,MAAM,IAAI,GAAsB;YAC9B,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,EAAE,EAAE,SAAS;YACb,KAAK,EAAE,EAAE;SACV,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,IAAa,EAAE,EAAW,EAAE,EAAE;YAC3D,IAAI,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7E,CAAC,CAAC;QACF,MAAM,MAAM,GAAwB,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,IAAI,KAAK,GAA4B,EAAE,KAAK,EAAE,CAAC;YAC/C,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,GAAG,EAAU,CAAC;gBACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBACnE,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;oBAAE,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;gBAC7D,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxE,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM;wBAC5B,CAAC,CAAC,gCAAgC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG;wBACnG,CAAC,CAAC,mFAAmF,CAAC;oBACxF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE,gBAAgB,CAAC,CAAC;gBACjE,CAAC;qBAAM,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpC,IAAI,CACF,6CAA6C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,wCAAwC,EAC7G,kBAAkB,CACnB,CAAC;gBACJ,CAAC;qBAAM,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;oBACtD,IAAI,CACF,gCAAgC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC,EACrF,YAAY,CACb,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,CAAC;wBACC,6EAA6E;wBAC7E,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CACnF,CAAC;wBACF,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;wBACjC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;wBACpD,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;wBAChE,MAAM,KAAK,GAAG,UAAU,CACtB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,EAC9D,CAAC,CAAC,SAAS,CACZ,CAAC;wBACD,KAAgC,CAAC,KAAK,EAAE,EAAE,CAAC;wBAC5C,IAAI,MAAuB,CAAC;wBAC5B,IAAI,CAAC;4BACH,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;gCAC5C,KAAK,EAAE,MAAM;gCACb,KAAK;gCACL,MAAM,EAAE,EAAE,CAAC,MAAM;6BAClB,CAAC,CAAC;wBACL,CAAC;gCAAS,CAAC;4BACT,YAAY,CAAC,KAAK,CAAC,CAAC;4BACpB,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;wBACrD,CAAC;wBACD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;wBAC1B,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CACtF,CAAC;wBACF,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;4BAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,OAAO,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;4BACjE,IAAI,CACF,MAAM,CAAC,MAAM,KAAK,WAAW;gCAC3B,CAAC,CAAC,sEAAsE;gCACxE,CAAC,CAAC,CAAC,CAAC,OAAO,EACb,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,EACvB,CAAC,CAAC,EAAE,CACL,CAAC;wBACJ,CAAC;6BAAM,CAAC;4BACN,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;4BAC1C,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gCAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;4BACrD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;4BAC1C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;4BAC7B,IAAI,OAAO,CAAC,SAAS;gCAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;4BACnD,KAAK,GAAG;gCACN,KAAK;gCACL,MAAM,EAAE,KAAK,CAAC,MAAM;gCACpB,KAAK,EAAE,MAAM,CAAC,KAAK;gCACnB,GAAG,MAAM,CAAC,KAAK;gCACf,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;6BACjE,CAAC;4BACF,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCAC7B,gEAAgE;gCAChE,8BAA8B;gCAC9B,IAAI,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,kBAAkB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;4BAChG,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACvD,IAAI,QAAgB,CAAC;gBACrB,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC/B,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC3D,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;oBACrE,QAAQ;wBACN,IAAI,KAAK,SAAS;4BAChB,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC;gBAC/D,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC;oBACzC,QAAQ,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,gBAAgB,cAAc,CAAC;gBAC1G,CAAC;gBACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,CAA0C,CAAC;YACvD,IAAI,CACF,OAAO,GAAG,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAC1D,OAAO,GAAG,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CACrD,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,GAAG,SAAS,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YACzD,MAAM,GAAG,GAAG,IAAI,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnE,GAAG,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YAC1E,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,SAAS,CAAC,OAAmB,EAAE,KAAsB;IAC5D,OAAO,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,GAAI,OAAO,CAAC,KAAmB,EAAE,GAAG,KAAK,CAAC,EAAgB,CAAC;AAC1F,CAAC"}