@cogitator-ai/studio 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.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/dist/host/checkpoints.d.ts +11 -0
  4. package/dist/host/checkpoints.d.ts.map +1 -0
  5. package/dist/host/checkpoints.js +43 -0
  6. package/dist/host/checkpoints.js.map +1 -0
  7. package/dist/host/main.d.ts +2 -0
  8. package/dist/host/main.d.ts.map +1 -0
  9. package/dist/host/main.js +49 -0
  10. package/dist/host/main.js.map +1 -0
  11. package/dist/host/project.d.ts +22 -0
  12. package/dist/host/project.d.ts.map +1 -0
  13. package/dist/host/project.js +88 -0
  14. package/dist/host/project.js.map +1 -0
  15. package/dist/host/runner.d.ts +58 -0
  16. package/dist/host/runner.d.ts.map +1 -0
  17. package/dist/host/runner.js +507 -0
  18. package/dist/host/runner.js.map +1 -0
  19. package/dist/index.d.ts +8 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +5 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/protocol.d.ts +398 -0
  24. package/dist/protocol.d.ts.map +1 -0
  25. package/dist/protocol.js +7 -0
  26. package/dist/protocol.js.map +1 -0
  27. package/dist/registry.d.ts +8 -0
  28. package/dist/registry.d.ts.map +1 -0
  29. package/dist/registry.js +119 -0
  30. package/dist/registry.js.map +1 -0
  31. package/dist/server/host-manager.d.ts +52 -0
  32. package/dist/server/host-manager.d.ts.map +1 -0
  33. package/dist/server/host-manager.js +267 -0
  34. package/dist/server/host-manager.js.map +1 -0
  35. package/dist/server/server.d.ts +41 -0
  36. package/dist/server/server.d.ts.map +1 -0
  37. package/dist/server/server.js +437 -0
  38. package/dist/server/server.js.map +1 -0
  39. package/dist/server/store.d.ts +88 -0
  40. package/dist/server/store.d.ts.map +1 -0
  41. package/dist/server/store.js +602 -0
  42. package/dist/server/store.js.map +1 -0
  43. package/dist/ui/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  44. package/dist/ui/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  45. package/dist/ui/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  46. package/dist/ui/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  47. package/dist/ui/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  48. package/dist/ui/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  49. package/dist/ui/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  50. package/dist/ui/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  51. package/dist/ui/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  52. package/dist/ui/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  53. package/dist/ui/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  54. package/dist/ui/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  55. package/dist/ui/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  56. package/dist/ui/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  57. package/dist/ui/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  58. package/dist/ui/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  59. package/dist/ui/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  60. package/dist/ui/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  61. package/dist/ui/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  62. package/dist/ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  63. package/dist/ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  64. package/dist/ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  65. package/dist/ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  66. package/dist/ui/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
  67. package/dist/ui/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
  68. package/dist/ui/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
  69. package/dist/ui/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  70. package/dist/ui/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
  71. package/dist/ui/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
  72. package/dist/ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  73. package/dist/ui/assets/icons-f6vmKzId.js +1 -0
  74. package/dist/ui/assets/index-C4hZIqRf.js +8 -0
  75. package/dist/ui/assets/index-D3MDAGJQ.css +1 -0
  76. package/dist/ui/assets/markdown-B0lQtlaX.js +39 -0
  77. package/dist/ui/assets/math-D93AjGz5.css +1 -0
  78. package/dist/ui/assets/math-Dyab3dfo.js +257 -0
  79. package/dist/ui/assets/react-Oh0PCTUB.js +9 -0
  80. package/dist/ui/favicon.svg +1 -0
  81. package/dist/ui/index.html +21 -0
  82. package/dist/ui/theme.js +4 -0
  83. package/package.json +90 -0
@@ -0,0 +1,602 @@
1
+ import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, writeFileSync, } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ function num(value) {
4
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
5
+ }
6
+ function str(value) {
7
+ return typeof value === 'string' ? value : undefined;
8
+ }
9
+ function spanKind(name) {
10
+ if (name === 'llm.chat')
11
+ return 'llm';
12
+ if (name.startsWith('tool.'))
13
+ return 'tool';
14
+ if (name === 'agent.run')
15
+ return 'agent';
16
+ if (name === 'agent.handoff')
17
+ return 'handoff';
18
+ return 'other';
19
+ }
20
+ function writeAtomic(path, content) {
21
+ const temporary = `${path}.${process.pid}.tmp`;
22
+ writeFileSync(temporary, content);
23
+ renameSync(temporary, path);
24
+ }
25
+ /**
26
+ * The runs and threads of the studio, kept as JSON files under
27
+ * `.cogitator/studio` so the history survives restarts without a database.
28
+ * It turns what the host reports into run records: spans priced per model
29
+ * call, nested runs under the tool call that started them, workflow nodes
30
+ * with their status.
31
+ */
32
+ export class StudioStore {
33
+ directory;
34
+ price;
35
+ runs = new Map();
36
+ threads = new Map();
37
+ roots = new Map();
38
+ registry;
39
+ constructor(directory, price) {
40
+ this.directory = directory;
41
+ this.price = price;
42
+ mkdirSync(join(directory, 'runs'), { recursive: true });
43
+ this.load();
44
+ }
45
+ load() {
46
+ for (const name of readdirSync(join(this.directory, 'runs'))) {
47
+ if (!name.endsWith('.json'))
48
+ continue;
49
+ try {
50
+ const run = JSON.parse(readFileSync(join(this.directory, 'runs', name), 'utf-8'));
51
+ if (run.status === 'running' || run.status === 'waiting') {
52
+ run.status = 'failed';
53
+ run.error = 'Cogitator Studio stopped during the run';
54
+ run.endedAt ??= run.startedAt;
55
+ this.persist(run);
56
+ }
57
+ this.runs.set(run.id, run);
58
+ }
59
+ catch {
60
+ continue;
61
+ }
62
+ }
63
+ const threadsFile = join(this.directory, 'threads.json');
64
+ if (existsSync(threadsFile)) {
65
+ try {
66
+ for (const thread of JSON.parse(readFileSync(threadsFile, 'utf-8'))) {
67
+ this.threads.set(thread.id, thread);
68
+ }
69
+ }
70
+ catch {
71
+ this.threads.clear();
72
+ }
73
+ }
74
+ }
75
+ persist(run) {
76
+ writeAtomic(join(this.directory, 'runs', `${run.id.replace(/[^\w-]/g, '_')}.json`), JSON.stringify(run));
77
+ }
78
+ persistThreads() {
79
+ writeAtomic(join(this.directory, 'threads.json'), JSON.stringify([...this.threads.values()]));
80
+ }
81
+ setRegistry(registry) {
82
+ this.registry = registry;
83
+ }
84
+ getRun(id) {
85
+ return this.runs.get(id);
86
+ }
87
+ /** A run with every run it started, nested ones included, and its forks. */
88
+ getRunTree(id) {
89
+ const run = this.runs.get(id);
90
+ if (!run)
91
+ return undefined;
92
+ const descendants = [];
93
+ const visit = (parent) => {
94
+ for (const childId of parent.children) {
95
+ const child = this.runs.get(childId);
96
+ if (child) {
97
+ descendants.push(child);
98
+ visit(child);
99
+ }
100
+ }
101
+ };
102
+ visit(run);
103
+ const forks = run.forks
104
+ .map((forkId) => this.runs.get(forkId))
105
+ .filter((fork) => fork !== undefined);
106
+ return { run, descendants, forks };
107
+ }
108
+ /** Runs the user started (not the nested ones), newest first. */
109
+ listRuns(query = {}) {
110
+ const words = (query.q ?? '').toLowerCase().split(/\s+/).filter(Boolean);
111
+ return [...this.runs.values()]
112
+ .filter((run) => !run.parentRunId)
113
+ .filter((run) => !query.target || run.target === query.target)
114
+ .filter((run) => !query.kind || run.kind === query.kind)
115
+ .filter((run) => {
116
+ if (words.length === 0)
117
+ return true;
118
+ const text = [run.input, run.output ?? '', run.target, run.error ?? '']
119
+ .join('\n')
120
+ .toLowerCase();
121
+ return words.every((word) => text.includes(word));
122
+ })
123
+ .sort((a, b) => b.startedAt - a.startedAt)
124
+ .slice(0, query.limit ?? 200);
125
+ }
126
+ /**
127
+ * Whether a workflow started the run, directly or through other runs: the
128
+ * workflow's usage already sums it.
129
+ */
130
+ insideWorkflow(run) {
131
+ const seen = new Set();
132
+ let parentId = run.parentRunId;
133
+ while (parentId && !seen.has(parentId)) {
134
+ seen.add(parentId);
135
+ const parent = this.runs.get(parentId);
136
+ if (!parent)
137
+ return false;
138
+ if (parent.kind === 'workflow')
139
+ return true;
140
+ parentId = parent.parentRunId;
141
+ }
142
+ return false;
143
+ }
144
+ /** Counts, spend, latency and daily activity over every run kept. */
145
+ stats(now = Date.now(), days = 14) {
146
+ const startOfDay = (at) => {
147
+ const date = new Date(at);
148
+ date.setHours(0, 0, 0, 0);
149
+ return date.getTime();
150
+ };
151
+ const today = new Date(startOfDay(now));
152
+ const activity = Array.from({ length: days }, (_, i) => ({
153
+ day: new Date(today.getFullYear(), today.getMonth(), today.getDate() - (days - 1 - i)).getTime(),
154
+ runs: 0,
155
+ failed: 0,
156
+ }));
157
+ const dayIndex = new Map(activity.map((bucket, i) => [bucket.day, i]));
158
+ const byStatus = {
159
+ running: 0,
160
+ waiting: 0,
161
+ completed: 0,
162
+ failed: 0,
163
+ stopped: 0,
164
+ };
165
+ const targets = new Map();
166
+ const durations = [];
167
+ let runs = 0;
168
+ let cost = 0;
169
+ let priced = false;
170
+ let inputTokens = 0;
171
+ let outputTokens = 0;
172
+ for (const run of this.runs.values()) {
173
+ const runPriced = run.usage !== undefined && run.usage.priced !== false;
174
+ if (!this.insideWorkflow(run)) {
175
+ cost += run.usage?.cost ?? 0;
176
+ priced ||= runPriced;
177
+ inputTokens += run.usage?.inputTokens ?? 0;
178
+ outputTokens += run.usage?.outputTokens ?? 0;
179
+ }
180
+ const kind = run.kind === 'workflow' ? 'workflow' : 'agent';
181
+ const key = `${kind}:${run.target}`;
182
+ const target = targets.get(key) ?? {
183
+ target: run.target,
184
+ kind,
185
+ runs: 0,
186
+ failed: 0,
187
+ cost: 0,
188
+ priced: false,
189
+ lastRunAt: 0,
190
+ };
191
+ target.runs += 1;
192
+ target.failed += run.status === 'failed' ? 1 : 0;
193
+ target.cost += run.usage?.cost ?? 0;
194
+ target.priced ||= runPriced;
195
+ target.lastRunAt = Math.max(target.lastRunAt, run.startedAt);
196
+ targets.set(key, target);
197
+ if (run.parentRunId)
198
+ continue;
199
+ runs += 1;
200
+ byStatus[run.status] += 1;
201
+ if (run.endedAt !== undefined && run.status !== 'running' && run.status !== 'waiting')
202
+ durations.push(run.endedAt - run.startedAt);
203
+ const bucket = dayIndex.get(startOfDay(run.startedAt));
204
+ if (bucket !== undefined) {
205
+ activity[bucket].runs += 1;
206
+ activity[bucket].failed += run.status === 'failed' ? 1 : 0;
207
+ }
208
+ }
209
+ durations.sort((a, b) => a - b);
210
+ const percentile = (p) => durations[Math.min(durations.length - 1, Math.ceil((p / 100) * durations.length) - 1)];
211
+ return {
212
+ runs,
213
+ byStatus,
214
+ cost,
215
+ priced,
216
+ inputTokens,
217
+ outputTokens,
218
+ duration: durations.length > 0 ? { p50: percentile(50), p95: percentile(95) } : null,
219
+ activity,
220
+ targets: [...targets.values()].sort((a, b) => b.runs - a.runs || b.lastRunAt - a.lastRunAt),
221
+ };
222
+ }
223
+ listThreads(agent) {
224
+ return [...this.threads.values()]
225
+ .filter((thread) => !agent || thread.agent === agent)
226
+ .sort((a, b) => b.updatedAt - a.updatedAt);
227
+ }
228
+ getThread(id) {
229
+ return this.threads.get(id);
230
+ }
231
+ /** The thread a chat message goes to, created on the first message. */
232
+ touchThread(id, agent, input) {
233
+ const now = Date.now();
234
+ const existing = this.threads.get(id);
235
+ if (existing && existing.agent !== agent) {
236
+ throw new Error(`Thread ${id} belongs to the agent "${existing.agent}"`);
237
+ }
238
+ const thread = existing ?? {
239
+ id,
240
+ agent,
241
+ title: input.trim().replace(/\s+/g, ' ').slice(0, 80) || 'New thread',
242
+ createdAt: now,
243
+ updatedAt: now,
244
+ runs: [],
245
+ };
246
+ thread.updatedAt = now;
247
+ this.threads.set(id, thread);
248
+ this.persistThreads();
249
+ return thread;
250
+ }
251
+ addRunToThread(threadId, runId) {
252
+ const thread = this.threads.get(threadId);
253
+ if (!thread || thread.runs.includes(runId))
254
+ return thread;
255
+ thread.runs.push(runId);
256
+ thread.updatedAt = Date.now();
257
+ this.persistThreads();
258
+ return thread;
259
+ }
260
+ /** The finished turns of a thread, to replay into a fresh memory. */
261
+ history(threadId) {
262
+ const thread = this.threads.get(threadId);
263
+ if (!thread)
264
+ return [];
265
+ return thread.runs.flatMap((runId) => {
266
+ const run = this.runs.get(runId);
267
+ if (run?.status !== 'completed')
268
+ return [];
269
+ return [
270
+ { role: 'user', content: run.input },
271
+ { role: 'assistant', content: run.output ?? '' },
272
+ ];
273
+ });
274
+ }
275
+ /** Marks the runs still going as failed, when the host they ran in went away. */
276
+ abandonRunning(reason) {
277
+ const changed = [];
278
+ for (const run of this.runs.values()) {
279
+ if (run.status !== 'running' && run.status !== 'waiting')
280
+ continue;
281
+ run.status = 'failed';
282
+ run.error = reason;
283
+ run.endedAt = Date.now();
284
+ for (const call of run.toolCalls) {
285
+ if (call.approval?.status === 'waiting')
286
+ call.approval = { ...call.approval, status: 'rejected', reason };
287
+ }
288
+ this.persist(run);
289
+ changed.push(run);
290
+ }
291
+ return changed;
292
+ }
293
+ /**
294
+ * A span as the trace shows it. Model calls name the model without its
295
+ * provider; the run's `provider/model` qualifies it, so it is priced at
296
+ * that provider's price.
297
+ */
298
+ spanRecord(span, run) {
299
+ const kind = spanKind(span.name);
300
+ const attributes = span.attributes;
301
+ const bare = kind === 'llm' ? str(attributes['llm.model']) : undefined;
302
+ const model = bare && !bare.includes('/') && run.model?.endsWith(`/${bare}`) ? run.model : bare;
303
+ const inputTokens = kind === 'llm' ? num(attributes['llm.input_tokens']) : undefined;
304
+ const outputTokens = kind === 'llm' ? num(attributes['llm.output_tokens']) : undefined;
305
+ const cost = model && inputTokens !== undefined && outputTokens !== undefined
306
+ ? (this.price(model, { inputTokens, outputTokens }) ?? undefined)
307
+ : undefined;
308
+ return {
309
+ id: span.id,
310
+ ...(span.parentId && { parentId: span.parentId }),
311
+ name: span.name,
312
+ kind,
313
+ status: span.status,
314
+ startTime: span.startTime,
315
+ endTime: span.endTime,
316
+ duration: span.duration,
317
+ ...(model && { model }),
318
+ ...(inputTokens !== undefined && { inputTokens }),
319
+ ...(outputTokens !== undefined && { outputTokens }),
320
+ ...(cost !== undefined && { cost }),
321
+ attributes,
322
+ };
323
+ }
324
+ initialNodes(target) {
325
+ const workflow = this.registry?.workflows.find((candidate) => candidate.key === target);
326
+ return (workflow?.nodes ?? []).map((name) => ({ name, status: 'pending' }));
327
+ }
328
+ /**
329
+ * Puts every nested run of a finished root under the run whose tool call
330
+ * started it: the run with the latest tool span that was open when the
331
+ * nested run started. Runs no tool span holds stay under the root.
332
+ */
333
+ linkNested(rootId) {
334
+ const root = this.runs.get(rootId);
335
+ if (!root)
336
+ return [];
337
+ const members = [...this.roots]
338
+ .filter(([, r]) => r === rootId)
339
+ .map(([id]) => this.runs.get(id))
340
+ .filter((run) => run !== undefined);
341
+ const nested = members.filter((run) => run.id !== rootId);
342
+ if (nested.length === 0)
343
+ return [];
344
+ for (const run of members)
345
+ run.children = [];
346
+ for (const run of nested) {
347
+ let parent = root;
348
+ let callId;
349
+ let latest = -Infinity;
350
+ for (const candidate of members) {
351
+ if (candidate.id === run.id)
352
+ continue;
353
+ for (const span of candidate.spans) {
354
+ if (span.kind !== 'tool')
355
+ continue;
356
+ if (span.startTime <= run.startedAt &&
357
+ span.endTime >= run.startedAt &&
358
+ span.startTime > latest) {
359
+ latest = span.startTime;
360
+ parent = candidate;
361
+ callId = str(span.attributes['tool.call_id']);
362
+ }
363
+ }
364
+ }
365
+ run.parentRunId = parent.id;
366
+ if (callId)
367
+ run.parentToolCallId = callId;
368
+ else
369
+ delete run.parentToolCallId;
370
+ parent.children.push(run.id);
371
+ }
372
+ for (const run of members) {
373
+ run.children.sort((a, b) => (this.runs.get(a)?.startedAt ?? 0) - (this.runs.get(b)?.startedAt ?? 0));
374
+ this.persist(run);
375
+ }
376
+ return members;
377
+ }
378
+ sumChildren(run) {
379
+ const total = {
380
+ inputTokens: 0,
381
+ outputTokens: 0,
382
+ cost: 0,
383
+ priced: false,
384
+ duration: 0,
385
+ };
386
+ const add = (id) => {
387
+ const child = this.runs.get(id);
388
+ if (!child)
389
+ return;
390
+ if (child.usage) {
391
+ total.inputTokens += child.usage.inputTokens;
392
+ total.outputTokens += child.usage.outputTokens;
393
+ total.cost += child.usage.cost;
394
+ total.priced = total.priced === true || child.usage.priced === true;
395
+ }
396
+ };
397
+ for (const [id, root] of this.roots)
398
+ if (root === run.id && id !== run.id)
399
+ add(id);
400
+ total.duration = (run.endedAt ?? Date.now()) - run.startedAt;
401
+ return total;
402
+ }
403
+ /** Applies an event of the host and returns what changed. */
404
+ apply(event) {
405
+ switch (event.type) {
406
+ case 'run.started': {
407
+ const run = {
408
+ id: event.runId,
409
+ kind: event.kind,
410
+ target: event.target,
411
+ ...(event.agentName && { agentName: event.agentName }),
412
+ ...(event.threadId && { threadId: event.threadId }),
413
+ input: event.input,
414
+ status: 'running',
415
+ startedAt: event.startedAt,
416
+ ...(event.model && { model: event.model }),
417
+ toolCalls: [],
418
+ spans: [],
419
+ children: [],
420
+ forks: [],
421
+ ...(event.forkOf && { forkOf: event.forkOf }),
422
+ ...(event.rerunOf && { rerunOf: event.rerunOf }),
423
+ ...(event.kind === 'workflow' && { nodes: this.initialNodes(event.target) }),
424
+ };
425
+ this.runs.set(run.id, run);
426
+ this.roots.set(run.id, event.rootRunId);
427
+ const changed = [run];
428
+ if (event.rootRunId !== event.runId) {
429
+ const root = this.runs.get(event.rootRunId);
430
+ if (root) {
431
+ run.parentRunId = root.id;
432
+ root.children.push(run.id);
433
+ changed.push(root);
434
+ }
435
+ }
436
+ const origin = event.forkOf ? this.runs.get(event.forkOf.runId) : undefined;
437
+ if (origin) {
438
+ origin.forks.push(run.id);
439
+ this.persist(origin);
440
+ changed.push(origin);
441
+ }
442
+ this.persist(run);
443
+ return { runs: changed };
444
+ }
445
+ case 'run.token': {
446
+ const run = this.runs.get(event.runId);
447
+ if (!run)
448
+ return { runs: [] };
449
+ run.output = (run.output ?? '') + event.text;
450
+ return { runs: [], token: { runId: event.runId, text: event.text } };
451
+ }
452
+ case 'run.reasoning': {
453
+ const run = this.runs.get(event.runId);
454
+ if (!run)
455
+ return { runs: [] };
456
+ run.reasoning = (run.reasoning ?? '') + event.text;
457
+ return { runs: [], reasoning: { runId: event.runId, text: event.text } };
458
+ }
459
+ case 'run.tool.call': {
460
+ const run = this.runs.get(event.runId);
461
+ if (!run)
462
+ return { runs: [] };
463
+ if (!run.toolCalls.some((call) => call.id === event.call.id)) {
464
+ run.toolCalls.push({
465
+ id: event.call.id,
466
+ name: event.call.name,
467
+ arguments: event.call.arguments,
468
+ });
469
+ }
470
+ return { runs: [run] };
471
+ }
472
+ case 'run.tool.result': {
473
+ const run = this.runs.get(event.runId);
474
+ const call = run?.toolCalls.find((candidate) => candidate.id === event.callId);
475
+ if (!run || !call)
476
+ return { runs: [] };
477
+ call.result = event.result;
478
+ if (event.error)
479
+ call.error = event.error;
480
+ return { runs: [run] };
481
+ }
482
+ case 'run.approval': {
483
+ const run = this.runs.get(event.runId);
484
+ if (!run)
485
+ return { runs: [] };
486
+ let call = run.toolCalls.find((candidate) => candidate.id === event.callId);
487
+ if (!call) {
488
+ call = { id: event.callId, name: event.toolName, arguments: event.arguments };
489
+ run.toolCalls.push(call);
490
+ }
491
+ call.approval = { id: event.approvalId, status: 'waiting' };
492
+ run.status = 'waiting';
493
+ this.persist(run);
494
+ return { runs: [run] };
495
+ }
496
+ case 'run.approval.decided': {
497
+ const run = this.runs.get(event.runId);
498
+ const call = run?.toolCalls.find((candidate) => candidate.approval?.id === event.approvalId);
499
+ if (!run || !call?.approval)
500
+ return { runs: [] };
501
+ call.approval = {
502
+ id: event.approvalId,
503
+ status: event.approved ? 'approved' : 'rejected',
504
+ ...(event.reason && { reason: event.reason }),
505
+ };
506
+ if (run.status === 'waiting' &&
507
+ !run.toolCalls.some((c) => c.approval?.status === 'waiting')) {
508
+ run.status = 'running';
509
+ }
510
+ this.persist(run);
511
+ return { runs: [run] };
512
+ }
513
+ case 'run.span': {
514
+ const run = this.runs.get(event.runId);
515
+ if (!run)
516
+ return { runs: [] };
517
+ if (!run.spans.some((span) => span.id === event.span.id))
518
+ run.spans.push(this.spanRecord(event.span, run));
519
+ run.spans.sort((a, b) => a.startTime - b.startTime);
520
+ if (!run.model) {
521
+ const model = run.spans.find((span) => span.model)?.model;
522
+ if (model)
523
+ run.model = model;
524
+ }
525
+ return { runs: [run] };
526
+ }
527
+ case 'run.completed': {
528
+ const run = this.runs.get(event.runId);
529
+ if (!run)
530
+ return { runs: [] };
531
+ run.status = 'completed';
532
+ run.output = event.output;
533
+ run.endedAt = event.endedAt;
534
+ if (event.steps)
535
+ run.steps = event.steps;
536
+ for (const call of event.toolCalls ?? []) {
537
+ const known = run.toolCalls.find((candidate) => candidate.id === call.id);
538
+ if (!known)
539
+ run.toolCalls.push({ ...call });
540
+ else {
541
+ if (known.result === undefined && call.result !== undefined)
542
+ known.result = call.result;
543
+ if (!known.error && call.error)
544
+ known.error = call.error;
545
+ }
546
+ }
547
+ if (event.workflowRunId)
548
+ run.workflowRunId = event.workflowRunId;
549
+ if (run.nodes) {
550
+ for (const node of run.nodes)
551
+ if (node.status === 'pending')
552
+ node.status = 'skipped';
553
+ }
554
+ const spanCost = run.spans.reduce((sum, span) => sum + (span.cost ?? 0), 0);
555
+ const priced = event.usage.cost > 0 || run.spans.some((span) => span.cost !== undefined);
556
+ run.usage =
557
+ run.kind === 'workflow'
558
+ ? this.sumChildren(run)
559
+ : { ...event.usage, cost: event.usage.cost > 0 ? event.usage.cost : spanCost, priced };
560
+ this.persist(run);
561
+ const linked = this.roots.get(run.id) === run.id ? this.linkNested(run.id) : [];
562
+ return { runs: [run, ...linked.filter((other) => other.id !== run.id)] };
563
+ }
564
+ case 'run.failed': {
565
+ const run = this.runs.get(event.runId);
566
+ if (!run)
567
+ return { runs: [] };
568
+ run.status = event.stopped ? 'stopped' : 'failed';
569
+ run.error = event.error;
570
+ run.endedAt = event.endedAt;
571
+ if (run.kind === 'workflow')
572
+ run.usage = this.sumChildren(run);
573
+ this.persist(run);
574
+ const linked = this.roots.get(run.id) === run.id ? this.linkNested(run.id) : [];
575
+ return { runs: [run, ...linked.filter((other) => other.id !== run.id)] };
576
+ }
577
+ case 'workflow.node': {
578
+ const run = this.runs.get(event.runId);
579
+ if (!run)
580
+ return { runs: [] };
581
+ run.nodes ??= [];
582
+ let node = run.nodes.find((candidate) => candidate.name === event.node);
583
+ if (!node) {
584
+ node = { name: event.node, status: 'pending' };
585
+ run.nodes.push(node);
586
+ }
587
+ node.status = event.status;
588
+ if (event.status === 'running')
589
+ node.startedAt = event.at;
590
+ if (event.duration !== undefined)
591
+ node.duration = event.duration;
592
+ if (event.output !== undefined)
593
+ node.output = event.output;
594
+ if (event.error)
595
+ node.error = event.error;
596
+ this.persist(run);
597
+ return { runs: [run] };
598
+ }
599
+ }
600
+ }
601
+ }
602
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/server/store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAsCjC,SAAS,GAAG,CAAC,KAAc;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACjF,CAAC;AAED,SAAS,GAAG,CAAC,KAAc;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAC;IAC5C,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC;IACzC,IAAI,IAAI,KAAK,eAAe;QAAE,OAAO,SAAS,CAAC;IAC/C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,OAAe;IAChD,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IAC/C,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAClC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IAOH;IACA;IAPF,IAAI,GAAG,IAAI,GAAG,EAAqB,CAAC;IACpC,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC1C,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,QAAQ,CAAgB;IAEhC,YACmB,SAAiB,EACjB,KAAa;QADb,cAAS,GAAT,SAAS,CAAQ;QACjB,UAAK,GAAL,KAAK,CAAQ;QAE9B,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEO,IAAI;QACV,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,SAAS;YACtC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAC7C,CAAC;gBACf,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzD,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;oBACtB,GAAG,CAAC,KAAK,GAAG,yCAAyC,CAAC;oBACtD,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,SAAS,CAAC;oBAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QACzD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAmB,EAAE,CAAC;oBACtF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,GAAc;QAC5B,WAAW,CACT,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,EACtE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CACpB,CAAC;IACJ,CAAC;IAEO,cAAc;QACpB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAChG,CAAC;IAED,WAAW,CAAC,QAAsB;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,EAAU;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,4EAA4E;IAC5E,UAAU,CACR,EAAU;QAEV,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,MAAM,WAAW,GAAgB,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,CAAC,MAAiB,EAAE,EAAE;YAClC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACrC,IAAI,KAAK,EAAE,CAAC;oBACV,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACxB,KAAK,CAAC,KAAK,CAAC,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QACF,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK;aACpB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;aACtC,MAAM,CAAC,CAAC,IAAI,EAAqB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC3D,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IACrC,CAAC;IAED,iEAAiE;IACjE,QAAQ,CAAC,QAAkB,EAAE;QAC3B,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;aAC3B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;aACjC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC;aAC7D,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;aACvD,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YACd,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACpC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;iBACpE,IAAI,CAAC,IAAI,CAAC;iBACV,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;aACzC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;IAClC,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,GAAc;QACnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,IAAI,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC;QAC/B,OAAO,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAC1B,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;gBAAE,OAAO,IAAI,CAAC;YAC5C,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC;QAChC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE;QAC/B,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE;YAChC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACvD,GAAG,EAAE,IAAI,IAAI,CACX,KAAK,CAAC,WAAW,EAAE,EACnB,KAAK,CAAC,QAAQ,EAAE,EAChB,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CACjC,CAAC,OAAO,EAAE;YACX,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;SACV,CAAC,CAAC,CAAC;QACJ,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,QAAQ,GAA8B;YAC1C,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;YACV,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;SACX,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;QAC/C,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC;YACxE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC;gBAC7B,MAAM,KAAK,SAAS,CAAC;gBACrB,WAAW,IAAI,GAAG,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC;gBAC3C,YAAY,IAAI,GAAG,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;YAC/C,CAAC;YAED,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5D,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;gBACjC,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI;gBACJ,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,CAAC;aACb,CAAC;YACF,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YACjB,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC;YAC5B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAEzB,IAAI,GAAG,CAAC,WAAW;gBAAE,SAAS;YAC9B,IAAI,IAAI,CAAC,CAAC;YACV,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;gBACnF,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YACvD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAC3B,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,EAAE,CAC/B,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzF,OAAO;YACL,IAAI;YACJ,QAAQ;YACR,IAAI;YACJ,MAAM;YACN,WAAW;YACX,YAAY;YACZ,QAAQ,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;YACpF,QAAQ;YACR,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;SAC5F,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,KAAc;QACxB,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;aAC9B,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;aACpD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED,SAAS,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,uEAAuE;IACvE,WAAW,CAAC,EAAU,EAAE,KAAa,EAAE,KAAa;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,0BAA0B,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,MAAM,GAAiB,QAAQ,IAAI;YACvC,EAAE;YACF,KAAK;YACL,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,YAAY;YACrE,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;YACd,IAAI,EAAE,EAAE;SACT,CAAC;QACF,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,cAAc,CAAC,QAAgB,EAAE,KAAa;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,qEAAqE;IACrE,OAAO,CAAC,QAAgB;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,GAAG,EAAE,MAAM,KAAK,WAAW;gBAAE,OAAO,EAAE,CAAC;YAC3C,OAAO;gBACL,EAAE,IAAI,EAAE,MAAe,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE;gBAC7C,EAAE,IAAI,EAAE,WAAoB,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE;aAC1D,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iFAAiF;IACjF,cAAc,CAAC,MAAc;QAC3B,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACrC,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;gBAAE,SAAS;YACnE,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;YACtB,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;YACnB,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS;oBACrC,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;YACrE,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACK,UAAU,CAAC,IAAa,EAAE,GAAc;QAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAChG,MAAM,WAAW,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,MAAM,YAAY,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,MAAM,IAAI,GACR,KAAK,IAAI,WAAW,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS;YAC9D,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,IAAI,SAAS,CAAC;YACjE,CAAC,CAAC,SAAS,CAAC;QAChB,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI;YACJ,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;YACvB,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,CAAC;YACjD,GAAG,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,YAAY,EAAE,CAAC;YACnD,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC;YACnC,UAAU;SACX,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,MAAc;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;QACxF,OAAO,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED;;;;OAIG;IACK,UAAU,CAAC,MAAc;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aAChC,MAAM,CAAC,CAAC,GAAG,EAAoB,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,OAAO;YAAE,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,MAAM,GAAc,IAAI,CAAC;YAC7B,IAAI,MAA0B,CAAC;YAC/B,IAAI,MAAM,GAAG,CAAC,QAAQ,CAAC;YACvB,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;gBAChC,IAAI,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE;oBAAE,SAAS;gBACtC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;oBACnC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;wBAAE,SAAS;oBACnC,IACE,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS;wBAC/B,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,SAAS;wBAC7B,IAAI,CAAC,SAAS,GAAG,MAAM,EACvB,CAAC;wBACD,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;wBACxB,MAAM,GAAG,SAAS,CAAC;wBACnB,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;oBAChD,CAAC;gBACH,CAAC;YACH,CAAC;YACD,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC;YAC5B,IAAI,MAAM;gBAAE,GAAG,CAAC,gBAAgB,GAAG,MAAM,CAAC;;gBACrC,OAAO,GAAG,CAAC,gBAAgB,CAAC;YACjC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,GAAG,CAAC,QAAQ,CAAC,IAAI,CACf,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,CAAC,CAAC,CAClF,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,WAAW,CAAC,GAAc;QAChC,MAAM,KAAK,GAAc;YACvB,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,CAAC;SACZ,CAAC;QACF,MAAM,GAAG,GAAG,CAAC,EAAU,EAAE,EAAE;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;gBAC7C,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;gBAC/C,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC/B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;YACtE,CAAC;QACH,CAAC,CAAC;QACF,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE;gBAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACnF,KAAK,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,KAAgB;QACpB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,GAAG,GAAc;oBACrB,EAAE,EAAE,KAAK,CAAC,KAAK;oBACf,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;oBACtD,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACnD,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,MAAM,EAAE,SAAS;oBACjB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC1C,SAAS,EAAE,EAAE;oBACb,KAAK,EAAE,EAAE;oBACT,QAAQ,EAAE,EAAE;oBACZ,KAAK,EAAE,EAAE;oBACT,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC7C,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;oBAChD,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;iBAC7E,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBACxC,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;gBACtB,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;oBACpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBAC5C,IAAI,IAAI,EAAE,CAAC;wBACT,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC;wBAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAC3B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACrB,CAAC;gBACH,CAAC;gBACD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC5E,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBACrB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvB,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YAC3B,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,CAAC,GAAG;oBAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBAC9B,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;gBAC7C,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACvE,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,CAAC,GAAG;oBAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBAC9B,GAAG,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;gBACnD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3E,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,CAAC,GAAG;oBAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC7D,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;wBACjB,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;wBACjB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;wBACrB,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS;qBAChC,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,CAAC;YACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvC,MAAM,IAAI,GAAG,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC/E,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;oBAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBACvC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC3B,IAAI,KAAK,CAAC,KAAK;oBAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC1C,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,CAAC;YACD,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,CAAC,GAAG;oBAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBAC9B,IAAI,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC5E,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,IAAI,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;oBAC9E,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC;gBACD,IAAI,CAAC,QAAQ,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;gBAC5D,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC;gBACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClB,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,CAAC;YACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvC,MAAM,IAAI,GAAG,GAAG,EAAE,SAAS,CAAC,IAAI,CAC9B,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,KAAK,KAAK,CAAC,UAAU,CAC3D,CAAC;gBACF,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ;oBAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBACjD,IAAI,CAAC,QAAQ,GAAG;oBACd,EAAE,EAAE,KAAK,CAAC,UAAU;oBACpB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;oBAChD,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;iBAC9C,CAAC;gBACF,IACE,GAAG,CAAC,MAAM,KAAK,SAAS;oBACxB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,CAAC,EAC5D,CAAC;oBACD,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC;gBACzB,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClB,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,CAAC,GAAG;oBAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;gBACnD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;gBACpD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;oBAC1D,IAAI,KAAK;wBAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;gBAC/B,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,CAAC,GAAG;oBAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBAC9B,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC;gBACzB,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC1B,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC5B,IAAI,KAAK,CAAC,KAAK;oBAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBACzC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;oBACzC,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC1E,IAAI,CAAC,KAAK;wBAAE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;yBACvC,CAAC;wBACJ,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;4BAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;wBACxF,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;4BAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC3D,CAAC;gBACH,CAAC;gBACD,IAAI,KAAK,CAAC,aAAa;oBAAE,GAAG,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;gBACjE,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBACd,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK;wBAAE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;4BAAE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;gBACvF,CAAC;gBACD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5E,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;gBACzF,GAAG,CAAC,KAAK;oBACP,GAAG,CAAC,IAAI,KAAK,UAAU;wBACrB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;wBACvB,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;gBAC3F,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChF,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC3E,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,CAAC,GAAG;oBAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBAC9B,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAClD,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBACxB,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC5B,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU;oBAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAC/D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChF,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC3E,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,CAAC,GAAG;oBAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBAC9B,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;gBACjB,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;gBACxE,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;oBAC/C,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;gBACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;oBAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC;gBAC1D,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;oBAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;gBACjE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;oBAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC3D,IAAI,KAAK,CAAC,KAAK;oBAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClB,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}