@luckydraw/cumulus 0.28.9 → 0.30.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/CHANGELOG.md +24 -2
  2. package/dist/cli/cumulus.js +1 -1
  3. package/dist/cli/cumulus.js.map +1 -1
  4. package/dist/gateway/adapters/webchat.d.ts.map +1 -1
  5. package/dist/gateway/adapters/webchat.js +19 -7
  6. package/dist/gateway/adapters/webchat.js.map +1 -1
  7. package/dist/gateway/config.d.ts +2 -0
  8. package/dist/gateway/config.d.ts.map +1 -1
  9. package/dist/gateway/config.js +1 -1
  10. package/dist/gateway/config.js.map +1 -1
  11. package/dist/gateway/daemon.d.ts +7 -1
  12. package/dist/gateway/daemon.d.ts.map +1 -1
  13. package/dist/gateway/daemon.js +46 -2
  14. package/dist/gateway/daemon.js.map +1 -1
  15. package/dist/gateway/logger.js +1 -1
  16. package/dist/gateway/logger.js.map +1 -1
  17. package/dist/gateway/push.js +1 -1
  18. package/dist/gateway/push.js.map +1 -1
  19. package/dist/gateway/scheduler.d.ts.map +1 -1
  20. package/dist/gateway/scheduler.js +1 -1
  21. package/dist/gateway/scheduler.js.map +1 -1
  22. package/dist/gateway/server.d.ts +9 -0
  23. package/dist/gateway/server.d.ts.map +1 -1
  24. package/dist/gateway/server.js +50 -7
  25. package/dist/gateway/server.js.map +1 -1
  26. package/dist/gateway/setup.d.ts +21 -0
  27. package/dist/gateway/setup.d.ts.map +1 -0
  28. package/dist/gateway/setup.js +426 -0
  29. package/dist/gateway/setup.js.map +1 -0
  30. package/dist/gateway/static/widget.js +212 -20
  31. package/dist/gateway/voice-tts.d.ts.map +1 -1
  32. package/dist/gateway/voice-tts.js +1 -1
  33. package/dist/gateway/voice-tts.js.map +1 -1
  34. package/dist/lib/agentic-loop.d.ts.map +1 -1
  35. package/dist/lib/agentic-loop.js +15 -3
  36. package/dist/lib/agentic-loop.js.map +1 -1
  37. package/dist/lib/config.d.ts.map +1 -1
  38. package/dist/lib/config.js +8 -4
  39. package/dist/lib/config.js.map +1 -1
  40. package/dist/lib/gateway.d.ts +9 -7
  41. package/dist/lib/gateway.d.ts.map +1 -1
  42. package/dist/lib/gateway.js +265 -42
  43. package/dist/lib/gateway.js.map +1 -1
  44. package/dist/lib/history.d.ts.map +1 -1
  45. package/dist/lib/history.js +3 -2
  46. package/dist/lib/history.js.map +1 -1
  47. package/dist/lib/huggingface-provider.d.ts.map +1 -1
  48. package/dist/lib/huggingface-provider.js +123 -12
  49. package/dist/lib/huggingface-provider.js.map +1 -1
  50. package/dist/lib/jsonl-lock.d.ts +34 -0
  51. package/dist/lib/jsonl-lock.d.ts.map +1 -0
  52. package/dist/lib/jsonl-lock.js +81 -0
  53. package/dist/lib/jsonl-lock.js.map +1 -0
  54. package/dist/lib/templates.js +1 -1
  55. package/dist/lib/templates.js.map +1 -1
  56. package/dist/lib/version-check.d.ts.map +1 -1
  57. package/dist/lib/version-check.js +1 -1
  58. package/dist/lib/version-check.js.map +1 -1
  59. package/dist/tui/components/App.js +1 -1
  60. package/dist/tui/components/App.js.map +1 -1
  61. package/package.json +1 -1
@@ -0,0 +1,426 @@
1
+ /**
2
+ * cumulus-gateway setup wizard and config management.
3
+ *
4
+ * Phase 1: `cumulus-gateway setup --project-root <path>` — instant non-interactive setup
5
+ * Phase 2: `cumulus-gateway setup` — interactive prompts with auto-detection
6
+ * Phase 4: `cumulus-gateway config set/get/list` — post-install config changes
7
+ */
8
+ import { execSync } from 'child_process';
9
+ import { randomBytes } from 'crypto';
10
+ import * as fs from 'fs';
11
+ import * as os from 'os';
12
+ import * as path from 'path';
13
+ const CUMULUS_DIR = process.env.CUMULUS_DIR || path.join(os.homedir(), '.cumulus');
14
+ const CONFIG_PATH = path.join(CUMULUS_DIR, 'gateway.config.json');
15
+ const DEFAULT_PORT = 8080;
16
+ const PROJECT_MARKERS = [
17
+ '.git',
18
+ 'package.json',
19
+ 'Cargo.toml',
20
+ 'go.mod',
21
+ 'pyproject.toml',
22
+ 'Makefile',
23
+ 'CMakeLists.txt',
24
+ ];
25
+ const CANDIDATE_DIRS = [
26
+ 'Documents/_Projects',
27
+ 'Documents',
28
+ 'projects',
29
+ 'dev',
30
+ 'code',
31
+ 'src',
32
+ 'workspace',
33
+ 'repos',
34
+ ];
35
+ function detectProjectDirs() {
36
+ const home = os.homedir();
37
+ const results = [];
38
+ for (const candidate of CANDIDATE_DIRS) {
39
+ const dir = path.join(home, candidate);
40
+ if (!fs.existsSync(dir))
41
+ continue;
42
+ try {
43
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
44
+ let projectCount = 0;
45
+ for (const entry of entries) {
46
+ if (!entry.isDirectory() || entry.name.startsWith('.'))
47
+ continue;
48
+ const subdir = path.join(dir, entry.name);
49
+ for (const marker of PROJECT_MARKERS) {
50
+ if (fs.existsSync(path.join(subdir, marker))) {
51
+ projectCount++;
52
+ break;
53
+ }
54
+ }
55
+ }
56
+ if (projectCount > 0) {
57
+ results.push({ path: dir, projectCount });
58
+ }
59
+ }
60
+ catch {
61
+ // Permission denied or other error — skip
62
+ }
63
+ }
64
+ // Sort by project count descending
65
+ results.sort((a, b) => b.projectCount - a.projectCount);
66
+ return results.slice(0, 5);
67
+ }
68
+ // ─── Interactive readline helpers ────────────────────────────
69
+ async function ask(question, defaultValue) {
70
+ const readline = await import('readline');
71
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
72
+ const prompt = defaultValue ? `${question} [${defaultValue}]: ` : `${question}: `;
73
+ const answer = await new Promise(resolve => {
74
+ rl.question(prompt, resolve);
75
+ });
76
+ rl.close();
77
+ return answer.trim() || defaultValue || '';
78
+ }
79
+ async function askYesNo(question, defaultYes = true) {
80
+ const hint = defaultYes ? '[Y/n]' : '[y/N]';
81
+ const answer = await ask(`${question} ${hint}`);
82
+ if (!answer)
83
+ return defaultYes;
84
+ return answer.toLowerCase().startsWith('y');
85
+ }
86
+ function generateConfig(opts) {
87
+ return {
88
+ apiKeys: [`sk-cml-${randomBytes(16).toString('hex')}`],
89
+ port: opts.port || DEFAULT_PORT,
90
+ projectRoot: opts.projectRoot || undefined,
91
+ };
92
+ }
93
+ function writeConfig(config) {
94
+ fs.mkdirSync(CUMULUS_DIR, { recursive: true });
95
+ fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + '\n', 'utf-8');
96
+ }
97
+ // ─── Service installation ────────────────────────────────────
98
+ function getNodePath() {
99
+ return process.execPath;
100
+ }
101
+ function getBinDir() {
102
+ return path.dirname(getNodePath());
103
+ }
104
+ function generatePlist(projectRoot) {
105
+ const nodePath = getNodePath();
106
+ const binDir = getBinDir();
107
+ // Find cumulus-gateway binary — it's in the same directory as node
108
+ const gatewayBin = path.join(binDir, 'cumulus-gateway');
109
+ return `<?xml version="1.0" encoding="UTF-8"?>
110
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
111
+ <plist version="1.0">
112
+ <dict>
113
+ <key>Label</key>
114
+ <string>com.luckydraw.cumulus-gateway</string>
115
+ <key>ProgramArguments</key>
116
+ <array>
117
+ <string>${nodePath}</string>
118
+ <string>${gatewayBin}</string>
119
+ <string>start</string>
120
+ </array>
121
+ <key>EnvironmentVariables</key>
122
+ <dict>
123
+ <key>PATH</key>
124
+ <string>${binDir}:/usr/local/bin:/usr/bin:/bin</string>
125
+ <key>HOME</key>
126
+ <string>${os.homedir()}</string>
127
+ </dict>${projectRoot
128
+ ? `
129
+ <key>WorkingDirectory</key>
130
+ <string>${projectRoot}</string>`
131
+ : ''}
132
+ <key>RunAtLoad</key>
133
+ <true/>
134
+ <key>KeepAlive</key>
135
+ <true/>
136
+ <key>StandardOutPath</key>
137
+ <string>${path.join(CUMULUS_DIR, 'gateway.log')}</string>
138
+ <key>StandardErrorPath</key>
139
+ <string>${path.join(CUMULUS_DIR, 'gateway.log')}</string>
140
+ </dict>
141
+ </plist>`;
142
+ }
143
+ function generateSystemdUnit() {
144
+ const nodePath = getNodePath();
145
+ const binDir = getBinDir();
146
+ const gatewayBin = path.join(binDir, 'cumulus-gateway');
147
+ return `[Unit]
148
+ Description=Cumulus Gateway
149
+ After=network.target
150
+
151
+ [Service]
152
+ Type=simple
153
+ ExecStart=${nodePath} ${gatewayBin} start --foreground
154
+ Environment=PATH=${binDir}:/usr/local/bin:/usr/bin:/bin
155
+ Environment=HOME=${os.homedir()}
156
+ Restart=always
157
+ RestartSec=5
158
+
159
+ [Install]
160
+ WantedBy=default.target
161
+ `;
162
+ }
163
+ function installMacOSService(projectRoot) {
164
+ const plistPath = path.join(os.homedir(), 'Library', 'LaunchAgents', 'com.luckydraw.cumulus-gateway.plist');
165
+ const plistDir = path.dirname(plistPath);
166
+ fs.mkdirSync(plistDir, { recursive: true });
167
+ // Unload existing if present
168
+ try {
169
+ execSync(`launchctl unload "${plistPath}" 2>/dev/null`, { stdio: 'ignore' });
170
+ }
171
+ catch {
172
+ // Not loaded — fine
173
+ }
174
+ fs.writeFileSync(plistPath, generatePlist(projectRoot), 'utf-8');
175
+ try {
176
+ execSync(`launchctl load "${plistPath}"`, { stdio: 'inherit' });
177
+ return true;
178
+ }
179
+ catch {
180
+ console.error(` Failed to load LaunchAgent. You can load it manually:`);
181
+ console.error(` launchctl load "${plistPath}"`);
182
+ return false;
183
+ }
184
+ }
185
+ function installLinuxService() {
186
+ const serviceDir = path.join(os.homedir(), '.config', 'systemd', 'user');
187
+ const servicePath = path.join(serviceDir, 'cumulus-gateway.service');
188
+ fs.mkdirSync(serviceDir, { recursive: true });
189
+ fs.writeFileSync(servicePath, generateSystemdUnit(), 'utf-8');
190
+ try {
191
+ execSync('systemctl --user daemon-reload', { stdio: 'inherit' });
192
+ execSync('systemctl --user enable --now cumulus-gateway', { stdio: 'inherit' });
193
+ return true;
194
+ }
195
+ catch {
196
+ console.error(` Failed to enable systemd service. You can enable it manually:`);
197
+ console.error(` systemctl --user enable --now cumulus-gateway`);
198
+ return false;
199
+ }
200
+ }
201
+ export async function cmdSetup(args) {
202
+ console.log('');
203
+ console.log(' Cumulus Gateway Setup');
204
+ console.log(' ─────────────────────');
205
+ console.log('');
206
+ // Check for existing config
207
+ if (fs.existsSync(CONFIG_PATH) && !args.force) {
208
+ console.log(` Existing config found: ${CONFIG_PATH}`);
209
+ if (process.stdin.isTTY) {
210
+ const overwrite = await askYesNo(' Overwrite?', false);
211
+ if (!overwrite) {
212
+ console.log(' Setup cancelled. Use --force to overwrite.');
213
+ return;
214
+ }
215
+ }
216
+ else {
217
+ console.log(' Use --force to overwrite. Aborting.');
218
+ return;
219
+ }
220
+ }
221
+ let projectRoot = args.projectRoot;
222
+ let port = args.port || DEFAULT_PORT;
223
+ // Phase 2: Interactive mode when no --project-root is given
224
+ if (!projectRoot && process.stdin.isTTY) {
225
+ const detected = detectProjectDirs();
226
+ if (detected.length > 0) {
227
+ console.log(' Project root (where thread folders are created):');
228
+ console.log('');
229
+ console.log(' Detected directories with projects:');
230
+ detected.forEach((d, i) => {
231
+ const rel = d.path.replace(os.homedir(), '~');
232
+ console.log(` [${i + 1}] ${rel} (${d.projectCount} projects)`);
233
+ });
234
+ console.log(` [${detected.length + 1}] Custom path...`);
235
+ console.log('');
236
+ const choice = await ask(` Choice`, '1');
237
+ const choiceNum = parseInt(choice, 10);
238
+ if (choiceNum >= 1 && choiceNum <= detected.length) {
239
+ projectRoot = detected[choiceNum - 1].path;
240
+ }
241
+ else {
242
+ projectRoot = await ask(' Enter project root path');
243
+ // Expand ~ to home
244
+ if (projectRoot.startsWith('~')) {
245
+ projectRoot = path.join(os.homedir(), projectRoot.slice(1));
246
+ }
247
+ }
248
+ }
249
+ else {
250
+ console.log(' No project directories auto-detected.');
251
+ projectRoot = await ask(' Project root path (where thread folders are created)');
252
+ if (projectRoot.startsWith('~')) {
253
+ projectRoot = path.join(os.homedir(), projectRoot.slice(1));
254
+ }
255
+ }
256
+ // Validate path
257
+ if (projectRoot && !fs.existsSync(projectRoot)) {
258
+ const create = await askYesNo(` ${projectRoot} does not exist. Create it?`);
259
+ if (create) {
260
+ fs.mkdirSync(projectRoot, { recursive: true });
261
+ console.log(` Created ${projectRoot}`);
262
+ }
263
+ }
264
+ // Ask about port
265
+ const portAnswer = await ask(' Port', String(port));
266
+ const parsedPort = parseInt(portAnswer, 10);
267
+ if (!isNaN(parsedPort) && parsedPort > 0 && parsedPort <= 65535) {
268
+ port = parsedPort;
269
+ }
270
+ }
271
+ else if (projectRoot) {
272
+ // Non-interactive: expand ~ and validate
273
+ if (projectRoot.startsWith('~')) {
274
+ projectRoot = path.join(os.homedir(), projectRoot.slice(1));
275
+ }
276
+ if (!fs.existsSync(projectRoot)) {
277
+ fs.mkdirSync(projectRoot, { recursive: true });
278
+ console.log(` Created ${projectRoot}`);
279
+ }
280
+ }
281
+ // Generate and write config
282
+ const config = generateConfig({ projectRoot, port });
283
+ writeConfig(config);
284
+ const apiKey = config.apiKeys[0];
285
+ const displayRoot = projectRoot ? projectRoot.replace(os.homedir(), '~') : '(not set)';
286
+ console.log('');
287
+ console.log(` Config: ${CONFIG_PATH}`);
288
+ console.log(` API key: ${apiKey}`);
289
+ console.log(` Project root: ${displayRoot}`);
290
+ console.log(` Port: ${port}`);
291
+ // Platform-specific service installation
292
+ if (process.stdin.isTTY) {
293
+ console.log('');
294
+ if (process.platform === 'darwin') {
295
+ const install = await askYesNo(' Install macOS LaunchAgent? (auto-start on login)');
296
+ if (install) {
297
+ const ok = installMacOSService(projectRoot);
298
+ console.log(ok ? ' ✓ LaunchAgent installed and running' : ' ✗ LaunchAgent installation failed');
299
+ }
300
+ }
301
+ else if (process.platform === 'linux') {
302
+ const install = await askYesNo(' Install systemd user service? (auto-start on login)');
303
+ if (install) {
304
+ const ok = installLinuxService();
305
+ console.log(ok
306
+ ? ' ✓ systemd service installed and running'
307
+ : ' ✗ systemd service installation failed');
308
+ }
309
+ }
310
+ }
311
+ console.log('');
312
+ console.log(` Open http://localhost:${port}/chat`);
313
+ console.log(` API key: ${apiKey}`);
314
+ console.log('');
315
+ }
316
+ function loadRawConfig() {
317
+ if (!fs.existsSync(CONFIG_PATH)) {
318
+ console.error(`No config found at ${CONFIG_PATH}. Run 'cumulus-gateway setup' first.`);
319
+ process.exit(1);
320
+ }
321
+ return JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf-8'));
322
+ }
323
+ function redactValue(key, value) {
324
+ if (typeof value === 'string' &&
325
+ (key.toLowerCase().includes('key') ||
326
+ key.toLowerCase().includes('secret') ||
327
+ key.toLowerCase().includes('token'))) {
328
+ if (value.length > 12) {
329
+ return value.slice(0, 8) + '...' + value.slice(-4);
330
+ }
331
+ return '***';
332
+ }
333
+ if (Array.isArray(value)) {
334
+ return value.map((v, i) => redactValue(`${key}[${i}]`, v));
335
+ }
336
+ return value;
337
+ }
338
+ function getNestedValue(obj, keyPath) {
339
+ const parts = keyPath.split('.');
340
+ let current = obj;
341
+ for (const part of parts) {
342
+ if (current === null || current === undefined || typeof current !== 'object')
343
+ return undefined;
344
+ current = current[part];
345
+ }
346
+ return current;
347
+ }
348
+ function setNestedValue(obj, keyPath, value) {
349
+ const parts = keyPath.split('.');
350
+ let current = obj;
351
+ for (let i = 0; i < parts.length - 1; i++) {
352
+ const part = parts[i];
353
+ if (current[part] === undefined || typeof current[part] !== 'object') {
354
+ current[part] = {};
355
+ }
356
+ current = current[part];
357
+ }
358
+ current[parts[parts.length - 1]] = value;
359
+ }
360
+ function parseConfigValue(value) {
361
+ // Try JSON parse for arrays, objects, numbers, booleans
362
+ try {
363
+ return JSON.parse(value);
364
+ }
365
+ catch {
366
+ // Plain string
367
+ return value;
368
+ }
369
+ }
370
+ export function cmdConfig(args) {
371
+ switch (args.subcommand) {
372
+ case 'list': {
373
+ const config = loadRawConfig();
374
+ const redacted = {};
375
+ for (const [key, val] of Object.entries(config)) {
376
+ redacted[key] = redactValue(key, val);
377
+ }
378
+ console.log(JSON.stringify(redacted, null, 2));
379
+ break;
380
+ }
381
+ case 'get': {
382
+ if (!args.key) {
383
+ console.error('Usage: cumulus-gateway config get <key>');
384
+ console.error('Example: cumulus-gateway config get projectRoot');
385
+ process.exit(1);
386
+ }
387
+ const config = loadRawConfig();
388
+ const value = getNestedValue(config, args.key);
389
+ if (value === undefined) {
390
+ console.error(`Key "${args.key}" not found in config.`);
391
+ process.exit(1);
392
+ }
393
+ if (typeof value === 'object') {
394
+ console.log(JSON.stringify(value, null, 2));
395
+ }
396
+ else {
397
+ console.log(String(value));
398
+ }
399
+ break;
400
+ }
401
+ case 'set': {
402
+ if (!args.key || args.value === undefined) {
403
+ console.error('Usage: cumulus-gateway config set <key> <value>');
404
+ console.error('Examples:');
405
+ console.error(' cumulus-gateway config set projectRoot ~/projects');
406
+ console.error(' cumulus-gateway config set port 8090');
407
+ console.error(' cumulus-gateway config set models \'[{"id":"claude","label":"Claude","provider":"claude-cli"}]\'');
408
+ process.exit(1);
409
+ }
410
+ const config = loadRawConfig();
411
+ const parsed = parseConfigValue(args.value);
412
+ // Expand ~ in path-like values
413
+ if (typeof parsed === 'string' && parsed.startsWith('~')) {
414
+ setNestedValue(config, args.key, path.join(os.homedir(), parsed.slice(1)));
415
+ }
416
+ else {
417
+ setNestedValue(config, args.key, parsed);
418
+ }
419
+ fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + '\n', 'utf-8');
420
+ const displayVal = typeof parsed === 'string' ? parsed : JSON.stringify(parsed);
421
+ console.log(`Set ${args.key} = ${displayVal}`);
422
+ break;
423
+ }
424
+ }
425
+ }
426
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/gateway/setup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACnF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;AAClE,MAAM,YAAY,GAAG,IAAI,CAAC;AAS1B,MAAM,eAAe,GAAG;IACtB,MAAM;IACN,cAAc;IACd,YAAY;IACZ,QAAQ;IACR,gBAAgB;IAChB,UAAU;IACV,gBAAgB;CACjB,CAAC;AAEF,MAAM,cAAc,GAAG;IACrB,qBAAqB;IACrB,WAAW;IACX,UAAU;IACV,KAAK;IACL,MAAM;IACN,KAAK;IACL,WAAW;IACX,OAAO;CACR,CAAC;AAEF,SAAS,iBAAiB;IACxB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAElC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7D,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS;gBACjE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC1C,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;oBACrC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;wBAC7C,YAAY,EAAE,CAAC;wBACf,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC;IACxD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,gEAAgE;AAEhE,KAAK,UAAU,GAAG,CAAC,QAAgB,EAAE,YAAqB;IACxD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC;IAClF,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,OAAO,CAAC,EAAE;QACjD,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,YAAY,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,QAAgB,EAAE,UAAU,GAAG,IAAI;IACzD,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM;QAAE,OAAO,UAAU,CAAC;IAC/B,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC9C,CAAC;AAUD,SAAS,cAAc,CAAC,IAAkB;IACxC,OAAO;QACL,OAAO,EAAE,CAAC,UAAU,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,YAAY;QAC/B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAA+B;IAClD,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACjF,CAAC;AAED,gEAAgE;AAEhE,SAAS,WAAW;IAClB,OAAO,OAAO,CAAC,QAAQ,CAAC;AAC1B,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,aAAa,CAAC,WAAoB;IACzC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,mEAAmE;IACnE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAExD,OAAO;;;;;;;;kBAQS,QAAQ;kBACR,UAAU;;;;;;kBAMV,MAAM;;kBAEN,EAAE,CAAC,OAAO,EAAE;aAExB,WAAW;QACT,CAAC,CAAC;;cAEI,WAAW,WAAW;QAC5B,CAAC,CAAC,EACN;;;;;;cAMU,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;;cAErC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;;SAE1C,CAAC;AACV,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAExD,OAAO;;;;;;YAMG,QAAQ,IAAI,UAAU;mBACf,MAAM;mBACN,EAAE,CAAC,OAAO,EAAE;;;;;;CAM9B,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAoB;IAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,EAAE,CAAC,OAAO,EAAE,EACZ,SAAS,EACT,cAAc,EACd,qCAAqC,CACtC,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEzC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,6BAA6B;IAC7B,IAAI,CAAC;QACH,QAAQ,CAAC,qBAAqB,SAAS,eAAe,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IAEjE,IAAI,CAAC;QACH,QAAQ,CAAC,mBAAmB,SAAS,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACzE,OAAO,CAAC,KAAK,CAAC,qBAAqB,SAAS,GAAG,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IAErE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,mBAAmB,EAAE,EAAE,OAAO,CAAC,CAAC;IAE9D,IAAI,CAAC;QACH,QAAQ,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACjE,QAAQ,CAAC,+CAA+C,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACjF,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAe;IAC5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,4BAA4B;IAC5B,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAC;QACvD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACxD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;gBAC5D,OAAO;YACT,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACnC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC;IAErC,4DAA4D;IAC5D,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;QAErC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACrD,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxB,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,YAAY,YAAY,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,MAAM,GAAG,CAAC,kBAAkB,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YAC1C,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAEvC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACnD,WAAW,GAAG,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAE,CAAC,IAAI,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,WAAW,GAAG,MAAM,GAAG,CAAC,2BAA2B,CAAC,CAAC;gBACrD,mBAAmB;gBACnB,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,WAAW,GAAG,MAAM,GAAG,CAAC,wDAAwD,CAAC,CAAC;YAClF,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,WAAW,6BAA6B,CAAC,CAAC;YAC7E,IAAI,MAAM,EAAE,CAAC;gBACX,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,aAAa,WAAW,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YAChE,IAAI,GAAG,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACvB,yCAAyC;QACzC,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,aAAa,WAAW,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,WAAW,CAAC,MAAM,CAAC,CAAC;IAEpB,MAAM,MAAM,GAAI,MAAM,CAAC,OAAoB,CAAC,CAAC,CAAE,CAAC;IAChD,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAEvF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;IAExC,yCAAyC;IACzC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,oDAAoD,CAAC,CAAC;YACrF,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,EAAE,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CACT,EAAE,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,qCAAqC,CACrF,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,uDAAuD,CAAC,CAAC;YACxF,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,EAAE,GAAG,mBAAmB,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CACT,EAAE;oBACA,CAAC,CAAC,2CAA2C;oBAC7C,CAAC,CAAC,yCAAyC,CAC9C,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,OAAO,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAYD,SAAS,aAAa;IACpB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,sBAAsB,WAAW,sCAAsC,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,KAAc;IAC9C,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAChC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACpC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EACtC,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,GAA4B,EAAE,OAAe;IACnE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,GAAY,GAAG,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAC/F,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,GAA4B,EAAE,OAAe,EAAE,KAAc;IACnF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,GAAG,GAAG,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACrB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,IAAI,CAA4B,CAAC;IACrD,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,GAAG,KAAK,CAAC;AAC5C,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,wDAAwD;IACxD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAgB;IACxC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAA4B,EAAE,CAAC;YAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChD,QAAQ,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM;QACR,CAAC;QAED,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBACzD,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,GAAG,wBAAwB,CAAC,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC1C,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACjE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBACrE,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBACxD,OAAO,CAAC,KAAK,CACX,oGAAoG,CACrG,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAE5C,+BAA+B;YAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzD,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC3C,CAAC;YAED,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;YAC/E,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC,CAAC;YAC/C,MAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC"}