cdp-mcp-server 5.0.2 → 5.1.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 (54) hide show
  1. package/README.md +45 -0
  2. package/dist/config.js +6 -0
  3. package/dist/config.js.map +1 -1
  4. package/dist/connection/browser-discovery.d.ts +41 -4
  5. package/dist/connection/browser-discovery.js +125 -8
  6. package/dist/connection/browser-discovery.js.map +1 -1
  7. package/dist/connection/capabilities.d.ts +58 -0
  8. package/dist/connection/capabilities.js +126 -0
  9. package/dist/connection/capabilities.js.map +1 -0
  10. package/dist/connection/health-monitor.d.ts +22 -0
  11. package/dist/connection/health-monitor.js +155 -28
  12. package/dist/connection/health-monitor.js.map +1 -1
  13. package/dist/connection/index.d.ts +4 -3
  14. package/dist/connection/index.js +2 -1
  15. package/dist/connection/index.js.map +1 -1
  16. package/dist/connection/tab-session-service.d.ts +12 -2
  17. package/dist/connection/tab-session-service.js +48 -14
  18. package/dist/connection/tab-session-service.js.map +1 -1
  19. package/dist/index.js +51 -4
  20. package/dist/index.js.map +1 -1
  21. package/dist/snapshot/accessibility.d.ts +2 -0
  22. package/dist/snapshot/accessibility.js +1 -1
  23. package/dist/snapshot/accessibility.js.map +1 -1
  24. package/dist/tools/device-presets.d.ts +24 -0
  25. package/dist/tools/device-presets.js +62 -0
  26. package/dist/tools/device-presets.js.map +1 -0
  27. package/dist/tools/emulate.js +79 -0
  28. package/dist/tools/emulate.js.map +1 -1
  29. package/dist/tools/interact.js +191 -31
  30. package/dist/tools/interact.js.map +1 -1
  31. package/dist/tools/observe.js +201 -27
  32. package/dist/tools/observe.js.map +1 -1
  33. package/dist/tools/page.d.ts +52 -1
  34. package/dist/tools/page.js +242 -25
  35. package/dist/tools/page.js.map +1 -1
  36. package/dist/tools/storage.d.ts +1 -1
  37. package/dist/tools/storage.js +115 -3
  38. package/dist/tools/storage.js.map +1 -1
  39. package/dist/tools/tabs.js +4 -2
  40. package/dist/tools/tabs.js.map +1 -1
  41. package/dist/types.d.ts +18 -0
  42. package/dist/utils/actionability.d.ts +62 -0
  43. package/dist/utils/actionability.js +190 -0
  44. package/dist/utils/actionability.js.map +1 -0
  45. package/dist/utils/connect-diagnostics.d.ts +46 -0
  46. package/dist/utils/connect-diagnostics.js +124 -0
  47. package/dist/utils/connect-diagnostics.js.map +1 -0
  48. package/dist/utils/wait.d.ts +0 -25
  49. package/dist/utils/wait.js +0 -76
  50. package/dist/utils/wait.js.map +1 -1
  51. package/package.json +1 -1
  52. package/dist/utils/retry.d.ts +0 -40
  53. package/dist/utils/retry.js +0 -75
  54. package/dist/utils/retry.js.map +0 -1
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Connect-failure diagnostics — classifies why auto-connect failed and
3
+ * produces a kind + human message with the exact fix.
4
+ *
5
+ * Failure signatures (source-verified, see _archive research 2026-10):
6
+ * - TCP refused on every port, no browser processes → no browser / not launched
7
+ * - TCP refused, browser running WITH debug flag → Chrome 136+ default-profile block
8
+ * - Port bound, /json/version → 404 → gated remote-debugging (toggle)
9
+ * - WS rejected with --remote-allow-origins hint → origin allowlist
10
+ * - Port file existed but WS connect failed → approval dialog denied / stale file
11
+ */
12
+ /** Outcome of probing one HTTP debug port. */
13
+ export type PortProbeOutcome = 'refused' | 'not_found' | 'timeout' | 'ok' | 'error';
14
+ export interface PortProbeEvidence {
15
+ port: number;
16
+ outcome: PortProbeOutcome;
17
+ /** HTTP status code when available (404 for gated mode). */
18
+ status?: number;
19
+ /** Short error detail (error message, never a full stack). */
20
+ detail?: string;
21
+ }
22
+ /** What the (optional) process scan saw on the machine. */
23
+ export interface ProcessInfo {
24
+ /** Browser process names seen running (e.g. 'brave', 'chrome'). */
25
+ browsersRunning: string[];
26
+ /** At least one browser was launched with --remote-debugging-port. */
27
+ flagPresent: boolean;
28
+ }
29
+ export type ConnectFailureKind = 'no_browser' | 'no_debug_flag' | 'm136_default_dir' | 'toggle_mode' | 'approval_denied' | 'origin_blocked' | 'generic';
30
+ export interface ConnectDiagnosis {
31
+ kind: ConnectFailureKind;
32
+ headline: string;
33
+ fix: string;
34
+ }
35
+ export interface ClassifyInput {
36
+ probes: PortProbeEvidence[];
37
+ /** True when file-based discovery found at least one DevToolsActivePort. */
38
+ portFilesFound: number;
39
+ /** Error messages captured from failed WS connect attempts. */
40
+ connectErrors: string[];
41
+ /** Process-scan result, or null when scan disabled/unavailable. */
42
+ processInfo: ProcessInfo | null;
43
+ host: string;
44
+ primaryPort: number;
45
+ }
46
+ export declare function classifyConnectFailure(input: ClassifyInput): ConnectDiagnosis;
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Connect-failure diagnostics — classifies why auto-connect failed and
3
+ * produces a kind + human message with the exact fix.
4
+ *
5
+ * Failure signatures (source-verified, see _archive research 2026-10):
6
+ * - TCP refused on every port, no browser processes → no browser / not launched
7
+ * - TCP refused, browser running WITH debug flag → Chrome 136+ default-profile block
8
+ * - Port bound, /json/version → 404 → gated remote-debugging (toggle)
9
+ * - WS rejected with --remote-allow-origins hint → origin allowlist
10
+ * - Port file existed but WS connect failed → approval dialog denied / stale file
11
+ */
12
+ // ─── Helpers ────────────────────────────────────────────────────────
13
+ const ANY_BOUND = (probes) => probes.some((p) => p.outcome === 'not_found' || p.outcome === 'ok');
14
+ const ALL_REFUSED = (probes) => probes.length > 0 && probes.every((p) => p.outcome === 'refused');
15
+ function relaunchCommand(host, port) {
16
+ const target = host === '127.0.0.1' || host === 'localhost' ? '' : ` ${host}`;
17
+ return (`& '<browser.exe>' --user-data-dir='<dir>' --remote-debugging-port=${port}${target}`);
18
+ }
19
+ // ─── Classifier ─────────────────────────────────────────────────────
20
+ export function classifyConnectFailure(input) {
21
+ const { probes, portFilesFound, connectErrors, processInfo, host, primaryPort } = input;
22
+ const originError = connectErrors.find((e) => e.includes('--remote-allow-origins'));
23
+ if (originError) {
24
+ return {
25
+ kind: 'origin_blocked',
26
+ headline: 'The browser rejected this WebSocket origin.',
27
+ fix: `Relaunch the browser with:\n` +
28
+ ` --remote-allow-origins=${host === '127.0.0.1' ? '*' : host}\n` +
29
+ `Or connect from the same origin the browser expects.`,
30
+ };
31
+ }
32
+ // Most specific: a port file was found and a WS connect was attempted but
33
+ // failed (approval dialog denied, stale file, no visible window).
34
+ if (portFilesFound > 0 && connectErrors.length > 0) {
35
+ return {
36
+ kind: 'approval_denied',
37
+ headline: 'A DevToolsActivePort file was found but the WebSocket connection ' +
38
+ 'was rejected.',
39
+ fix: `Likely causes:\n` +
40
+ ` 1. The permission dialog was dismissed or no browser window was ` +
41
+ `visible (approval mode auto-denies without a window).\n` +
42
+ ` 2. The port file is stale (browser restarted on another port). ` +
43
+ `Retry after the browser settles.\n` +
44
+ ` 3. Or relaunch with the flag: ${relaunchCommand(host, primaryPort)}`,
45
+ };
46
+ }
47
+ // Gated remote-debugging: port bound but the legacy HTTP API is absent.
48
+ const gated = probes.find((p) => p.outcome === 'not_found' && p.status === 404);
49
+ if (gated) {
50
+ return {
51
+ kind: 'toggle_mode',
52
+ headline: 'Your browser is running the new gated remote-debugging ' +
53
+ '(chrome://inspect/#remote-debugging toggle). It does not serve the ' +
54
+ 'legacy HTTP discovery API.',
55
+ fix: `Do ONE of these:\n` +
56
+ ` 1. Look at your browser — a permission dialog may be waiting. ` +
57
+ `Click "Allow" (needs a visible browser window).\n` +
58
+ ` 2. Or relaunch with the flag (same data dir keeps your logins):\n` +
59
+ ` ${relaunchCommand(host, primaryPort)}\n` +
60
+ ` 3. Or keep the toggle and make sure the browser's User Data dir ` +
61
+ `is discoverable (CDP_USER_DATA env or process scan).`,
62
+ };
63
+ }
64
+ if (ALL_REFUSED(probes)) {
65
+ const browsers = processInfo?.browsersRunning ?? [];
66
+ if (browsers.length === 0) {
67
+ return {
68
+ kind: 'no_browser',
69
+ headline: 'Could not find any browser with remote debugging enabled.',
70
+ fix: `To fix, do ONE of these:\n` +
71
+ ` 1. Launch your browser with the debug flag:\n` +
72
+ ` ${relaunchCommand(host, primaryPort)}\n` +
73
+ ` 2. Or enable the chrome://inspect/#remote-debugging toggle ` +
74
+ `(Chrome/Brave 144+)\n` +
75
+ ` 3. Or set CDP_PORT env var if using a non-standard port\n\n` +
76
+ `The server will auto-connect once debugging is enabled.`,
77
+ };
78
+ }
79
+ if (processInfo?.flagPresent) {
80
+ // Flag present but nothing listening → Chrome 136+ default-profile block
81
+ return {
82
+ kind: 'm136_default_dir',
83
+ headline: 'The debug port was requested but Chromium 136+ refuses CDP on the ' +
84
+ 'DEFAULT User Data directory.',
85
+ fix: `Relaunch with an explicit NON-DEFAULT data dir (your logins stay ` +
86
+ `if you reuse the same dir):\n` +
87
+ ` ${relaunchCommand(host, primaryPort)}\n` +
88
+ `Note: Chrome for Testing is exempt from this restriction.`,
89
+ };
90
+ }
91
+ return {
92
+ kind: 'no_debug_flag',
93
+ headline: 'A browser is running, but without remote debugging enabled.',
94
+ fix: `Do ONE of these:\n` +
95
+ ` 1. Fully exit the browser, then relaunch with:\n` +
96
+ ` ${relaunchCommand(host, primaryPort)}\n` +
97
+ ` 2. Or enable the chrome://inspect/#remote-debugging toggle ` +
98
+ `(Chrome/Brave 144+) — the server will ask for permission on connect.`,
99
+ };
100
+ }
101
+ // Port file existed but connect failed without a recognizable signature —
102
+ // handled above; this branch is unreachable but kept for safety.
103
+ if (portFilesFound > 0 && connectErrors.length > 0) {
104
+ return {
105
+ kind: 'approval_denied',
106
+ headline: 'A DevToolsActivePort file was found but the WebSocket connection ' +
107
+ 'was rejected.',
108
+ fix: `Likely causes:\n` +
109
+ ` 1. The permission dialog was dismissed or no browser window was ` +
110
+ `visible (approval mode auto-denies without a window).\n` +
111
+ ` 2. The port file is stale (browser restarted on another port). ` +
112
+ `Retry after the browser settles.\n` +
113
+ ` 3. Or relaunch with the flag: ${relaunchCommand(host, primaryPort)}`,
114
+ };
115
+ }
116
+ return {
117
+ kind: 'generic',
118
+ headline: 'Could not connect to any browser.',
119
+ fix: `Launch the browser with:\n` +
120
+ ` ${relaunchCommand(host, primaryPort)}\n` +
121
+ `Or enable the chrome://inspect/#remote-debugging toggle.`,
122
+ };
123
+ }
124
+ //# sourceMappingURL=connect-diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-diagnostics.js","sourceRoot":"","sources":["../../src/utils/connect-diagnostics.ts"],"names":[],"mappings":"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"}
@@ -19,31 +19,6 @@ export declare function sleep(ms: number): Promise<void>;
19
19
  * - `"commit"` — returns immediately (navigation response received)
20
20
  */
21
21
  export declare function waitForReadyState(cdpSend: CdpSend, sessionId: string, waitUntil: WaitUntil, timeout: number): Promise<void>;
22
- export interface CompletionResult {
23
- /** The value returned by the wrapped action. */
24
- result: unknown;
25
- /** Human-readable summary of observed network events. */
26
- networkEvents: string[];
27
- }
28
- /**
29
- * Wrap an action and wait for any triggered navigation / network requests
30
- * to settle. Mirrors Playwright's auto-waiting after click, fill, etc.
31
- *
32
- * The caller must supply callbacks for network-monitoring state because
33
- * the monitor is owned by the server, not by this utility.
34
- */
35
- export declare function waitForCompletion(cdpSend: CdpSend, sessionId: string, actionFn: () => Promise<unknown>, opts?: {
36
- timeout?: number;
37
- /** Enable network domain (idempotent). */
38
- enableNetworkMonitoring?: () => Promise<void>;
39
- /** Return a Map of requestId → request metadata. */
40
- getNetworkRequests?: () => Map<string, {
41
- url: string;
42
- method: string;
43
- type?: string;
44
- status?: number;
45
- }>;
46
- }): Promise<CompletionResult>;
47
22
  /**
48
23
  * Poll until `text` appears in the page body, or timeout expires.
49
24
  * Returns `true` if found, `false` on timeout.
@@ -60,82 +60,6 @@ export async function waitForReadyState(cdpSend, sessionId, waitUntil, timeout)
60
60
  }
61
61
  }
62
62
  }
63
- /**
64
- * Wrap an action and wait for any triggered navigation / network requests
65
- * to settle. Mirrors Playwright's auto-waiting after click, fill, etc.
66
- *
67
- * The caller must supply callbacks for network-monitoring state because
68
- * the monitor is owned by the server, not by this utility.
69
- */
70
- export async function waitForCompletion(cdpSend, sessionId, actionFn, opts = {}) {
71
- const timeout = opts.timeout ?? 5000;
72
- const completedEvents = [];
73
- // Optionally enable network monitoring
74
- if (opts.enableNetworkMonitoring) {
75
- await opts.enableNetworkMonitoring();
76
- }
77
- // Snapshot current request IDs before the action
78
- const reqMap = opts.getNetworkRequests?.() ?? new Map();
79
- const prevRequestIds = new Set(reqMap.keys());
80
- // Execute the action
81
- const result = await actionFn();
82
- // Brief pause to let triggered requests appear
83
- await sleep(150);
84
- // Detect new requests
85
- const currentReqMap = opts.getNetworkRequests?.() ?? new Map();
86
- const pendingRequests = new Map();
87
- let navigationDetected = false;
88
- for (const [reqId, req] of currentReqMap) {
89
- if (!prevRequestIds.has(reqId) && !req.status) {
90
- pendingRequests.set(reqId, req);
91
- if ((req.type ?? '').toLowerCase() === 'document') {
92
- navigationDetected = true;
93
- }
94
- }
95
- }
96
- // Wait for page load on navigation
97
- if (navigationDetected) {
98
- const navTimeout = Math.min(timeout * 2, 10000);
99
- const start = Date.now();
100
- while (Date.now() - start < navTimeout) {
101
- try {
102
- const r = await cdpSend('Runtime.evaluate', { expression: 'document.readyState', returnByValue: true }, sessionId, 3000);
103
- if (r.result.value === 'complete')
104
- break;
105
- }
106
- catch {
107
- /* page transitioning */
108
- }
109
- await sleep(300);
110
- }
111
- completedEvents.push('[NAV] Page navigation detected and loaded');
112
- }
113
- // Wait for pending XHR/fetch to complete
114
- if (pendingRequests.size > 0 && opts.getNetworkRequests) {
115
- const start = Date.now();
116
- while (Date.now() - start < timeout && pendingRequests.size > 0) {
117
- const updatedMap = opts.getNetworkRequests();
118
- for (const [reqId] of pendingRequests) {
119
- const updated = updatedMap.get(reqId);
120
- if (updated?.status) {
121
- completedEvents.push(`[${(updated.type ?? 'XHR').toUpperCase()}] ${updated.method} ${updated.url.substring(0, 80)} → ${updated.status}`);
122
- pendingRequests.delete(reqId);
123
- }
124
- }
125
- if (pendingRequests.size > 0)
126
- await sleep(100);
127
- }
128
- // Report timed-out requests
129
- for (const [, req] of pendingRequests) {
130
- completedEvents.push(`[PENDING] ${req.method} ${req.url.substring(0, 80)} (still loading)`);
131
- }
132
- }
133
- // Extra settling if any network activity occurred
134
- if (completedEvents.length > 0) {
135
- await sleep(200);
136
- }
137
- return { result, networkEvents: completedEvents };
138
- }
139
63
  // ─── waitForText ────────────────────────────────────────────────────
140
64
  /**
141
65
  * Poll until `text` appears in the page body, or timeout expires.
@@ -1 +1 @@
1
- {"version":3,"file":"wait.js","sourceRoot":"","sources":["../../src/utils/wait.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wait.js","sourceRoot":"","sources":["../../src/utils/wait.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cdp-mcp-server",
3
- "version": "5.0.2",
3
+ "version": "5.1.0",
4
4
  "description": "The power user's browser MCP — connects to your real Chrome/Edge/Brave with full DevTools capabilities",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,40 +0,0 @@
1
- /**
2
- * Retry utilities for transient CDP failures and stale element refs.
3
- *
4
- * Provides generic retries with configurable back-off, plus a
5
- * specialised wrapper for element-resolution actions that need
6
- * Playwright-style auto-waiting.
7
- */
8
- export interface RetryOptions {
9
- /** Maximum number of attempts (default: 3). */
10
- maxAttempts?: number;
11
- /** Initial delay between attempts in ms (default: 500). */
12
- delayMs?: number;
13
- /** Multiplier applied to the delay after each failure (default: 2). */
14
- backoffMultiplier?: number;
15
- /** Predicate: return `true` to retry, `false` to rethrow immediately. */
16
- retryOn?: (error: Error) => boolean;
17
- }
18
- /**
19
- * Retry `fn` up to `maxAttempts` times with exponential back-off.
20
- *
21
- * @example
22
- * const result = await withRetry(() => fetchSomething(), {
23
- * maxAttempts: 4,
24
- * delayMs: 300,
25
- * retryOn: (e) => e.message.includes('ECONNRESET'),
26
- * });
27
- */
28
- export declare function withRetry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
29
- /**
30
- * Retry wrapper tuned for element resolution and actionability checks.
31
- *
32
- * Uses the same logic as the server.js `withRetry` — poll with a fixed
33
- * interval until timeout, fast-failing on errors that can never recover
34
- * (stale uid refs, missing params).
35
- *
36
- * @param fn - Async function to retry (resolve element → act on it)
37
- * @param timeout - Overall timeout in ms (default: 5 000)
38
- * @param interval - Polling interval in ms (default: 200)
39
- */
40
- export declare function retryElementAction<T>(fn: () => Promise<T>, timeout?: number, interval?: number): Promise<T>;
@@ -1,75 +0,0 @@
1
- /**
2
- * Retry utilities for transient CDP failures and stale element refs.
3
- *
4
- * Provides generic retries with configurable back-off, plus a
5
- * specialised wrapper for element-resolution actions that need
6
- * Playwright-style auto-waiting.
7
- */
8
- import { sleep } from './wait.js';
9
- // ─── withRetry ──────────────────────────────────────────────────────
10
- /**
11
- * Retry `fn` up to `maxAttempts` times with exponential back-off.
12
- *
13
- * @example
14
- * const result = await withRetry(() => fetchSomething(), {
15
- * maxAttempts: 4,
16
- * delayMs: 300,
17
- * retryOn: (e) => e.message.includes('ECONNRESET'),
18
- * });
19
- */
20
- export async function withRetry(fn, options = {}) {
21
- const { maxAttempts = 3, delayMs = 500, backoffMultiplier = 2, retryOn, } = options;
22
- let lastError;
23
- let currentDelay = delayMs;
24
- for (let attempt = 1; attempt <= maxAttempts; attempt++) {
25
- try {
26
- return await fn();
27
- }
28
- catch (err) {
29
- lastError = err instanceof Error ? err : new Error(String(err));
30
- // If a predicate was supplied and it says "don't retry", rethrow now
31
- if (retryOn && !retryOn(lastError))
32
- throw lastError;
33
- // Last attempt — don't wait, just throw
34
- if (attempt === maxAttempts)
35
- break;
36
- await sleep(currentDelay);
37
- currentDelay = Math.round(currentDelay * backoffMultiplier);
38
- }
39
- }
40
- throw lastError;
41
- }
42
- // ─── retryElementAction ─────────────────────────────────────────────
43
- /**
44
- * Retry wrapper tuned for element resolution and actionability checks.
45
- *
46
- * Uses the same logic as the server.js `withRetry` — poll with a fixed
47
- * interval until timeout, fast-failing on errors that can never recover
48
- * (stale uid refs, missing params).
49
- *
50
- * @param fn - Async function to retry (resolve element → act on it)
51
- * @param timeout - Overall timeout in ms (default: 5 000)
52
- * @param interval - Polling interval in ms (default: 200)
53
- */
54
- export async function retryElementAction(fn, timeout = 5000, interval = 200) {
55
- const deadline = Date.now() + timeout;
56
- let lastError;
57
- while (true) {
58
- try {
59
- return await fn();
60
- }
61
- catch (e) {
62
- lastError = e instanceof Error ? e : new Error(String(e));
63
- const msg = lastError.message;
64
- // Fast-fail on errors that won't recover with retries
65
- if (msg.includes('ref=') && msg.includes('not found'))
66
- throw lastError;
67
- if (msg.includes('Provide either'))
68
- throw lastError;
69
- if (Date.now() + interval > deadline)
70
- throw lastError;
71
- await sleep(interval);
72
- }
73
- }
74
- }
75
- //# sourceMappingURL=retry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAelC,uEAAuE;AAEvE;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAoB,EACpB,UAAwB,EAAE;IAE1B,MAAM,EACJ,WAAW,GAAG,CAAC,EACf,OAAO,GAAG,GAAG,EACb,iBAAiB,GAAG,CAAC,EACrB,OAAO,GACR,GAAG,OAAO,CAAC;IAEZ,IAAI,SAA4B,CAAC;IACjC,IAAI,YAAY,GAAG,OAAO,CAAC;IAE3B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAEhE,qEAAqE;YACrE,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;gBAAE,MAAM,SAAS,CAAC;YAEpD,wCAAwC;YACxC,IAAI,OAAO,KAAK,WAAW;gBAAE,MAAM;YAEnC,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;YAC1B,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,iBAAiB,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;AAClB,CAAC;AAED,uEAAuE;AAEvE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAoB,EACpB,OAAO,GAAG,IAAI,EACd,QAAQ,GAAG,GAAG;IAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IACtC,IAAI,SAA4B,CAAC;IAEjC,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,SAAS,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAE1D,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC;YAE9B,sDAAsD;YACtD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAAE,MAAM,SAAS,CAAC;YACvE,IAAI,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBAAE,MAAM,SAAS,CAAC;YAEpD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,QAAQ;gBAAE,MAAM,SAAS,CAAC;YACtD,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;AACH,CAAC"}