braindump 0.4.5 → 1.0.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 (61) hide show
  1. package/README.md +73 -22
  2. package/dist/adapters/claude-code/adapter.d.ts.map +1 -1
  3. package/dist/adapters/claude-code/adapter.js +30 -3
  4. package/dist/adapters/claude-code/adapter.js.map +1 -1
  5. package/dist/adapters/codex/adapter.d.ts +1 -0
  6. package/dist/adapters/codex/adapter.d.ts.map +1 -1
  7. package/dist/adapters/codex/adapter.js +27 -0
  8. package/dist/adapters/codex/adapter.js.map +1 -1
  9. package/dist/adapters/copilot/adapter.d.ts +29 -0
  10. package/dist/adapters/copilot/adapter.d.ts.map +1 -0
  11. package/dist/adapters/copilot/adapter.js +501 -0
  12. package/dist/adapters/copilot/adapter.js.map +1 -0
  13. package/dist/adapters/cursor/adapter.d.ts +28 -0
  14. package/dist/adapters/cursor/adapter.d.ts.map +1 -1
  15. package/dist/adapters/cursor/adapter.js +283 -71
  16. package/dist/adapters/cursor/adapter.js.map +1 -1
  17. package/dist/adapters/droid/adapter.d.ts +27 -0
  18. package/dist/adapters/droid/adapter.d.ts.map +1 -0
  19. package/dist/adapters/droid/adapter.js +507 -0
  20. package/dist/adapters/droid/adapter.js.map +1 -0
  21. package/dist/adapters/gemini/adapter.d.ts +29 -0
  22. package/dist/adapters/gemini/adapter.d.ts.map +1 -0
  23. package/dist/adapters/gemini/adapter.js +456 -0
  24. package/dist/adapters/gemini/adapter.js.map +1 -0
  25. package/dist/adapters/index.d.ts.map +1 -1
  26. package/dist/adapters/index.js +8 -0
  27. package/dist/adapters/index.js.map +1 -1
  28. package/dist/adapters/opencode/adapter.d.ts +32 -0
  29. package/dist/adapters/opencode/adapter.d.ts.map +1 -0
  30. package/dist/adapters/opencode/adapter.js +643 -0
  31. package/dist/adapters/opencode/adapter.js.map +1 -0
  32. package/dist/cli/index.js +219 -42
  33. package/dist/cli/index.js.map +1 -1
  34. package/dist/core/compression.d.ts.map +1 -1
  35. package/dist/core/compression.js +12 -0
  36. package/dist/core/compression.js.map +1 -1
  37. package/dist/core/launcher.d.ts +20 -0
  38. package/dist/core/launcher.d.ts.map +1 -0
  39. package/dist/core/launcher.js +87 -0
  40. package/dist/core/launcher.js.map +1 -0
  41. package/dist/core/prompt-builder.d.ts.map +1 -1
  42. package/dist/core/prompt-builder.js +15 -0
  43. package/dist/core/prompt-builder.js.map +1 -1
  44. package/dist/core/registry.d.ts.map +1 -1
  45. package/dist/core/registry.js +48 -0
  46. package/dist/core/registry.js.map +1 -1
  47. package/dist/core/session-cache.d.ts +17 -0
  48. package/dist/core/session-cache.d.ts.map +1 -0
  49. package/dist/core/session-cache.js +59 -0
  50. package/dist/core/session-cache.js.map +1 -0
  51. package/dist/core/tool-summarizer.d.ts +40 -0
  52. package/dist/core/tool-summarizer.d.ts.map +1 -0
  53. package/dist/core/tool-summarizer.js +73 -0
  54. package/dist/core/tool-summarizer.js.map +1 -0
  55. package/dist/core/validation.d.ts +21 -2
  56. package/dist/core/validation.d.ts.map +1 -1
  57. package/dist/core/validation.js +6 -1
  58. package/dist/core/validation.js.map +1 -1
  59. package/dist/types/index.d.ts +7 -1
  60. package/dist/types/index.d.ts.map +1 -1
  61. package/package.json +7 -1
@@ -0,0 +1,643 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import Database from "better-sqlite3";
5
+ import { glob } from "glob";
6
+ import { BaseAdapter } from "../base-adapter.js";
7
+ import { analyzeConversation } from "../../core/conversation-analyzer.js";
8
+ import { extractProjectContext } from "../../core/project-context.js";
9
+ import { SummaryCollector } from "../../core/tool-summarizer.js";
10
+ import { validateSession } from "../../core/validation.js";
11
+ export class OpenCodeAdapter extends BaseAdapter {
12
+ agentId = "opencode";
13
+ get rootDir() {
14
+ if (process.platform === "win32") {
15
+ const base = process.env.LOCALAPPDATA || path.join(os.homedir(), "AppData", "Local");
16
+ return path.join(base, "opencode");
17
+ }
18
+ if (process.platform === "darwin") {
19
+ return path.join(os.homedir(), "Library", "Application Support", "opencode");
20
+ }
21
+ return path.join(os.homedir(), ".local", "share", "opencode");
22
+ }
23
+ get sqlitePath() {
24
+ return path.join(this.rootDir, "opencode.db");
25
+ }
26
+ get storageDir() {
27
+ return path.join(this.rootDir, "storage");
28
+ }
29
+ async detect() {
30
+ if (fs.existsSync(this.sqlitePath)) {
31
+ return true;
32
+ }
33
+ if (!fs.existsSync(this.storageDir)) {
34
+ return false;
35
+ }
36
+ const sessions = await glob("session/*/*.json", {
37
+ cwd: this.storageDir,
38
+ nodir: true,
39
+ });
40
+ return sessions.length > 0;
41
+ }
42
+ async listSessions(projectPath) {
43
+ const dbSessions = this.listSessionsFromDb(projectPath);
44
+ if (dbSessions.length > 0) {
45
+ return dbSessions;
46
+ }
47
+ return this.listSessionsFromJson(projectPath);
48
+ }
49
+ async capture(sessionId) {
50
+ const dbCapture = await this.captureFromDb(sessionId);
51
+ if (dbCapture) {
52
+ return dbCapture;
53
+ }
54
+ const jsonCapture = await this.captureFromJson(sessionId);
55
+ if (jsonCapture) {
56
+ return jsonCapture;
57
+ }
58
+ throw new Error(`Session not found: ${sessionId}`);
59
+ }
60
+ async captureLatest(projectPath) {
61
+ const sessions = await this.listSessions(projectPath);
62
+ if (sessions.length === 0) {
63
+ throw new Error(projectPath
64
+ ? `No OpenCode sessions found for project: ${projectPath}`
65
+ : "No OpenCode sessions found");
66
+ }
67
+ return this.capture(sessions[0].id);
68
+ }
69
+ listSessionsFromDb(projectPath) {
70
+ if (!fs.existsSync(this.sqlitePath)) {
71
+ return [];
72
+ }
73
+ const db = this.openDatabase(this.sqlitePath);
74
+ if (!db) {
75
+ return [];
76
+ }
77
+ try {
78
+ const rows = db
79
+ .prepare("SELECT id, title, directory, time_created, time_updated FROM session ORDER BY time_updated DESC")
80
+ .all();
81
+ const sessions = rows
82
+ .map((row) => {
83
+ const resolvedProjectPath = this.firstString(row.directory);
84
+ const startedAt = this.normalizeTimestamp(row.time_created);
85
+ const lastActiveAt = this.normalizeTimestamp(row.time_updated) || startedAt;
86
+ return {
87
+ id: String(row.id),
88
+ startedAt,
89
+ lastActiveAt,
90
+ projectPath: resolvedProjectPath,
91
+ preview: this.firstString(row.title),
92
+ };
93
+ })
94
+ .filter((session) => {
95
+ if (!projectPath) {
96
+ return true;
97
+ }
98
+ if (!session.projectPath) {
99
+ return false;
100
+ }
101
+ return this.pathsEqual(projectPath, session.projectPath);
102
+ });
103
+ return sessions;
104
+ }
105
+ catch {
106
+ return [];
107
+ }
108
+ finally {
109
+ db.close();
110
+ }
111
+ }
112
+ async listSessionsFromJson(projectPath) {
113
+ if (!fs.existsSync(this.storageDir)) {
114
+ return [];
115
+ }
116
+ const files = await glob("session/*/*.json", {
117
+ cwd: this.storageDir,
118
+ nodir: true,
119
+ absolute: true,
120
+ });
121
+ const sessions = [];
122
+ for (const filePath of files) {
123
+ let payload;
124
+ try {
125
+ payload = JSON.parse(fs.readFileSync(filePath, "utf-8"));
126
+ }
127
+ catch {
128
+ continue;
129
+ }
130
+ const id = this.firstString(payload.id, payload.sessionId, payload.slug);
131
+ if (!id) {
132
+ continue;
133
+ }
134
+ const resolvedProjectPath = this.firstString(payload.directory);
135
+ if (projectPath && resolvedProjectPath) {
136
+ if (!this.pathsEqual(projectPath, resolvedProjectPath)) {
137
+ continue;
138
+ }
139
+ }
140
+ else if (projectPath && !resolvedProjectPath) {
141
+ continue;
142
+ }
143
+ const startedAt = this.normalizeTimestamp(payload.time_created);
144
+ const lastActiveAt = this.normalizeTimestamp(payload.time_updated) ||
145
+ this.normalizeTimestampFromMs(fs.statSync(filePath).mtimeMs) ||
146
+ startedAt;
147
+ const sortValue = Date.parse(lastActiveAt ?? startedAt ?? "") || 0;
148
+ sessions.push({
149
+ id,
150
+ startedAt,
151
+ lastActiveAt,
152
+ projectPath: resolvedProjectPath,
153
+ preview: this.firstString(payload.title),
154
+ sortValue,
155
+ });
156
+ }
157
+ sessions.sort((a, b) => b.sortValue - a.sortValue);
158
+ return sessions.map(({ sortValue, ...session }) => session);
159
+ }
160
+ async captureFromDb(sessionId) {
161
+ if (!fs.existsSync(this.sqlitePath)) {
162
+ return null;
163
+ }
164
+ const db = this.openDatabase(this.sqlitePath);
165
+ if (!db) {
166
+ return null;
167
+ }
168
+ try {
169
+ const sessionRow = db
170
+ .prepare("SELECT id, project_id, slug, directory, title, time_created, time_updated FROM session WHERE id = ? OR slug = ? LIMIT 1")
171
+ .get(sessionId, sessionId);
172
+ if (!sessionRow) {
173
+ return null;
174
+ }
175
+ let projectPath = this.firstString(sessionRow.directory);
176
+ if (!projectPath && sessionRow.project_id != null) {
177
+ const projectRow = db
178
+ .prepare("SELECT worktree FROM project WHERE id = ? LIMIT 1")
179
+ .get(sessionRow.project_id);
180
+ projectPath = this.firstString(projectRow?.worktree);
181
+ }
182
+ const collector = new SummaryCollector();
183
+ const fileChanges = new Map();
184
+ const messages = [];
185
+ let sessionStartedAt = this.normalizeTimestamp(sessionRow.time_created);
186
+ let lastAssistantMessage = "";
187
+ let totalTokens = 0;
188
+ const messageRows = db
189
+ .prepare("SELECT id, data, time_created FROM message WHERE session_id = ? ORDER BY time_created")
190
+ .all(sessionRow.id);
191
+ for (const row of messageRows) {
192
+ const messageData = this.parseJsonObject(row.data);
193
+ const role = this.mapRole(messageData?.role);
194
+ const messageTimestamp = this.normalizeTimestamp(row.time_created);
195
+ if (!sessionStartedAt && messageTimestamp) {
196
+ sessionStartedAt = messageTimestamp;
197
+ }
198
+ totalTokens += this.extractUsageTokens(messageData?.usage);
199
+ const partRows = db
200
+ .prepare("SELECT data, time_created FROM part WHERE message_id = ? ORDER BY time_created")
201
+ .all(row.id);
202
+ const textParts = [];
203
+ for (const partRow of partRows) {
204
+ const partData = this.parsePartPayload(partRow.data);
205
+ if (!partData) {
206
+ continue;
207
+ }
208
+ const partTimestamp = this.normalizeTimestamp(partRow.time_created) || messageTimestamp;
209
+ if (partData.type === "text") {
210
+ const text = this.firstString(partData.text, partData.content);
211
+ if (text) {
212
+ textParts.push(text);
213
+ }
214
+ continue;
215
+ }
216
+ if (partData.type === "tool-invocation") {
217
+ const toolName = this.firstString(partData.toolName, partData.name) || "Tool";
218
+ messages.push({
219
+ role: "tool",
220
+ content: this.serializeUnknown(partData.args ?? partData.input ?? {}),
221
+ toolName,
222
+ timestamp: partTimestamp,
223
+ });
224
+ collector.record(this.summaryName(toolName), this.summarySample(toolName, partData.args ?? partData.input));
225
+ const change = this.fileChangeFromTool(toolName, partData.args ?? partData.input, partData.result);
226
+ if (change) {
227
+ fileChanges.set(change.path, change);
228
+ }
229
+ if (partData.result != null) {
230
+ messages.push({
231
+ role: "tool",
232
+ content: this.serializeUnknown(partData.result),
233
+ timestamp: partTimestamp,
234
+ });
235
+ }
236
+ }
237
+ }
238
+ const text = textParts.join("\n").trim();
239
+ if (text) {
240
+ messages.push({
241
+ role,
242
+ content: text,
243
+ timestamp: messageTimestamp,
244
+ });
245
+ if (role === "assistant") {
246
+ lastAssistantMessage = text;
247
+ }
248
+ }
249
+ }
250
+ return this.buildCapturedSession({
251
+ sessionId: String(sessionRow.id),
252
+ messages,
253
+ fileChanges,
254
+ collector,
255
+ totalTokens,
256
+ sessionStartedAt,
257
+ lastAssistantMessage,
258
+ projectPath: projectPath || process.cwd(),
259
+ });
260
+ }
261
+ catch {
262
+ return null;
263
+ }
264
+ finally {
265
+ db.close();
266
+ }
267
+ }
268
+ async captureFromJson(sessionId) {
269
+ if (!fs.existsSync(this.storageDir)) {
270
+ return null;
271
+ }
272
+ const sessionFiles = await glob("session/*/*.json", {
273
+ cwd: this.storageDir,
274
+ nodir: true,
275
+ absolute: true,
276
+ });
277
+ let sessionPayload = null;
278
+ for (const filePath of sessionFiles) {
279
+ let parsed;
280
+ try {
281
+ parsed = JSON.parse(fs.readFileSync(filePath, "utf-8"));
282
+ }
283
+ catch {
284
+ continue;
285
+ }
286
+ const id = this.firstString(parsed.id, parsed.sessionId, parsed.slug);
287
+ if (id === sessionId) {
288
+ sessionPayload = parsed;
289
+ break;
290
+ }
291
+ }
292
+ if (!sessionPayload) {
293
+ return null;
294
+ }
295
+ const resolvedSessionId = this.firstString(sessionPayload.id, sessionPayload.sessionId, sessionPayload.slug) ||
296
+ sessionId;
297
+ const collector = new SummaryCollector();
298
+ const fileChanges = new Map();
299
+ const messages = [];
300
+ const messageDir = path.join(this.storageDir, "message", resolvedSessionId);
301
+ const messageFiles = fs.existsSync(messageDir)
302
+ ? fs
303
+ .readdirSync(messageDir)
304
+ .filter((name) => name.endsWith(".json"))
305
+ .map((name) => path.join(messageDir, name))
306
+ : [];
307
+ const parsedMessages = messageFiles
308
+ .map((filePath) => {
309
+ try {
310
+ return JSON.parse(fs.readFileSync(filePath, "utf-8"));
311
+ }
312
+ catch {
313
+ return null;
314
+ }
315
+ })
316
+ .filter((value) => value !== null)
317
+ .sort((a, b) => {
318
+ const aTs = Date.parse(String(a.time_created ?? "")) || 0;
319
+ const bTs = Date.parse(String(b.time_created ?? "")) || 0;
320
+ return aTs - bTs;
321
+ });
322
+ let sessionStartedAt;
323
+ let totalTokens = 0;
324
+ let lastAssistantMessage = "";
325
+ for (const msg of parsedMessages) {
326
+ const messageId = this.firstString(msg.id);
327
+ const messageData = this.parseJsonObject(msg.data) ?? msg;
328
+ const role = this.mapRole(messageData.role);
329
+ const messageTimestamp = this.normalizeTimestamp(msg.time_created);
330
+ if (!sessionStartedAt && messageTimestamp) {
331
+ sessionStartedAt = messageTimestamp;
332
+ }
333
+ totalTokens += this.extractUsageTokens(messageData.usage);
334
+ const inlineParts = Array.isArray(msg.parts) ? msg.parts : [];
335
+ const partPayloads = [];
336
+ for (const inlinePart of inlineParts) {
337
+ const normalized = this.parsePartPayload(inlinePart);
338
+ if (normalized) {
339
+ partPayloads.push(normalized);
340
+ }
341
+ }
342
+ if (messageId) {
343
+ const partDir = path.join(this.storageDir, "part", messageId);
344
+ if (fs.existsSync(partDir)) {
345
+ const partFiles = fs
346
+ .readdirSync(partDir)
347
+ .filter((name) => name.endsWith(".json"))
348
+ .map((name) => path.join(partDir, name))
349
+ .sort();
350
+ for (const partFile of partFiles) {
351
+ try {
352
+ const parsed = JSON.parse(fs.readFileSync(partFile, "utf-8"));
353
+ const normalized = this.parsePartPayload(parsed.data ?? parsed);
354
+ if (normalized) {
355
+ partPayloads.push(normalized);
356
+ }
357
+ }
358
+ catch {
359
+ // Skip malformed part files.
360
+ }
361
+ }
362
+ }
363
+ }
364
+ const textParts = [];
365
+ for (const part of partPayloads) {
366
+ if (part.type === "text") {
367
+ const text = this.firstString(part.text, part.content);
368
+ if (text) {
369
+ textParts.push(text);
370
+ }
371
+ continue;
372
+ }
373
+ if (part.type === "tool-invocation") {
374
+ const toolName = this.firstString(part.toolName, part.name) || "Tool";
375
+ messages.push({
376
+ role: "tool",
377
+ content: this.serializeUnknown(part.args ?? part.input ?? {}),
378
+ toolName,
379
+ timestamp: messageTimestamp,
380
+ });
381
+ collector.record(this.summaryName(toolName), this.summarySample(toolName, part.args ?? part.input));
382
+ const change = this.fileChangeFromTool(toolName, part.args ?? part.input, part.result);
383
+ if (change) {
384
+ fileChanges.set(change.path, change);
385
+ }
386
+ if (part.result != null) {
387
+ messages.push({
388
+ role: "tool",
389
+ content: this.serializeUnknown(part.result),
390
+ timestamp: messageTimestamp,
391
+ });
392
+ }
393
+ }
394
+ }
395
+ const text = textParts.join("\n").trim();
396
+ if (text) {
397
+ messages.push({
398
+ role,
399
+ content: text,
400
+ timestamp: messageTimestamp,
401
+ });
402
+ if (role === "assistant") {
403
+ lastAssistantMessage = text;
404
+ }
405
+ }
406
+ }
407
+ const projectPath = this.firstString(sessionPayload.directory) || process.cwd();
408
+ return this.buildCapturedSession({
409
+ sessionId: resolvedSessionId,
410
+ messages,
411
+ fileChanges,
412
+ collector,
413
+ totalTokens,
414
+ sessionStartedAt,
415
+ lastAssistantMessage,
416
+ projectPath,
417
+ });
418
+ }
419
+ async buildCapturedSession(args) {
420
+ const projectContext = await extractProjectContext(args.projectPath);
421
+ const analysis = analyzeConversation(args.messages);
422
+ const session = {
423
+ version: "1.0",
424
+ source: this.agentId,
425
+ capturedAt: new Date().toISOString(),
426
+ sessionId: args.sessionId,
427
+ sessionStartedAt: args.sessionStartedAt,
428
+ project: {
429
+ ...projectContext,
430
+ path: projectContext.path || args.projectPath,
431
+ name: projectContext.name || path.basename(args.projectPath),
432
+ },
433
+ conversation: {
434
+ messageCount: args.messages.length,
435
+ estimatedTokens: args.totalTokens,
436
+ messages: args.messages,
437
+ },
438
+ filesChanged: Array.from(args.fileChanges.values()),
439
+ decisions: analysis.decisions,
440
+ blockers: analysis.blockers,
441
+ task: {
442
+ description: analysis.taskDescription,
443
+ completed: analysis.completedSteps,
444
+ remaining: [],
445
+ inProgress: args.lastAssistantMessage
446
+ ? args.lastAssistantMessage.slice(0, 200)
447
+ : undefined,
448
+ blockers: analysis.blockers,
449
+ },
450
+ toolActivity: args.collector.getSummaries(),
451
+ };
452
+ return validateSession(session);
453
+ }
454
+ openDatabase(dbPath) {
455
+ try {
456
+ return new Database(dbPath, { readonly: true, fileMustExist: true });
457
+ }
458
+ catch {
459
+ return null;
460
+ }
461
+ }
462
+ parseJsonObject(value) {
463
+ if (!value) {
464
+ return null;
465
+ }
466
+ if (typeof value === "object") {
467
+ return value;
468
+ }
469
+ if (typeof value === "string") {
470
+ try {
471
+ const parsed = JSON.parse(value);
472
+ if (parsed && typeof parsed === "object") {
473
+ return parsed;
474
+ }
475
+ }
476
+ catch {
477
+ return null;
478
+ }
479
+ }
480
+ return null;
481
+ }
482
+ parsePartPayload(value) {
483
+ const parsed = this.parseJsonObject(value);
484
+ if (!parsed) {
485
+ return null;
486
+ }
487
+ const type = this.firstString(parsed.type);
488
+ if (!type) {
489
+ return null;
490
+ }
491
+ if (type === "text") {
492
+ return {
493
+ type: "text",
494
+ text: this.firstString(parsed.text),
495
+ content: this.firstString(parsed.content),
496
+ };
497
+ }
498
+ if (type === "tool-invocation") {
499
+ return {
500
+ type: "tool-invocation",
501
+ toolName: this.firstString(parsed.toolName),
502
+ name: this.firstString(parsed.name),
503
+ args: parsed.args,
504
+ input: parsed.input,
505
+ result: parsed.result,
506
+ };
507
+ }
508
+ return null;
509
+ }
510
+ mapRole(value) {
511
+ const role = typeof value === "string" ? value.toLowerCase() : "";
512
+ if (role === "user") {
513
+ return "user";
514
+ }
515
+ if (role === "assistant") {
516
+ return "assistant";
517
+ }
518
+ if (role === "system" || role === "tool") {
519
+ return role;
520
+ }
521
+ return "assistant";
522
+ }
523
+ summaryName(toolNameRaw) {
524
+ const toolName = toolNameRaw.toLowerCase();
525
+ if (toolName.includes("write") ||
526
+ toolName.includes("edit") ||
527
+ toolName.includes("patch")) {
528
+ return "Edit";
529
+ }
530
+ if (toolName.includes("read") ||
531
+ toolName.includes("grep") ||
532
+ toolName.includes("glob")) {
533
+ return "Read";
534
+ }
535
+ if (toolName.includes("bash") || toolName.includes("shell")) {
536
+ return "Bash";
537
+ }
538
+ return "Tool";
539
+ }
540
+ summarySample(toolName, args) {
541
+ if (!args || typeof args !== "object") {
542
+ return toolName;
543
+ }
544
+ const payload = args;
545
+ const command = this.firstString(payload.command);
546
+ if (command) {
547
+ return command;
548
+ }
549
+ const filePath = this.firstString(payload.path, payload.file_path, payload.filePath, payload.target);
550
+ if (filePath) {
551
+ return `${toolName} ${filePath}`;
552
+ }
553
+ return toolName;
554
+ }
555
+ fileChangeFromTool(toolNameRaw, args, result) {
556
+ const payload = args && typeof args === "object" ? args : {};
557
+ const resultPayload = result && typeof result === "object" ? result : {};
558
+ const filePath = this.firstString(payload.path, payload.file_path, payload.filePath, resultPayload.filePath, resultPayload.file_path);
559
+ if (!filePath) {
560
+ return null;
561
+ }
562
+ const toolName = toolNameRaw.toLowerCase();
563
+ const changeType = toolName.includes("create") || toolName.includes("write")
564
+ ? "created"
565
+ : toolName.includes("delete") || toolName.includes("remove")
566
+ ? "deleted"
567
+ : "modified";
568
+ const diff = this.firstString(payload.content, payload.new_content, payload.diff, resultPayload.diff);
569
+ const ext = path.extname(filePath).slice(1);
570
+ return {
571
+ path: filePath,
572
+ changeType,
573
+ diff,
574
+ language: ext || undefined,
575
+ };
576
+ }
577
+ extractUsageTokens(usage) {
578
+ if (!usage || typeof usage !== "object") {
579
+ return 0;
580
+ }
581
+ const payload = usage;
582
+ const input = this.toNumber(payload.input_tokens ?? payload.inputTokens ?? payload.prompt_tokens);
583
+ const output = this.toNumber(payload.output_tokens ??
584
+ payload.outputTokens ??
585
+ payload.completion_tokens ??
586
+ payload.total_tokens);
587
+ return (input || 0) + (output || 0);
588
+ }
589
+ normalizeTimestamp(value) {
590
+ if (typeof value === "number" && Number.isFinite(value)) {
591
+ return new Date(value).toISOString();
592
+ }
593
+ if (typeof value === "string" && value.trim()) {
594
+ const ts = Date.parse(value);
595
+ if (!Number.isNaN(ts)) {
596
+ return new Date(ts).toISOString();
597
+ }
598
+ }
599
+ return undefined;
600
+ }
601
+ normalizeTimestampFromMs(value) {
602
+ if (!Number.isFinite(value)) {
603
+ return undefined;
604
+ }
605
+ return new Date(value).toISOString();
606
+ }
607
+ toNumber(value) {
608
+ if (typeof value === "number" && Number.isFinite(value)) {
609
+ return value;
610
+ }
611
+ if (typeof value === "string") {
612
+ const parsed = Number(value);
613
+ if (Number.isFinite(parsed)) {
614
+ return parsed;
615
+ }
616
+ }
617
+ return undefined;
618
+ }
619
+ firstString(...values) {
620
+ for (const value of values) {
621
+ if (typeof value === "string" && value.trim()) {
622
+ return value.trim();
623
+ }
624
+ }
625
+ return undefined;
626
+ }
627
+ serializeUnknown(value) {
628
+ if (typeof value === "string") {
629
+ return value;
630
+ }
631
+ try {
632
+ return JSON.stringify(value);
633
+ }
634
+ catch {
635
+ return String(value);
636
+ }
637
+ }
638
+ pathsEqual(a, b) {
639
+ const normalize = (value) => path.resolve(value).replace(/[\\/]+/g, "/").toLowerCase();
640
+ return normalize(a) === normalize(b);
641
+ }
642
+ }
643
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/opencode/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAS3D,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC9C,OAAO,GAAY,UAAU,CAAC;IAE9B,IAAY,OAAO;QACjB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,GACR,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,CAAC,OAAO,EAAE,EACZ,SAAS,EACT,qBAAqB,EACrB,UAAU,CACX,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAED,IAAY,UAAU;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAChD,CAAC;IAED,IAAY,UAAU;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE;YAC9C,GAAG,EAAE,IAAI,CAAC,UAAU;YACpB,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,WAAoB;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACxD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC7B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,WAAoB;QACtC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,WAAW;gBACT,CAAC,CAAC,2CAA2C,WAAW,EAAE;gBAC1D,CAAC,CAAC,4BAA4B,CACjC,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;IAEO,kBAAkB,CAAC,WAAoB;QAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE;iBACZ,OAAO,CACN,iGAAiG,CAClG;iBACA,GAAG,EAMJ,CAAC;YAEH,MAAM,QAAQ,GAAG,IAAI;iBAClB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACX,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC5D,MAAM,YAAY,GAChB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;gBACzD,OAAO;oBACL,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClB,SAAS;oBACT,YAAY;oBACZ,WAAW,EAAE,mBAAmB;oBAChC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;iBACtB,CAAC;YACnB,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;gBAClB,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;oBACzB,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;YAEL,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,WAAoB;QACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE;YAC3C,GAAG,EAAE,IAAI,CAAC,UAAU;YACpB,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,MAAM,QAAQ,GAA+C,EAAE,CAAC;QAChE,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,IAAI,OAA4B,CAAC;YACjC,IAAI,CAAC;gBACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAwB,CAAC;YAClF,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACzE,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,SAAS;YACX,CAAC;YACD,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChE,IAAI,WAAW,IAAI,mBAAmB,EAAE,CAAC;gBACvC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,mBAAmB,CAAC,EAAE,CAAC;oBACvD,SAAS;gBACX,CAAC;YACH,CAAC;iBAAM,IAAI,WAAW,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC/C,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAChE,MAAM,YAAY,GAChB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC;gBAC7C,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;gBAC5D,SAAS,CAAC;YACZ,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,SAAS,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;YAEnE,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE;gBACF,SAAS;gBACT,YAAY;gBACZ,WAAW,EAAE,mBAAmB;gBAChC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;gBACxC,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QACnD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,SAAiB;QAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,EAAE;iBAClB,OAAO,CACN,yHAAyH,CAC1H;iBACA,GAAG,CAAC,SAAS,EAAE,SAAS,CAUd,CAAC;YAEd,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACzD,IAAI,CAAC,WAAW,IAAI,UAAU,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;gBAClD,MAAM,UAAU,GAAG,EAAE;qBAClB,OAAO,CAAC,mDAAmD,CAAC;qBAC5D,GAAG,CAAC,UAAU,CAAC,UAAU,CAAsC,CAAC;gBACnE,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACzC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;YAClD,MAAM,QAAQ,GAA0B,EAAE,CAAC;YAC3C,IAAI,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YACxE,IAAI,oBAAoB,GAAG,EAAE,CAAC;YAC9B,IAAI,WAAW,GAAG,CAAC,CAAC;YAEpB,MAAM,WAAW,GAAG,EAAE;iBACnB,OAAO,CACN,uFAAuF,CACxF;iBACA,GAAG,CAAC,UAAU,CAAC,EAAE,CAIlB,CAAC;YAEH,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACnD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBAC7C,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACnE,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,EAAE,CAAC;oBAC1C,gBAAgB,GAAG,gBAAgB,CAAC;gBACtC,CAAC;gBACD,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBAE3D,MAAM,QAAQ,GAAG,EAAE;qBAChB,OAAO,CACN,gFAAgF,CACjF;qBACA,GAAG,CAAC,GAAG,CAAC,EAAE,CAA6D,CAAC;gBAE3E,MAAM,SAAS,GAAa,EAAE,CAAC;gBAC/B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,SAAS;oBACX,CAAC;oBACD,MAAM,aAAa,GACjB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,gBAAgB,CAAC;oBAEpE,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;wBAC/D,IAAI,IAAI,EAAE,CAAC;4BACT,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACvB,CAAC;wBACD,SAAS;oBACX,CAAC;oBAED,IAAI,QAAQ,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;wBACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;wBAC9E,QAAQ,CAAC,IAAI,CAAC;4BACZ,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;4BACrE,QAAQ;4BACR,SAAS,EAAE,aAAa;yBACzB,CAAC,CAAC;wBAEH,SAAS,CAAC,MAAM,CACd,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAC1B,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,CAC9D,CAAC;wBAEF,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CACpC,QAAQ,EACR,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,EAC/B,QAAQ,CAAC,MAAM,CAChB,CAAC;wBACF,IAAI,MAAM,EAAE,CAAC;4BACX,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;wBACvC,CAAC;wBAED,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;4BAC5B,QAAQ,CAAC,IAAI,CAAC;gCACZ,IAAI,EAAE,MAAM;gCACZ,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC;gCAC/C,SAAS,EAAE,aAAa;6BACzB,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzC,IAAI,IAAI,EAAE,CAAC;oBACT,QAAQ,CAAC,IAAI,CAAC;wBACZ,IAAI;wBACJ,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,gBAAgB;qBAC5B,CAAC,CAAC;oBACH,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;wBACzB,oBAAoB,GAAG,IAAI,CAAC;oBAC9B,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC,oBAAoB,CAAC;gBAC/B,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChC,QAAQ;gBACR,WAAW;gBACX,SAAS;gBACT,WAAW;gBACX,gBAAgB;gBAChB,oBAAoB;gBACpB,WAAW,EAAE,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE;aAC1C,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,SAAiB;QAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE;YAClD,GAAG,EAAE,IAAI,CAAC,UAAU;YACpB,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,IAAI,cAAc,GAA+B,IAAI,CAAC;QACtD,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpC,IAAI,MAA2B,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAwB,CAAC;YACjF,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACtE,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACrB,cAAc,GAAG,MAAM,CAAC;gBACxB,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,iBAAiB,GACrB,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,EAAE,cAAc,CAAC,SAAS,EAAE,cAAc,CAAC,IAAI,CAAC;YAClF,SAAS,CAAC;QACZ,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;QAClD,MAAM,QAAQ,GAA0B,EAAE,CAAC;QAE3C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAC5E,MAAM,YAAY,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YAC5C,CAAC,CAAC,EAAE;iBACC,WAAW,CAAC,UAAU,CAAC;iBACvB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;iBACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC/C,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,cAAc,GAAG,YAAY;aAChC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAChB,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAwB,CAAC;YAC/E,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,KAAK,EAAgC,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;aAC/D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACb,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1D,OAAO,GAAG,GAAG,GAAG,CAAC;QACnB,CAAC,CAAC,CAAC;QAEL,IAAI,gBAAoC,CAAC;QACzC,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,oBAAoB,GAAG,EAAE,CAAC;QAE9B,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAK,GAA+B,CAAC;YACvF,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACnE,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,EAAE,CAAC;gBAC1C,gBAAgB,GAAG,gBAAgB,CAAC;YACtC,CAAC;YACD,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAE1D,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,MAAM,YAAY,GAAuB,EAAE,CAAC;YAC5C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACrC,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;gBACrD,IAAI,UAAU,EAAE,CAAC;oBACf,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;YAED,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC9D,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3B,MAAM,SAAS,GAAG,EAAE;yBACjB,WAAW,CAAC,OAAO,CAAC;yBACpB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;yBACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;yBACvC,IAAI,EAAE,CAAC;oBACV,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;wBACjC,IAAI,CAAC;4BACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CACvB,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CACf,CAAC;4BACtB,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;4BAChE,IAAI,UAAU,EAAE,CAAC;gCACf,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;4BAChC,CAAC;wBACH,CAAC;wBAAC,MAAM,CAAC;4BACP,6BAA6B;wBAC/B,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;gBAChC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACzB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;oBACvD,IAAI,IAAI,EAAE,CAAC;wBACT,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvB,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;oBACtE,QAAQ,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;wBAC7D,QAAQ;wBACR,SAAS,EAAE,gBAAgB;qBAC5B,CAAC,CAAC;oBACH,SAAS,CAAC,MAAM,CACd,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAC1B,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CACtD,CAAC;oBACF,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CACpC,QAAQ,EACR,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EACvB,IAAI,CAAC,MAAM,CACZ,CAAC;oBACF,IAAI,MAAM,EAAE,CAAC;wBACX,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBACvC,CAAC;oBACD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;wBACxB,QAAQ,CAAC,IAAI,CAAC;4BACZ,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC;4BAC3C,SAAS,EAAE,gBAAgB;yBAC5B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACzC,IAAI,IAAI,EAAE,CAAC;gBACT,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI;oBACJ,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,gBAAgB;iBAC5B,CAAC,CAAC;gBACH,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;oBACzB,oBAAoB,GAAG,IAAI,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GACf,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAE9D,OAAO,IAAI,CAAC,oBAAoB,CAAC;YAC/B,SAAS,EAAE,iBAAiB;YAC5B,QAAQ;YACR,WAAW;YACX,SAAS;YACT,WAAW;YACX,gBAAgB;YAChB,oBAAoB;YACpB,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,IASlC;QACC,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEpD,MAAM,OAAO,GAAoB;YAC/B,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,OAAO,EAAE;gBACP,GAAG,cAAc;gBACjB,IAAI,EAAE,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;gBAC7C,IAAI,EAAE,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;aAC7D;YACD,YAAY,EAAE;gBACZ,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;gBAClC,eAAe,EAAE,IAAI,CAAC,WAAW;gBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB;YACD,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACnD,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,IAAI,EAAE;gBACJ,WAAW,EAAE,QAAQ,CAAC,eAAe;gBACrC,SAAS,EAAE,QAAQ,CAAC,cAAc;gBAClC,SAAS,EAAE,EAAE;gBACb,UAAU,EAAE,IAAI,CAAC,oBAAoB;oBACnC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;oBACzC,CAAC,CAAC,SAAS;gBACb,QAAQ,EAAE,QAAQ,CAAC,QAAQ;aAC5B;YACD,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;SAC5C,CAAC;QAEF,OAAO,eAAe,CAAC,OAAO,CAAoB,CAAC;IACrD,CAAC;IAEO,YAAY,CAAC,MAAc;QACjC,IAAI,CAAC;YACH,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,KAAc;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAgC,CAAC;QAC1C,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACjC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACzC,OAAO,MAAiC,CAAC;gBAC3C,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,gBAAgB,CAAC,KAAc;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;gBACnC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;aAC1C,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC/B,OAAO;gBACL,IAAI,EAAE,iBAAiB;gBACvB,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAC3C,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;gBACnC,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,OAAO,CAAC,KAAc;QAC5B,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,WAAW,CAAC,WAAmB;QACrC,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAC3C,IACE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1B,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;YACzB,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC1B,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IACE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;YACzB,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;YACzB,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EACzB,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5D,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,aAAa,CAAC,QAAgB,EAAE,IAAa;QACnD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,OAAO,GAAG,IAA+B,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAC/B,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,MAAM,CACf,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,kBAAkB,CACxB,WAAmB,EACnB,IAAa,EACb,MAAe;QAEf,MAAM,OAAO,GACX,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAgC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,aAAa,GACjB,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAkC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAC/B,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,QAAQ,EAChB,aAAa,CAAC,QAAQ,EACtB,aAAa,CAAC,SAAS,CACxB,CAAC;QACF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,UAAU,GACd,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;YACvD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC1D,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,UAAU,CAAC;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAC3B,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,IAAI,EACZ,aAAa,CAAC,IAAI,CACnB,CAAC;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5C,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU;YACV,IAAI;YACJ,QAAQ,EAAE,GAAG,IAAI,SAAS;SAC3B,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,KAAc;QACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,OAAO,GAAG,KAAgC,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CACzB,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,aAAa,CACrE,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAC1B,OAAO,CAAC,aAAa;YACnB,OAAO,CAAC,YAAY;YACpB,OAAO,CAAC,iBAAiB;YACzB,OAAO,CAAC,YAAY,CACvB,CAAC;QACF,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAEO,kBAAkB,CAAC,KAAc;QACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACxD,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBACtB,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YACpC,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,wBAAwB,CAAC,KAAa;QAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACvC,CAAC;IAEO,QAAQ,CAAC,KAAc;QAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACxD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,WAAW,CAAC,GAAG,MAAiB;QACtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,gBAAgB,CAAC,KAAc;QACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,CAAS,EAAE,CAAS;QACrC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,EAAE,CAClC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;CAEF"}