grok-cli-hurry-mode 1.0.1 → 1.0.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.
@@ -0,0 +1,612 @@
1
+ import { ASTParserTool } from "./ast-parser.js";
2
+ import { SymbolSearchTool } from "./symbol-search.js";
3
+ import { MultiFileEditorTool } from "../advanced/multi-file-editor.js";
4
+ import { OperationHistoryTool } from "../advanced/operation-history.js";
5
+ import fs from "fs-extra";
6
+ import path from "path";
7
+ export class RefactoringAssistantTool {
8
+ constructor() {
9
+ this.name = "refactoring_assistant";
10
+ this.description = "Perform safe code refactoring operations including rename, extract, inline, and move operations";
11
+ this.astParser = new ASTParserTool();
12
+ this.symbolSearch = new SymbolSearchTool();
13
+ this.multiFileEditor = new MultiFileEditorTool();
14
+ this.operationHistory = new OperationHistoryTool();
15
+ }
16
+ async execute(args) {
17
+ try {
18
+ const { operation, ...operationArgs } = args;
19
+ if (!operation) {
20
+ throw new Error("Refactoring operation type is required");
21
+ }
22
+ let result;
23
+ switch (operation) {
24
+ case 'rename':
25
+ result = await this.performRename(operationArgs);
26
+ break;
27
+ case 'extract_function':
28
+ result = await this.performExtractFunction(operationArgs);
29
+ break;
30
+ case 'extract_variable':
31
+ result = await this.performExtractVariable(operationArgs);
32
+ break;
33
+ case 'inline_function':
34
+ result = await this.performInlineFunction(operationArgs);
35
+ break;
36
+ case 'inline_variable':
37
+ result = await this.performInlineVariable(operationArgs);
38
+ break;
39
+ case 'move_function':
40
+ case 'move_class':
41
+ result = await this.performMove(operationArgs);
42
+ break;
43
+ default:
44
+ throw new Error(`Unsupported refactoring operation: ${operation}`);
45
+ }
46
+ return {
47
+ success: true,
48
+ output: JSON.stringify(result, null, 2)
49
+ };
50
+ }
51
+ catch (error) {
52
+ return {
53
+ success: false,
54
+ error: error instanceof Error ? error.message : String(error)
55
+ };
56
+ }
57
+ }
58
+ async performRename(request) {
59
+ const { symbolName, newName, filePath, scope, includeComments, includeStrings } = request;
60
+ if (!symbolName || !newName) {
61
+ throw new Error("Symbol name and new name are required for rename operation");
62
+ }
63
+ // Validate new name
64
+ if (!this.isValidIdentifier(newName)) {
65
+ throw new Error(`Invalid identifier: ${newName}`);
66
+ }
67
+ // Find all occurrences of the symbol
68
+ const searchPath = scope === 'file' && filePath ? path.dirname(filePath) : process.cwd();
69
+ const searchResult = await this.symbolSearch.execute({
70
+ query: symbolName,
71
+ searchPath,
72
+ includeUsages: true,
73
+ fuzzyMatch: false,
74
+ caseSensitive: true
75
+ });
76
+ if (!searchResult.success || !searchResult.output) {
77
+ throw new Error("Failed to find symbol occurrences");
78
+ }
79
+ const parsed = JSON.parse(searchResult.output);
80
+ if (!parsed.success) {
81
+ throw new Error("Failed to find symbol occurrences");
82
+ }
83
+ const symbolRefs = parsed.result.symbols;
84
+ // Filter by scope
85
+ const relevantRefs = scope === 'file' && filePath
86
+ ? symbolRefs.filter(ref => ref.filePath === filePath)
87
+ : symbolRefs;
88
+ if (relevantRefs.length === 0) {
89
+ throw new Error(`Symbol '${symbolName}' not found in specified scope`);
90
+ }
91
+ // Perform safety analysis
92
+ const safety = await this.analyzeSafety(relevantRefs, 'rename');
93
+ // Generate changes
94
+ const fileChanges = [];
95
+ const affectedFiles = new Set();
96
+ for (const ref of relevantRefs) {
97
+ affectedFiles.add(ref.filePath);
98
+ const changes = await this.generateRenameChanges(ref, symbolName, newName, includeComments, includeStrings);
99
+ if (changes.length > 0) {
100
+ fileChanges.push({
101
+ filePath: ref.filePath,
102
+ changes
103
+ });
104
+ }
105
+ }
106
+ // Generate preview
107
+ const preview = this.generatePreview(fileChanges, 'rename', symbolName, newName);
108
+ return {
109
+ type: 'rename',
110
+ description: `Rename '${symbolName}' to '${newName}' (${scope} scope)`,
111
+ files: fileChanges,
112
+ preview,
113
+ safety
114
+ };
115
+ }
116
+ async performExtractFunction(request) {
117
+ const { filePath, startLine, endLine, functionName, parameters = [], returnType } = request;
118
+ if (!filePath || startLine === undefined || endLine === undefined || !functionName) {
119
+ throw new Error("File path, line range, and function name are required");
120
+ }
121
+ if (!await fs.pathExists(filePath)) {
122
+ throw new Error(`File not found: ${filePath}`);
123
+ }
124
+ const content = await fs.readFile(filePath, 'utf-8');
125
+ const lines = content.split('\n');
126
+ if (startLine < 0 || endLine >= lines.length || startLine > endLine) {
127
+ throw new Error("Invalid line range");
128
+ }
129
+ // Extract the code block
130
+ const extractedCode = lines.slice(startLine, endLine + 1);
131
+ const extractedText = extractedCode.join('\n');
132
+ // Analyze the extracted code for variables
133
+ const analysis = await this.analyzeExtractedCode(extractedText, filePath);
134
+ // Generate function signature
135
+ const functionSignature = this.generateFunctionSignature(functionName, analysis.parameters.length > 0 ? analysis.parameters : parameters, returnType || analysis.inferredReturnType);
136
+ // Create the new function
137
+ const newFunction = this.createExtractedFunction(functionSignature, extractedText, analysis.localVariables);
138
+ // Generate function call
139
+ const functionCall = this.generateFunctionCall(functionName, analysis.parameters, analysis.returnVariable);
140
+ // Create changes
141
+ const changes = [
142
+ // Replace extracted code with function call
143
+ {
144
+ startLine,
145
+ startColumn: 0,
146
+ endLine,
147
+ endColumn: lines[endLine].length,
148
+ oldText: extractedText,
149
+ newText: functionCall,
150
+ type: 'replace'
151
+ },
152
+ // Insert new function (simplified - should find appropriate location)
153
+ {
154
+ startLine: endLine + 1,
155
+ startColumn: 0,
156
+ endLine: endLine + 1,
157
+ endColumn: 0,
158
+ oldText: '',
159
+ newText: '\n' + newFunction + '\n',
160
+ type: 'insert'
161
+ }
162
+ ];
163
+ const safety = {
164
+ riskLevel: 'medium',
165
+ potentialIssues: [
166
+ 'Variable scope changes',
167
+ 'Side effects may be altered',
168
+ 'Error handling context may change'
169
+ ],
170
+ affectedFiles: 1,
171
+ affectedSymbols: 1,
172
+ requiresTests: true,
173
+ breakingChanges: false
174
+ };
175
+ const fileChanges = [{
176
+ filePath,
177
+ changes
178
+ }];
179
+ const preview = this.generatePreview(fileChanges, 'extract_function', extractedText, functionName);
180
+ return {
181
+ type: 'extract_function',
182
+ description: `Extract function '${functionName}' from lines ${startLine}-${endLine}`,
183
+ files: fileChanges,
184
+ preview,
185
+ safety
186
+ };
187
+ }
188
+ async performExtractVariable(args) {
189
+ const { filePath, startLine, startColumn, endLine, endColumn, variableName, variableType } = args;
190
+ if (!filePath || !variableName) {
191
+ throw new Error("File path and variable name are required");
192
+ }
193
+ const content = await fs.readFile(filePath, 'utf-8');
194
+ const lines = content.split('\n');
195
+ // Extract expression
196
+ const startLineContent = lines[startLine];
197
+ const endLineContent = lines[endLine];
198
+ let expression;
199
+ if (startLine === endLine) {
200
+ expression = startLineContent.substring(startColumn, endColumn);
201
+ }
202
+ else {
203
+ expression = startLineContent.substring(startColumn) + '\n' +
204
+ lines.slice(startLine + 1, endLine).join('\n') + '\n' +
205
+ endLineContent.substring(0, endColumn);
206
+ }
207
+ // Generate variable declaration
208
+ const indent = this.getIndentation(startLineContent);
209
+ const varDeclaration = `${indent}const ${variableName}${variableType ? `: ${variableType}` : ''} = ${expression.trim()};`;
210
+ const changes = [
211
+ // Insert variable declaration
212
+ {
213
+ startLine,
214
+ startColumn: 0,
215
+ endLine: startLine,
216
+ endColumn: 0,
217
+ oldText: '',
218
+ newText: varDeclaration + '\n',
219
+ type: 'insert'
220
+ },
221
+ // Replace expression with variable
222
+ {
223
+ startLine: startLine + 1, // Account for inserted line
224
+ startColumn,
225
+ endLine: endLine + 1,
226
+ endColumn,
227
+ oldText: expression,
228
+ newText: variableName,
229
+ type: 'replace'
230
+ }
231
+ ];
232
+ const safety = {
233
+ riskLevel: 'low',
234
+ potentialIssues: ['Variable name conflicts'],
235
+ affectedFiles: 1,
236
+ affectedSymbols: 1,
237
+ requiresTests: false,
238
+ breakingChanges: false
239
+ };
240
+ const fileChanges = [{
241
+ filePath,
242
+ changes
243
+ }];
244
+ const preview = this.generatePreview(fileChanges, 'extract_variable', expression, variableName);
245
+ return {
246
+ type: 'extract_variable',
247
+ description: `Extract variable '${variableName}' from expression`,
248
+ files: fileChanges,
249
+ preview,
250
+ safety
251
+ };
252
+ }
253
+ async performInlineFunction(request) {
254
+ const { symbolName, filePath, preserveComments } = request;
255
+ // Find function definition
256
+ const parseResult = await this.astParser.execute({
257
+ filePath,
258
+ includeSymbols: true,
259
+ symbolTypes: ['function']
260
+ });
261
+ if (!parseResult.success || !parseResult.output) {
262
+ throw new Error("Failed to parse file");
263
+ }
264
+ const parsed = JSON.parse(parseResult.output);
265
+ if (!parsed.success) {
266
+ throw new Error("Failed to parse file");
267
+ }
268
+ const symbols = parsed.result.symbols;
269
+ const functionSymbol = symbols.find(s => s.name === symbolName && s.type === 'function');
270
+ if (!functionSymbol) {
271
+ throw new Error(`Function '${symbolName}' not found`);
272
+ }
273
+ // Get function body
274
+ const content = await fs.readFile(filePath, 'utf-8');
275
+ const lines = content.split('\n');
276
+ const functionLines = lines.slice(functionSymbol.startPosition.row, functionSymbol.endPosition.row + 1);
277
+ const functionBody = this.extractFunctionBody(functionLines.join('\n'));
278
+ // Find all calls to this function
279
+ const usageSearch = await this.symbolSearch.execute({
280
+ query: symbolName,
281
+ searchPath: path.dirname(filePath),
282
+ includeUsages: true,
283
+ fuzzyMatch: false
284
+ });
285
+ if (!usageSearch.success || !usageSearch.output) {
286
+ throw new Error("Failed to find function usages");
287
+ }
288
+ const usageParsed = JSON.parse(usageSearch.output);
289
+ if (!usageParsed.success) {
290
+ throw new Error("Failed to find function usages");
291
+ }
292
+ const usages = usageParsed.result.symbols;
293
+ const functionCalls = this.findFunctionCalls(usages, symbolName);
294
+ // Generate inline replacements
295
+ const fileChanges = [];
296
+ const affectedFiles = new Set();
297
+ for (const call of functionCalls) {
298
+ affectedFiles.add(call.filePath);
299
+ const inlinedCode = this.inlineFunction(functionBody, call.arguments);
300
+ // Add change to replace function call with inlined code
301
+ const changes = [{
302
+ startLine: call.line,
303
+ startColumn: call.column,
304
+ endLine: call.line,
305
+ endColumn: call.column + call.text.length,
306
+ oldText: call.text,
307
+ newText: inlinedCode,
308
+ type: 'replace'
309
+ }];
310
+ fileChanges.push({
311
+ filePath: call.filePath,
312
+ changes
313
+ });
314
+ }
315
+ // Remove function definition
316
+ const definitionChanges = [{
317
+ startLine: functionSymbol.startPosition.row,
318
+ startColumn: 0,
319
+ endLine: functionSymbol.endPosition.row + 1,
320
+ endColumn: 0,
321
+ oldText: functionLines.join('\n'),
322
+ newText: preserveComments ? this.extractComments(functionLines.join('\n')) : '',
323
+ type: 'replace'
324
+ }];
325
+ fileChanges.push({
326
+ filePath,
327
+ changes: definitionChanges
328
+ });
329
+ const safety = {
330
+ riskLevel: 'high',
331
+ potentialIssues: [
332
+ 'Code duplication',
333
+ 'Variable scope changes',
334
+ 'Performance implications',
335
+ 'Debugging complexity'
336
+ ],
337
+ affectedFiles: affectedFiles.size,
338
+ affectedSymbols: functionCalls.length + 1,
339
+ requiresTests: true,
340
+ breakingChanges: false
341
+ };
342
+ const preview = this.generatePreview(fileChanges, 'inline_function', symbolName, 'inlined code');
343
+ return {
344
+ type: 'inline_function',
345
+ description: `Inline function '${symbolName}' at all call sites`,
346
+ files: fileChanges,
347
+ preview,
348
+ safety
349
+ };
350
+ }
351
+ async performInlineVariable(request) {
352
+ // Similar to inline function but for variables
353
+ throw new Error("Inline variable not yet implemented");
354
+ }
355
+ async performMove(request) {
356
+ // Move function or class to different file
357
+ throw new Error("Move operation not yet implemented");
358
+ }
359
+ // Helper methods
360
+ isValidIdentifier(name) {
361
+ return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);
362
+ }
363
+ async analyzeSafety(refs, operation) {
364
+ const affectedFiles = new Set(refs.map(ref => ref.filePath)).size;
365
+ const affectedSymbols = refs.length;
366
+ let riskLevel = 'low';
367
+ const potentialIssues = [];
368
+ if (affectedFiles > 5) {
369
+ riskLevel = 'medium';
370
+ potentialIssues.push('Many files affected');
371
+ }
372
+ if (affectedSymbols > 20) {
373
+ riskLevel = 'high';
374
+ potentialIssues.push('Many symbol occurrences');
375
+ }
376
+ if (operation === 'rename') {
377
+ potentialIssues.push('Potential naming conflicts');
378
+ }
379
+ return {
380
+ riskLevel,
381
+ potentialIssues,
382
+ affectedFiles,
383
+ affectedSymbols,
384
+ requiresTests: affectedFiles > 1,
385
+ breakingChanges: false
386
+ };
387
+ }
388
+ async generateRenameChanges(ref, oldName, newName, includeComments, includeStrings) {
389
+ const changes = [];
390
+ const content = await fs.readFile(ref.filePath, 'utf-8');
391
+ const lines = content.split('\n');
392
+ // Simple text replacement for now
393
+ for (let i = 0; i < lines.length; i++) {
394
+ const line = lines[i];
395
+ // Skip comments and strings if not requested
396
+ if (!includeComments && (line.trim().startsWith('//') || line.trim().startsWith('*'))) {
397
+ continue;
398
+ }
399
+ if (!includeStrings && (line.includes('"') || line.includes("'"))) {
400
+ continue;
401
+ }
402
+ // Find word boundaries to avoid partial matches
403
+ const regex = new RegExp(`\\b${oldName}\\b`, 'g');
404
+ let match;
405
+ while ((match = regex.exec(line)) !== null) {
406
+ changes.push({
407
+ startLine: i,
408
+ startColumn: match.index,
409
+ endLine: i,
410
+ endColumn: match.index + oldName.length,
411
+ oldText: oldName,
412
+ newText: newName,
413
+ type: 'replace'
414
+ });
415
+ }
416
+ }
417
+ return changes;
418
+ }
419
+ async analyzeExtractedCode(code, filePath) {
420
+ // Analyze variables, return statements, etc.
421
+ const lines = code.split('\n');
422
+ const parameters = [];
423
+ const localVariables = [];
424
+ let inferredReturnType = 'void';
425
+ let returnVariable;
426
+ // Simple analysis - could be enhanced with AST parsing
427
+ for (const line of lines) {
428
+ if (line.includes('return ')) {
429
+ const returnMatch = line.match(/return\s+([^;]+)/);
430
+ if (returnMatch) {
431
+ returnVariable = returnMatch[1].trim();
432
+ inferredReturnType = 'any'; // Could infer better
433
+ }
434
+ }
435
+ }
436
+ return {
437
+ parameters,
438
+ localVariables,
439
+ inferredReturnType,
440
+ returnVariable
441
+ };
442
+ }
443
+ generateFunctionSignature(name, parameters, returnType) {
444
+ const params = parameters.map(p => `${p.name}${p.type ? `: ${p.type}` : ''}${p.defaultValue ? ` = ${p.defaultValue}` : ''}`).join(', ');
445
+ return `function ${name}(${params})${returnType !== 'void' ? `: ${returnType}` : ''}`;
446
+ }
447
+ createExtractedFunction(signature, body, localVars) {
448
+ return `${signature} {\n${body}\n}`;
449
+ }
450
+ generateFunctionCall(name, parameters, returnVar) {
451
+ const args = parameters.map(p => p.name).join(', ');
452
+ const call = `${name}(${args})`;
453
+ return returnVar ? `const ${returnVar} = ${call};` : `${call};`;
454
+ }
455
+ getIndentation(line) {
456
+ const match = line.match(/^(\s*)/);
457
+ return match ? match[1] : '';
458
+ }
459
+ extractFunctionBody(functionCode) {
460
+ // Extract just the body content between { }
461
+ const lines = functionCode.split('\n');
462
+ const bodyStart = lines.findIndex(line => line.includes('{')) + 1;
463
+ const bodyEnd = lines.length - 1; // Assume last line has }
464
+ return lines.slice(bodyStart, bodyEnd).join('\n');
465
+ }
466
+ findFunctionCalls(usages, functionName) {
467
+ // Find actual function calls vs just references
468
+ const calls = [];
469
+ for (const usage of usages) {
470
+ for (const u of usage.usages) {
471
+ if (u.type === 'call') {
472
+ calls.push({
473
+ filePath: usage.filePath,
474
+ line: u.line,
475
+ column: u.column,
476
+ text: u.context,
477
+ arguments: [] // Would parse actual arguments
478
+ });
479
+ }
480
+ }
481
+ }
482
+ return calls;
483
+ }
484
+ inlineFunction(functionBody, args) {
485
+ // Replace parameters with arguments in function body
486
+ // This is a simplified implementation
487
+ return functionBody;
488
+ }
489
+ extractComments(code) {
490
+ const lines = code.split('\n');
491
+ const comments = lines.filter(line => line.trim().startsWith('//') ||
492
+ line.trim().startsWith('*') ||
493
+ line.trim().startsWith('/*'));
494
+ return comments.join('\n');
495
+ }
496
+ generatePreview(fileChanges, operation, oldValue, newValue) {
497
+ let preview = `${operation.toUpperCase()}: ${oldValue} → ${newValue}\n\n`;
498
+ for (const fileChange of fileChanges) {
499
+ preview += `File: ${fileChange.filePath}\n`;
500
+ preview += `Changes: ${fileChange.changes.length}\n`;
501
+ for (const change of fileChange.changes.slice(0, 3)) { // Show first 3 changes
502
+ preview += ` Line ${change.startLine}: ${change.oldText} → ${change.newText}\n`;
503
+ }
504
+ if (fileChange.changes.length > 3) {
505
+ preview += ` ... and ${fileChange.changes.length - 3} more changes\n`;
506
+ }
507
+ preview += '\n';
508
+ }
509
+ return preview;
510
+ }
511
+ getSchema() {
512
+ return {
513
+ type: "object",
514
+ properties: {
515
+ operation: {
516
+ type: "string",
517
+ enum: ["rename", "extract_function", "extract_variable", "inline_function", "inline_variable", "move_function", "move_class"],
518
+ description: "Type of refactoring operation to perform"
519
+ },
520
+ symbolName: {
521
+ type: "string",
522
+ description: "Name of symbol to refactor (for rename, inline, move operations)"
523
+ },
524
+ newName: {
525
+ type: "string",
526
+ description: "New name for symbol (for rename operation)"
527
+ },
528
+ filePath: {
529
+ type: "string",
530
+ description: "Path to file containing the symbol"
531
+ },
532
+ scope: {
533
+ type: "string",
534
+ enum: ["file", "project", "global"],
535
+ description: "Scope of refactoring operation",
536
+ default: "project"
537
+ },
538
+ includeComments: {
539
+ type: "boolean",
540
+ description: "Include comments in rename operation",
541
+ default: false
542
+ },
543
+ includeStrings: {
544
+ type: "boolean",
545
+ description: "Include string literals in rename operation",
546
+ default: false
547
+ },
548
+ startLine: {
549
+ type: "integer",
550
+ description: "Start line for extract operations"
551
+ },
552
+ endLine: {
553
+ type: "integer",
554
+ description: "End line for extract operations"
555
+ },
556
+ startColumn: {
557
+ type: "integer",
558
+ description: "Start column for extract variable operation"
559
+ },
560
+ endColumn: {
561
+ type: "integer",
562
+ description: "End column for extract variable operation"
563
+ },
564
+ functionName: {
565
+ type: "string",
566
+ description: "Name for extracted function"
567
+ },
568
+ variableName: {
569
+ type: "string",
570
+ description: "Name for extracted variable"
571
+ },
572
+ variableType: {
573
+ type: "string",
574
+ description: "Type annotation for extracted variable"
575
+ },
576
+ parameters: {
577
+ type: "array",
578
+ items: {
579
+ type: "object",
580
+ properties: {
581
+ name: { type: "string" },
582
+ type: { type: "string" },
583
+ defaultValue: { type: "string" }
584
+ },
585
+ required: ["name"]
586
+ },
587
+ description: "Parameters for extracted function"
588
+ },
589
+ returnType: {
590
+ type: "string",
591
+ description: "Return type for extracted function"
592
+ },
593
+ targetFile: {
594
+ type: "string",
595
+ description: "Target file for move operations"
596
+ },
597
+ createTargetFile: {
598
+ type: "boolean",
599
+ description: "Create target file if it doesn't exist",
600
+ default: false
601
+ },
602
+ preserveComments: {
603
+ type: "boolean",
604
+ description: "Preserve comments in inline operations",
605
+ default: true
606
+ }
607
+ },
608
+ required: ["operation"]
609
+ };
610
+ }
611
+ }
612
+ //# sourceMappingURL=refactoring-assistant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refactoring-assistant.js","sourceRoot":"","sources":["../../../src/tools/intelligence/refactoring-assistant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAc,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAmB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAyExB,MAAM,OAAO,wBAAwB;IASnC;QARA,SAAI,GAAG,uBAAuB,CAAC;QAC/B,gBAAW,GAAG,iGAAiG,CAAC;QAQ9G,IAAI,CAAC,SAAS,GAAG,IAAI,aAAa,EAAE,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC3C,IAAI,CAAC,eAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACjD,IAAI,CAAC,gBAAgB,GAAG,IAAI,oBAAoB,EAAE,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAS;QACrB,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,EAAE,GAAG,IAAI,CAAC;YAE7C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YAED,IAAI,MAA4B,CAAC;YAEjC,QAAQ,SAAS,EAAE,CAAC;gBAClB,KAAK,QAAQ;oBACX,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAA8B,CAAC,CAAC;oBAClE,MAAM;gBACR,KAAK,kBAAkB;oBACrB,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAuC,CAAC,CAAC;oBACpF,MAAM;gBACR,KAAK,kBAAkB;oBACrB,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;oBAC1D,MAAM;gBACR,KAAK,iBAAiB;oBACpB,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,aAA8B,CAAC,CAAC;oBAC1E,MAAM;gBACR,KAAK,iBAAiB;oBACpB,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,aAA8B,CAAC,CAAC;oBAC1E,MAAM;gBACR,KAAK,eAAe,CAAC;gBACrB,KAAK,YAAY;oBACf,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAA4B,CAAC,CAAC;oBAC9D,MAAM;gBACR;oBACE,MAAM,IAAI,KAAK,CAAC,sCAAsC,SAAS,EAAE,CAAC,CAAC;YACvE,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACxC,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,OAAsB;QAChD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;QAE1F,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,qCAAqC;QACrC,MAAM,UAAU,GAAG,KAAK,KAAK,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACzF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YACnD,KAAK,EAAE,UAAU;YACjB,UAAU;YACV,aAAa,EAAE,IAAI;YACnB,UAAU,EAAE,KAAK;YACjB,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,OAA4B,CAAC;QAE9D,kBAAkB;QAClB,MAAM,YAAY,GAAG,KAAK,KAAK,MAAM,IAAI,QAAQ;YAC/C,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;YACrD,CAAC,CAAC,UAAU,CAAC;QAEf,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,gCAAgC,CAAC,CAAC;QACzE,CAAC;QAED,0BAA0B;QAC1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAEhE,mBAAmB;QACnB,MAAM,WAAW,GAA4B,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QAExC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEhC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAC9C,GAAG,EACH,UAAU,EACV,OAAO,EACP,eAAe,EACf,cAAc,CACf,CAAC;YAEF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,WAAW,CAAC,IAAI,CAAC;oBACf,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAEjF,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,WAAW,UAAU,SAAS,OAAO,MAAM,KAAK,SAAS;YACtE,KAAK,EAAE,WAAW;YAClB,OAAO;YACP,MAAM;SACP,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,OAA+B;QAClE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,GAAG,EAAE,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAE5F,IAAI,CAAC,QAAQ,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,YAAY,EAAE,CAAC;YACnF,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,SAAS,GAAG,CAAC,IAAI,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,GAAG,OAAO,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QAED,yBAAyB;QACzB,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/C,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAE1E,8BAA8B;QAC9B,MAAM,iBAAiB,GAAG,IAAI,CAAC,yBAAyB,CACtD,YAAY,EACZ,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EACjE,UAAU,IAAI,QAAQ,CAAC,kBAAkB,CAC1C,CAAC;QAEF,0BAA0B;QAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAC9C,iBAAiB,EACjB,aAAa,EACb,QAAQ,CAAC,cAAc,CACxB,CAAC;QAEF,yBAAyB;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAC5C,YAAY,EACZ,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,cAAc,CACxB,CAAC;QAEF,iBAAiB;QACjB,MAAM,OAAO,GAAiB;YAC5B,4CAA4C;YAC5C;gBACE,SAAS;gBACT,WAAW,EAAE,CAAC;gBACd,OAAO;gBACP,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM;gBAChC,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,YAAY;gBACrB,IAAI,EAAE,SAAS;aAChB;YACD,sEAAsE;YACtE;gBACE,SAAS,EAAE,OAAO,GAAG,CAAC;gBACtB,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,OAAO,GAAG,CAAC;gBACpB,SAAS,EAAE,CAAC;gBACZ,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,IAAI,GAAG,WAAW,GAAG,IAAI;gBAClC,IAAI,EAAE,QAAQ;aACf;SACF,CAAC;QAEF,MAAM,MAAM,GAAmB;YAC7B,SAAS,EAAE,QAAQ;YACnB,eAAe,EAAE;gBACf,wBAAwB;gBACxB,6BAA6B;gBAC7B,mCAAmC;aACpC;YACD,aAAa,EAAE,CAAC;YAChB,eAAe,EAAE,CAAC;YAClB,aAAa,EAAE,IAAI;YACnB,eAAe,EAAE,KAAK;SACvB,CAAC;QAEF,MAAM,WAAW,GAA4B,CAAC;gBAC5C,QAAQ;gBACR,OAAO;aACR,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;QAEnG,OAAO;YACL,IAAI,EAAE,kBAAkB;YACxB,WAAW,EAAE,qBAAqB,YAAY,gBAAgB,SAAS,IAAI,OAAO,EAAE;YACpF,KAAK,EAAE,WAAW;YAClB,OAAO;YACP,MAAM;SACP,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,IAAS;QAC5C,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAElG,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,qBAAqB;QACrB,MAAM,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAEtC,IAAI,UAAkB,CAAC;QACvB,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YAC1B,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI;gBAC/C,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;gBACrD,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACrD,CAAC;QAED,gCAAgC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,GAAG,MAAM,SAAS,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;QAE1H,MAAM,OAAO,GAAiB;YAC5B,8BAA8B;YAC9B;gBACE,SAAS;gBACT,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,SAAS;gBAClB,SAAS,EAAE,CAAC;gBACZ,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,cAAc,GAAG,IAAI;gBAC9B,IAAI,EAAE,QAAQ;aACf;YACD,mCAAmC;YACnC;gBACE,SAAS,EAAE,SAAS,GAAG,CAAC,EAAE,4BAA4B;gBACtD,WAAW;gBACX,OAAO,EAAE,OAAO,GAAG,CAAC;gBACpB,SAAS;gBACT,OAAO,EAAE,UAAU;gBACnB,OAAO,EAAE,YAAY;gBACrB,IAAI,EAAE,SAAS;aAChB;SACF,CAAC;QAEF,MAAM,MAAM,GAAmB;YAC7B,SAAS,EAAE,KAAK;YAChB,eAAe,EAAE,CAAC,yBAAyB,CAAC;YAC5C,aAAa,EAAE,CAAC;YAChB,eAAe,EAAE,CAAC;YAClB,aAAa,EAAE,KAAK;YACpB,eAAe,EAAE,KAAK;SACvB,CAAC;QAEF,MAAM,WAAW,GAA4B,CAAC;gBAC5C,QAAQ;gBACR,OAAO;aACR,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QAEhG,OAAO;YACL,IAAI,EAAE,kBAAkB;YACxB,WAAW,EAAE,qBAAqB,YAAY,mBAAmB;YACjE,KAAK,EAAE,WAAW;YAClB,OAAO;YACP,MAAM;SACP,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,OAAsB;QACxD,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;QAE3D,2BAA2B;QAC3B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC/C,QAAQ;YACR,cAAc,EAAE,IAAI;YACpB,WAAW,EAAE,CAAC,UAAU,CAAC;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAuB,CAAC;QACtD,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAEzF,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,aAAa,UAAU,aAAa,CAAC,CAAC;QACxD,CAAC;QAED,oBAAoB;QACpB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACxG,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAExE,kCAAkC;QAClC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAClD,KAAK,EAAE,UAAU;YACjB,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YAClC,aAAa,EAAE,IAAI;YACnB,UAAU,EAAE,KAAK;SAClB,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,OAA4B,CAAC;QAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAEjE,+BAA+B;QAC/B,MAAM,WAAW,GAA4B,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QAExC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAEtE,wDAAwD;YACxD,MAAM,OAAO,GAAiB,CAAC;oBAC7B,SAAS,EAAE,IAAI,CAAC,IAAI;oBACpB,WAAW,EAAE,IAAI,CAAC,MAAM;oBACxB,OAAO,EAAE,IAAI,CAAC,IAAI;oBAClB,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;oBACzC,OAAO,EAAE,IAAI,CAAC,IAAI;oBAClB,OAAO,EAAE,WAAW;oBACpB,IAAI,EAAE,SAAS;iBAChB,CAAC,CAAC;YAEH,WAAW,CAAC,IAAI,CAAC;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,6BAA6B;QAC7B,MAAM,iBAAiB,GAAiB,CAAC;gBACvC,SAAS,EAAE,cAAc,CAAC,aAAa,CAAC,GAAG;gBAC3C,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,cAAc,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;gBAC3C,SAAS,EAAE,CAAC;gBACZ,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC/E,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;QAEH,WAAW,CAAC,IAAI,CAAC;YACf,QAAQ;YACR,OAAO,EAAE,iBAAiB;SAC3B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAmB;YAC7B,SAAS,EAAE,MAAM;YACjB,eAAe,EAAE;gBACf,kBAAkB;gBAClB,wBAAwB;gBACxB,0BAA0B;gBAC1B,sBAAsB;aACvB;YACD,aAAa,EAAE,aAAa,CAAC,IAAI;YACjC,eAAe,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC;YACzC,aAAa,EAAE,IAAI;YACnB,eAAe,EAAE,KAAK;SACvB,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;QAEjG,OAAO;YACL,IAAI,EAAE,iBAAiB;YACvB,WAAW,EAAE,oBAAoB,UAAU,qBAAqB;YAChE,KAAK,EAAE,WAAW;YAClB,OAAO;YACP,MAAM;SACP,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,OAAsB;QACxD,+CAA+C;QAC/C,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,OAAoB;QAC5C,2CAA2C;QAC3C,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,iBAAiB;IAET,iBAAiB,CAAC,IAAY;QACpC,OAAO,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,IAAuB,EAAE,SAAiB;QACpE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;QAEpC,IAAI,SAAS,GAA8B,KAAK,CAAC;QACjD,MAAM,eAAe,GAAa,EAAE,CAAC;QAErC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACtB,SAAS,GAAG,QAAQ,CAAC;YACrB,eAAe,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,eAAe,GAAG,EAAE,EAAE,CAAC;YACzB,SAAS,GAAG,MAAM,CAAC;YACnB,eAAe,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,eAAe,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACrD,CAAC;QAED,OAAO;YACL,SAAS;YACT,eAAe;YACf,aAAa;YACb,eAAe;YACf,aAAa,EAAE,aAAa,GAAG,CAAC;YAChC,eAAe,EAAE,KAAK;SACvB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,GAAoB,EACpB,OAAe,EACf,OAAe,EACf,eAAwB,EACxB,cAAuB;QAEvB,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,kCAAkC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEtB,6CAA6C;YAC7C,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACtF,SAAS;YACX,CAAC;YAED,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAClE,SAAS;YACX,CAAC;YAED,gDAAgD;YAChD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,OAAO,KAAK,EAAE,GAAG,CAAC,CAAC;YAClD,IAAI,KAAK,CAAC;YAEV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC;oBACX,SAAS,EAAE,CAAC;oBACZ,WAAW,EAAE,KAAK,CAAC,KAAK;oBACxB,OAAO,EAAE,CAAC;oBACV,SAAS,EAAE,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM;oBACvC,OAAO,EAAE,OAAO;oBAChB,OAAO,EAAE,OAAO;oBAChB,IAAI,EAAE,SAAS;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,IAAY,EAAE,QAAgB;QAC/D,6CAA6C;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,IAAI,kBAAkB,GAAG,MAAM,CAAC;QAChC,IAAI,cAAkC,CAAC;QAEvC,uDAAuD;QACvD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBACnD,IAAI,WAAW,EAAE,CAAC;oBAChB,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACvC,kBAAkB,GAAG,KAAK,CAAC,CAAC,qBAAqB;gBACnD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,UAAU;YACV,cAAc;YACd,kBAAkB;YAClB,cAAc;SACf,CAAC;IACJ,CAAC;IAEO,yBAAyB,CAC/B,IAAY,EACZ,UAAgC,EAChC,UAAkB;QAElB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAChC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACzF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO,YAAY,IAAI,IAAI,MAAM,IAAI,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACxF,CAAC;IAEO,uBAAuB,CAC7B,SAAiB,EACjB,IAAY,EACZ,SAAmB;QAEnB,OAAO,GAAG,SAAS,OAAO,IAAI,KAAK,CAAC;IACtC,CAAC;IAEO,oBAAoB,CAC1B,IAAY,EACZ,UAAgC,EAChC,SAAkB;QAElB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC;QAEhC,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,SAAS,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;IAClE,CAAC;IAEO,cAAc,CAAC,IAAY;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,CAAC;IAEO,mBAAmB,CAAC,YAAoB;QAC9C,4CAA4C;QAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,yBAAyB;QAE3D,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAEO,iBAAiB,CAAC,MAAyB,EAAE,YAAoB;QACvE,gDAAgD;QAChD,MAAM,KAAK,GAAU,EAAE,CAAC;QAExB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC7B,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACtB,KAAK,CAAC,IAAI,CAAC;wBACT,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,IAAI,EAAE,CAAC,CAAC,OAAO;wBACf,SAAS,EAAE,EAAE,CAAC,+BAA+B;qBAC9C,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,cAAc,CAAC,YAAoB,EAAE,IAAc;QACzD,qDAAqD;QACrD,sCAAsC;QACtC,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,eAAe,CAAC,IAAY;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CACnC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAC5B,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAC3B,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAC7B,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAEO,eAAe,CACrB,WAAoC,EACpC,SAAiB,EACjB,QAAgB,EAChB,QAAgB;QAEhB,IAAI,OAAO,GAAG,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,QAAQ,MAAM,QAAQ,MAAM,CAAC;QAE1E,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,OAAO,IAAI,SAAS,UAAU,CAAC,QAAQ,IAAI,CAAC;YAC5C,OAAO,IAAI,YAAY,UAAU,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;YAErD,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,uBAAuB;gBAC5E,OAAO,IAAI,UAAU,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,OAAO,MAAM,MAAM,CAAC,OAAO,IAAI,CAAC;YACnF,CAAC;YAED,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,OAAO,IAAI,aAAa,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,iBAAiB,CAAC;YACzE,CAAC;YAED,OAAO,IAAI,IAAI,CAAC;QAClB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,SAAS;QACP,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,CAAC;oBAC7H,WAAW,EAAE,0CAA0C;iBACxD;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kEAAkE;iBAChF;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4CAA4C;iBAC1D;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oCAAoC;iBAClD;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC;oBACnC,WAAW,EAAE,gCAAgC;oBAC7C,OAAO,EAAE,SAAS;iBACnB;gBACD,eAAe,EAAE;oBACf,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,sCAAsC;oBACnD,OAAO,EAAE,KAAK;iBACf;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,6CAA6C;oBAC1D,OAAO,EAAE,KAAK;iBACf;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,mCAAmC;iBACjD;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,iCAAiC;iBAC/C;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,6CAA6C;iBAC3D;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,2CAA2C;iBACzD;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6BAA6B;iBAC3C;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6BAA6B;iBAC3C;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wCAAwC;iBACtD;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxB,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBACjC;wBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;qBACnB;oBACD,WAAW,EAAE,mCAAmC;iBACjD;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oCAAoC;iBAClD;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iCAAiC;iBAC/C;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,wCAAwC;oBACrD,OAAO,EAAE,KAAK;iBACf;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,wCAAwC;oBACrD,OAAO,EAAE,IAAI;iBACd;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB,CAAC;IACJ,CAAC;CACF"}