@aiready/pattern-detect 0.11.4 → 0.11.5

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 (41) hide show
  1. package/dist/__tests__/context-rules.test.d.ts +2 -0
  2. package/dist/__tests__/context-rules.test.d.ts.map +1 -0
  3. package/dist/__tests__/context-rules.test.js +189 -0
  4. package/dist/__tests__/context-rules.test.js.map +1 -0
  5. package/dist/__tests__/detector.test.d.ts +2 -0
  6. package/dist/__tests__/detector.test.d.ts.map +1 -0
  7. package/dist/__tests__/detector.test.js +259 -0
  8. package/dist/__tests__/detector.test.js.map +1 -0
  9. package/dist/__tests__/grouping.test.d.ts +2 -0
  10. package/dist/__tests__/grouping.test.d.ts.map +1 -0
  11. package/dist/__tests__/grouping.test.js +443 -0
  12. package/dist/__tests__/grouping.test.js.map +1 -0
  13. package/dist/__tests__/scoring.test.d.ts +2 -0
  14. package/dist/__tests__/scoring.test.d.ts.map +1 -0
  15. package/dist/__tests__/scoring.test.js +102 -0
  16. package/dist/__tests__/scoring.test.js.map +1 -0
  17. package/dist/cli.d.ts.map +1 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/context-rules.d.ts +41 -0
  20. package/dist/context-rules.d.ts.map +1 -0
  21. package/dist/context-rules.js +225 -0
  22. package/dist/context-rules.js.map +1 -0
  23. package/dist/detector.d.ts +40 -0
  24. package/dist/detector.d.ts.map +1 -0
  25. package/dist/detector.js +385 -0
  26. package/dist/detector.js.map +1 -0
  27. package/dist/extractors/python-extractor.d.ts +19 -0
  28. package/dist/extractors/python-extractor.d.ts.map +1 -0
  29. package/dist/extractors/python-extractor.js +164 -0
  30. package/dist/extractors/python-extractor.js.map +1 -0
  31. package/dist/grouping.d.ts +54 -0
  32. package/dist/grouping.d.ts.map +1 -0
  33. package/dist/grouping.js +347 -0
  34. package/dist/grouping.js.map +1 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/scoring.d.ts +12 -0
  38. package/dist/scoring.d.ts.map +1 -0
  39. package/dist/scoring.js +116 -0
  40. package/dist/scoring.js.map +1 -0
  41. package/package.json +2 -2
@@ -0,0 +1,443 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { groupDuplicatesByFilePair, createRefactorClusters, filterClustersByImpact, } from '../grouping';
3
+ describe('grouping utilities', () => {
4
+ describe('groupDuplicatesByFilePair', () => {
5
+ it('should group duplicates by file pair', () => {
6
+ const duplicates = [
7
+ {
8
+ file1: 'a.ts',
9
+ file2: 'b.ts',
10
+ line1: 1,
11
+ endLine1: 10,
12
+ line2: 1,
13
+ endLine2: 10,
14
+ similarity: 0.95,
15
+ patternType: 'function',
16
+ tokenCost: 100,
17
+ severity: 'critical',
18
+ reason: 'Test duplicate',
19
+ suggestion: 'Extract to common function',
20
+ matchedRule: null,
21
+ },
22
+ {
23
+ file1: 'a.ts',
24
+ file2: 'b.ts',
25
+ line1: 20,
26
+ endLine1: 30,
27
+ line2: 20,
28
+ endLine2: 30,
29
+ similarity: 0.9,
30
+ patternType: 'function',
31
+ tokenCost: 80,
32
+ severity: 'major',
33
+ reason: 'Another duplicate',
34
+ suggestion: 'Consolidate logic',
35
+ matchedRule: null,
36
+ },
37
+ {
38
+ file1: 'c.ts',
39
+ file2: 'd.ts',
40
+ line1: 1,
41
+ endLine1: 5,
42
+ line2: 1,
43
+ endLine2: 5,
44
+ similarity: 0.85,
45
+ patternType: 'utility',
46
+ tokenCost: 50,
47
+ severity: 'minor',
48
+ reason: 'Utility duplicate',
49
+ suggestion: 'Share utility',
50
+ matchedRule: null,
51
+ },
52
+ ];
53
+ const groups = groupDuplicatesByFilePair(duplicates);
54
+ expect(groups).toHaveLength(2);
55
+ // Find the a.ts::b.ts group
56
+ const abGroup = groups.find(g => g.filePair === 'a.ts::b.ts');
57
+ expect(abGroup).toBeDefined();
58
+ expect(abGroup.occurrences).toBe(2);
59
+ expect(abGroup.totalTokenCost).toBe(180);
60
+ expect(abGroup.averageSimilarity).toBeCloseTo(0.925, 2);
61
+ expect(abGroup.maxSimilarity).toBe(0.95);
62
+ expect(abGroup.severity).toBe('critical'); // Highest severity
63
+ expect(abGroup.lineRanges).toHaveLength(2);
64
+ // Find the c.ts::d.ts group
65
+ const cdGroup = groups.find(g => g.filePair === 'c.ts::d.ts');
66
+ expect(cdGroup).toBeDefined();
67
+ expect(cdGroup.occurrences).toBe(1);
68
+ expect(cdGroup.totalTokenCost).toBe(50);
69
+ });
70
+ it('should normalize file pairs (a::b === b::a)', () => {
71
+ const duplicates = [
72
+ {
73
+ file1: 'a.ts',
74
+ file2: 'b.ts',
75
+ line1: 1,
76
+ endLine1: 10,
77
+ line2: 1,
78
+ endLine2: 10,
79
+ similarity: 0.9,
80
+ patternType: 'function',
81
+ tokenCost: 100,
82
+ severity: 'major',
83
+ reason: 'Test',
84
+ suggestion: 'Fix',
85
+ matchedRule: null,
86
+ },
87
+ {
88
+ file1: 'b.ts',
89
+ file2: 'a.ts',
90
+ line1: 20,
91
+ endLine1: 30,
92
+ line2: 20,
93
+ endLine2: 30,
94
+ similarity: 0.85,
95
+ patternType: 'function',
96
+ tokenCost: 90,
97
+ severity: 'major',
98
+ reason: 'Test',
99
+ suggestion: 'Fix',
100
+ matchedRule: null,
101
+ },
102
+ ];
103
+ const groups = groupDuplicatesByFilePair(duplicates);
104
+ expect(groups).toHaveLength(1);
105
+ expect(groups[0].occurrences).toBe(2);
106
+ expect(groups[0].totalTokenCost).toBe(190);
107
+ });
108
+ it('should deduplicate overlapping line ranges', () => {
109
+ const duplicates = [
110
+ {
111
+ file1: 'a.ts',
112
+ file2: 'b.ts',
113
+ line1: 1,
114
+ endLine1: 10,
115
+ line2: 1,
116
+ endLine2: 10,
117
+ similarity: 0.95,
118
+ patternType: 'function',
119
+ tokenCost: 100,
120
+ severity: 'critical',
121
+ reason: 'Test',
122
+ suggestion: 'Fix',
123
+ matchedRule: null,
124
+ },
125
+ {
126
+ file1: 'a.ts',
127
+ file2: 'b.ts',
128
+ line1: 2,
129
+ endLine1: 9,
130
+ line2: 2,
131
+ endLine2: 9,
132
+ similarity: 0.8,
133
+ patternType: 'function',
134
+ tokenCost: 80,
135
+ severity: 'major',
136
+ reason: 'Test',
137
+ suggestion: 'Fix',
138
+ matchedRule: null,
139
+ },
140
+ {
141
+ file1: 'a.ts',
142
+ file2: 'b.ts',
143
+ line1: 8,
144
+ endLine1: 15,
145
+ line2: 8,
146
+ endLine2: 15,
147
+ similarity: 0.85,
148
+ patternType: 'function',
149
+ tokenCost: 90,
150
+ severity: 'major',
151
+ reason: 'Test',
152
+ suggestion: 'Fix',
153
+ matchedRule: null,
154
+ },
155
+ ];
156
+ const groups = groupDuplicatesByFilePair(duplicates);
157
+ expect(groups).toHaveLength(1);
158
+ // Should keep only the highest similarity overlapping ranges
159
+ // 1-10 overlaps with 2-9 (keep 1-10, 95%)
160
+ // 1-10 overlaps with 8-15 (keep both, different ranges)
161
+ expect(groups[0].lineRanges.length).toBeLessThanOrEqual(2);
162
+ });
163
+ it('should handle empty input', () => {
164
+ const groups = groupDuplicatesByFilePair([]);
165
+ expect(groups).toHaveLength(0);
166
+ });
167
+ });
168
+ describe('createRefactorClusters', () => {
169
+ it('should create blog-seo cluster', () => {
170
+ const duplicates = [
171
+ {
172
+ file1: 'blog/ato-receipt-requirements-2026.tsx',
173
+ file2: 'blog/ato-mileage-rates-2026.tsx',
174
+ line1: 1,
175
+ endLine1: 50,
176
+ line2: 1,
177
+ endLine2: 50,
178
+ similarity: 0.88,
179
+ patternType: 'component',
180
+ tokenCost: 1500,
181
+ severity: 'minor',
182
+ reason: 'SEO boilerplate',
183
+ suggestion: 'Extract BlogPageLayout',
184
+ matchedRule: null,
185
+ },
186
+ {
187
+ file1: 'blog/ato-receipt-requirements-2026.tsx',
188
+ file2: 'blog/tax-deductions-2026.tsx',
189
+ line1: 1,
190
+ endLine1: 50,
191
+ line2: 1,
192
+ endLine2: 50,
193
+ similarity: 0.85,
194
+ patternType: 'component',
195
+ tokenCost: 1400,
196
+ severity: 'minor',
197
+ reason: 'SEO boilerplate',
198
+ suggestion: 'Extract BlogPageLayout',
199
+ matchedRule: null,
200
+ },
201
+ {
202
+ file1: 'blog/ato-mileage-rates-2026.tsx',
203
+ file2: 'blog/tax-deductions-2026.tsx',
204
+ line1: 1,
205
+ endLine1: 50,
206
+ line2: 1,
207
+ endLine2: 50,
208
+ similarity: 0.87,
209
+ patternType: 'component',
210
+ tokenCost: 1450,
211
+ severity: 'minor',
212
+ reason: 'SEO boilerplate',
213
+ suggestion: 'Extract BlogPageLayout',
214
+ matchedRule: null,
215
+ },
216
+ ];
217
+ const clusters = createRefactorClusters(duplicates);
218
+ console.log('Created clusters:', clusters.map(c => ({ id: c.id, name: c.name })));
219
+ const blogCluster = clusters.find(c => c.id.startsWith('blog-seo'));
220
+ expect(blogCluster).toBeDefined();
221
+ expect(blogCluster.name).toContain('Blog SEO Boilerplate');
222
+ expect(blogCluster.files).toHaveLength(3); // 3 unique files
223
+ expect(blogCluster.totalTokenCost).toBe(4350);
224
+ expect(blogCluster.suggestion).toContain('BlogPageLayout');
225
+ });
226
+ it('should create component clusters by category', () => {
227
+ const duplicates = [
228
+ {
229
+ file1: 'components/buttons/PrimaryButton.tsx',
230
+ file2: 'components/buttons/SecondaryButton.tsx',
231
+ line1: 1,
232
+ endLine1: 20,
233
+ line2: 1,
234
+ endLine2: 20,
235
+ similarity: 0.9,
236
+ patternType: 'component',
237
+ tokenCost: 500,
238
+ severity: 'minor',
239
+ reason: 'Button pattern',
240
+ suggestion: 'Extract BaseButton',
241
+ matchedRule: null,
242
+ },
243
+ {
244
+ file1: 'components/buttons/PrimaryButton.tsx',
245
+ file2: 'components/buttons/TertiaryButton.tsx',
246
+ line1: 1,
247
+ endLine1: 20,
248
+ line2: 1,
249
+ endLine2: 20,
250
+ similarity: 0.88,
251
+ patternType: 'component',
252
+ tokenCost: 480,
253
+ severity: 'minor',
254
+ reason: 'Button pattern',
255
+ suggestion: 'Extract BaseButton',
256
+ matchedRule: null,
257
+ },
258
+ {
259
+ file1: 'components/cards/ProductCard.tsx',
260
+ file2: 'components/cards/UserCard.tsx',
261
+ line1: 1,
262
+ endLine1: 30,
263
+ line2: 1,
264
+ endLine2: 30,
265
+ similarity: 0.85,
266
+ patternType: 'component',
267
+ tokenCost: 600,
268
+ severity: 'minor',
269
+ reason: 'Card pattern',
270
+ suggestion: 'Extract BaseCard',
271
+ matchedRule: null,
272
+ },
273
+ {
274
+ file1: 'components/cards/ProductCard.tsx',
275
+ file2: 'components/cards/ProfileCard.tsx',
276
+ line1: 1,
277
+ endLine1: 30,
278
+ line2: 1,
279
+ endLine2: 30,
280
+ similarity: 0.83,
281
+ patternType: 'component',
282
+ tokenCost: 580,
283
+ severity: 'minor',
284
+ reason: 'Card pattern',
285
+ suggestion: 'Extract BaseCard',
286
+ matchedRule: null,
287
+ },
288
+ ];
289
+ const clusters = createRefactorClusters(duplicates);
290
+ console.log('Input duplicates:', duplicates.map(d => ({ file1: d.file1, file2: d.file2, type: d.patternType })));
291
+ console.log('Created clusters:', clusters.map(c => ({ id: c.id, name: c.name, files: c.files })));
292
+ const buttonCluster = clusters.find(c => c.id.includes('button'));
293
+ const cardCluster = clusters.find(c => c.id.includes('card'));
294
+ expect(buttonCluster).toBeDefined();
295
+ expect(buttonCluster.name).toContain('Button');
296
+ expect(buttonCluster.files.length).toBeGreaterThanOrEqual(2);
297
+ expect(cardCluster).toBeDefined();
298
+ expect(cardCluster.name).toContain('Card');
299
+ expect(cardCluster.files.length).toBeGreaterThanOrEqual(2);
300
+ });
301
+ it('should create e2e-test cluster', () => {
302
+ const duplicates = [
303
+ {
304
+ file1: 'e2e/login.test.ts',
305
+ file2: 'e2e/signup.test.ts',
306
+ line1: 10,
307
+ endLine1: 30,
308
+ line2: 10,
309
+ endLine2: 30,
310
+ similarity: 0.92,
311
+ patternType: 'function',
312
+ tokenCost: 400,
313
+ severity: 'minor',
314
+ reason: 'Test helpers',
315
+ suggestion: 'Extract test utilities',
316
+ matchedRule: null,
317
+ },
318
+ {
319
+ file1: 'e2e/login.test.ts',
320
+ file2: 'e2e/profile.test.ts',
321
+ line1: 10,
322
+ endLine1: 30,
323
+ line2: 10,
324
+ endLine2: 30,
325
+ similarity: 0.88,
326
+ patternType: 'function',
327
+ tokenCost: 380,
328
+ severity: 'minor',
329
+ reason: 'Test helpers',
330
+ suggestion: 'Extract test utilities',
331
+ matchedRule: null,
332
+ },
333
+ ];
334
+ const clusters = createRefactorClusters(duplicates);
335
+ const e2eCluster = clusters.find(c => c.id === 'e2e-test-patterns');
336
+ expect(e2eCluster).toBeDefined();
337
+ expect(e2eCluster.name).toContain('E2E Test');
338
+ expect(e2eCluster.suggestion).toContain('test utilities');
339
+ });
340
+ it('should handle empty input', () => {
341
+ const clusters = createRefactorClusters([]);
342
+ expect(clusters).toHaveLength(0);
343
+ });
344
+ });
345
+ describe('filterClustersByImpact', () => {
346
+ it('should filter clusters by minimum token cost', () => {
347
+ const duplicates = [
348
+ {
349
+ file1: 'a.ts',
350
+ file2: 'b.ts',
351
+ line1: 1,
352
+ endLine1: 10,
353
+ line2: 1,
354
+ endLine2: 10,
355
+ similarity: 0.9,
356
+ patternType: 'function',
357
+ tokenCost: 2000,
358
+ severity: 'major',
359
+ reason: 'High cost',
360
+ suggestion: 'Refactor',
361
+ matchedRule: null,
362
+ },
363
+ {
364
+ file1: 'c.ts',
365
+ file2: 'd.ts',
366
+ line1: 1,
367
+ endLine1: 5,
368
+ line2: 1,
369
+ endLine2: 5,
370
+ similarity: 0.8,
371
+ patternType: 'utility',
372
+ tokenCost: 100,
373
+ severity: 'info',
374
+ reason: 'Low cost',
375
+ suggestion: 'Maybe refactor',
376
+ matchedRule: null,
377
+ },
378
+ ];
379
+ const allClusters = createRefactorClusters(duplicates);
380
+ const filtered = filterClustersByImpact(allClusters, 1000, 1);
381
+ // Only clusters with >= 1000 tokens should remain
382
+ expect(filtered.every(c => c.totalTokenCost >= 1000)).toBe(true);
383
+ });
384
+ it('should filter clusters by minimum file count', () => {
385
+ const duplicates = [
386
+ {
387
+ file1: 'a.ts',
388
+ file2: 'b.ts',
389
+ line1: 1,
390
+ endLine1: 10,
391
+ line2: 1,
392
+ endLine2: 10,
393
+ similarity: 0.9,
394
+ patternType: 'function',
395
+ tokenCost: 500,
396
+ severity: 'major',
397
+ reason: 'Test',
398
+ suggestion: 'Fix',
399
+ matchedRule: null,
400
+ },
401
+ {
402
+ file1: 'a.ts',
403
+ file2: 'c.ts',
404
+ line1: 1,
405
+ endLine1: 10,
406
+ line2: 1,
407
+ endLine2: 10,
408
+ similarity: 0.85,
409
+ patternType: 'function',
410
+ tokenCost: 500,
411
+ severity: 'major',
412
+ reason: 'Test',
413
+ suggestion: 'Fix',
414
+ matchedRule: null,
415
+ },
416
+ {
417
+ file1: 'x.ts',
418
+ file2: 'y.ts',
419
+ line1: 1,
420
+ endLine1: 5,
421
+ line2: 1,
422
+ endLine2: 5,
423
+ similarity: 0.8,
424
+ patternType: 'utility',
425
+ tokenCost: 500,
426
+ severity: 'info',
427
+ reason: 'Test',
428
+ suggestion: 'Fix',
429
+ matchedRule: null,
430
+ },
431
+ ];
432
+ const allClusters = createRefactorClusters(duplicates);
433
+ const filtered = filterClustersByImpact(allClusters, 0, 3);
434
+ // Only clusters with >= 3 files should remain
435
+ expect(filtered.every(c => c.files.length >= 3)).toBe(true);
436
+ });
437
+ it('should handle empty input', () => {
438
+ const filtered = filterClustersByImpact([], 1000, 3);
439
+ expect(filtered).toHaveLength(0);
440
+ });
441
+ });
442
+ });
443
+ //# sourceMappingURL=grouping.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grouping.test.js","sourceRoot":"","sources":["../../src/__tests__/grouping.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scoring.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/scoring.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,102 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { calculatePatternScore } from '../scoring';
3
+ describe('Pattern Scoring', () => {
4
+ describe('calculatePatternScore', () => {
5
+ it('should return perfect score for no duplicates', () => {
6
+ const result = calculatePatternScore([], 100);
7
+ expect(result.score).toBe(100);
8
+ expect(result.toolName).toBe('pattern-detect');
9
+ expect(result.rawMetrics.totalDuplicates).toBe(0);
10
+ expect(result.recommendations).toHaveLength(0);
11
+ });
12
+ it('should penalize high duplication density', () => {
13
+ const duplicates = Array(50).fill({
14
+ file1: 'test1.ts',
15
+ file2: 'test2.ts',
16
+ line1: 1,
17
+ line2: 1,
18
+ endLine1: 10,
19
+ endLine2: 10,
20
+ similarity: 0.8,
21
+ code: 'test code',
22
+ tokenCost: 500,
23
+ });
24
+ // 50 duplicates / 10 files = 5 duplicates per file
25
+ // duplicatesPenalty = min(60, 5 * 0.6) = 3
26
+ const result = calculatePatternScore(duplicates, 10);
27
+ expect(result.score).toBeLessThan(100);
28
+ expect(result.rawMetrics.totalDuplicates).toBe(50);
29
+ expect(result.factors.length).toBeGreaterThan(0);
30
+ });
31
+ it('should penalize high token waste', () => {
32
+ const duplicates = [
33
+ {
34
+ file1: 'test1.ts',
35
+ file2: 'test2.ts',
36
+ line1: 1,
37
+ line2: 1,
38
+ endLine1: 100,
39
+ endLine2: 100,
40
+ similarity: 0.9,
41
+ code: 'test code'.repeat(100),
42
+ tokenCost: 5000,
43
+ },
44
+ ];
45
+ const result = calculatePatternScore(duplicates, 1);
46
+ expect(result.score).toBeLessThan(90);
47
+ expect(result.rawMetrics.totalTokenCost).toBe(5000);
48
+ expect(result.recommendations.length).toBeGreaterThan(0);
49
+ });
50
+ it('should identify high-impact duplicates', () => {
51
+ const duplicates = [
52
+ {
53
+ file1: 'test1.ts',
54
+ file2: 'test2.ts',
55
+ line1: 1,
56
+ line2: 1,
57
+ endLine1: 10,
58
+ endLine2: 10,
59
+ similarity: 0.95, // High similarity
60
+ code: 'test code',
61
+ tokenCost: 1500, // High token cost
62
+ },
63
+ {
64
+ file1: 'test3.ts',
65
+ file2: 'test4.ts',
66
+ line1: 1,
67
+ line2: 1,
68
+ endLine1: 5,
69
+ endLine2: 5,
70
+ similarity: 0.5,
71
+ code: 'test',
72
+ tokenCost: 200,
73
+ },
74
+ ];
75
+ const result = calculatePatternScore(duplicates, 10);
76
+ expect(result.rawMetrics.highImpactDuplicates).toBe(1);
77
+ expect(result.factors.some(f => f.name.includes('High-Impact'))).toBe(true);
78
+ });
79
+ it('should generate recommendations for severe issues', () => {
80
+ const duplicates = Array(100).fill({
81
+ file1: 'test.ts',
82
+ file2: 'test2.ts',
83
+ line1: 1,
84
+ line2: 1,
85
+ endLine1: 10,
86
+ endLine2: 10,
87
+ similarity: 0.9,
88
+ code: 'test',
89
+ tokenCost: 1000,
90
+ });
91
+ const result = calculatePatternScore(duplicates, 20);
92
+ expect(result.recommendations.length).toBeGreaterThan(0);
93
+ expect(result.recommendations.some(r => r.priority === 'high')).toBe(true);
94
+ });
95
+ it('should handle edge case of zero files analyzed', () => {
96
+ const duplicates = [];
97
+ const result = calculatePatternScore(duplicates, 0);
98
+ expect(result.score).toBe(100);
99
+ });
100
+ });
101
+ });
102
+ //# sourceMappingURL=scoring.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.test.js","sourceRoot":"","sources":["../../src/__tests__/scoring.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,eAAe,EAA2B,MAAM,SAAS,CAAC;AAEpF,OAAO,EAAE,gBAAgB,EAAmC,MAAM,iBAAiB,CAAC;AACpF,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC1D,OAAO,EAAQ,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,kBAAkB,CAAC;KACxB,WAAW,CAAC,4CAA4C,CAAC;KACzD,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,OAAO,EAAE,szBAAszB,CAAC;KAC50B,QAAQ,CAAC,aAAa,EAAE,sBAAsB,CAAC;KAC/C,MAAM,CAAC,2BAA2B,EAAE,sGAAsG,CAAC;KAC3I,MAAM,CAAC,0BAA0B,EAAE,uFAAuF,CAAC;KAC3H,MAAM,CAAC,uBAAuB,EAAE,2EAA2E,CAAC;KAC5G,MAAM,CAAC,aAAa,EAAE,kFAAkF,CAAC;KACzG,MAAM,CAAC,8BAA8B,EAAE,2FAA2F,CAAC;KACnI,MAAM,CAAC,2BAA2B,EAAE,+EAA+E,CAAC;KACpH,MAAM,CAAC,qBAAqB,EAAE,+CAA+C,CAAC;KAC9E,MAAM,CAAC,sBAAsB,EAAE,4CAA4C,CAAC;KAC5E,MAAM,CAAC,sBAAsB,EAAE,4CAA4C,CAAC;KAC5E,MAAM,CAAC,wBAAwB,EAAE,qEAAqE,CAAC;KACvG,MAAM,CAAC,yBAAyB,EAAE,uDAAuD,CAAC;KAC1F,MAAM,CAAC,qBAAqB,EAAE,mCAAmC,CAAC;KAClE,MAAM,CAAC,iBAAiB,EAAE,sDAAsD,CAAC;KACjF,MAAM,CAAC,wBAAwB,EAAE,kEAAkE,CAAC;KACpG,MAAM,CAAC,yBAAyB,EAAE,0CAA0C,CAAC;KAC7E,MAAM,CAAC,sBAAsB,EAAE,oCAAoC,CAAC;KACpE,MAAM,CAAC,+BAA+B,EAAE,yDAAyD,CAAC;KAClG,MAAM,CAAC,8BAA8B,EAAE,iDAAiD,CAAC;KACzF,MAAM,CAAC,uBAAuB,EAAE,6CAA6C,CAAC;KAC9E,MAAM,CACL,uBAAuB,EACvB,oCAAoC,EACpC,SAAS,CACV;KACA,MAAM,CAAC,sBAAsB,EAAE,kCAAkC,CAAC;KAClE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;IACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAEtD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,gCAAgC;IAChC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;IAE3C,kBAAkB;IAClB,MAAM,QAAQ,GAAG;QACf,aAAa,EAAE,GAAG;QAClB,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,GAAG;QACd,MAAM,EAAE,IAAI;QACZ,eAAe,EAAE,CAAC;QAClB,qBAAqB,EAAE,GAAG;QAC1B,aAAa,EAAE,IAAI;QACnB,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,OAAmB;QAChC,mBAAmB,EAAE,KAAK;QAC1B,gBAAgB,EAAE,KAAK;QACvB,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,IAAI;QACrB,cAAc,EAAE,IAAI;QACpB,mBAAmB,EAAE,IAAI;QACzB,eAAe,EAAE,CAAC;QAClB,iBAAiB,EAAE,KAAK;KACzB,CAAC;IAEF,6BAA6B;IAC7B,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE/D,mDAAmD;IACnD,MAAM,YAAY,GAAG;QACnB,OAAO,EAAE,SAAS;QAClB,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa;QAC/F,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ;QAC/E,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS;QACnF,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,YAAY,CAAC,MAAM,EAAE,mCAAmC;QAC5F,eAAe,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,eAAe;QAC3G,qBAAqB,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,qBAAqB;QACnH,aAAa,EAAE,OAAO,CAAC,aAAa,KAAK,KAAK,IAAI,YAAY,CAAC,aAAa;QAC5E,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,OAAO;QAC5D,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,OAAO;QAC5D,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,YAAY,CAAC,WAAW,CAAa;QAC1E,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,YAAY,CAAC,mBAAmB;QACpF,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,YAAY,CAAC,gBAAgB;QAC3E,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,YAAY,CAAC,YAAY;QAC/D,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU;QACvF,eAAe,EAAE,OAAO,CAAC,eAAe,KAAK,KAAK,IAAI,YAAY,CAAC,eAAe;QAClF,cAAc,EAAE,OAAO,CAAC,cAAc,KAAK,KAAK,IAAI,YAAY,CAAC,cAAc;QAC/E,mBAAmB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,mBAAmB;QACrH,eAAe,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,eAAe;QAC3G,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,YAAY,CAAC,iBAAiB;KAC/E,CAAC;IAEF,+DAA+D;IAC/D,0FAA0F;IAC1F,IAAI,YAAY,CAAC,YAAY,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QACtD,MAAM,YAAY,GAAG;YACnB,aAAa;YACb,aAAa;YACb,iBAAiB;YACjB,YAAY;YACZ,aAAa;SACd,CAAC;QACF,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAChD,CAAC,OAAe,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CACrD,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC;IAE5G,2BAA2B;IAC3B,IAAI,kBAAkB,GAAG,aAAa,CAAC;IAEvC,6BAA6B;IAC7B,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;QAC7B,kBAAkB,GAAG,gBAAgB,CAAC,kBAAkB,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACtF,CAAC;IAED,wCAAwC;IACxC,IAAI,YAAY,CAAC,mBAAmB,EAAE,CAAC;QACrC,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC;IACzF,CAAC;IAED,oCAAoC;IACpC,IAAI,YAAY,CAAC,gBAAgB,EAAE,CAAC;QAClC,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEzE,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG;YACjB,OAAO;YACP,OAAO;YACP,UAAU,EAAE,aAAa;YACzB,MAAM,EAAE,MAAM,IAAI,EAAE;YACpB,QAAQ,EAAE,QAAQ,IAAI,EAAE;YACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,MAAM,UAAU,GAAG,iBAAiB,CAClC,OAAO,CAAC,UAAU,EAClB,kBAAkB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAC/D,SAAS,CACV,CAAC;QAEF,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,iBAAiB,CAClC,OAAO,CAAC,UAAU,EAClB,kBAAkB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAC/D,SAAS,CACV,CAAC;QAEF,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IAED,iBAAiB;IACjB,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACnD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAEzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAExC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,sBAAsB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAChE,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,sCAAsC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAC9E,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,2BAA2B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,EAAE,CACjF,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,EAAE,CAAC,CACjE,CAAC;IAEF,4DAA4D;IAC5D,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;SACvD,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;SAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEjC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAExC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;YACpC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAmB,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;IACL,CAAC;IAED,uDAAuD;IACvD,IAAI,CAAC,YAAY,CAAC,iBAAiB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAExC,uCAAuC;QACvC,MAAM,aAAa,GAA6B;YAC9C,QAAQ,EAAE,CAAC;YACX,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,CAAC;SACR,CAAC;QAEF,MAAM,SAAS,GAAG,MAAM;aACrB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACb,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC3E,IAAI,YAAY,KAAK,CAAC;gBAAE,OAAO,YAAY,CAAC;YAC5C,OAAO,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC;QAC7C,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;QAErC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC/B,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvD,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC;YAClD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC;YAElD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAChG,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,sBAAsB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;YAEtN,2BAA2B;YAC3B,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnD,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAClL,CAAC,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YACxF,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,kBAAkB,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,IAAI,CAAC,YAAY,CAAC,iBAAiB,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,2BAA2B,QAAQ,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAExC,QAAQ;aACL,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC;aACnD,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;YACxB,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,sBAAsB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,kBAAkB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAE9N,qBAAqB;YACrB,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,KAAK,CAAC,MAAM,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5H,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YACpF,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,uEAAuE;IACvE,IAAI,WAAW,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAExC,qDAAqD;QACrD,MAAM,aAAa,GAA6B;YAC9C,QAAQ,EAAE,CAAC;YACX,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,CAAC;SACR,CAAC;QAEF,MAAM,aAAa,GAAG,kBAAkB;aACrC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACb,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC3E,IAAI,YAAY,KAAK,CAAC;gBAAE,OAAO,YAAY,CAAC;YAC5C,OAAO,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;QACrC,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;QAErC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACjC,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAErD,8CAA8C;YAC9C,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC;YAC1D,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC;YAE1D,OAAO,CAAC,GAAG,CAAC,GAAG,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACpF,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,eAAe,GAAG,CAAC,WAAW,cAAc,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1K,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACzF,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAEzF,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACvE,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,oCAAoC;QACpC,IAAI,kBAAkB,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,kBAAkB,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,kBAAkB,CAAC,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACtC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAC1D,CAAC;IAEF,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CACrC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,UAAU,CACzC,CAAC;IAEF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAExC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACnF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;IAED,0CAA0C;IAC1C,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kEAAkE,CAAC,CAAC,CAAC;QAC9F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,oCAAoC;IACpC,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uDAAuD,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAEjC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CACT,iBAAiB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,uBAAuB,CACtG,CACF,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,0FAA0F,CAC3F,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,yFAAyF,CAAC,CACrG,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,SAAS,cAAc,CAAC,IAAiB;IACvC,MAAM,KAAK,GAAgC;QACzC,aAAa,EAAE,IAAI;QACnB,SAAS,EAAE,GAAG;QACd,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,IAAI;QACpB,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,GAAG;QACb,OAAO,EAAE,GAAG;KACb,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,kBAAkB,CACzB,OAAY,EACZ,OAAc;IAEd,OAAO;;;;;;;;;;;;;;;;;;;;;;;oBAuBW,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE;;;;kCAIb,OAAO,CAAC,MAAM;;;;kCAId,OAAO,CAAC,aAAa;;;;kCAIrB,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE;;;;;;;;;;;;;;;;UAgB/D,OAAO,CAAC,aAAa;SACpB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CACF,CAAC,GAAQ,EAAE,EAAE,CAAC;;yBAED,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;kBACzH,GAAG,CAAC,WAAW;kBACf,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;kBACjG,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE;;SAEvC,CACE;SACA,IAAI,CAAC,EAAE,CAAC;;;;;;;;;;;QAWX,CAAC;AACT,CAAC;AAED,OAAO,CAAC,KAAK,EAAE,CAAC;AAEhB;;GAEG;AACH,SAAS,gBAAgB,CAAC,QAAkB;IAC1C,MAAM,MAAM,GAA6B;QACvC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;QAC9C,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;QAC3C,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;QACzC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;KACnC,CAAC;IACF,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC;AACzC,CAAC"}