@ellery/terminal-mcp 0.2.1 → 0.2.2

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 (75) hide show
  1. package/README.md +151 -5
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +2 -61
  4. package/dist/client.js.map +1 -1
  5. package/dist/index.js +235 -13
  6. package/dist/index.js.map +1 -1
  7. package/dist/recording/index.d.ts +4 -0
  8. package/dist/recording/index.d.ts.map +1 -0
  9. package/dist/recording/index.js +3 -0
  10. package/dist/recording/index.js.map +1 -0
  11. package/dist/recording/manager.d.ts +62 -0
  12. package/dist/recording/manager.d.ts.map +1 -0
  13. package/dist/recording/manager.js +123 -0
  14. package/dist/recording/manager.js.map +1 -0
  15. package/dist/recording/recorder.d.ts +95 -0
  16. package/dist/recording/recorder.d.ts.map +1 -0
  17. package/dist/recording/recorder.js +296 -0
  18. package/dist/recording/recorder.js.map +1 -0
  19. package/dist/recording/types.d.ts +65 -0
  20. package/dist/recording/types.d.ts.map +1 -0
  21. package/dist/recording/types.js +2 -0
  22. package/dist/recording/types.js.map +1 -0
  23. package/dist/sandbox/config.d.ts +46 -0
  24. package/dist/sandbox/config.d.ts.map +1 -0
  25. package/dist/sandbox/config.js +144 -0
  26. package/dist/sandbox/config.js.map +1 -0
  27. package/dist/sandbox/controller.d.ts +72 -0
  28. package/dist/sandbox/controller.d.ts.map +1 -0
  29. package/dist/sandbox/controller.js +208 -0
  30. package/dist/sandbox/controller.js.map +1 -0
  31. package/dist/sandbox/index.d.ts +6 -0
  32. package/dist/sandbox/index.d.ts.map +1 -0
  33. package/dist/sandbox/index.js +4 -0
  34. package/dist/sandbox/index.js.map +1 -0
  35. package/dist/sandbox/prompt.d.ts +10 -0
  36. package/dist/sandbox/prompt.d.ts.map +1 -0
  37. package/dist/sandbox/prompt.js +434 -0
  38. package/dist/sandbox/prompt.js.map +1 -0
  39. package/dist/terminal/index.d.ts +1 -0
  40. package/dist/terminal/index.d.ts.map +1 -1
  41. package/dist/terminal/manager.d.ts +58 -3
  42. package/dist/terminal/manager.d.ts.map +1 -1
  43. package/dist/terminal/manager.js +118 -3
  44. package/dist/terminal/manager.js.map +1 -1
  45. package/dist/terminal/session.d.ts +21 -1
  46. package/dist/terminal/session.d.ts.map +1 -1
  47. package/dist/terminal/session.js +44 -3
  48. package/dist/terminal/session.js.map +1 -1
  49. package/dist/tools/definitions.d.ts +18 -0
  50. package/dist/tools/definitions.d.ts.map +1 -0
  51. package/dist/tools/definitions.js +110 -0
  52. package/dist/tools/definitions.js.map +1 -0
  53. package/dist/tools/index.d.ts.map +1 -1
  54. package/dist/tools/index.js +7 -1
  55. package/dist/tools/index.js.map +1 -1
  56. package/dist/tools/startRecording.d.ts +68 -0
  57. package/dist/tools/startRecording.d.ts.map +1 -0
  58. package/dist/tools/startRecording.js +111 -0
  59. package/dist/tools/startRecording.js.map +1 -0
  60. package/dist/tools/stopRecording.d.ts +31 -0
  61. package/dist/tools/stopRecording.d.ts.map +1 -0
  62. package/dist/tools/stopRecording.js +76 -0
  63. package/dist/tools/stopRecording.js.map +1 -0
  64. package/dist/transport/socket.d.ts.map +1 -1
  65. package/dist/transport/socket.js +10 -0
  66. package/dist/transport/socket.js.map +1 -1
  67. package/dist/ui/index.d.ts +1 -0
  68. package/dist/ui/index.d.ts.map +1 -1
  69. package/dist/ui/index.js +17 -1
  70. package/dist/ui/index.js.map +1 -1
  71. package/dist/utils/platform.d.ts +6 -0
  72. package/dist/utils/platform.d.ts.map +1 -1
  73. package/dist/utils/platform.js +15 -0
  74. package/dist/utils/platform.js.map +1 -1
  75. package/package.json +3 -2
@@ -0,0 +1,434 @@
1
+ // ANSI escape codes
2
+ const ESC = "\x1b";
3
+ const CURSOR_HIDE = `${ESC}[?25l`;
4
+ const CURSOR_SHOW = `${ESC}[?25h`;
5
+ const CLEAR_TO_END = `${ESC}[J`;
6
+ const CURSOR_UP = (n) => `${ESC}[${n}A`;
7
+ const CURSOR_TO_COL_1 = `${ESC}[1G`;
8
+ // Colors
9
+ const BOLD = `${ESC}[1m`;
10
+ const DIM = `${ESC}[2m`;
11
+ const RESET = `${ESC}[0m`;
12
+ const CYAN = `${ESC}[36m`;
13
+ const GREEN = `${ESC}[32m`;
14
+ const RED = `${ESC}[31m`;
15
+ const YELLOW = `${ESC}[38;2;255;255;0m`;
16
+ const BG_BLUE = `${ESC}[44m`;
17
+ const WHITE = `${ESC}[97m`;
18
+ const MAGENTA = `${ESC}[35m`;
19
+ // Box drawing characters
20
+ const BOX = {
21
+ topLeft: "╭",
22
+ topRight: "╮",
23
+ bottomLeft: "╰",
24
+ bottomRight: "╯",
25
+ horizontal: "─",
26
+ vertical: "│",
27
+ };
28
+ function isSelectable(item) {
29
+ return item.type === "path" || item.type === "network" || item.type === "add";
30
+ }
31
+ /**
32
+ * Interactive permission selection prompt
33
+ */
34
+ export async function promptForPermissions() {
35
+ // If not a TTY, return defaults
36
+ if (!process.stdin.isTTY) {
37
+ console.log("[terminal-mcp] Non-interactive mode, using default sandbox permissions");
38
+ return getDefaultFromItems(createDefaultItems());
39
+ }
40
+ const items = createDefaultItems();
41
+ let selectedPos = 0;
42
+ let scrollOffset = 0;
43
+ const maxVisible = 18;
44
+ const boxWidth = 58;
45
+ // Input mode state
46
+ let inputMode = false;
47
+ let inputBuffer = "";
48
+ let inputAccessLevel = "blocked";
49
+ const getSelectableIndices = () => items.map((item, i) => (isSelectable(item) ? i : -1)).filter((i) => i >= 0);
50
+ return new Promise((resolve, reject) => {
51
+ process.stdin.setRawMode(true);
52
+ process.stdin.resume();
53
+ process.stdin.setEncoding("utf8");
54
+ process.stdout.write(CURSOR_HIDE);
55
+ // Track lines written for proper redraw
56
+ let lastOutputLineCount = 0;
57
+ const getSelectedIndex = () => {
58
+ const indices = getSelectableIndices();
59
+ return indices[Math.min(selectedPos, indices.length - 1)];
60
+ };
61
+ const cycleAccess = (item, direction) => {
62
+ if (item.type === "path") {
63
+ const levels = ["read-write", "read-only", "blocked"];
64
+ const current = levels.indexOf(item.access);
65
+ const next = (current + direction + levels.length) % levels.length;
66
+ item.access = levels[next];
67
+ }
68
+ else {
69
+ item.access = item.access === "allowed" ? "blocked" : "allowed";
70
+ }
71
+ };
72
+ const formatAccess = (item) => {
73
+ if (item.type === "path") {
74
+ switch (item.access) {
75
+ case "read-write":
76
+ return `${GREEN}Read/Write${RESET}`;
77
+ case "read-only":
78
+ return `${CYAN}Read-Only ${RESET}`;
79
+ case "blocked":
80
+ return `${RED}Blocked ${RESET}`;
81
+ }
82
+ }
83
+ else {
84
+ return item.access === "allowed"
85
+ ? `${GREEN}Allowed${RESET}`
86
+ : `${RED}Blocked${RESET}`;
87
+ }
88
+ };
89
+ const formatInputAccess = (access) => {
90
+ switch (access) {
91
+ case "read-write":
92
+ return `${GREEN}Read/Write${RESET}`;
93
+ case "read-only":
94
+ return `${CYAN}Read-Only${RESET}`;
95
+ case "blocked":
96
+ return `${RED}Blocked${RESET}`;
97
+ }
98
+ };
99
+ const render = () => {
100
+ // Move cursor up to overwrite previous output
101
+ if (lastOutputLineCount > 0) {
102
+ process.stdout.write(CURSOR_UP(lastOutputLineCount) + CURSOR_TO_COL_1);
103
+ }
104
+ process.stdout.write(CLEAR_TO_END);
105
+ const lines = [];
106
+ lines.push("");
107
+ if (inputMode) {
108
+ // Input mode UI
109
+ lines.push(`${BOLD}Add Custom Path${RESET}`);
110
+ lines.push("");
111
+ lines.push(`${DIM}Enter path (e.g., ~/myproject, /var/data):${RESET}`);
112
+ lines.push("");
113
+ lines.push(` ${WHITE}▸ ${inputBuffer}${BOLD}_${RESET}`);
114
+ lines.push("");
115
+ lines.push(` Access: [${formatInputAccess(inputAccessLevel)}] ${DIM}(←→ to change)${RESET}`);
116
+ lines.push("");
117
+ lines.push(`${DIM}ENTER to add | ESC to cancel${RESET}`);
118
+ lines.push("");
119
+ }
120
+ else {
121
+ // Normal mode UI
122
+ lines.push(`${DIM} ↑↓ move ←→ cycle ENTER confirm q quit${RESET}`);
123
+ lines.push("");
124
+ const selectedIndex = getSelectedIndex();
125
+ // Adjust scroll
126
+ let selectedLinePos = 0;
127
+ for (let i = 0; i < selectedIndex; i++) {
128
+ selectedLinePos++;
129
+ }
130
+ if (selectedLinePos < scrollOffset) {
131
+ scrollOffset = Math.max(0, selectedLinePos - 1);
132
+ }
133
+ else if (selectedLinePos >= scrollOffset + maxVisible) {
134
+ scrollOffset = selectedLinePos - maxVisible + 2;
135
+ }
136
+ if (scrollOffset > 0) {
137
+ lines.push(`${DIM} ↑ scroll up for more${RESET}`);
138
+ }
139
+ let lineCount = 0;
140
+ for (let i = 0; i < items.length; i++) {
141
+ if (lineCount < scrollOffset) {
142
+ lineCount++;
143
+ continue;
144
+ }
145
+ if (lineCount >= scrollOffset + maxVisible) {
146
+ break;
147
+ }
148
+ lineCount++;
149
+ const item = items[i];
150
+ const isSelected = i === selectedIndex;
151
+ if (item.type === "header") {
152
+ lines.push(`${CYAN} ${item.label}${RESET}`);
153
+ }
154
+ else if (item.type === "add") {
155
+ if (isSelected) {
156
+ lines.push(` ${BG_BLUE}${WHITE}▸${RESET} ${MAGENTA}${BOLD}+ ${item.label}${RESET}`);
157
+ }
158
+ else {
159
+ lines.push(` ${MAGENTA}+ ${item.label}${RESET}`);
160
+ }
161
+ }
162
+ else {
163
+ const accessStr = formatAccess(item);
164
+ const isCustom = item.type === "path" && item.custom;
165
+ const labelBase = isCustom ? `${item.label} ${DIM}*${RESET}` : item.label;
166
+ const label = item.label.padEnd(28);
167
+ if (isSelected) {
168
+ lines.push(` ${BG_BLUE}${WHITE}▸${RESET} ${BOLD}${label}${RESET} [${accessStr}]${isCustom ? ` ${DIM}*${RESET}` : ""}`);
169
+ }
170
+ else {
171
+ lines.push(` ${label} [${accessStr}]${isCustom ? ` ${DIM}*${RESET}` : ""}`);
172
+ }
173
+ }
174
+ }
175
+ if (scrollOffset + maxVisible < items.length) {
176
+ lines.push(`${DIM} ↓ scroll down for more${RESET}`);
177
+ }
178
+ lines.push("");
179
+ }
180
+ const output = drawBox(lines, inputMode ? "Add Custom Path" : "Sandbox Permissions", boxWidth);
181
+ const outputWithNewlines = "\n" + output + "\n";
182
+ lastOutputLineCount = outputWithNewlines.split("\n").length - 1;
183
+ process.stdout.write(outputWithNewlines);
184
+ };
185
+ const drawBox = (lines, title, width) => {
186
+ const output = [];
187
+ const titleText = ` ${title} `;
188
+ const leftPad = Math.floor((width - 2 - titleText.length) / 2);
189
+ const rightPad = width - 2 - leftPad - titleText.length;
190
+ output.push(`${YELLOW}${BOX.topLeft}${BOX.horizontal.repeat(leftPad)}${WHITE}${BOLD}${titleText}${RESET}${YELLOW}${BOX.horizontal.repeat(rightPad)}${BOX.topRight}${RESET}`);
191
+ for (const line of lines) {
192
+ const plainText = line.replace(/\x1b\[[0-9;]*m/g, "");
193
+ const padding = width - 2 - plainText.length;
194
+ output.push(`${YELLOW}${BOX.vertical}${RESET}${line}${" ".repeat(Math.max(0, padding))}${YELLOW}${BOX.vertical}${RESET}`);
195
+ }
196
+ output.push(`${YELLOW}${BOX.bottomLeft}${BOX.horizontal.repeat(width - 2)}${BOX.bottomRight}${RESET}`);
197
+ return output.join("\n");
198
+ };
199
+ const cleanup = () => {
200
+ process.stdin.setRawMode(false);
201
+ process.stdin.pause();
202
+ process.stdin.removeAllListeners("data");
203
+ // Clear the modal output
204
+ if (lastOutputLineCount > 0) {
205
+ process.stdout.write(CURSOR_UP(lastOutputLineCount) + CURSOR_TO_COL_1 + CLEAR_TO_END);
206
+ }
207
+ process.stdout.write(CURSOR_SHOW);
208
+ };
209
+ const addCustomPath = () => {
210
+ if (inputBuffer.trim()) {
211
+ const path = inputBuffer.trim();
212
+ // Find the "Add custom path" item and insert before it
213
+ const addIndex = items.findIndex((i) => i.type === "add");
214
+ // Check if custom header exists, if not add it
215
+ const customHeaderIndex = items.findIndex((i) => i.type === "header" && i.label === "Custom Paths:");
216
+ if (customHeaderIndex === -1) {
217
+ // Insert custom header and path before "Add custom path"
218
+ items.splice(addIndex, 0, { type: "header", label: "Custom Paths:" });
219
+ items.splice(addIndex + 1, 0, {
220
+ type: "path",
221
+ label: path,
222
+ paths: [path],
223
+ access: inputAccessLevel,
224
+ custom: true,
225
+ });
226
+ }
227
+ else {
228
+ // Insert before "Add custom path"
229
+ items.splice(addIndex, 0, {
230
+ type: "path",
231
+ label: path,
232
+ paths: [path],
233
+ access: inputAccessLevel,
234
+ custom: true,
235
+ });
236
+ }
237
+ }
238
+ inputMode = false;
239
+ inputBuffer = "";
240
+ inputAccessLevel = "blocked";
241
+ };
242
+ const handleKey = (key) => {
243
+ if (inputMode) {
244
+ // Input mode key handling
245
+ if (key === "\x1b" || key === "\x03") {
246
+ // ESC or Ctrl+C - cancel input
247
+ inputMode = false;
248
+ inputBuffer = "";
249
+ inputAccessLevel = "blocked";
250
+ }
251
+ else if (key === "\r" || key === "\n") {
252
+ // Enter - add the path
253
+ addCustomPath();
254
+ }
255
+ else if (key === "\x7f" || key === "\b") {
256
+ // Backspace
257
+ inputBuffer = inputBuffer.slice(0, -1);
258
+ }
259
+ else if (key === "\x1b[C") {
260
+ // Right arrow - cycle access forward
261
+ const levels = ["read-write", "read-only", "blocked"];
262
+ const current = levels.indexOf(inputAccessLevel);
263
+ inputAccessLevel = levels[(current + 1) % levels.length];
264
+ }
265
+ else if (key === "\x1b[D") {
266
+ // Left arrow - cycle access backward
267
+ const levels = ["read-write", "read-only", "blocked"];
268
+ const current = levels.indexOf(inputAccessLevel);
269
+ inputAccessLevel = levels[(current - 1 + levels.length) % levels.length];
270
+ }
271
+ else if (key.length === 1 && key >= " " && key <= "~") {
272
+ // Printable character
273
+ inputBuffer += key;
274
+ }
275
+ else {
276
+ return;
277
+ }
278
+ render();
279
+ return;
280
+ }
281
+ // Normal mode key handling
282
+ const selectableIndices = getSelectableIndices();
283
+ const selectedIndex = getSelectedIndex();
284
+ const item = items[selectedIndex];
285
+ if (key === "\x1b[A" || key === "k") {
286
+ // Up
287
+ selectedPos = Math.max(0, selectedPos - 1);
288
+ }
289
+ else if (key === "\x1b[B" || key === "j") {
290
+ // Down
291
+ selectedPos = Math.min(selectableIndices.length - 1, selectedPos + 1);
292
+ }
293
+ else if (key === " " || key === "\x1b[C" || key === "l") {
294
+ // Space or Right - cycle forward or activate add
295
+ if (item.type === "add") {
296
+ inputMode = true;
297
+ inputBuffer = "";
298
+ inputAccessLevel = "blocked";
299
+ }
300
+ else if (item.type === "path" || item.type === "network") {
301
+ cycleAccess(item, 1);
302
+ }
303
+ }
304
+ else if (key === "\x1b[D" || key === "h") {
305
+ // Left - cycle backward
306
+ if (item.type === "path" || item.type === "network") {
307
+ cycleAccess(item, -1);
308
+ }
309
+ }
310
+ else if (key === "\r" || key === "\n") {
311
+ // Enter - confirm or activate add
312
+ if (item.type === "add") {
313
+ inputMode = true;
314
+ inputBuffer = "";
315
+ inputAccessLevel = "blocked";
316
+ }
317
+ else {
318
+ cleanup();
319
+ const permissions = getDefaultFromItems(items);
320
+ console.log(`${GREEN}Sandbox configured.${RESET}\n`);
321
+ resolve(permissions);
322
+ return;
323
+ }
324
+ }
325
+ else if (key === "q" || key === "\x03") {
326
+ // q or Ctrl+C - quit
327
+ cleanup();
328
+ reject(new Error("cancelled"));
329
+ return;
330
+ }
331
+ else if (key === "d" || key === "\x1b[3~") {
332
+ // d or Delete - remove custom item
333
+ if (item.type === "path" && item.custom) {
334
+ const idx = items.indexOf(item);
335
+ items.splice(idx, 1);
336
+ // Remove "Custom Paths:" header if no more custom items
337
+ const hasCustomItems = items.some((i) => i.type === "path" && i.custom);
338
+ if (!hasCustomItems) {
339
+ const headerIdx = items.findIndex((i) => i.type === "header" && i.label === "Custom Paths:");
340
+ if (headerIdx !== -1) {
341
+ items.splice(headerIdx, 1);
342
+ }
343
+ }
344
+ // Adjust selected position
345
+ const newSelectableIndices = getSelectableIndices();
346
+ selectedPos = Math.min(selectedPos, newSelectableIndices.length - 1);
347
+ }
348
+ }
349
+ else {
350
+ return;
351
+ }
352
+ render();
353
+ };
354
+ render();
355
+ process.stdin.on("data", handleKey);
356
+ });
357
+ }
358
+ function createDefaultItems() {
359
+ return [
360
+ { type: "header", label: "Core Paths:" },
361
+ { type: "path", label: "Current directory", paths: ["."], access: "read-write" },
362
+ { type: "path", label: "/tmp", paths: ["/tmp"], access: "read-write" },
363
+ { type: "header", label: "Shell & Caches:" },
364
+ { type: "path", label: "~/.cache, ~/.local", paths: ["~/.cache", "~/.local"], access: "read-write" },
365
+ { type: "path", label: "Shell history files", paths: ["~/.zsh_history", "~/.bash_history", "~/.node_repl_history", "~/.python_history"], access: "read-write" },
366
+ { type: "header", label: "Package Managers:" },
367
+ { type: "path", label: "~/.npm, ~/.yarn, ~/.pnpm", paths: ["~/.npm", "~/.yarn", "~/.pnpm", "~/.bun"], access: "read-write" },
368
+ { type: "path", label: "~/.cargo, ~/.rustup", paths: ["~/.cargo", "~/.rustup"], access: "blocked" },
369
+ { type: "path", label: "~/.nvm, ~/.pyenv, ~/.rbenv", paths: ["~/.nvm", "~/.pyenv", "~/.rbenv"], access: "blocked" },
370
+ { type: "header", label: "Home Directory:" },
371
+ { type: "path", label: "~ (general access)", paths: ["~"], access: "read-only" },
372
+ { type: "header", label: "Credentials (sensitive):" },
373
+ { type: "path", label: "~/.ssh", paths: ["~/.ssh"], access: "blocked" },
374
+ { type: "path", label: "~/.gnupg", paths: ["~/.gnupg"], access: "blocked" },
375
+ { type: "path", label: "~/.aws", paths: ["~/.aws"], access: "blocked" },
376
+ { type: "path", label: "~/.config/gcloud, ~/.azure", paths: ["~/.config/gcloud", "~/.azure", "~/.kube"], access: "blocked" },
377
+ { type: "path", label: "~/.config/gh", paths: ["~/.config/gh"], access: "blocked" },
378
+ { type: "path", label: "~/.npmrc, ~/.netrc", paths: ["~/.npmrc", "~/.netrc", "~/.docker/config.json"], access: "blocked" },
379
+ { type: "header", label: "Network:" },
380
+ { type: "network", label: "Network access", access: "allowed" },
381
+ { type: "add", label: "Add custom path..." },
382
+ ];
383
+ }
384
+ function getDefaultFromItems(items) {
385
+ const permissions = {
386
+ filesystem: {
387
+ readWrite: [],
388
+ readOnly: [],
389
+ blocked: [],
390
+ },
391
+ network: {
392
+ mode: "all",
393
+ },
394
+ };
395
+ for (const item of items) {
396
+ if (item.type === "path") {
397
+ switch (item.access) {
398
+ case "read-write":
399
+ permissions.filesystem.readWrite.push(...item.paths);
400
+ break;
401
+ case "read-only":
402
+ permissions.filesystem.readOnly.push(...item.paths);
403
+ break;
404
+ case "blocked":
405
+ permissions.filesystem.blocked.push(...item.paths);
406
+ break;
407
+ }
408
+ }
409
+ else if (item.type === "network") {
410
+ permissions.network.mode = item.access === "allowed" ? "all" : "none";
411
+ }
412
+ }
413
+ return permissions;
414
+ }
415
+ /**
416
+ * Display a summary of the sandbox permissions
417
+ */
418
+ export function displayPermissionsSummary(permissions) {
419
+ console.log(`${CYAN}Sandbox Permissions:${RESET}`);
420
+ if (permissions.filesystem.readWrite.length > 0) {
421
+ console.log(` ${GREEN}Read/Write:${RESET} ${permissions.filesystem.readWrite.join(", ")}`);
422
+ }
423
+ if (permissions.filesystem.readOnly.length > 0) {
424
+ console.log(` ${CYAN}Read-Only:${RESET} ${permissions.filesystem.readOnly.join(", ")}`);
425
+ }
426
+ if (permissions.filesystem.blocked.length > 0) {
427
+ console.log(` ${RED}Blocked:${RESET} ${permissions.filesystem.blocked.join(", ")}`);
428
+ }
429
+ console.log(` ${CYAN}Network:${RESET} ${permissions.network.mode}`);
430
+ if (permissions.network.mode === "allowlist" && permissions.network.allowedDomains) {
431
+ console.log(` Allowed: ${permissions.network.allowedDomains.join(", ")}`);
432
+ }
433
+ }
434
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/sandbox/prompt.ts"],"names":[],"mappings":"AAEA,oBAAoB;AACpB,MAAM,GAAG,GAAG,MAAM,CAAC;AACnB,MAAM,WAAW,GAAG,GAAG,GAAG,OAAO,CAAC;AAClC,MAAM,WAAW,GAAG,GAAG,GAAG,OAAO,CAAC;AAClC,MAAM,YAAY,GAAG,GAAG,GAAG,IAAI,CAAC;AAChC,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AAChD,MAAM,eAAe,GAAG,GAAG,GAAG,KAAK,CAAC;AAEpC,SAAS;AACT,MAAM,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC;AACzB,MAAM,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC;AACxB,MAAM,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;AAC1B,MAAM,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC;AAC1B,MAAM,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC;AAC3B,MAAM,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC;AACzB,MAAM,MAAM,GAAG,GAAG,GAAG,kBAAkB,CAAC;AACxC,MAAM,OAAO,GAAG,GAAG,GAAG,MAAM,CAAC;AAC7B,MAAM,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC;AAC3B,MAAM,OAAO,GAAG,GAAG,GAAG,MAAM,CAAC;AAE7B,yBAAyB;AACzB,MAAM,GAAG,GAAG;IACV,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,UAAU,EAAE,GAAG;IACf,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,GAAG;IACf,QAAQ,EAAE,GAAG;CACd,CAAC;AA+BF,SAAS,YAAY,CAAC,IAAU;IAC9B,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC;AAChF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,gCAAgC;IAChC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;QACtF,OAAO,mBAAmB,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,KAAK,GAAW,kBAAkB,EAAE,CAAC;IAE3C,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,QAAQ,GAAG,EAAE,CAAC;IAEpB,mBAAmB;IACnB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,gBAAgB,GAAgB,SAAS,CAAC;IAE9C,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAChC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAElC,wCAAwC;QACxC,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAE5B,MAAM,gBAAgB,GAAG,GAAG,EAAE;YAC5B,MAAM,OAAO,GAAG,oBAAoB,EAAE,CAAC;YACvC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,CAAC,IAA4B,EAAE,SAAiB,EAAE,EAAE;YACtE,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAkB,CAAC,YAAY,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;gBACrE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5C,MAAM,IAAI,GAAG,CAAC,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;gBACnE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YAClE,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,CAAC,IAA4B,EAAU,EAAE;YAC5D,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzB,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;oBACpB,KAAK,YAAY;wBACf,OAAO,GAAG,KAAK,aAAa,KAAK,EAAE,CAAC;oBACtC,KAAK,WAAW;wBACd,OAAO,GAAG,IAAI,aAAa,KAAK,EAAE,CAAC;oBACrC,KAAK,SAAS;wBACZ,OAAO,GAAG,GAAG,aAAa,KAAK,EAAE,CAAC;gBACtC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS;oBAC9B,CAAC,CAAC,GAAG,KAAK,UAAU,KAAK,EAAE;oBAC3B,CAAC,CAAC,GAAG,GAAG,UAAU,KAAK,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,iBAAiB,GAAG,CAAC,MAAmB,EAAU,EAAE;YACxD,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,YAAY;oBACf,OAAO,GAAG,KAAK,aAAa,KAAK,EAAE,CAAC;gBACtC,KAAK,WAAW;oBACd,OAAO,GAAG,IAAI,YAAY,KAAK,EAAE,CAAC;gBACpC,KAAK,SAAS;oBACZ,OAAO,GAAG,GAAG,UAAU,KAAK,EAAE,CAAC;YACnC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,8CAA8C;YAC9C,IAAI,mBAAmB,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG,eAAe,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAEnC,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEf,IAAI,SAAS,EAAE,CAAC;gBACd,gBAAgB;gBAChB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,kBAAkB,KAAK,EAAE,CAAC,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,6CAA6C,KAAK,EAAE,CAAC,CAAC;gBACvE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,WAAW,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;gBACzD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,cAAc,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,GAAG,iBAAiB,KAAK,EAAE,CAAC,CAAC;gBAC9F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,iCAAiC,KAAK,EAAE,CAAC,CAAC;gBAC3D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,iBAAiB;gBACjB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,4CAA4C,KAAK,EAAE,CAAC,CAAC;gBACtE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEf,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;gBAEzC,gBAAgB;gBAChB,IAAI,eAAe,GAAG,CAAC,CAAC;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,eAAe,EAAE,CAAC;gBACpB,CAAC;gBAED,IAAI,eAAe,GAAG,YAAY,EAAE,CAAC;oBACnC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC;gBAClD,CAAC;qBAAM,IAAI,eAAe,IAAI,YAAY,GAAG,UAAU,EAAE,CAAC;oBACxD,YAAY,GAAG,eAAe,GAAG,UAAU,GAAG,CAAC,CAAC;gBAClD,CAAC;gBAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;oBACrB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,2BAA2B,KAAK,EAAE,CAAC,CAAC;gBACvD,CAAC;gBAED,IAAI,SAAS,GAAG,CAAC,CAAC;gBAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;wBAC7B,SAAS,EAAE,CAAC;wBACZ,SAAS;oBACX,CAAC;oBACD,IAAI,SAAS,IAAI,YAAY,GAAG,UAAU,EAAE,CAAC;wBAC3C,MAAM;oBACR,CAAC;oBACD,SAAS,EAAE,CAAC;oBAEZ,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACtB,MAAM,UAAU,GAAG,CAAC,KAAK,aAAa,CAAC;oBAEvC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;oBAC9C,CAAC;yBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;wBAC/B,IAAI,UAAU,EAAE,CAAC;4BACf,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;wBACtF,CAAC;6BAAM,CAAC;4BACN,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,KAAK,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;wBACrD,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;wBACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;wBACrD,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;wBAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBAEpC,IAAI,UAAU,EAAE,CAAC;4BACf,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACzH,CAAC;6BAAM,CAAC;4BACN,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAChF,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,IAAI,YAAY,GAAG,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC7C,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,6BAA6B,KAAK,EAAE,CAAC,CAAC;gBACzD,CAAC;gBAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;YAC/F,MAAM,kBAAkB,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;YAChD,mBAAmB,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC3C,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,KAAe,EAAE,KAAa,EAAE,KAAa,EAAU,EAAE;YACxE,MAAM,MAAM,GAAa,EAAE,CAAC;YAE5B,MAAM,SAAS,GAAG,IAAI,KAAK,GAAG,CAAC;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC;YACxD,MAAM,CAAC,IAAI,CACT,GAAG,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,QAAQ,GAAG,KAAK,EAAE,CAChK,CAAC;YAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;gBACtD,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;gBAC7C,MAAM,CAAC,IAAI,CACT,GAAG,MAAM,GAAG,GAAG,CAAC,QAAQ,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,QAAQ,GAAG,KAAK,EAAE,CAC7G,CAAC;YACJ,CAAC;YAED,MAAM,CAAC,IAAI,CACT,GAAG,MAAM,GAAG,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,GAAG,KAAK,EAAE,CAC1F,CAAC;YAEF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACzC,yBAAyB;YACzB,IAAI,mBAAmB,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG,eAAe,GAAG,YAAY,CAAC,CAAC;YACxF,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,GAAG,EAAE;YACzB,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;gBAChC,uDAAuD;gBACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;gBAE1D,+CAA+C;gBAC/C,MAAM,iBAAiB,GAAG,KAAK,CAAC,SAAS,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,eAAe,CAC1D,CAAC;gBAEF,IAAI,iBAAiB,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC7B,yDAAyD;oBACzD,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;oBACtE,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE;wBAC5B,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,IAAI;wBACX,KAAK,EAAE,CAAC,IAAI,CAAC;wBACb,MAAM,EAAE,gBAAgB;wBACxB,MAAM,EAAE,IAAI;qBACb,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,kCAAkC;oBAClC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE;wBACxB,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,IAAI;wBACX,KAAK,EAAE,CAAC,IAAI,CAAC;wBACb,MAAM,EAAE,gBAAgB;wBACxB,MAAM,EAAE,IAAI;qBACb,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,SAAS,GAAG,KAAK,CAAC;YAClB,WAAW,GAAG,EAAE,CAAC;YACjB,gBAAgB,GAAG,SAAS,CAAC;QAC/B,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE;YAChC,IAAI,SAAS,EAAE,CAAC;gBACd,0BAA0B;gBAC1B,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;oBACrC,+BAA+B;oBAC/B,SAAS,GAAG,KAAK,CAAC;oBAClB,WAAW,GAAG,EAAE,CAAC;oBACjB,gBAAgB,GAAG,SAAS,CAAC;gBAC/B,CAAC;qBAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;oBACxC,uBAAuB;oBACvB,aAAa,EAAE,CAAC;gBAClB,CAAC;qBAAM,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;oBAC1C,YAAY;oBACZ,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzC,CAAC;qBAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC5B,qCAAqC;oBACrC,MAAM,MAAM,GAAkB,CAAC,YAAY,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;oBACrE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;oBACjD,gBAAgB,GAAG,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC3D,CAAC;qBAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC5B,qCAAqC;oBACrC,MAAM,MAAM,GAAkB,CAAC,YAAY,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;oBACrE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;oBACjD,gBAAgB,GAAG,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC3E,CAAC;qBAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;oBACxD,sBAAsB;oBACtB,WAAW,IAAI,GAAG,CAAC;gBACrB,CAAC;qBAAM,CAAC;oBACN,OAAO;gBACT,CAAC;gBACD,MAAM,EAAE,CAAC;gBACT,OAAO;YACT,CAAC;YAED,2BAA2B;YAC3B,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;YACjD,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;YAElC,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;gBACpC,KAAK;gBACL,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;gBAC3C,OAAO;gBACP,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;YACxE,CAAC;iBAAM,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;gBAC1D,iDAAiD;gBACjD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oBACxB,SAAS,GAAG,IAAI,CAAC;oBACjB,WAAW,GAAG,EAAE,CAAC;oBACjB,gBAAgB,GAAG,SAAS,CAAC;gBAC/B,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC3D,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;gBAC3C,wBAAwB;gBACxB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACpD,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACxC,kCAAkC;gBAClC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oBACxB,SAAS,GAAG,IAAI,CAAC;oBACjB,WAAW,GAAG,EAAE,CAAC;oBACjB,gBAAgB,GAAG,SAAS,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;oBACV,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,sBAAsB,KAAK,IAAI,CAAC,CAAC;oBACrD,OAAO,CAAC,WAAW,CAAC,CAAC;oBACrB,OAAO;gBACT,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBACzC,qBAAqB;gBACrB,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC/B,OAAO;YACT,CAAC;iBAAM,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC5C,mCAAmC;gBACnC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBACxC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAChC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBAErB,wDAAwD;oBACxD,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;oBACxE,IAAI,CAAC,cAAc,EAAE,CAAC;wBACpB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,eAAe,CAC1D,CAAC;wBACF,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;4BACrB,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;wBAC7B,CAAC;oBACH,CAAC;oBAED,2BAA2B;oBAC3B,MAAM,oBAAoB,GAAG,oBAAoB,EAAE,CAAC;oBACpD,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO;YACT,CAAC;YAED,MAAM,EAAE,CAAC;QACX,CAAC,CAAC;QAEF,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO;QACL,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE;QACxC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE;QAChF,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE;QAEtE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE;QAC5C,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE;QACpG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,mBAAmB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE;QAE/J,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,EAAE;QAC9C,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE;QAC5H,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;QACnG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,4BAA4B,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;QAEnH,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE;QAC5C,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE;QAEhF,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,0BAA0B,EAAE;QACrD,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;QACvE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;QAC3E,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;QACvE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,4BAA4B,EAAE,KAAK,EAAE,CAAC,kBAAkB,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;QAC5H,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;QACnF,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,uBAAuB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;QAE1H,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE;QACrC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE;QAE/D,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE;KAC7C,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,WAAW,GAAuB;QACtC,UAAU,EAAE;YACV,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,EAAE;SACZ;QACD,OAAO,EAAE;YACP,IAAI,EAAE,KAAK;SACZ;KACF,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpB,KAAK,YAAY;oBACf,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrD,MAAM;gBACR,KAAK,WAAW;oBACd,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBACpD,MAAM;gBACR,KAAK,SAAS;oBACZ,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnD,MAAM;YACV,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACnC,WAAW,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACxE,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,WAA+B;IACvE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,uBAAuB,KAAK,EAAE,CAAC,CAAC;IAEnD,IAAI,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,cAAc,KAAK,IAAI,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,aAAa,KAAK,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,IAAI,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,WAAW,KAAK,IAAI,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW,KAAK,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { TerminalSession } from "./session.js";
2
2
  export type { TerminalSessionOptions, ScreenshotResult } from "./session.js";
3
3
  export { TerminalManager } from "./manager.js";
4
+ export type { TerminalManagerOptions } from "./manager.js";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/terminal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/terminal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
@@ -1,16 +1,63 @@
1
1
  import { TerminalSession, TerminalSessionOptions, ScreenshotResult } from "./session.js";
2
+ import type { SandboxController } from "../sandbox/index.js";
3
+ import { RecordingManager } from "../recording/index.js";
4
+ import type { RecordingMode, RecordingFormat, RecordingMetadata } from "../recording/index.js";
5
+ /**
6
+ * Options for creating a TerminalManager
7
+ */
8
+ export interface TerminalManagerOptions extends TerminalSessionOptions {
9
+ sandboxController?: SandboxController;
10
+ record?: RecordingMode;
11
+ recordDir?: string;
12
+ recordFormat?: RecordingFormat;
13
+ idleTimeLimit?: number;
14
+ maxDuration?: number;
15
+ inactivityTimeout?: number;
16
+ }
2
17
  /**
3
18
  * Manages the terminal session lifecycle
4
19
  * Currently supports a single session for simplicity
5
20
  */
6
21
  export declare class TerminalManager {
7
22
  private session;
23
+ private sessionPromise;
8
24
  private options;
9
- constructor(options?: TerminalSessionOptions);
25
+ private sandboxController?;
26
+ private recordingManager;
27
+ private autoRecordingId;
28
+ constructor(options?: TerminalManagerOptions);
29
+ /**
30
+ * Get or create the terminal session (async)
31
+ */
32
+ getSessionAsync(): Promise<TerminalSession>;
10
33
  /**
11
- * Get or create the terminal session
34
+ * Get the current session if it exists and is active
35
+ * Returns null if no session exists yet
36
+ */
37
+ getCurrentSession(): TerminalSession | null;
38
+ /**
39
+ * @deprecated Use getSessionAsync() instead. This method exists for backwards compatibility
40
+ * but will throw if the session hasn't been created yet.
12
41
  */
13
42
  getSession(): TerminalSession;
43
+ /**
44
+ * Initialize the session eagerly
45
+ * Call this at startup to create the session before it's needed
46
+ */
47
+ initSession(): Promise<TerminalSession>;
48
+ /**
49
+ * Start auto-recording based on CLI options
50
+ */
51
+ private startAutoRecording;
52
+ /**
53
+ * Get the RecordingManager instance
54
+ */
55
+ getRecordingManager(): RecordingManager;
56
+ /**
57
+ * Finalize all recordings and return their metadata
58
+ * Called by the caller when the session exits
59
+ */
60
+ finalizeRecordings(exitCode: number): Promise<RecordingMetadata[]>;
14
61
  /**
15
62
  * Check if a session exists and is active
16
63
  */
@@ -47,8 +94,16 @@ export declare class TerminalManager {
47
94
  rows: number;
48
95
  };
49
96
  /**
50
- * Dispose of the current session
97
+ * Dispose of the current session and cleanup sandbox
51
98
  */
52
99
  dispose(): void;
100
+ /**
101
+ * Async dispose that also cleans up sandbox resources
102
+ */
103
+ disposeAsync(): Promise<void>;
104
+ /**
105
+ * Get the sandbox controller if one is configured
106
+ */
107
+ getSandboxController(): SandboxController | undefined;
53
108
  }
54
109
  //# sourceMappingURL=manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/terminal/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEzF;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,OAAO,CAAyB;gBAE5B,OAAO,GAAE,sBAA2B;IAIhD;;OAEG;IACH,UAAU,IAAI,eAAe;IAO7B;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,cAAc,IAAI,gBAAgB;IAIlC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAI/C;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/terminal/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACzF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG/F;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB;IACpE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,eAAe,CAAuB;gBAElC,OAAO,GAAE,sBAA2B;IAahD;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC;IAwBjD;;;OAGG;IACH,iBAAiB,IAAI,eAAe,GAAG,IAAI;IAO3C;;;OAGG;IACH,UAAU,IAAI,eAAe;IAS7B;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC;IAe7C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACH,mBAAmB,IAAI,gBAAgB;IAIvC;;;OAGG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAIxE;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,cAAc,IAAI,gBAAgB;IAIlC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAI/C;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAOnC;;OAEG;IACH,oBAAoB,IAAI,iBAAiB,GAAG,SAAS;CAGtD"}