@shadowcoderr/context-graph 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +185 -0
  3. package/dist/analyzers/a11y-extractor.d.ts +15 -0
  4. package/dist/analyzers/a11y-extractor.d.ts.map +1 -0
  5. package/dist/analyzers/a11y-extractor.js +148 -0
  6. package/dist/analyzers/a11y-extractor.js.map +1 -0
  7. package/dist/analyzers/dom-analyzer.d.ts +20 -0
  8. package/dist/analyzers/dom-analyzer.d.ts.map +1 -0
  9. package/dist/analyzers/dom-analyzer.js +126 -0
  10. package/dist/analyzers/dom-analyzer.js.map +1 -0
  11. package/dist/analyzers/locator-generator.d.ts +13 -0
  12. package/dist/analyzers/locator-generator.d.ts.map +1 -0
  13. package/dist/analyzers/locator-generator.js +381 -0
  14. package/dist/analyzers/locator-generator.js.map +1 -0
  15. package/dist/analyzers/network-logger.d.ts +15 -0
  16. package/dist/analyzers/network-logger.d.ts.map +1 -0
  17. package/dist/analyzers/network-logger.js +71 -0
  18. package/dist/analyzers/network-logger.js.map +1 -0
  19. package/dist/cli/index.d.ts +2 -0
  20. package/dist/cli/index.d.ts.map +1 -0
  21. package/dist/cli/index.js +155 -0
  22. package/dist/cli/index.js.map +1 -0
  23. package/dist/config/defaults.d.ts +3 -0
  24. package/dist/config/defaults.d.ts.map +1 -0
  25. package/dist/config/defaults.js +54 -0
  26. package/dist/config/defaults.js.map +1 -0
  27. package/dist/config/loader.d.ts +3 -0
  28. package/dist/config/loader.d.ts.map +1 -0
  29. package/dist/config/loader.js +75 -0
  30. package/dist/config/loader.js.map +1 -0
  31. package/dist/config/schema.d.ts +168 -0
  32. package/dist/config/schema.d.ts.map +1 -0
  33. package/dist/config/schema.js +104 -0
  34. package/dist/config/schema.js.map +1 -0
  35. package/dist/core/browser-adapter.d.ts +24 -0
  36. package/dist/core/browser-adapter.d.ts.map +1 -0
  37. package/dist/core/browser-adapter.js +208 -0
  38. package/dist/core/browser-adapter.js.map +1 -0
  39. package/dist/core/capture-engine.d.ts +52 -0
  40. package/dist/core/capture-engine.d.ts.map +1 -0
  41. package/dist/core/capture-engine.js +593 -0
  42. package/dist/core/capture-engine.js.map +1 -0
  43. package/dist/core/runtime.d.ts +38 -0
  44. package/dist/core/runtime.d.ts.map +1 -0
  45. package/dist/core/runtime.js +648 -0
  46. package/dist/core/runtime.js.map +1 -0
  47. package/dist/prompts/init-prompt.d.ts +12 -0
  48. package/dist/prompts/init-prompt.d.ts.map +1 -0
  49. package/dist/prompts/init-prompt.js +128 -0
  50. package/dist/prompts/init-prompt.js.map +1 -0
  51. package/dist/registry/components-registry.d.ts +97 -0
  52. package/dist/registry/components-registry.d.ts.map +1 -0
  53. package/dist/registry/components-registry.js +469 -0
  54. package/dist/registry/components-registry.js.map +1 -0
  55. package/dist/registry/index.d.ts +2 -0
  56. package/dist/registry/index.d.ts.map +1 -0
  57. package/dist/registry/index.js +7 -0
  58. package/dist/registry/index.js.map +1 -0
  59. package/dist/security/patterns.d.ts +4 -0
  60. package/dist/security/patterns.d.ts.map +1 -0
  61. package/dist/security/patterns.js +65 -0
  62. package/dist/security/patterns.js.map +1 -0
  63. package/dist/security/redactor.d.ts +26 -0
  64. package/dist/security/redactor.d.ts.map +1 -0
  65. package/dist/security/redactor.js +128 -0
  66. package/dist/security/redactor.js.map +1 -0
  67. package/dist/security/validator.d.ts +11 -0
  68. package/dist/security/validator.d.ts.map +1 -0
  69. package/dist/security/validator.js +62 -0
  70. package/dist/security/validator.js.map +1 -0
  71. package/dist/storage/engine.d.ts +45 -0
  72. package/dist/storage/engine.d.ts.map +1 -0
  73. package/dist/storage/engine.js +479 -0
  74. package/dist/storage/engine.js.map +1 -0
  75. package/dist/storage/manifest.d.ts +10 -0
  76. package/dist/storage/manifest.d.ts.map +1 -0
  77. package/dist/storage/manifest.js +98 -0
  78. package/dist/storage/manifest.js.map +1 -0
  79. package/dist/storage/serializer.d.ts +9 -0
  80. package/dist/storage/serializer.d.ts.map +1 -0
  81. package/dist/storage/serializer.js +22 -0
  82. package/dist/storage/serializer.js.map +1 -0
  83. package/dist/types/capture.d.ts +206 -0
  84. package/dist/types/capture.d.ts.map +1 -0
  85. package/dist/types/capture.js +3 -0
  86. package/dist/types/capture.js.map +1 -0
  87. package/dist/types/config.d.ts +63 -0
  88. package/dist/types/config.d.ts.map +1 -0
  89. package/dist/types/config.js +3 -0
  90. package/dist/types/config.js.map +1 -0
  91. package/dist/types/registry.d.ts +94 -0
  92. package/dist/types/registry.d.ts.map +1 -0
  93. package/dist/types/registry.js +3 -0
  94. package/dist/types/registry.js.map +1 -0
  95. package/dist/types/storage.d.ts +57 -0
  96. package/dist/types/storage.d.ts.map +1 -0
  97. package/dist/types/storage.js +3 -0
  98. package/dist/types/storage.js.map +1 -0
  99. package/dist/utils/hash.d.ts +3 -0
  100. package/dist/utils/hash.d.ts.map +1 -0
  101. package/dist/utils/hash.js +26 -0
  102. package/dist/utils/hash.js.map +1 -0
  103. package/dist/utils/logger.d.ts +20 -0
  104. package/dist/utils/logger.d.ts.map +1 -0
  105. package/dist/utils/logger.js +86 -0
  106. package/dist/utils/logger.js.map +1 -0
  107. package/dist/utils/pom-generator.d.ts +12 -0
  108. package/dist/utils/pom-generator.d.ts.map +1 -0
  109. package/dist/utils/pom-generator.js +83 -0
  110. package/dist/utils/pom-generator.js.map +1 -0
  111. package/dist/utils/validators.d.ts +7 -0
  112. package/dist/utils/validators.d.ts.map +1 -0
  113. package/dist/utils/validators.js +51 -0
  114. package/dist/utils/validators.js.map +1 -0
  115. package/package.json +70 -0
@@ -0,0 +1,593 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.CaptureEngine = void 0;
37
+ // Developer: Shadow Coderr, Architect
38
+ const crypto = __importStar(require("crypto"));
39
+ const dom_analyzer_1 = require("../analyzers/dom-analyzer");
40
+ const a11y_extractor_1 = require("../analyzers/a11y-extractor");
41
+ const locator_generator_1 = require("../analyzers/locator-generator");
42
+ const network_logger_1 = require("../analyzers/network-logger");
43
+ const redactor_1 = require("../security/redactor");
44
+ const validator_1 = require("../security/validator");
45
+ const logger_1 = require("../utils/logger");
46
+ class CaptureEngine {
47
+ domAnalyzer;
48
+ a11yExtractor;
49
+ locatorGenerator;
50
+ networkLogger;
51
+ redactor;
52
+ validator;
53
+ constructor(config) {
54
+ this.domAnalyzer = new dom_analyzer_1.DOMAnalyzer();
55
+ this.a11yExtractor = new a11y_extractor_1.AccessibilityExtractor();
56
+ this.locatorGenerator = new locator_generator_1.LocatorGenerator();
57
+ this.redactor = new redactor_1.SecurityRedactor(config.security.customPatterns);
58
+ this.networkLogger = new network_logger_1.NetworkLogger(this.redactor);
59
+ this.validator = new validator_1.DataValidator();
60
+ }
61
+ async attachNetworkListeners(page) {
62
+ await this.networkLogger.attachListeners(page);
63
+ }
64
+ async capturePageSnapshot(page, config, consoleMessages = []) {
65
+ logger_1.logger.info('Starting page capture');
66
+ const url = page.url();
67
+ const timestamp = new Date();
68
+ const domain = new URL(url).hostname;
69
+ // Capture all data in parallel where possible
70
+ // Add timeout to prevent hanging - increased for complex pages
71
+ const captureTimeout = 45000; // 45 seconds max per capture
72
+ const captureWithTimeout = async (promise, name) => {
73
+ try {
74
+ return await Promise.race([
75
+ promise,
76
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`${name} timeout`)), captureTimeout))
77
+ ]);
78
+ }
79
+ catch (error) {
80
+ logger_1.logger.warn(`${name} capture failed or timed out: ${error.message}`);
81
+ return null;
82
+ }
83
+ };
84
+ const [domResult, a11yTree, locators, performanceMetrics,] = await Promise.all([
85
+ captureWithTimeout(this.domAnalyzer.analyze(page), 'DOM'),
86
+ config.capture.accessibility.enabled
87
+ ? captureWithTimeout(this.a11yExtractor.extract(page, config.capture.accessibility.includeHidden), 'A11y')
88
+ : Promise.resolve(null),
89
+ captureWithTimeout(this.locatorGenerator.generateLocators(page), 'Locators'),
90
+ captureWithTimeout(this.domAnalyzer.getPerformanceMetrics(page), 'Performance'),
91
+ ]);
92
+ const frameContents = domResult?.frames || [];
93
+ const frames = await this.getFrameHierarchy(page, frameContents);
94
+ const networkEvents = this.networkLogger.getEvents();
95
+ // Capture enhanced data
96
+ const [pageState, networkSummary, enhancedTiming] = await Promise.all([
97
+ captureWithTimeout(this.capturePageState(page), 'PageState'),
98
+ captureWithTimeout(this.captureNetworkSummary(networkEvents), 'NetworkSummary'),
99
+ captureWithTimeout(this.captureEnhancedTiming(page), 'EnhancedTiming'),
100
+ ]);
101
+ const metadata = {
102
+ captureId: `${timestamp.toISOString().replace(/[-:]/g, '').replace('T', '_').split('.')[0]}_${domain.replace(/\./g, '_')}`,
103
+ timestamp: timestamp.toISOString(),
104
+ mode: 'browser',
105
+ url,
106
+ domain,
107
+ title: await page.title().catch(() => ''),
108
+ viewport: {
109
+ ...config.browser.viewport,
110
+ deviceScaleFactor: 1,
111
+ },
112
+ timing: enhancedTiming || {
113
+ navigationStart: Date.now() - 1000,
114
+ domContentLoaded: Date.now() - 500,
115
+ loadComplete: Date.now(),
116
+ networkIdle: Date.now(),
117
+ },
118
+ performance: performanceMetrics || { domNodes: 0, scripts: 0, stylesheets: 0, images: 0, totalRequests: 0 },
119
+ userAgent: await page.evaluate(() => navigator.userAgent).catch(() => ''),
120
+ cookies: '[REDACTED]', // Always redact cookies
121
+ pageName: this.generatePageName(url),
122
+ pageState: pageState || undefined,
123
+ networkSummary: networkSummary || undefined,
124
+ contentHash: '', // Will be computed after snapshot is built
125
+ };
126
+ const snapshot = {
127
+ metadata,
128
+ domSnapshot: domResult?.html || '<html></html>',
129
+ a11yTree: a11yTree || { role: 'unknown', name: '', children: [] },
130
+ locators: await this.enhanceLocatorsData(page, locators || { elements: [] }),
131
+ frames: frames || { url: url, name: '', children: [] },
132
+ networkEvents,
133
+ consoleMessages,
134
+ screenshotPaths: [], // Placeholder
135
+ };
136
+ // Compute content hash for change detection
137
+ snapshot.metadata.contentHash = this.computeContentHash(snapshot);
138
+ // Validate the snapshot
139
+ const validation = this.validator.validatePageSnapshot(snapshot);
140
+ if (!validation.valid) {
141
+ logger_1.logger.warn(`Validation errors: ${validation.errors.join(', ')}`);
142
+ }
143
+ if (validation.warnings.length > 0) {
144
+ logger_1.logger.warn(`Validation warnings: ${validation.warnings.join(', ')}`);
145
+ }
146
+ logger_1.logger.info('Page capture completed');
147
+ return snapshot;
148
+ }
149
+ async getFrameHierarchy(page, frameContents) {
150
+ // Build hierarchy and attach serialized content if available
151
+ const frames = page.frames();
152
+ const buildHierarchy = (frame) => {
153
+ const children = frame.childFrames().map(buildHierarchy);
154
+ const contentEntry = (frameContents || []).find((f) => f.url === frame.url() && f.name === frame.name());
155
+ return {
156
+ url: frame.url(),
157
+ name: frame.name(),
158
+ children,
159
+ content: contentEntry ? contentEntry.content : undefined,
160
+ };
161
+ };
162
+ return buildHierarchy(frames[0]);
163
+ }
164
+ getRedactionAudit() {
165
+ return this.redactor.getAuditLog();
166
+ }
167
+ generatePageName(url) {
168
+ try {
169
+ const u = new URL(url);
170
+ const pathname = u.pathname.replace(/\/+$/g, ''); // strip trailing slash
171
+ // Handle root/index page
172
+ if (!pathname || pathname === '/') {
173
+ // If there are query params, include them
174
+ const params = Array.from(u.searchParams.entries()).sort((a, b) => a[0].localeCompare(b[0]));
175
+ if (params.length > 0) {
176
+ if (params.length === 1 && params[0][0] === 'id') {
177
+ return `index-${this.sanitize(params[0][1])}`;
178
+ }
179
+ const paramStr = params.map(([k, v]) => `${this.sanitize(k)}-${this.sanitize(v)}`).join('-');
180
+ return `index-${paramStr}`;
181
+ }
182
+ return 'index';
183
+ }
184
+ const segments = pathname.split('/').filter(Boolean);
185
+ // Remove extension of last segment
186
+ const last = segments[segments.length - 1];
187
+ const baseLast = last.replace(/\.html?$/i, '');
188
+ segments[segments.length - 1] = baseLast;
189
+ let base = segments.join('-');
190
+ // Handle query parameters
191
+ const params = Array.from(u.searchParams.entries()).sort((a, b) => a[0].localeCompare(b[0]));
192
+ if (params.length === 1 && params[0][0] === 'id') {
193
+ // Special case: if only 'id' param, append just the value
194
+ base = `${base}-${this.sanitize(params[0][1])}`;
195
+ }
196
+ else if (params.length > 0) {
197
+ // Multiple params: include key-value pairs
198
+ for (const [k, v] of params) {
199
+ base = `${base}-${this.sanitize(k)}-${this.sanitize(v)}`;
200
+ }
201
+ }
202
+ base = this.sanitize(base);
203
+ return base || 'page';
204
+ }
205
+ catch (error) {
206
+ logger_1.logger.warn(`Failed to generate page name from URL: ${url}, error: ${error.message}`);
207
+ return 'page';
208
+ }
209
+ }
210
+ sanitize(name) {
211
+ return name.replace(/[^a-z0-9\-]/gi, '-').replace(/-+/g, '-').replace(/(^-|-$)/g, '').toLowerCase();
212
+ }
213
+ /**
214
+ * Compute a content hash for change detection
215
+ * Combines DOM, accessibility tree, and locators into a single hash
216
+ */
217
+ computeContentHash(snapshot) {
218
+ try {
219
+ // Create a hashable representation of the page content
220
+ const hashContent = {
221
+ // DOM structure (normalized)
222
+ dom: this.normalizeDomForHash(snapshot.domSnapshot),
223
+ // Accessibility tree structure
224
+ a11y: this.normalizeA11yForHash(snapshot.a11yTree),
225
+ // Locator signatures (element IDs and their best locators)
226
+ locators: snapshot.locators.elements.map(e => ({
227
+ id: e.elementId,
228
+ tag: e.tagName,
229
+ role: e.attributes?.role,
230
+ testId: e.attributes?.['data-testid'],
231
+ text: e.text?.substring(0, 50), // Limit text length
232
+ uniqueLocators: e.locators.filter(l => l.isUnique).map(l => l.strategy),
233
+ })),
234
+ };
235
+ const hashString = JSON.stringify(hashContent, Object.keys(hashContent).sort());
236
+ return crypto.createHash('sha256').update(hashString).digest('hex').substring(0, 16);
237
+ }
238
+ catch (error) {
239
+ logger_1.logger.warn(`Failed to compute content hash: ${error.message}`);
240
+ return '';
241
+ }
242
+ }
243
+ /**
244
+ * Normalize DOM for hashing by removing dynamic content
245
+ */
246
+ normalizeDomForHash(dom) {
247
+ // Remove scripts, styles, and dynamic attributes
248
+ let normalized = dom
249
+ .replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '')
250
+ .replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi, '')
251
+ .replace(/\s+(class|id|style)="[^"]*"/g, '') // Remove class/id/style attributes
252
+ .replace(/\s+data-cc-element-id="[^"]*"/g, '') // Remove our own tracking attribute
253
+ .replace(/\s+/g, ' ') // Normalize whitespace
254
+ .trim();
255
+ // Limit length for performance
256
+ return normalized.substring(0, 5000);
257
+ }
258
+ /**
259
+ * Normalize accessibility tree for hashing
260
+ */
261
+ normalizeA11yForHash(a11y) {
262
+ if (!a11y)
263
+ return null;
264
+ return {
265
+ role: a11y.role,
266
+ name: a11y.name?.substring(0, 50),
267
+ children: a11y.children?.map((c) => this.normalizeA11yForHash(c)),
268
+ };
269
+ }
270
+ /**
271
+ * Capture page state information
272
+ */
273
+ async capturePageState(page) {
274
+ try {
275
+ return await page.evaluate(() => {
276
+ const activeElement = document.activeElement;
277
+ const focusedElement = activeElement ?
278
+ (activeElement.id ? `#${activeElement.id}` :
279
+ activeElement.className ? `.${activeElement.className.split(' ')[0]}` :
280
+ activeElement.tagName.toLowerCase()) : undefined;
281
+ const selectedText = window.getSelection()?.toString() || '';
282
+ // Capture form data (redacted)
283
+ const formData = {};
284
+ const forms = document.querySelectorAll('form');
285
+ forms.forEach((form, idx) => {
286
+ const formId = form.id || `form_${idx}`;
287
+ const inputs = {};
288
+ form.querySelectorAll('input, select, textarea').forEach((input) => {
289
+ const name = input.name || input.id || `input_${idx}`;
290
+ if (input.type === 'checkbox' || input.type === 'radio') {
291
+ inputs[name] = input.checked;
292
+ }
293
+ else if (input.type === 'password') {
294
+ inputs[name] = '[REDACTED]';
295
+ }
296
+ else {
297
+ inputs[name] = input.value ? '[REDACTED]' : '';
298
+ }
299
+ });
300
+ if (Object.keys(inputs).length > 0) {
301
+ formData[formId] = inputs;
302
+ }
303
+ });
304
+ // Capture storage keys (not values)
305
+ const localStorageKeys = {};
306
+ try {
307
+ for (let i = 0; i < window.localStorage.length; i++) {
308
+ const key = window.localStorage.key(i);
309
+ if (key)
310
+ localStorageKeys[key] = '[REDACTED]';
311
+ }
312
+ }
313
+ catch { }
314
+ const sessionStorageKeys = {};
315
+ try {
316
+ for (let i = 0; i < window.sessionStorage.length; i++) {
317
+ const key = window.sessionStorage.key(i);
318
+ if (key)
319
+ sessionStorageKeys[key] = '[REDACTED]';
320
+ }
321
+ }
322
+ catch { }
323
+ return {
324
+ scrollPosition: { x: window.scrollX, y: window.scrollY },
325
+ focusedElement,
326
+ selectedText,
327
+ formData: Object.keys(formData).length > 0 ? formData : undefined,
328
+ localStorage: Object.keys(localStorageKeys).length > 0 ? localStorageKeys : undefined,
329
+ sessionStorage: Object.keys(sessionStorageKeys).length > 0 ? sessionStorageKeys : undefined,
330
+ };
331
+ });
332
+ }
333
+ catch (error) {
334
+ logger_1.logger.warn('Failed to capture page state: ' + error.message);
335
+ return null;
336
+ }
337
+ }
338
+ /**
339
+ * Capture network request summary
340
+ */
341
+ async captureNetworkSummary(networkEvents) {
342
+ try {
343
+ const requestTypes = {};
344
+ const apiEndpoints = [];
345
+ let failedRequests = 0;
346
+ for (const event of networkEvents) {
347
+ // Count by resource type
348
+ const type = event.resourceType || 'other';
349
+ requestTypes[type] = (requestTypes[type] || 0) + 1;
350
+ // Track failed requests
351
+ if (event.type === 'response' && event.status && (event.status < 200 || event.status >= 400)) {
352
+ failedRequests++;
353
+ }
354
+ // Extract API endpoints (XHR/Fetch to same domain or API-like URLs)
355
+ if ((type === 'xhr' || type === 'fetch') && event.url) {
356
+ try {
357
+ const url = new URL(event.url);
358
+ const path = url.pathname;
359
+ if (path.startsWith('/api/') || path.includes('/api/') ||
360
+ event.method && ['POST', 'PUT', 'PATCH', 'DELETE'].includes(event.method)) {
361
+ if (!apiEndpoints.includes(path)) {
362
+ apiEndpoints.push(path);
363
+ }
364
+ }
365
+ }
366
+ catch { }
367
+ }
368
+ }
369
+ return {
370
+ totalRequests: networkEvents.length,
371
+ failedRequests,
372
+ requestTypes,
373
+ apiEndpoints: apiEndpoints.slice(0, 20), // Limit to 20 endpoints
374
+ };
375
+ }
376
+ catch (error) {
377
+ logger_1.logger.warn('Failed to capture network summary: ' + error.message);
378
+ return null;
379
+ }
380
+ }
381
+ /**
382
+ * Capture enhanced timing metrics
383
+ */
384
+ async captureEnhancedTiming(page) {
385
+ try {
386
+ const timing = await page.evaluate(() => {
387
+ const perf = window.performance;
388
+ const navTiming = perf.getEntriesByType('navigation')[0];
389
+ const paintTiming = perf.getEntriesByType('paint');
390
+ const fcp = paintTiming.find((entry) => entry.name === 'first-contentful-paint');
391
+ const lcp = perf.getEntriesByType('largest-contentful-paint');
392
+ const lcpEntry = lcp.length > 0 ? lcp[lcp.length - 1] : null;
393
+ return {
394
+ navigationStart: navTiming ? navTiming.navigationStart || navTiming.fetchStart : Date.now() - 1000,
395
+ domContentLoaded: navTiming ? navTiming.domContentLoadedEventEnd : Date.now() - 500,
396
+ loadComplete: navTiming ? navTiming.loadEventEnd : Date.now(),
397
+ networkIdle: Date.now(),
398
+ firstContentfulPaint: fcp ? fcp.startTime : undefined,
399
+ largestContentfulPaint: lcpEntry ? lcpEntry.renderTime || lcpEntry.loadTime : undefined,
400
+ timeToInteractive: navTiming ? navTiming.domInteractive : undefined,
401
+ };
402
+ });
403
+ return timing;
404
+ }
405
+ catch (error) {
406
+ logger_1.logger.warn('Failed to capture enhanced timing: ' + error.message);
407
+ return null;
408
+ }
409
+ }
410
+ /**
411
+ * Enhance locators data with CSS styles, viewport info, and form details
412
+ */
413
+ async enhanceLocatorsData(page, locatorsData) {
414
+ try {
415
+ // Build element selector map for efficient lookup
416
+ const elementMap = new Map();
417
+ for (const element of locatorsData.elements) {
418
+ // Create selector from element attributes
419
+ let selector = '';
420
+ if (element.attributes?.id) {
421
+ selector = `#${element.attributes.id}`;
422
+ }
423
+ else if (element.attributes?.['data-test']) {
424
+ selector = `[data-test="${element.attributes['data-test']}"]`;
425
+ }
426
+ else if (element.attributes?.['data-testid']) {
427
+ selector = `[data-testid="${element.attributes['data-testid']}"]`;
428
+ }
429
+ else if (element.position && element.position.x >= 0 && element.position.y >= 0) {
430
+ // Use position as fallback - find element at this position
431
+ selector = `[data-cc-element-id="${element.elementId}"]`;
432
+ }
433
+ if (selector) {
434
+ elementMap.set(element.elementId, selector);
435
+ }
436
+ }
437
+ // Enhance elements with styles and viewport info
438
+ const enhancedElements = await Promise.all(locatorsData.elements.map(async (element) => {
439
+ try {
440
+ const selector = elementMap.get(element.elementId);
441
+ if (!selector)
442
+ return element;
443
+ // Get CSS styles and viewport info in one call
444
+ const enhancement = await page.evaluate(({ sel, pos }) => {
445
+ let el = null;
446
+ // Try to find element by selector
447
+ try {
448
+ el = document.querySelector(sel);
449
+ }
450
+ catch { }
451
+ // Fallback: find by position if selector fails
452
+ if (!el && pos && pos.x >= 0 && pos.y >= 0) {
453
+ el = document.elementFromPoint(pos.x, pos.y);
454
+ }
455
+ if (!el)
456
+ return null;
457
+ const computed = window.getComputedStyle(el);
458
+ const rect = el.getBoundingClientRect();
459
+ return {
460
+ styles: {
461
+ display: computed.display,
462
+ visibility: computed.visibility,
463
+ opacity: computed.opacity,
464
+ zIndex: computed.zIndex,
465
+ position: computed.position,
466
+ backgroundColor: computed.backgroundColor !== 'rgba(0, 0, 0, 0)' && computed.backgroundColor !== 'transparent' ? computed.backgroundColor : undefined,
467
+ color: computed.color,
468
+ fontSize: computed.fontSize,
469
+ fontWeight: computed.fontWeight,
470
+ border: computed.border !== '0px none rgb(0, 0, 0)' ? computed.border : undefined,
471
+ borderRadius: computed.borderRadius !== '0px' ? computed.borderRadius : undefined,
472
+ },
473
+ viewportInfo: {
474
+ visible: rect.width > 0 && rect.height > 0,
475
+ inViewport: rect.top >= 0 && rect.left >= 0 &&
476
+ rect.bottom <= window.innerHeight &&
477
+ rect.right <= window.innerWidth,
478
+ viewportPosition: { x: rect.left, y: rect.top },
479
+ },
480
+ };
481
+ }, { sel: selector, pos: element.position }).catch(() => null);
482
+ if (enhancement) {
483
+ return {
484
+ ...element,
485
+ styles: enhancement.styles,
486
+ viewportInfo: enhancement.viewportInfo,
487
+ };
488
+ }
489
+ return element;
490
+ }
491
+ catch (error) {
492
+ return element;
493
+ }
494
+ }));
495
+ // Extract form field details
496
+ const formFields = await this.captureFormFieldDetails(page, locatorsData.elements);
497
+ // Build viewport elements list
498
+ const viewportElements = enhancedElements
499
+ .filter((el) => el.viewportInfo?.inViewport)
500
+ .map((el) => ({
501
+ elementId: el.elementId,
502
+ visible: el.viewportInfo?.visible || false,
503
+ inViewport: el.viewportInfo?.inViewport || false,
504
+ viewportPosition: el.viewportInfo?.viewportPosition || { x: 0, y: 0 },
505
+ }));
506
+ return {
507
+ elements: enhancedElements,
508
+ viewportElements: viewportElements.length > 0 ? viewportElements : undefined,
509
+ formFields: formFields.length > 0 ? formFields : undefined,
510
+ };
511
+ }
512
+ catch (error) {
513
+ logger_1.logger.warn('Failed to enhance locators data: ' + error.message);
514
+ return locatorsData;
515
+ }
516
+ }
517
+ /**
518
+ * Capture form field details
519
+ */
520
+ async captureFormFieldDetails(page, elements) {
521
+ try {
522
+ const formFields = [];
523
+ for (const element of elements) {
524
+ const tagName = element.tagName?.toLowerCase();
525
+ if (tagName === 'input' || tagName === 'select' || tagName === 'textarea') {
526
+ try {
527
+ // Build selector from element attributes
528
+ let selector = '';
529
+ if (element.attributes?.id) {
530
+ selector = `#${element.attributes.id}`;
531
+ }
532
+ else if (element.attributes?.['data-test']) {
533
+ selector = `[data-test="${element.attributes['data-test']}"]`;
534
+ }
535
+ else if (element.attributes?.['data-testid']) {
536
+ selector = `[data-testid="${element.attributes['data-testid']}"]`;
537
+ }
538
+ else if (element.attributes?.name) {
539
+ selector = `${tagName}[name="${element.attributes.name}"]`;
540
+ }
541
+ if (!selector)
542
+ continue;
543
+ const details = await page.evaluate(({ sel, tag }) => {
544
+ const el = document.querySelector(sel);
545
+ if (!el)
546
+ return null;
547
+ // Get label
548
+ let label;
549
+ if (el.id) {
550
+ const labelEl = document.querySelector(`label[for="${el.id}"]`);
551
+ label = labelEl?.textContent?.trim();
552
+ }
553
+ if (!label && el.closest('label')) {
554
+ label = el.closest('label')?.textContent?.trim();
555
+ }
556
+ return {
557
+ fieldType: el.type || tag,
558
+ label,
559
+ placeholder: el.placeholder || undefined,
560
+ required: el.hasAttribute('required'),
561
+ pattern: el.pattern || undefined,
562
+ maxLength: el.maxLength > 0 ? el.maxLength : undefined,
563
+ minLength: el.minLength > 0 ? el.minLength : undefined,
564
+ validationRules: {
565
+ required: el.hasAttribute('required'),
566
+ pattern: el.pattern || undefined,
567
+ maxLength: el.maxLength > 0 ? el.maxLength : undefined,
568
+ minLength: el.minLength > 0 ? el.minLength : undefined,
569
+ },
570
+ };
571
+ }, { sel: selector, tag: tagName }).catch(() => null);
572
+ if (details) {
573
+ formFields.push({
574
+ elementId: element.elementId,
575
+ ...details,
576
+ });
577
+ }
578
+ }
579
+ catch (error) {
580
+ // Skip this element
581
+ }
582
+ }
583
+ }
584
+ return formFields;
585
+ }
586
+ catch (error) {
587
+ logger_1.logger.warn('Failed to capture form field details: ' + error.message);
588
+ return [];
589
+ }
590
+ }
591
+ }
592
+ exports.CaptureEngine = CaptureEngine;
593
+ //# sourceMappingURL=capture-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-engine.js","sourceRoot":"","sources":["../../src/core/capture-engine.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAsC;AACtC,+CAAiC;AAIjC,4DAAwD;AACxD,gEAAqE;AACrE,sEAAkE;AAClE,gEAA4D;AAC5D,mDAAwD;AACxD,qDAAsD;AACtD,4CAAyC;AAEzC,MAAa,aAAa;IAChB,WAAW,CAAc;IACzB,aAAa,CAAyB;IACtC,gBAAgB,CAAmB;IACnC,aAAa,CAAgB;IAC7B,QAAQ,CAAmB;IAC3B,SAAS,CAAgB;IAEjC,YAAY,MAAc;QACxB,IAAI,CAAC,WAAW,GAAG,IAAI,0BAAW,EAAE,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,IAAI,uCAAsB,EAAE,CAAC;QAClD,IAAI,CAAC,gBAAgB,GAAG,IAAI,oCAAgB,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,2BAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACrE,IAAI,CAAC,aAAa,GAAG,IAAI,8BAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,GAAG,IAAI,yBAAa,EAAE,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,IAAU;QACrC,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,IAAU,EAAE,MAAc,EAAE,kBAAyB,EAAE;QAC/E,eAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAErC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QAErC,8CAA8C;QAC9C,+DAA+D;QAC/D,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,6BAA6B;QAE3D,MAAM,kBAAkB,GAAG,KAAK,EAAK,OAAmB,EAAE,IAAY,EAAqB,EAAE;YAC3F,IAAI,CAAC;gBACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;oBACxB,OAAO;oBACP,IAAI,OAAO,CAAW,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAClC,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,cAAc,CAAC,CACvE;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,eAAM,CAAC,IAAI,CAAC,GAAG,IAAI,iCAAkC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;gBAChF,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,CACJ,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,kBAAkB,EACnB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACpB,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;YACzD,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO;gBAClC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;gBAC1G,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YACzB,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;YAC5E,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;SAChF,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,SAAS,EAAE,MAAM,IAAI,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAEjE,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QAErD,wBAAwB;QACxB,MAAM,CAAC,SAAS,EAAE,cAAc,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACpE,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;YAC5D,kBAAkB,CAAC,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC;YAC/E,kBAAkB,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC;SACvE,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG;YACf,SAAS,EAAE,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;YAC1H,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;YAClC,IAAI,EAAE,SAAkB;YACxB,GAAG;YACH,MAAM;YACN,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;YACzC,QAAQ,EAAE;gBACR,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ;gBAC1B,iBAAiB,EAAE,CAAC;aACrB;YACD,MAAM,EAAE,cAAc,IAAI;gBACxB,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;gBAClC,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG;gBAClC,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;gBACxB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;aACxB;YACD,WAAW,EAAE,kBAAkB,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE;YAC3G,SAAS,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;YACzE,OAAO,EAAE,YAAY,EAAE,wBAAwB;YAC/C,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;YACpC,SAAS,EAAE,SAAS,IAAI,SAAS;YACjC,cAAc,EAAE,cAAc,IAAI,SAAS;YAC3C,WAAW,EAAE,EAAE,EAAE,2CAA2C;SAC7D,CAAC;QAEF,MAAM,QAAQ,GAAiB;YAC7B,QAAQ;YACR,WAAW,EAAE,SAAS,EAAE,IAAI,IAAI,eAAe;YAC/C,QAAQ,EAAE,QAAQ,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YACjE,QAAQ,EAAE,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;YAC5E,MAAM,EAAE,MAAM,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YACtD,aAAa;YACb,eAAe;YACf,eAAe,EAAE,EAAE,EAAE,cAAc;SACpC,CAAC;QAEF,4CAA4C;QAC5C,QAAQ,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAElE,wBAAwB;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,eAAM,CAAC,IAAI,CAAC,sBAAsB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,eAAM,CAAC,IAAI,CAAC,wBAAwB,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,eAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,IAAU,EAAE,aAAqE;QAC/G,6DAA6D;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAE7B,MAAM,cAAc,GAAG,CAAC,KAAU,EAAO,EAAE;YACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACzD,MAAM,YAAY,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9G,OAAO;gBACL,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE;gBAChB,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;gBAClB,QAAQ;gBACR,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;aACzD,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAEO,gBAAgB,CAAC,GAAW;QAClC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,uBAAuB;YAEzE,yBAAyB;YACzB,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBAClC,0CAA0C;gBAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7F,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;wBACjD,OAAO,SAAS,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChD,CAAC;oBACD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC7F,OAAO,SAAS,QAAQ,EAAE,CAAC;gBAC7B,CAAC;gBACD,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACrD,mCAAmC;YACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YAC/C,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;YACzC,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAE9B,0BAA0B;YAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7F,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACjD,0DAA0D;gBAC1D,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,2CAA2C;gBAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;oBAC5B,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,CAAC;YACH,CAAC;YAED,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,IAAI,IAAI,MAAM,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,0CAA0C,GAAG,YAAa,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YACjG,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACtG,CAAC;IAED;;;OAGG;IACK,kBAAkB,CAAC,QAAsB;QAC/C,IAAI,CAAC;YACH,uDAAuD;YACvD,MAAM,WAAW,GAAG;gBAClB,6BAA6B;gBAC7B,GAAG,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACnD,+BAA+B;gBAC/B,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAClD,2DAA2D;gBAC3D,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC7C,EAAE,EAAE,CAAC,CAAC,SAAS;oBACf,GAAG,EAAE,CAAC,CAAC,OAAO;oBACd,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI;oBACxB,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC;oBACrC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,oBAAoB;oBACpD,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;iBACxE,CAAC,CAAC;aACJ,CAAC;YAEF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAChF,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,mCAAoC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3E,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,GAAW;QACrC,iDAAiD;QACjD,IAAI,UAAU,GAAG,GAAG;aACjB,OAAO,CAAC,qDAAqD,EAAE,EAAE,CAAC;aAClE,OAAO,CAAC,kDAAkD,EAAE,EAAE,CAAC;aAC/D,OAAO,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC,mCAAmC;aAC/E,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC,oCAAoC;aAClF,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,uBAAuB;aAC5C,IAAI,EAAE,CAAC;QAEV,+BAA+B;QAC/B,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,IAAS;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;SACvE,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAAC,IAAU;QACvC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;gBAC9B,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;gBAC7C,MAAM,cAAc,GAAG,aAAa,CAAC,CAAC;oBACpC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC3C,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BACvE,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAEpD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBAE7D,+BAA+B;gBAC/B,MAAM,QAAQ,GAAwB,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAChD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;oBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,QAAQ,GAAG,EAAE,CAAC;oBACxC,MAAM,MAAM,GAAwB,EAAE,CAAC;oBACvC,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;wBACtE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,IAAI,SAAS,GAAG,EAAE,CAAC;wBACtD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;4BACxD,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;wBAC/B,CAAC;6BAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;4BACrC,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC;wBAC9B,CAAC;6BAAM,CAAC;4BACN,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;wBACjD,CAAC;oBACH,CAAC,CAAC,CAAC;oBACH,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACnC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;oBAC5B,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,oCAAoC;gBACpC,MAAM,gBAAgB,GAA2B,EAAE,CAAC;gBACpD,IAAI,CAAC;oBACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACpD,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBACvC,IAAI,GAAG;4BAAE,gBAAgB,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;oBAChD,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;gBAEV,MAAM,kBAAkB,GAA2B,EAAE,CAAC;gBACtD,IAAI,CAAC;oBACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACtD,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBACzC,IAAI,GAAG;4BAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;oBAClD,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;gBAEV,OAAO;oBACL,cAAc,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE;oBACxD,cAAc;oBACd,YAAY;oBACZ,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;oBACjE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;oBACrF,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;iBAC5F,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,gCAAgC,GAAI,KAAe,CAAC,OAAO,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,qBAAqB,CAAC,aAAoB;QACtD,IAAI,CAAC;YACH,MAAM,YAAY,GAA2B,EAAE,CAAC;YAChD,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,IAAI,cAAc,GAAG,CAAC,CAAC;YAEvB,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;gBAClC,yBAAyB;gBACzB,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,IAAI,OAAO,CAAC;gBAC3C,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAEnD,wBAAwB;gBACxB,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC;oBAC7F,cAAc,EAAE,CAAC;gBACnB,CAAC;gBAED,oEAAoE;gBACpE,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,OAAO,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;oBACtD,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;wBAC1B,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;4BAClD,KAAK,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;4BAC9E,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gCACjC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BAC1B,CAAC;wBACH,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC,CAAA,CAAC;gBACZ,CAAC;YACH,CAAC;YAED,OAAO;gBACL,aAAa,EAAE,aAAa,CAAC,MAAM;gBACnC,cAAc;gBACd,YAAY;gBACZ,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,wBAAwB;aAClE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,qCAAqC,GAAI,KAAe,CAAC,OAAO,CAAC,CAAC;YAC9E,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,qBAAqB,CAAC,IAAU;QAC5C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACtC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;gBAChC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAgC,CAAC;gBACxF,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAEnD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,wBAAwB,CAAC,CAAC;gBACtF,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;gBAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAE7D,OAAO;oBACL,eAAe,EAAE,SAAS,CAAC,CAAC,CAAE,SAAiB,CAAC,eAAe,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;oBAC3G,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG;oBACnF,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;oBAC7D,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;oBACvB,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAE,GAAW,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;oBAC9D,sBAAsB,EAAE,QAAQ,CAAC,CAAC,CAAE,QAAgB,CAAC,UAAU,IAAK,QAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;oBACzG,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;iBACpE,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,qCAAqC,GAAI,KAAe,CAAC,OAAO,CAAC,CAAC;YAC9E,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,IAAU,EAAE,YAAiB;QAC7D,IAAI,CAAC;YACH,kDAAkD;YAClD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;YAC7C,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;gBAC5C,0CAA0C;gBAC1C,IAAI,QAAQ,GAAG,EAAE,CAAC;gBAClB,IAAI,OAAO,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC;oBAC3B,QAAQ,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;gBACzC,CAAC;qBAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC7C,QAAQ,GAAG,eAAe,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC;gBAChE,CAAC;qBAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC/C,QAAQ,GAAG,iBAAiB,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC;gBACpE,CAAC;qBAAM,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClF,2DAA2D;oBAC3D,QAAQ,GAAG,wBAAwB,OAAO,CAAC,SAAS,IAAI,CAAC;gBAC3D,CAAC;gBACD,IAAI,QAAQ,EAAE,CAAC;oBACb,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;YAED,iDAAiD;YACjD,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CACxC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAY,EAAE,EAAE;gBAC/C,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;oBACnD,IAAI,CAAC,QAAQ;wBAAE,OAAO,OAAO,CAAC;oBAE9B,+CAA+C;oBAC/C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAA6B,EAAE,EAAE;wBAClF,IAAI,EAAE,GAAmB,IAAI,CAAC;wBAE9B,kCAAkC;wBAClC,IAAI,CAAC;4BACH,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;wBACnC,CAAC;wBAAC,MAAM,CAAC,CAAA,CAAC;wBAEV,+CAA+C;wBAC/C,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;4BAC3C,EAAE,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC/C,CAAC;wBAED,IAAI,CAAC,EAAE;4BAAE,OAAO,IAAI,CAAC;wBAErB,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;wBAC7C,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;wBAExC,OAAO;4BACL,MAAM,EAAE;gCACN,OAAO,EAAE,QAAQ,CAAC,OAAO;gCACzB,UAAU,EAAE,QAAQ,CAAC,UAAU;gCAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;gCACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;gCACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gCAC3B,eAAe,EAAE,QAAQ,CAAC,eAAe,KAAK,kBAAkB,IAAI,QAAQ,CAAC,eAAe,KAAK,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;gCACrJ,KAAK,EAAE,QAAQ,CAAC,KAAK;gCACrB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gCAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;gCAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM,KAAK,uBAAuB,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gCACjF,YAAY,EAAE,QAAQ,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;6BAClF;4BACD,YAAY,EAAE;gCACZ,OAAO,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gCAC1C,UAAU,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;oCAChC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW;oCACjC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU;gCAC1C,gBAAgB,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE;6BAChD;yBACF,CAAC;oBACJ,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;oBAE/D,IAAI,WAAW,EAAE,CAAC;wBAChB,OAAO;4BACL,GAAG,OAAO;4BACV,MAAM,EAAE,WAAW,CAAC,MAAM;4BAC1B,YAAY,EAAE,WAAW,CAAC,YAAY;yBACvC,CAAC;oBACJ,CAAC;oBACD,OAAO,OAAO,CAAC;gBACjB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC,CAAC,CACH,CAAC;YAEF,6BAA6B;YAC7B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;YAEnF,+BAA+B;YAC/B,MAAM,gBAAgB,GAAG,gBAAgB;iBACtC,MAAM,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC;iBAChD,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC;gBACjB,SAAS,EAAE,EAAE,CAAC,SAAS;gBACvB,OAAO,EAAE,EAAE,CAAC,YAAY,EAAE,OAAO,IAAI,KAAK;gBAC1C,UAAU,EAAE,EAAE,CAAC,YAAY,EAAE,UAAU,IAAI,KAAK;gBAChD,gBAAgB,EAAE,EAAE,CAAC,YAAY,EAAE,gBAAgB,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;aACtE,CAAC,CAAC,CAAC;YAEN,OAAO;gBACL,QAAQ,EAAE,gBAAgB;gBAC1B,gBAAgB,EAAE,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;gBAC5E,UAAU,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;aAC3D,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,mCAAmC,GAAI,KAAe,CAAC,OAAO,CAAC,CAAC;YAC5E,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB,CAAC,IAAU,EAAE,QAAe;QAC/D,IAAI,CAAC;YACH,MAAM,UAAU,GAAU,EAAE,CAAC;YAE7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;gBAC/C,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;oBAC1E,IAAI,CAAC;wBACH,yCAAyC;wBACzC,IAAI,QAAQ,GAAG,EAAE,CAAC;wBAClB,IAAI,OAAO,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC;4BAC3B,QAAQ,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;wBACzC,CAAC;6BAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;4BAC7C,QAAQ,GAAG,eAAe,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC;wBAChE,CAAC;6BAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;4BAC/C,QAAQ,GAAG,iBAAiB,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC;wBACpE,CAAC;6BAAM,IAAI,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;4BACpC,QAAQ,GAAG,GAAG,OAAO,UAAU,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;wBAC7D,CAAC;wBAED,IAAI,CAAC,QAAQ;4BAAE,SAAS;wBAExB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAgC,EAAE,EAAE;4BACjF,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAA+D,CAAC;4BACrG,IAAI,CAAC,EAAE;gCAAE,OAAO,IAAI,CAAC;4BAErB,YAAY;4BACZ,IAAI,KAAyB,CAAC;4BAC9B,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gCACV,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gCAChE,KAAK,GAAG,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;4BACvC,CAAC;4BACD,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gCAClC,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;4BACnD,CAAC;4BAED,OAAO;gCACL,SAAS,EAAG,EAAuB,CAAC,IAAI,IAAI,GAAG;gCAC/C,KAAK;gCACL,WAAW,EAAG,EAAuB,CAAC,WAAW,IAAI,SAAS;gCAC9D,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC;gCACrC,OAAO,EAAG,EAAuB,CAAC,OAAO,IAAI,SAAS;gCACtD,SAAS,EAAG,EAAuB,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAE,EAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;gCAClG,SAAS,EAAG,EAAuB,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAE,EAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;gCAClG,eAAe,EAAE;oCACf,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC;oCACrC,OAAO,EAAG,EAAuB,CAAC,OAAO,IAAI,SAAS;oCACtD,SAAS,EAAG,EAAuB,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAE,EAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;oCAClG,SAAS,EAAG,EAAuB,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAE,EAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;iCACnG;6BACF,CAAC;wBACJ,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;wBAEtD,IAAI,OAAO,EAAE,CAAC;4BACZ,UAAU,CAAC,IAAI,CAAC;gCACd,SAAS,EAAE,OAAO,CAAC,SAAS;gCAC5B,GAAG,OAAO;6BACX,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,oBAAoB;oBACtB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,UAAU,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,wCAAwC,GAAI,KAAe,CAAC,OAAO,CAAC,CAAC;YACjF,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AA9kBD,sCA8kBC"}