mcp-adr-analysis-server 2.0.5 → 2.0.7

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 (37) hide show
  1. package/dist/src/index.d.ts +3 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +249 -0
  4. package/dist/src/index.js.map +1 -1
  5. package/dist/src/tools/deployment-guidance-tool.d.ts +21 -0
  6. package/dist/src/tools/deployment-guidance-tool.d.ts.map +1 -0
  7. package/dist/src/tools/deployment-guidance-tool.js +289 -0
  8. package/dist/src/tools/deployment-guidance-tool.js.map +1 -0
  9. package/dist/src/tools/smart-git-push-tool.d.ts +24 -0
  10. package/dist/src/tools/smart-git-push-tool.d.ts.map +1 -0
  11. package/dist/src/tools/smart-git-push-tool.js +526 -0
  12. package/dist/src/tools/smart-git-push-tool.js.map +1 -0
  13. package/dist/src/tools/todo-management-tool.d.ts +166 -0
  14. package/dist/src/tools/todo-management-tool.d.ts.map +1 -0
  15. package/dist/src/tools/todo-management-tool.js +472 -0
  16. package/dist/src/tools/todo-management-tool.js.map +1 -0
  17. package/dist/src/utils/enhanced-sensitive-detector.d.ts +61 -0
  18. package/dist/src/utils/enhanced-sensitive-detector.d.ts.map +1 -0
  19. package/dist/src/utils/enhanced-sensitive-detector.js +437 -0
  20. package/dist/src/utils/enhanced-sensitive-detector.js.map +1 -0
  21. package/dist/src/utils/interactive-approval.d.ts +63 -0
  22. package/dist/src/utils/interactive-approval.d.ts.map +1 -0
  23. package/dist/src/utils/interactive-approval.js +441 -0
  24. package/dist/src/utils/interactive-approval.js.map +1 -0
  25. package/dist/src/utils/llm-artifact-detector.d.ts +76 -0
  26. package/dist/src/utils/llm-artifact-detector.d.ts.map +1 -0
  27. package/dist/src/utils/llm-artifact-detector.js +422 -0
  28. package/dist/src/utils/llm-artifact-detector.js.map +1 -0
  29. package/dist/src/utils/location-filter.d.ts +79 -0
  30. package/dist/src/utils/location-filter.d.ts.map +1 -0
  31. package/dist/src/utils/location-filter.js +327 -0
  32. package/dist/src/utils/location-filter.js.map +1 -0
  33. package/dist/src/utils/release-readiness-detector.d.ts +47 -0
  34. package/dist/src/utils/release-readiness-detector.d.ts.map +1 -0
  35. package/dist/src/utils/release-readiness-detector.js +413 -0
  36. package/dist/src/utils/release-readiness-detector.js.map +1 -0
  37. package/package.json +2 -2
@@ -0,0 +1,441 @@
1
+ /**
2
+ * Interactive approval workflow for smart git push
3
+ *
4
+ * Handles user interaction for approving/rejecting files with issues
5
+ */
6
+ import { createInterface } from 'readline';
7
+ /**
8
+ * Main interactive approval function
9
+ */
10
+ export async function handleInteractiveApproval(items, options) {
11
+ const result = {
12
+ approved: [],
13
+ rejected: [],
14
+ moved: [],
15
+ ignored: [],
16
+ actions: [],
17
+ proceed: false
18
+ };
19
+ if (items.length === 0) {
20
+ result.proceed = true;
21
+ return result;
22
+ }
23
+ // Handle non-interactive mode
24
+ if (!options.interactiveMode) {
25
+ return handleNonInteractiveApproval(items, options);
26
+ }
27
+ // Display summary
28
+ displayApprovalSummary(items);
29
+ // Group items by severity for better UX
30
+ const errorItems = items.filter(item => item.severity === 'error');
31
+ const warningItems = items.filter(item => item.severity === 'warning');
32
+ const infoItems = items.filter(item => item.severity === 'info');
33
+ // Handle errors first (these are most critical)
34
+ if (errorItems.length > 0) {
35
+ console.log('\n🚨 CRITICAL ISSUES (Must be resolved before proceeding)');
36
+ for (const item of errorItems) {
37
+ const action = await handleItemApproval(item, options, true);
38
+ result.actions.push(action);
39
+ applyAction(action, result);
40
+ }
41
+ }
42
+ // Handle warnings
43
+ if (warningItems.length > 0) {
44
+ console.log('\n⚠️ WARNING ISSUES (Review recommended)');
45
+ for (const item of warningItems) {
46
+ const action = await handleItemApproval(item, options, false);
47
+ result.actions.push(action);
48
+ applyAction(action, result);
49
+ }
50
+ }
51
+ // Handle info items (auto-approve if option set)
52
+ if (infoItems.length > 0) {
53
+ if (options.autoApproveInfo) {
54
+ console.log(`\n✅ Auto-approving ${infoItems.length} info-level items`);
55
+ for (const item of infoItems) {
56
+ const action = { type: 'approve', filePath: item.filePath };
57
+ result.actions.push(action);
58
+ applyAction(action, result);
59
+ }
60
+ }
61
+ else {
62
+ console.log('\n💡 INFO ITEMS (Low priority)');
63
+ for (const item of infoItems) {
64
+ const action = await handleItemApproval(item, options, false);
65
+ result.actions.push(action);
66
+ applyAction(action, result);
67
+ }
68
+ }
69
+ }
70
+ // Final confirmation
71
+ result.proceed = await getFinalConfirmation(result, options);
72
+ return result;
73
+ }
74
+ /**
75
+ * Handle non-interactive approval
76
+ */
77
+ function handleNonInteractiveApproval(items, options) {
78
+ const result = {
79
+ approved: [],
80
+ rejected: [],
81
+ moved: [],
82
+ ignored: [],
83
+ actions: [],
84
+ proceed: false
85
+ };
86
+ for (const item of items) {
87
+ let action;
88
+ if (item.severity === 'error' && options.autoRejectErrors) {
89
+ action = { type: 'reject', filePath: item.filePath, reason: 'Auto-rejected due to errors' };
90
+ }
91
+ else if (item.severity === 'info' && options.autoApproveInfo) {
92
+ action = { type: 'approve', filePath: item.filePath };
93
+ }
94
+ else {
95
+ // Default behavior based on severity
96
+ switch (item.severity) {
97
+ case 'error':
98
+ action = { type: 'reject', filePath: item.filePath, reason: 'Automatic rejection due to errors' };
99
+ break;
100
+ case 'warning':
101
+ action = item.allowedInLocation
102
+ ? { type: 'approve', filePath: item.filePath }
103
+ : { type: 'reject', filePath: item.filePath, reason: 'Location violation' };
104
+ break;
105
+ case 'info':
106
+ action = { type: 'approve', filePath: item.filePath };
107
+ break;
108
+ }
109
+ }
110
+ result.actions.push(action);
111
+ applyAction(action, result);
112
+ }
113
+ // In non-interactive mode, proceed if no errors were rejected
114
+ result.proceed = result.rejected.length === 0;
115
+ return result;
116
+ }
117
+ /**
118
+ * Handle approval for a single item
119
+ */
120
+ async function handleItemApproval(item, options, isError) {
121
+ console.log(`\n📄 ${item.filePath}`);
122
+ console.log(` Severity: ${item.severity.toUpperCase()}`);
123
+ console.log(` Confidence: ${(item.confidence * 100).toFixed(1)}%`);
124
+ console.log(` Location Valid: ${item.allowedInLocation ? '✅' : '❌'}`);
125
+ // Display issues
126
+ console.log('\n Issues:');
127
+ for (const issue of item.issues) {
128
+ console.log(` - ${issue.severity.toUpperCase()}: ${issue.message}`);
129
+ if (issue.line) {
130
+ console.log(` Line ${issue.line}`);
131
+ }
132
+ if (issue.context) {
133
+ const contextLines = issue.context.split('\n').slice(0, 3);
134
+ console.log(` Context: ${contextLines.join(' | ')}`);
135
+ }
136
+ }
137
+ // Display suggestions
138
+ if (item.suggestions.length > 0) {
139
+ console.log('\n Suggestions:');
140
+ for (let i = 0; i < item.suggestions.length; i++) {
141
+ console.log(` ${i + 1}. ${item.suggestions[i]}`);
142
+ }
143
+ }
144
+ // Get user choice
145
+ const choices = buildChoices(item, isError);
146
+ const choice = await getUserChoice(choices, options);
147
+ return processChoice(choice, item, options);
148
+ }
149
+ /**
150
+ * Build available choices for user
151
+ */
152
+ function buildChoices(item, isError) {
153
+ const choices = [
154
+ { key: 'a', description: 'Approve (include in commit)', available: !isError },
155
+ { key: 'r', description: 'Reject (exclude from commit)', available: true },
156
+ { key: 'i', description: 'Ignore (add to .gitignore)', available: true },
157
+ { key: 'm', description: 'Move to different location', available: !item.allowedInLocation },
158
+ { key: 'v', description: 'View file content', available: true },
159
+ { key: 'e', description: 'Edit file', available: true },
160
+ { key: 's', description: 'Skip for now', available: false }, // Not implemented yet
161
+ { key: 'h', description: 'Show help', available: true }
162
+ ];
163
+ return choices;
164
+ }
165
+ /**
166
+ * Get user choice
167
+ */
168
+ async function getUserChoice(choices, options) {
169
+ const availableChoices = choices.filter(c => c.available);
170
+ console.log('\n Available actions:');
171
+ for (const choice of availableChoices) {
172
+ console.log(` [${choice.key}] ${choice.description}`);
173
+ }
174
+ if (options.batchMode) {
175
+ console.log(' [all] Apply to all similar files');
176
+ }
177
+ const rl = createInterface({
178
+ input: process.stdin,
179
+ output: process.stdout
180
+ });
181
+ return new Promise((resolve) => {
182
+ const askQuestion = () => {
183
+ rl.question('\n Your choice: ', (answer) => {
184
+ const choice = answer.trim().toLowerCase();
185
+ if (choice === 'h') {
186
+ displayHelp();
187
+ askQuestion();
188
+ }
189
+ else if (availableChoices.some(c => c.key === choice) || choice === 'all') {
190
+ rl.close();
191
+ resolve(choice);
192
+ }
193
+ else {
194
+ console.log(' Invalid choice. Please try again.');
195
+ askQuestion();
196
+ }
197
+ });
198
+ };
199
+ askQuestion();
200
+ });
201
+ }
202
+ /**
203
+ * Process user choice into action
204
+ */
205
+ function processChoice(choice, item, options) {
206
+ switch (choice) {
207
+ case 'a':
208
+ return { type: 'approve', filePath: item.filePath };
209
+ case 'r':
210
+ return { type: 'reject', filePath: item.filePath, reason: 'User rejected' };
211
+ case 'i':
212
+ return { type: 'ignore', filePath: item.filePath };
213
+ case 'm':
214
+ const targetDir = getMoveTarget(item);
215
+ return { type: 'move', filePath: item.filePath, target: targetDir };
216
+ case 'v':
217
+ viewFileContent(item.filePath);
218
+ return processChoice(choice, item, options); // Re-prompt after viewing
219
+ case 'e':
220
+ editFile(item.filePath);
221
+ return processChoice(choice, item, options); // Re-prompt after editing
222
+ default:
223
+ return { type: 'reject', filePath: item.filePath, reason: 'Invalid choice' };
224
+ }
225
+ }
226
+ /**
227
+ * Get move target from suggestions
228
+ */
229
+ function getMoveTarget(item) {
230
+ const moveSuggestions = item.suggestions.filter(s => s.includes('Move') || s.includes('move'));
231
+ if (moveSuggestions.length > 0) {
232
+ console.log('\n Suggested locations:');
233
+ for (let i = 0; i < moveSuggestions.length; i++) {
234
+ console.log(` ${i + 1}. ${moveSuggestions[i]}`);
235
+ }
236
+ // For now, extract first suggested directory
237
+ const firstSuggestion = moveSuggestions[0];
238
+ if (firstSuggestion) {
239
+ const dirMatch = firstSuggestion.match(/(?:to|in)\s+(\w+\/)/);
240
+ return dirMatch ? dirMatch[1] : 'scripts/';
241
+ }
242
+ }
243
+ return 'scripts/'; // Default fallback
244
+ }
245
+ /**
246
+ * View file content
247
+ */
248
+ function viewFileContent(filePath) {
249
+ try {
250
+ const fs = require('fs');
251
+ const content = fs.readFileSync(filePath, 'utf8');
252
+ const lines = content.split('\n');
253
+ console.log(`\n Content of ${filePath}:`);
254
+ console.log(' ' + '='.repeat(50));
255
+ // Show first 20 lines
256
+ for (let i = 0; i < Math.min(20, lines.length); i++) {
257
+ console.log(` ${(i + 1).toString().padStart(3)}: ${lines[i]}`);
258
+ }
259
+ if (lines.length > 20) {
260
+ console.log(` ... (${lines.length - 20} more lines)`);
261
+ }
262
+ console.log(' ' + '='.repeat(50));
263
+ }
264
+ catch (error) {
265
+ console.log(` Error reading file: ${error instanceof Error ? error.message : String(error)}`);
266
+ }
267
+ }
268
+ /**
269
+ * Edit file (placeholder - would open in editor)
270
+ */
271
+ function editFile(filePath) {
272
+ console.log(`\n Opening ${filePath} in editor...`);
273
+ console.log(' (This would open your default editor in a real implementation)');
274
+ console.log(' Press Enter to continue after editing...');
275
+ // In a real implementation, this would:
276
+ // 1. Open the file in the user's default editor
277
+ // 2. Wait for the editor to close
278
+ // 3. Re-analyze the file for issues
279
+ }
280
+ /**
281
+ * Apply action to result
282
+ */
283
+ function applyAction(action, result) {
284
+ switch (action.type) {
285
+ case 'approve':
286
+ result.approved.push(action.filePath);
287
+ break;
288
+ case 'reject':
289
+ result.rejected.push(action.filePath);
290
+ break;
291
+ case 'move':
292
+ if (action.target) {
293
+ result.moved.push({ from: action.filePath, to: action.target });
294
+ }
295
+ break;
296
+ case 'ignore':
297
+ result.ignored.push(action.filePath);
298
+ break;
299
+ }
300
+ }
301
+ /**
302
+ * Display approval summary
303
+ */
304
+ function displayApprovalSummary(items) {
305
+ console.log('\n' + '='.repeat(60));
306
+ console.log('🔍 SMART GIT PUSH - VALIDATION RESULTS');
307
+ console.log('='.repeat(60));
308
+ const errorCount = items.filter(item => item.severity === 'error').length;
309
+ const warningCount = items.filter(item => item.severity === 'warning').length;
310
+ const infoCount = items.filter(item => item.severity === 'info').length;
311
+ console.log(`📊 Summary: ${items.length} files with issues`);
312
+ console.log(` 🚨 Errors: ${errorCount}`);
313
+ console.log(` ⚠️ Warnings: ${warningCount}`);
314
+ console.log(` 💡 Info: ${infoCount}`);
315
+ if (errorCount > 0) {
316
+ console.log('\n❌ Files with errors must be resolved before proceeding');
317
+ }
318
+ console.log('\n📋 Review each file and choose an action:');
319
+ }
320
+ /**
321
+ * Get final confirmation
322
+ */
323
+ async function getFinalConfirmation(result, options) {
324
+ console.log('\n' + '='.repeat(60));
325
+ console.log('📋 FINAL SUMMARY');
326
+ console.log('='.repeat(60));
327
+ console.log(`✅ Approved: ${result.approved.length} files`);
328
+ console.log(`❌ Rejected: ${result.rejected.length} files`);
329
+ console.log(`📁 To Move: ${result.moved.length} files`);
330
+ console.log(`🙈 To Ignore: ${result.ignored.length} files`);
331
+ if (result.approved.length > 0) {
332
+ console.log('\n✅ Files to be committed:');
333
+ for (const file of result.approved) {
334
+ console.log(` - ${file}`);
335
+ }
336
+ }
337
+ if (result.rejected.length > 0) {
338
+ console.log('\n❌ Files excluded from commit:');
339
+ for (const file of result.rejected) {
340
+ console.log(` - ${file}`);
341
+ }
342
+ }
343
+ if (result.moved.length > 0) {
344
+ console.log('\n📁 Files to be moved:');
345
+ for (const move of result.moved) {
346
+ console.log(` - ${move.from} → ${move.to}`);
347
+ }
348
+ }
349
+ if (options.dryRun) {
350
+ console.log('\n🔍 DRY RUN - No actual changes will be made');
351
+ return true;
352
+ }
353
+ const rl = createInterface({
354
+ input: process.stdin,
355
+ output: process.stdout
356
+ });
357
+ return new Promise((resolve) => {
358
+ rl.question('\n🚀 Proceed with git push? (y/N): ', (answer) => {
359
+ rl.close();
360
+ const proceed = answer.trim().toLowerCase() === 'y' || answer.trim().toLowerCase() === 'yes';
361
+ resolve(proceed);
362
+ });
363
+ });
364
+ }
365
+ /**
366
+ * Display help
367
+ */
368
+ function displayHelp() {
369
+ console.log('\n' + '='.repeat(40));
370
+ console.log('📖 HELP');
371
+ console.log('='.repeat(40));
372
+ console.log('Actions:');
373
+ console.log(' [a] Approve - Include file in commit');
374
+ console.log(' [r] Reject - Exclude file from commit');
375
+ console.log(' [i] Ignore - Add file to .gitignore');
376
+ console.log(' [m] Move - Move file to appropriate location');
377
+ console.log(' [v] View - Show file content');
378
+ console.log(' [e] Edit - Open file in editor');
379
+ console.log(' [h] Help - Show this help');
380
+ console.log('');
381
+ console.log('Tips:');
382
+ console.log(' - Files with errors must be resolved before proceeding');
383
+ console.log(' - Use [m] to move files to proper directories');
384
+ console.log(' - Use [i] to permanently ignore temporary files');
385
+ console.log(' - Use [v] to examine file content before deciding');
386
+ console.log('='.repeat(40));
387
+ }
388
+ /**
389
+ * Batch approval for similar files
390
+ */
391
+ export function batchApproval(items, action, criteria) {
392
+ const actions = [];
393
+ const referenceItem = items.find(item => item.filePath === action.filePath);
394
+ if (!referenceItem) {
395
+ return [action];
396
+ }
397
+ for (const item of items) {
398
+ let matches = true;
399
+ if (criteria.sameSeverity && item.severity !== referenceItem.severity) {
400
+ matches = false;
401
+ }
402
+ if (criteria.sameIssueType) {
403
+ const itemTypes = item.issues.map(i => i.type);
404
+ const refTypes = referenceItem.issues.map(i => i.type);
405
+ if (!itemTypes.some(type => refTypes.includes(type))) {
406
+ matches = false;
407
+ }
408
+ }
409
+ if (matches) {
410
+ actions.push({
411
+ type: action.type,
412
+ filePath: item.filePath,
413
+ target: action.target,
414
+ reason: `Batch ${action.type} - similar to ${action.filePath}`
415
+ });
416
+ }
417
+ }
418
+ return actions;
419
+ }
420
+ /**
421
+ * Save approval preferences for future use
422
+ */
423
+ export function saveApprovalPreferences(actions, configPath = '.smartgit-approvals.json') {
424
+ try {
425
+ const fs = require('fs');
426
+ const preferences = {
427
+ timestamp: new Date().toISOString(),
428
+ actions: actions.map(action => ({
429
+ pattern: action.filePath.replace(/[^/]+$/, '*'), // Replace filename with wildcard
430
+ type: action.type,
431
+ reason: action.reason
432
+ }))
433
+ };
434
+ fs.writeFileSync(configPath, JSON.stringify(preferences, null, 2));
435
+ console.log(`\n💾 Approval preferences saved to ${configPath}`);
436
+ }
437
+ catch (error) {
438
+ console.log(`\n⚠️ Could not save preferences: ${error instanceof Error ? error.message : String(error)}`);
439
+ }
440
+ }
441
+ //# sourceMappingURL=interactive-approval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-approval.js","sourceRoot":"","sources":["../../../src/utils/interactive-approval.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * LLM Artifact Detection System
3
+ *
4
+ * Detects files and content generated by LLMs that may not be suitable for production
5
+ * Focuses on development artifacts, debug scripts, and temporary files
6
+ */
7
+ export interface LLMArtifactPattern {
8
+ name: string;
9
+ description: string;
10
+ category: 'debug' | 'testing' | 'documentation' | 'experimental' | 'temporary' | 'tutorial';
11
+ severity: 'error' | 'warning' | 'info';
12
+ filePattern?: RegExp;
13
+ contentPattern?: RegExp;
14
+ combinedPattern?: (fileName: string, content: string) => boolean;
15
+ locationExceptions: string[];
16
+ confidence: number;
17
+ }
18
+ export interface LLMArtifactMatch {
19
+ pattern: LLMArtifactPattern;
20
+ matchType: 'filename' | 'content' | 'combined';
21
+ match: string;
22
+ line?: number;
23
+ context?: string;
24
+ confidence: number;
25
+ suggestions: string[];
26
+ }
27
+ export interface LLMArtifactResult {
28
+ filePath: string;
29
+ isLLMArtifact: boolean;
30
+ matches: LLMArtifactMatch[];
31
+ overallConfidence: number;
32
+ severity: 'error' | 'warning' | 'info';
33
+ recommendations: string[];
34
+ allowedInCurrentLocation: boolean;
35
+ }
36
+ /**
37
+ * Comprehensive LLM artifact patterns
38
+ */
39
+ export declare const LLM_ARTIFACT_PATTERNS: LLMArtifactPattern[];
40
+ /**
41
+ * Detect LLM artifacts in a file
42
+ */
43
+ export declare function detectLLMArtifacts(filePath: string, content: string, customPatterns?: LLMArtifactPattern[]): LLMArtifactResult;
44
+ /**
45
+ * Batch analyze multiple files
46
+ */
47
+ export declare function batchDetectLLMArtifacts(files: Array<{
48
+ path: string;
49
+ content: string;
50
+ }>, customPatterns?: LLMArtifactPattern[]): LLMArtifactResult[];
51
+ /**
52
+ * Get summary statistics for LLM artifact detection
53
+ */
54
+ export declare function getLLMArtifactSummary(results: LLMArtifactResult[]): {
55
+ totalFiles: number;
56
+ artifactFiles: number;
57
+ allowedFiles: number;
58
+ errorCount: number;
59
+ warningCount: number;
60
+ infoCount: number;
61
+ categorySummary: Record<string, number>;
62
+ topPatterns: Array<{
63
+ name: string;
64
+ count: number;
65
+ }>;
66
+ };
67
+ /**
68
+ * Create a custom LLM artifact pattern
69
+ */
70
+ export declare function createLLMPattern(name: string, description: string, category: LLMArtifactPattern['category'], severity: LLMArtifactPattern['severity'], options: {
71
+ filePattern?: string;
72
+ contentPattern?: string;
73
+ locationExceptions?: string[];
74
+ confidence?: number;
75
+ }): LLMArtifactPattern;
76
+ //# sourceMappingURL=llm-artifact-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-artifact-detector.d.ts","sourceRoot":"","sources":["../../../src/utils/llm-artifact-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,eAAe,GAAG,cAAc,GAAG,WAAW,GAAG,UAAU,CAAC;IAC5F,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACjE,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,wBAAwB,EAAE,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,kBAAkB,EAoLrD,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,cAAc,GAAE,kBAAkB,EAAO,GACxC,iBAAiB,CA8CnB;AAoMD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAC/C,cAAc,GAAE,kBAAkB,EAAO,GACxC,iBAAiB,EAAE,CAIrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,iBAAiB,EAAE,GAC3B;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD,CAgCA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,EACxC,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,EACxC,OAAO,EAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,kBAAkB,CAWpB"}