jumpy-lion 0.1.6-beta.3 → 0.1.6-beta.31

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 (197) hide show
  1. package/README.md +1 -607
  2. package/browser/fonts/macos-bundle/40-macos-aliases.conf +497 -0
  3. package/browser/fonts/macos-bundle/README.md +24 -0
  4. package/browser/fonts/macos-bundle/install.sh +83 -0
  5. package/dist/browser-controller.d.ts +21 -3
  6. package/dist/browser-controller.d.ts.map +1 -1
  7. package/dist/browser-controller.js +75 -231
  8. package/dist/browser-controller.js.map +1 -1
  9. package/dist/browser-plugin.d.ts +75 -104
  10. package/dist/browser-plugin.d.ts.map +1 -1
  11. package/dist/browser-plugin.js +241 -280
  12. package/dist/browser-plugin.js.map +1 -1
  13. package/dist/browser-process/align-fingerprint-config.d.ts +40 -0
  14. package/dist/browser-process/align-fingerprint-config.d.ts.map +1 -0
  15. package/dist/browser-process/align-fingerprint-config.js +79 -0
  16. package/dist/browser-process/align-fingerprint-config.js.map +1 -0
  17. package/dist/browser-process/anti-detect-config.d.ts +130 -1
  18. package/dist/browser-process/anti-detect-config.d.ts.map +1 -1
  19. package/dist/browser-process/anti-detect-config.js +353 -110
  20. package/dist/browser-process/anti-detect-config.js.map +1 -1
  21. package/dist/browser-process/browser.d.ts +37 -89
  22. package/dist/browser-process/browser.d.ts.map +1 -1
  23. package/dist/browser-process/browser.js +389 -85
  24. package/dist/browser-process/browser.js.map +1 -1
  25. package/dist/browser-process/fingerprint-config.d.ts +103 -0
  26. package/dist/browser-process/fingerprint-config.d.ts.map +1 -0
  27. package/dist/browser-process/fingerprint-config.js +245 -0
  28. package/dist/browser-process/fingerprint-config.js.map +1 -0
  29. package/dist/browser-process/get-chrome-executable.d.ts +6 -0
  30. package/dist/browser-process/get-chrome-executable.d.ts.map +1 -1
  31. package/dist/browser-process/get-chrome-executable.js +23 -0
  32. package/dist/browser-process/get-chrome-executable.js.map +1 -1
  33. package/dist/browser-process/gpu-family-profiles.d.ts +53 -0
  34. package/dist/browser-process/gpu-family-profiles.d.ts.map +1 -0
  35. package/dist/browser-process/gpu-family-profiles.js +395 -0
  36. package/dist/browser-process/gpu-family-profiles.js.map +1 -0
  37. package/dist/browser-process/index.d.ts +1 -1
  38. package/dist/browser-process/index.d.ts.map +1 -1
  39. package/dist/browser-process/index.js +1 -1
  40. package/dist/browser-process/index.js.map +1 -1
  41. package/dist/browser-process/launch-options.d.ts +195 -0
  42. package/dist/browser-process/launch-options.d.ts.map +1 -0
  43. package/dist/browser-process/launch-options.js +2 -0
  44. package/dist/browser-process/launch-options.js.map +1 -0
  45. package/dist/browser-process/port-allocator.d.ts +46 -0
  46. package/dist/browser-process/port-allocator.d.ts.map +1 -0
  47. package/dist/browser-process/port-allocator.js +171 -0
  48. package/dist/browser-process/port-allocator.js.map +1 -0
  49. package/dist/browser-process/process.d.ts +35 -0
  50. package/dist/browser-process/process.d.ts.map +1 -1
  51. package/dist/browser-process/process.js +110 -0
  52. package/dist/browser-process/process.js.map +1 -1
  53. package/dist/browser-process/signal-cleanup.d.ts +37 -0
  54. package/dist/browser-process/signal-cleanup.d.ts.map +1 -0
  55. package/dist/browser-process/signal-cleanup.js +93 -0
  56. package/dist/browser-process/signal-cleanup.js.map +1 -0
  57. package/dist/connection/cdp-reconnection.d.ts +61 -0
  58. package/dist/connection/cdp-reconnection.d.ts.map +1 -0
  59. package/dist/connection/cdp-reconnection.js +98 -0
  60. package/dist/connection/cdp-reconnection.js.map +1 -0
  61. package/dist/connection/page-session.d.ts +109 -0
  62. package/dist/connection/page-session.d.ts.map +1 -0
  63. package/dist/connection/page-session.js +257 -0
  64. package/dist/connection/page-session.js.map +1 -0
  65. package/dist/crawler.d.ts +30 -1
  66. package/dist/crawler.d.ts.map +1 -1
  67. package/dist/crawler.js +97 -7
  68. package/dist/crawler.js.map +1 -1
  69. package/dist/fingerprinting/fingerprint-injector.d.ts +6 -116
  70. package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -1
  71. package/dist/fingerprinting/fingerprint-injector.js +82 -531
  72. package/dist/fingerprinting/fingerprint-injector.js.map +1 -1
  73. package/dist/fingerprinting/fingerprint-overrides/index.d.ts +6 -2
  74. package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -1
  75. package/dist/fingerprinting/fingerprint-overrides/index.js +6 -2
  76. package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -1
  77. package/dist/fingerprinting/fingerprint-overrides/navigator-override.d.ts +18 -0
  78. package/dist/fingerprinting/fingerprint-overrides/navigator-override.d.ts.map +1 -0
  79. package/dist/fingerprinting/fingerprint-overrides/navigator-override.js +136 -0
  80. package/dist/fingerprinting/fingerprint-overrides/navigator-override.js.map +1 -0
  81. package/dist/fingerprinting/fingerprint-overrides/override.d.ts +137 -0
  82. package/dist/fingerprinting/fingerprint-overrides/override.d.ts.map +1 -0
  83. package/dist/fingerprinting/fingerprint-overrides/override.js +14 -0
  84. package/dist/fingerprinting/fingerprint-overrides/override.js.map +1 -0
  85. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -1
  86. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +42 -11
  87. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -1
  88. package/dist/fingerprinting/fingerprint-overrides/registry.d.ts +27 -0
  89. package/dist/fingerprinting/fingerprint-overrides/registry.d.ts.map +1 -0
  90. package/dist/fingerprinting/fingerprint-overrides/registry.js +285 -0
  91. package/dist/fingerprinting/fingerprint-overrides/registry.js.map +1 -0
  92. package/dist/fingerprinting/fingerprint-overrides/screen-override.d.ts +16 -0
  93. package/dist/fingerprinting/fingerprint-overrides/screen-override.d.ts.map +1 -0
  94. package/dist/fingerprinting/fingerprint-overrides/screen-override.js +175 -0
  95. package/dist/fingerprinting/fingerprint-overrides/screen-override.js.map +1 -0
  96. package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -1
  97. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +72 -6
  98. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -1
  99. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -1
  100. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +23 -4
  101. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js.map +1 -1
  102. package/dist/fingerprinting/injection-planner.d.ts +178 -0
  103. package/dist/fingerprinting/injection-planner.d.ts.map +1 -0
  104. package/dist/fingerprinting/injection-planner.js +376 -0
  105. package/dist/fingerprinting/injection-planner.js.map +1 -0
  106. package/dist/fingerprinting/locale-resolver.d.ts +7 -0
  107. package/dist/fingerprinting/locale-resolver.d.ts.map +1 -1
  108. package/dist/fingerprinting/locale-resolver.js +24 -1
  109. package/dist/fingerprinting/locale-resolver.js.map +1 -1
  110. package/dist/fingerprinting/non-apify-fingerprint-generator.d.ts +23 -11
  111. package/dist/fingerprinting/non-apify-fingerprint-generator.d.ts.map +1 -1
  112. package/dist/fingerprinting/non-apify-fingerprint-generator.js +53 -15
  113. package/dist/fingerprinting/non-apify-fingerprint-generator.js.map +1 -1
  114. package/dist/fingerprinting/non-apify-profiles.json +52186 -0
  115. package/dist/fingerprinting/os-consistency.d.ts +31 -0
  116. package/dist/fingerprinting/os-consistency.d.ts.map +1 -0
  117. package/dist/fingerprinting/os-consistency.js +50 -0
  118. package/dist/fingerprinting/os-consistency.js.map +1 -0
  119. package/dist/fingerprinting/profile-quality.d.ts +24 -0
  120. package/dist/fingerprinting/profile-quality.d.ts.map +1 -0
  121. package/dist/fingerprinting/profile-quality.js +165 -0
  122. package/dist/fingerprinting/profile-quality.js.map +1 -0
  123. package/dist/fingerprinting/profile-selector.d.ts +101 -0
  124. package/dist/fingerprinting/profile-selector.d.ts.map +1 -0
  125. package/dist/fingerprinting/profile-selector.js +156 -0
  126. package/dist/fingerprinting/profile-selector.js.map +1 -0
  127. package/dist/fingerprinting/ua-alignment.d.ts +51 -0
  128. package/dist/fingerprinting/ua-alignment.d.ts.map +1 -0
  129. package/dist/fingerprinting/ua-alignment.js +146 -0
  130. package/dist/fingerprinting/ua-alignment.js.map +1 -0
  131. package/dist/index.d.ts +5 -0
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +6 -0
  134. package/dist/index.js.map +1 -1
  135. package/dist/input/dropdown-selector.d.ts +74 -0
  136. package/dist/input/dropdown-selector.d.ts.map +1 -0
  137. package/dist/input/dropdown-selector.js +306 -0
  138. package/dist/input/dropdown-selector.js.map +1 -0
  139. package/dist/input/element-target.d.ts +117 -0
  140. package/dist/input/element-target.d.ts.map +1 -0
  141. package/dist/input/element-target.js +383 -0
  142. package/dist/input/element-target.js.map +1 -0
  143. package/dist/input/input-emulator.d.ts +85 -0
  144. package/dist/input/input-emulator.d.ts.map +1 -0
  145. package/dist/input/input-emulator.js +319 -0
  146. package/dist/input/input-emulator.js.map +1 -0
  147. package/dist/input/input-transport.d.ts +60 -0
  148. package/dist/input/input-transport.d.ts.map +1 -0
  149. package/dist/input/input-transport.js +28 -0
  150. package/dist/input/input-transport.js.map +1 -0
  151. package/dist/input/recording-transport.d.ts +32 -0
  152. package/dist/input/recording-transport.d.ts.map +1 -0
  153. package/dist/input/recording-transport.js +43 -0
  154. package/dist/input/recording-transport.js.map +1 -0
  155. package/dist/navigation/page-navigation.d.ts +67 -0
  156. package/dist/navigation/page-navigation.d.ts.map +1 -0
  157. package/dist/navigation/page-navigation.js +107 -0
  158. package/dist/navigation/page-navigation.js.map +1 -0
  159. package/dist/network/network-watch.d.ts +72 -0
  160. package/dist/network/network-watch.d.ts.map +1 -0
  161. package/dist/network/network-watch.js +143 -0
  162. package/dist/network/network-watch.js.map +1 -0
  163. package/dist/page.d.ts +90 -103
  164. package/dist/page.d.ts.map +1 -1
  165. package/dist/page.js +184 -1117
  166. package/dist/page.js.map +1 -1
  167. package/dist/session/inject-hook.d.ts +24 -0
  168. package/dist/session/inject-hook.d.ts.map +1 -0
  169. package/dist/session/inject-hook.js +80 -0
  170. package/dist/session/inject-hook.js.map +1 -0
  171. package/dist/session/save.d.ts +21 -0
  172. package/dist/session/save.d.ts.map +1 -0
  173. package/dist/session/save.js +163 -0
  174. package/dist/session/save.js.map +1 -0
  175. package/dist/session/tar-data-dir.d.ts +13 -0
  176. package/dist/session/tar-data-dir.d.ts.map +1 -0
  177. package/dist/session/tar-data-dir.js +107 -0
  178. package/dist/session/tar-data-dir.js.map +1 -0
  179. package/dist/session/types.d.ts +80 -0
  180. package/dist/session/types.d.ts.map +1 -0
  181. package/dist/session/types.js +29 -0
  182. package/dist/session/types.js.map +1 -0
  183. package/dist/session-profile.d.ts +79 -0
  184. package/dist/session-profile.d.ts.map +1 -0
  185. package/dist/session-profile.js +124 -0
  186. package/dist/session-profile.js.map +1 -0
  187. package/dist/tsconfig.build.tsbuildinfo +1 -1
  188. package/package.json +16 -9
  189. package/scripts/postinstall.cjs +58 -0
  190. package/dist/fingerprinting/custom-fingerprint-injector.d.ts +0 -87
  191. package/dist/fingerprinting/custom-fingerprint-injector.d.ts.map +0 -1
  192. package/dist/fingerprinting/custom-fingerprint-injector.js +0 -342
  193. package/dist/fingerprinting/custom-fingerprint-injector.js.map +0 -1
  194. package/dist/launcher-wrap.d.ts +0 -10
  195. package/dist/launcher-wrap.d.ts.map +0 -1
  196. package/dist/launcher-wrap.js +0 -11
  197. package/dist/launcher-wrap.js.map +0 -1
@@ -3,26 +3,68 @@
3
3
  *
4
4
  * Called by browser.ts before launching the browser when useNativeStealth is enabled.
5
5
  * Translates the fingerprint-generator BrowserFingerprintWithHeaders output into
6
- * the --fingerprint-config JSON schema consumed by the C++ FingerprintConfig class.
6
+ * the --blink-platform-overrides-file JSON schema consumed by the C++ override singleton.
7
7
  */
8
8
  import fs from 'fs/promises';
9
9
  import os from 'os';
10
10
  import path from 'path';
11
11
  import crypto from 'crypto';
12
+ import { deriveWebglFamilyProfile } from './gpu-family-profiles.js';
13
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
14
+ /**
15
+ * Pick a deterministic, plausible `navigator.storage.estimate().quota` value
16
+ * (in bytes) for a given session. Real Mac SSDs scale loosely with RAM tier:
17
+ * 8 GB RAM machines ship with 256/512 GB SSDs, 16 GB with 512/1024, 24/32 GB
18
+ * with 1024/2048 GB. Chrome's StorageManager normally reports ~60% of total
19
+ * disk space; we mirror that with ±10% jitter so different sessions land at
20
+ * different (but plausible) values. The seed makes the choice reproducible
21
+ * across hosts so a Mac-on-Mac harvest and a Mac-spoofed-on-Linux harvest
22
+ * with the same seed produce the same number.
23
+ */
24
+ function deriveStorageQuota(seed, deviceMemoryGB) {
25
+ const ssdSizeGB = deviceMemoryGB <= 8
26
+ ? ((seed & 1) ? 256 : 512)
27
+ : deviceMemoryGB <= 16
28
+ ? ((seed & 1) ? 512 : 1024)
29
+ : ((seed & 1) ? 1024 : 2048);
30
+ const jitterFraction = (((seed >>> 8) & 0xFF) / 255) * 0.2 - 0.1; // -10% .. +10%
31
+ const totalBytes = ssdSizeGB * 1024 * 1024 * 1024;
32
+ return Math.floor(totalBytes * (0.60 + jitterFraction));
33
+ }
34
+ /**
35
+ * Pick deterministic, plausible navigator.connection values for a given session.
36
+ * Real residential broadband: rtt 25-150ms (Chrome rounds to 25ms steps),
37
+ * downlink 5-50 Mbps. Datacenters report rtt<5ms and downlink>500 Mbps which
38
+ * is an obvious bot signal. Same seed → same values, so a Mac harvest and a
39
+ * Linux-Docker-spoof harvest produce identical readouts.
40
+ */
41
+ function deriveNetwork(seed) {
42
+ // rtt in [50, 150] ms, in 25ms steps (so 50, 75, 100, 125, 150).
43
+ const rttSteps = [50, 75, 100, 125, 150];
44
+ const rttIdx = (seed >>> 16) % rttSteps.length;
45
+ const rtt = rttSteps[rttIdx];
46
+ // downlink in [5, 25] Mbps, rounded to one decimal — Chrome rounds to ~1.5
47
+ // significant figures. Use a stable hash of the seed so the choice is
48
+ // reproducible.
49
+ const downlinkBucket = (seed >>> 24) & 0xFF; // 0..255
50
+ const downlink = Math.round((5 + (downlinkBucket / 255) * 20) * 10) / 10;
51
+ return { rtt, downlink, effectiveType: '4g', saveData: false };
52
+ }
53
+ /**
54
+ * Pick AudioContext sampleRate matching the spoofed platform. Real Mac default
55
+ * is 44100 Hz (CoreAudio); real Linux/Windows is 48000 Hz (PulseAudio/WASAPI).
56
+ * Pinning here makes the JS-visible value match the OS we're claiming.
57
+ */
58
+ function deriveAudioSampleRate(platform) {
59
+ return platform.startsWith('Mac') ? 44100 : 48000;
60
+ }
12
61
  // ─── Generation ───────────────────────────────────────────────────────────────
13
62
  /**
14
- * Generate a FingerprintConfig JSON object from fingerprint-generator output.
15
- *
16
- * @param fingerprint - BrowserFingerprintWithHeaders from fingerprint-generator
17
- * @param sessionId - Session identifier used to derive the seed (proxy session ID, etc.)
18
- * @param resolvedLocale - Pre-resolved locale/languages/timezone triple. When provided,
19
- * these values win over anything derived from fingerprint-generator headers so that a
20
- * user-supplied `locale: 'ko-KR'` coherently propagates to every locale surface
21
- * (Accept-Language, navigator.language, Intl defaults, timezone).
63
+ * Derive the 53-bit session seed from the proxy session tag (or a per-process
64
+ * random source when none is supplied) and the UA. See `generateFingerprintConfig`
65
+ * for the determinism rationale.
22
66
  */
23
- export function generateFingerprintConfig(fingerprint, sessionId, resolvedLocale) {
24
- const fp = fingerprint.fingerprint;
25
- const headers = fingerprint.headers;
67
+ function deriveSeed(sessionId, userAgent) {
26
68
  // Seed derivation:
27
69
  // - With a sessionId (proxy session tag) → deterministic: same session ID
28
70
  // always yields the same seed so cookies/IP/canvas/audio stay coherent
@@ -33,12 +75,17 @@ export function generateFingerprintConfig(fingerprint, sessionId, resolvedLocale
33
75
  // all produce the same seed and therefore the same canvas/audio noise
34
76
  // hash across every session — a cross-session correlation signal.
35
77
  const seedSource = sessionId
36
- ? `${sessionId}|${fp.navigator?.userAgent ?? ''}`
37
- : `${crypto.randomBytes(16).toString('hex')}|${fp.navigator?.userAgent ?? ''}`;
78
+ ? `${sessionId}|${userAgent}`
79
+ : `${crypto.randomBytes(16).toString('hex')}|${userAgent}`;
38
80
  const seedHash = crypto.createHash('sha256').update(seedSource).digest();
39
81
  // Take first 8 bytes as a number (JavaScript number precision is sufficient for 53-bit ints)
40
- const seed = seedHash.readUInt32BE(0) * 0x100000000 + seedHash.readUInt32BE(4);
41
- // Navigator platform
82
+ return seedHash.readUInt32BE(0) * 0x100000000 + seedHash.readUInt32BE(4);
83
+ }
84
+ /**
85
+ * Build the navigator surface: legacy + UA-CH platform split, UA-CH brands,
86
+ * user agent, deviceMemory resampling, and storage-quota pinning. Pure.
87
+ */
88
+ function buildNavigatorSurface(fp, headers, seed, locale) {
42
89
  // navigator.platform (legacy) and navigator.userAgentData.platform (UA-CH)
43
90
  // are DIFFERENT APIs with DIFFERENT values:
44
91
  // navigator.platform → 'MacIntel' | 'Win32' | 'Linux x86_64'
@@ -68,6 +115,58 @@ export function generateFingerprintConfig(fingerprint, sessionId, resolvedLocale
68
115
  version: b.version,
69
116
  full_version: fullVersionList[i]?.version ?? b.version,
70
117
  }));
118
+ // User agent from headers (most accurate source)
119
+ const userAgent = headers['user-agent']
120
+ ?? fp.navigator?.userAgent
121
+ ?? '';
122
+ const brandName = extractBrandName(uaBrands, userAgent);
123
+ // deviceMemory: the W3C 2018 spec defined {0.25, 0.5, 1, 2, 4, 8} buckets,
124
+ // but real Chrome 147 on desktop now returns the raw host RAM in GB
125
+ // (verified by harvest 2026-05-11: 32 GB Apple Silicon Mac reports
126
+ // `navigator.deviceMemory === 32`). Reporting the legacy spec-bucketed 8
127
+ // is now a population minority (<15% of real Mac traffic) and an
128
+ // instant detection vector. Sample from a realistic 2026 Mac RAM
129
+ // distribution (8/16/24/32/48/64/128 GB), keyed off the session seed
130
+ // so Mac-on-Mac and Mac-on-Linux runs of the same seed agree.
131
+ const rawDeviceMemory = fp.navigator?.deviceMemory ?? 8;
132
+ const deviceMemory = deriveRealisticDeviceMemory(seed, rawDeviceMemory);
133
+ // navigator.storage.estimate().quota — pinned per-session so the same profile
134
+ // reports the same quota on Mac and Linux (without this, real disk leaks
135
+ // through). Derived from seed+deviceMemory to land in a plausible Mac-SSD
136
+ // distribution: 8 GB RAM ↔ 256/512 GB SSD, 16 GB ↔ 512/1024 GB, 24/32 GB ↔
137
+ // 1024/2048 GB. Chrome's StorageManager normally reports ~60% of total disk
138
+ // space; we mirror that range with ±10% seed-driven jitter so different
139
+ // profiles get different (but plausible) values.
140
+ const storageQuota = deriveStorageQuota(seed, fp.navigator?.deviceMemory ?? deviceMemory);
141
+ const navigator = {
142
+ platform, // legacy form: 'MacIntel' | 'Win32' | 'Linux x86_64'
143
+ ...(locale.language && { language: locale.language }),
144
+ ...(locale.languages && { languages: locale.languages }),
145
+ hardwareConcurrency: fp.navigator?.hardwareConcurrency ?? 8,
146
+ deviceMemory,
147
+ storageQuota,
148
+ userAgent,
149
+ ...(uaBrands.length > 0 && {
150
+ userAgentData: {
151
+ brands: uaBrands,
152
+ mobile: uaData?.mobile ?? false,
153
+ platform: uaData?.platform ?? uaChPlatform,
154
+ platformVersion: uaData?.platformVersion ?? '15.0.0',
155
+ architecture: uaData?.architecture ?? 'x86',
156
+ bitness: uaData?.bitness ?? '64',
157
+ model: uaData?.model ?? '',
158
+ uaFullVersion: uaData?.uaFullVersion ?? extractFullVersion(userAgent),
159
+ fullVersionList: uaBrands,
160
+ },
161
+ }),
162
+ };
163
+ return { navigator, brandName, uaChPlatform, platform };
164
+ }
165
+ /**
166
+ * Build the WebGL surface: vendor/renderer passthrough, family classification,
167
+ * texture-size cap matched to the renderer, and the per-family pname block. Pure.
168
+ */
169
+ function buildWebglSurface(fp) {
71
170
  // WebGL from fingerprint. Real Chrome 147 on Apple Silicon leaks the
72
171
  // exact chip variant verbatim ("ANGLE (Apple, ANGLE Metal Renderer:
73
172
  // Apple M4 Pro, Unspecified Version)"), confirmed against a user's
@@ -78,12 +177,85 @@ export function generateFingerprintConfig(fingerprint, sessionId, resolvedLocale
78
177
  const webglVendor = videoCard?.vendor ?? 'Google Inc. (NVIDIA)';
79
178
  const webglRenderer = videoCard?.renderer
80
179
  ?? 'ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 Direct3D11 vs_5_0 ps_5_0, D3D11)';
81
- // Screen
180
+ // GL_MAX_TEXTURE_SIZE override. SwiftShader (--use-angle=swiftshader) returns
181
+ // 8192; real Apple Silicon (Metal), modern NVIDIA / AMD discrete GPUs, and
182
+ // most Intel iGPUs return 16384. Pair the spoofed renderer with its real
183
+ // texture-size cap; mismatch is an instant CreepJS catch.
184
+ //
185
+ // M1 — also classify the renderer into a GPU family (apple_metal,
186
+ // linux_mesa_*, windows_d3d_*) so we can populate the rest of the
187
+ // platform-divergent WebGL pnames (max_draw_buffers, aliased_*_range, ...)
188
+ // from the per-family PLATFORM_GPU_TABLE. The C++ binary ignores the new
189
+ // keys until M2 lands the parser additions; once it does, the JSON shape
190
+ // is already correct.
191
+ const rendererLower = webglRenderer.toLowerCase();
192
+ const { family: webglFamily, profile: webglFamilyProfile } = deriveWebglFamilyProfile(webglRenderer);
193
+ const webglMaxTextureSize = (() => {
194
+ if (/apple|metal|m[123]\b|intel.*iris.*xe|nvidia geforce rtx 40|nvidia geforce rtx 30|nvidia geforce rtx 20|amd radeon (rx [56789]|pro)/i.test(rendererLower)) {
195
+ return 16384;
196
+ }
197
+ if (/nvidia geforce (gtx 1[06]|rtx 50|rtx 60)|amd radeon rx 7|nvidia rtx (a|h)/i.test(rendererLower)) {
198
+ return 32768; // newest cards / workstation
199
+ }
200
+ if (/swiftshader|llvmpipe|mesa offscreen/i.test(rendererLower)) {
201
+ return 8192; // honest SwiftShader claim
202
+ }
203
+ return webglFamilyProfile.maxTextureSize; // family-table default
204
+ })();
205
+ const webgl = {
206
+ vendor: webglVendor,
207
+ renderer: webglRenderer,
208
+ maxTextureSize: webglMaxTextureSize,
209
+ maxViewportDim: webglFamilyProfile.maxViewportDim,
210
+ extensions: webglFamilyProfile.extensions,
211
+ ...(webglFamily && { familyHint: webglFamily }),
212
+ maxDrawBuffers: webglFamilyProfile.maxDrawBuffers,
213
+ maxSamples: webglFamilyProfile.maxSamples,
214
+ max3dTextureSize: webglFamilyProfile.max3dTextureSize,
215
+ maxArrayTextureLayers: webglFamilyProfile.maxArrayTextureLayers,
216
+ subpixelBits: webglFamilyProfile.subpixelBits,
217
+ maxTransformFeedbackInterleavedComponents: webglFamilyProfile.maxTransformFeedbackInterleavedComponents,
218
+ aliasedLineWidthRange: webglFamilyProfile.aliasedLineWidthRange,
219
+ aliasedPointSizeRange: webglFamilyProfile.aliasedPointSizeRange,
220
+ };
221
+ return { webgl, family: webglFamily, vendor: webglVendor };
222
+ }
223
+ /** Build the WebGPU surface from explicit fingerprint data or the WebGL vendor. Pure. */
224
+ function buildWebgpuSurface(fp, webglVendor) {
225
+ // WebGPU — from explicit webgpu field on fingerprint (non-Apify profiles), or
226
+ // derived from WebGL vendor as a fallback (Apify fingerprints have no webgpu data).
227
+ const webgpuData = fp.webgpu;
228
+ const derivedWebGPUVendor = webgpuData?.vendor ?? deriveWebGPUVendorFromWebGL(webglVendor);
229
+ if (!derivedWebGPUVendor)
230
+ return undefined;
231
+ return {
232
+ vendor: derivedWebGPUVendor,
233
+ architecture: webgpuData?.architecture ?? '',
234
+ device: webgpuData?.device ?? '',
235
+ description: webgpuData?.description ?? '',
236
+ };
237
+ }
238
+ /** Build the screen surface, capping colorDepth to Chrome's privacy-reduced 24. Pure. */
239
+ function buildScreenSurface(fp) {
82
240
  const screen = fp.screen;
83
- // User agent from headers (most accurate source)
84
- const userAgent = headers['user-agent']
85
- ?? fp.navigator?.userAgent
86
- ?? '';
241
+ // colorDepth: real Chrome privacy-reduces to 24 regardless of display HDR
242
+ // capability. 30 is the raw macOS value that leaks through when we don't cap.
243
+ const colorDepth = Math.min(screen?.colorDepth ?? 24, 24);
244
+ return {
245
+ width: screen?.width ?? 1920,
246
+ height: screen?.height ?? 1080,
247
+ availWidth: screen?.availWidth ?? screen?.width ?? 1920,
248
+ availHeight: screen?.availHeight ?? (screen?.height ? screen.height - 40 : 1040),
249
+ colorDepth,
250
+ pixelRatio: screen?.devicePixelRatio ?? 1,
251
+ };
252
+ }
253
+ /**
254
+ * Resolve the (navigator.language, navigator.languages, timezone) triple the
255
+ * config advertises. Prefers the pre-resolved locale (explicit-intent path),
256
+ * else a seeded plausible default. Pure.
257
+ */
258
+ function buildLocaleSurface(headers, resolvedLocale, seed) {
87
259
  // Accept-language: prefer the pre-resolved triple (so a user-supplied locale wins)
88
260
  // and fall back to fingerprint headers when no resolution happened.
89
261
  //
@@ -94,68 +266,106 @@ export function generateFingerprintConfig(fingerprint, sessionId, resolvedLocale
94
266
  // `"en;q=0.9"` which is an instant detectable anomaly. Strip q-values here so the
95
267
  // config field is the clean list; the HTTP header flows from the same field and
96
268
  // will also be q-less, which is a valid (if less common) real-browser pattern.
97
- const rawAcceptLanguage = resolvedLocale?.languages
98
- ?? headers['accept-language']
99
- ?? headers['Accept-Language'];
100
- const acceptLanguage = rawAcceptLanguage
101
- ? rawAcceptLanguage.split(',').map((l) => l.split(';')[0].trim()).filter(Boolean).join(',')
102
- : undefined;
103
- const navLanguage = resolvedLocale?.locale;
104
- const timezone = resolvedLocale?.timezone;
105
- // Primary brand name — extract from UA-CH brands or derive from User-Agent
106
- const brandName = extractBrandName(uaBrands, userAgent);
107
- // Battery — generate realistic values based on target platform.
108
- // Uses UA-CH platform names ('Windows'|'macOS'|'Linux') for the desktop/mac checks.
109
- const battery = generateBatteryConfig(uaChPlatform, seed);
110
- // deviceMemory: spec requires the value be one of {0.25, 0.5, 1, 2, 4, 8}
111
- // (https://www.w3.org/TR/device-memory/#sec-device-memory-js-api). Exposing
112
- // anything outside this set in particular the real 32 on a 32 GB machine —
113
- // is an immediate "bot" signal for any vendor that checks.
114
- const rawDeviceMemory = fp.navigator?.deviceMemory ?? 8;
115
- const deviceMemory = clampDeviceMemoryToSpecBuckets(rawDeviceMemory);
116
- // colorDepth: real Chrome privacy-reduces to 24 regardless of display HDR
117
- // capability. 30 is the raw macOS value that leaks through when we don't cap.
118
- const rawColorDepth = screen?.colorDepth ?? 24;
119
- const colorDepth = Math.min(rawColorDepth, 24);
269
+ if (resolvedLocale) {
270
+ // User specified a locale (fingerprintOptions.locale) or one was derived
271
+ // from the proxy session. Honour it verbatim — this is the explicit-intent
272
+ // path and the source of truth for navigator.language / Accept-Language /
273
+ // timezone propagation.
274
+ const raw = resolvedLocale.languages
275
+ ?? headers['accept-language']
276
+ ?? headers['Accept-Language'];
277
+ const languages = raw
278
+ ? raw.split(',').map((l) => l.split(';')[0].trim()).filter(Boolean).join(',')
279
+ : undefined;
280
+ return { language: resolvedLocale.locale, languages, timezone: resolvedLocale.timezone };
281
+ }
282
+ // ─── No-intent fallback ─────────────────────────────────────────────
283
+ // Without a resolvedLocale, the fingerprint-generator's Accept-Language
284
+ // header reflects the HOST machine (Mac dev box in Prague cs-CZ
285
+ // header). Using it would leak the host locale through navigator.languages
286
+ // and the Worker's Intl/Date paths regardless of what UA the spoof
287
+ // claims. CreepJS Worker probe flags this as "lang/timezone confidence:
288
+ // high" on the host's value instant detection.
289
+ //
290
+ // Pin a seeded-but-plausible default so the seed deterministically picks
291
+ // a coherent (locale, languages, timezone) triple. Pool entries are
292
+ // common English-speaking combos that match the macOS UA-Reduction
293
+ // freeze; identical seed → identical triple, so Mac-on-Mac and
294
+ // Mac-on-Linux runs are diff-stable.
295
+ const FALLBACK_POOL = [
296
+ { locale: 'en-US', languages: 'en-US,en', timezone: 'America/Los_Angeles' },
297
+ { locale: 'en-US', languages: 'en-US,en', timezone: 'America/New_York' },
298
+ { locale: 'en-US', languages: 'en-US,en', timezone: 'America/Chicago' },
299
+ { locale: 'en-US', languages: 'en-US,en', timezone: 'America/Denver' },
300
+ { locale: 'en-GB', languages: 'en-GB,en', timezone: 'Europe/London' },
301
+ { locale: 'en-CA', languages: 'en-CA,en', timezone: 'America/Toronto' },
302
+ { locale: 'en-AU', languages: 'en-AU,en', timezone: 'Australia/Sydney' },
303
+ ];
304
+ const idx = Math.abs(Math.trunc(seed)) % FALLBACK_POOL.length;
305
+ const fb = FALLBACK_POOL[idx];
306
+ return { language: fb.locale, languages: fb.languages, timezone: fb.timezone };
307
+ }
308
+ /**
309
+ * Derive the canvas text-rendering-mode hint from the WebGL family so canvas2D
310
+ * text rasterisation matches the OS we claim. Pure.
311
+ */
312
+ function buildCanvasSurface(family) {
313
+ // M6: the C++ FingerprintConfig parser ALSO derives the same default when
314
+ // canvas is omitted entirely, so this is belt-and-suspenders — but writing
315
+ // it from here means the JSON config is self-describing and a reader can
316
+ // see exactly which mode + font allowlist the session ships with.
317
+ if (!family)
318
+ return undefined;
319
+ const textRenderingMode = (() => {
320
+ switch (family) {
321
+ case 'apple_metal': return 'subpixel_aa_no_hinting';
322
+ case 'windows_d3d_nvidia':
323
+ case 'windows_d3d_amd':
324
+ case 'windows_d3d_intel':
325
+ return 'lcd_subpixel_full_hinting';
326
+ case 'linux_mesa_amd':
327
+ case 'linux_mesa_nvidia':
328
+ case 'linux_mesa_intel':
329
+ return 'rgb_subpixel_slight_hinting';
330
+ default:
331
+ return undefined;
332
+ }
333
+ })();
334
+ return textRenderingMode ? { textRenderingMode } : undefined;
335
+ }
336
+ /**
337
+ * Generate a FingerprintConfig JSON object from fingerprint-generator output.
338
+ *
339
+ * Composed from per-surface pure builders (navigator / webgl / webgpu / screen /
340
+ * locale / battery / network / audio / canvas). The narrow public signature is
341
+ * the module interface — the builders stay private so callers assemble the whole
342
+ * config in one call.
343
+ *
344
+ * @param fingerprint - BrowserFingerprintWithHeaders from fingerprint-generator
345
+ * @param sessionId - Session identifier used to derive the seed (proxy session ID, etc.)
346
+ * @param resolvedLocale - Pre-resolved locale/languages/timezone triple. When provided,
347
+ * these values win over anything derived from fingerprint-generator headers so that a
348
+ * user-supplied `locale: 'ko-KR'` coherently propagates to every locale surface
349
+ * (Accept-Language, navigator.language, Intl defaults, timezone).
350
+ */
351
+ export function generateFingerprintConfig(fingerprint, sessionId, resolvedLocale) {
352
+ const fp = fingerprint.fingerprint;
353
+ const headers = fingerprint.headers;
354
+ const seed = deriveSeed(sessionId, fp.navigator?.userAgent ?? '');
355
+ const locale = buildLocaleSurface(headers, resolvedLocale, seed);
356
+ const nav = buildNavigatorSurface(fp, headers, seed, locale);
357
+ const webglSurface = buildWebglSurface(fp);
120
358
  const config = {
121
359
  version: 1,
122
360
  seed,
123
- brandName,
124
- ...(timezone && { timezone }),
125
- navigator: {
126
- platform, // legacy form: 'MacIntel' | 'Win32' | 'Linux x86_64'
127
- ...(navLanguage && { language: navLanguage }),
128
- ...(acceptLanguage && { languages: acceptLanguage }),
129
- hardwareConcurrency: fp.navigator?.hardwareConcurrency ?? 8,
130
- deviceMemory,
131
- userAgent,
132
- ...(uaBrands.length > 0 && {
133
- userAgentData: {
134
- brands: uaBrands,
135
- mobile: uaData?.mobile ?? false,
136
- platform: uaData?.platform ?? uaChPlatform,
137
- platformVersion: uaData?.platformVersion ?? '15.0.0',
138
- architecture: uaData?.architecture ?? 'x86',
139
- bitness: uaData?.bitness ?? '64',
140
- model: uaData?.model ?? '',
141
- uaFullVersion: uaData?.uaFullVersion ?? extractFullVersion(userAgent),
142
- fullVersionList: uaBrands,
143
- },
144
- }),
145
- },
146
- webgl: {
147
- vendor: webglVendor,
148
- renderer: webglRenderer,
149
- },
150
- screen: {
151
- width: screen?.width ?? 1920,
152
- height: screen?.height ?? 1080,
153
- availWidth: screen?.availWidth ?? screen?.width ?? 1920,
154
- availHeight: screen?.availHeight ?? (screen?.height ? screen.height - 40 : 1040),
155
- colorDepth,
156
- pixelRatio: screen?.devicePixelRatio ?? 1,
157
- },
158
- battery,
361
+ brandName: nav.brandName,
362
+ ...(locale.timezone && { timezone: locale.timezone }),
363
+ navigator: nav.navigator,
364
+ webgl: webglSurface.webgl,
365
+ screen: buildScreenSurface(fp),
366
+ // Battery generate realistic values based on target platform.
367
+ // Uses UA-CH platform names ('Windows'|'macOS'|'Linux') for the desktop/mac checks.
368
+ battery: generateBatteryConfig(nav.uaChPlatform, seed),
159
369
  noise: {
160
370
  canvas: true,
161
371
  audio: true,
@@ -166,18 +376,19 @@ export function generateFingerprintConfig(fingerprint, sessionId, resolvedLocale
166
376
  performanceNowResolutionMs: 1,
167
377
  },
168
378
  };
169
- // WebGPU — from explicit webgpu field on fingerprint (non-Apify profiles), or
170
- // derived from WebGL vendor as a fallback (Apify fingerprints have no webgpu data).
171
- const webgpuData = fp.webgpu;
172
- const derivedWebGPUVendor = webgpuData?.vendor ?? deriveWebGPUVendorFromWebGL(webglVendor);
173
- if (derivedWebGPUVendor) {
174
- config.webgpu = {
175
- vendor: derivedWebGPUVendor,
176
- architecture: webgpuData?.architecture ?? '',
177
- device: webgpuData?.device ?? '',
178
- description: webgpuData?.description ?? '',
179
- };
180
- }
379
+ const webgpu = buildWebgpuSurface(fp, webglSurface.vendor);
380
+ if (webgpu)
381
+ config.webgpu = webgpu;
382
+ // navigator.connection prevent datacenter rtt/downlink leak. Same seed
383
+ // same values, so Mac and Linux Docker hosts running the same profile
384
+ // report the same connection metrics.
385
+ config.network = deriveNetwork(seed);
386
+ // AudioContext.sampleRate hint matched to platform. Consumed by the C++
387
+ // base_audio_context.h getter when the binding-layer override lands.
388
+ config.audio = { sampleRate: deriveAudioSampleRate(nav.platform) };
389
+ const canvas = buildCanvasSurface(webglSurface.family);
390
+ if (canvas)
391
+ config.canvas = canvas;
181
392
  return config;
182
393
  }
183
394
  /**
@@ -204,27 +415,59 @@ export async function cleanupTempFingerprintConfig(filePath) {
204
415
  }
205
416
  // ─── Helpers ──────────────────────────────────────────────────────────────────
206
417
  /**
207
- * Clamp a raw device-memory-in-GB value to the buckets required by the
208
- * Device Memory API spec (https://www.w3.org/TR/device-memory/). Chrome
209
- * always quantizes to {0.25, 0.5, 1, 2, 4, 8}. Returning anything outside
210
- * this set especially the real value on >8 GB machines — is an instant
211
- * anti-bot detection signal.
418
+ * Real Chrome 147 on desktop returns the RAW host RAM in GB (e.g. 32, 64) from
419
+ * `navigator.deviceMemory`, not the W3C 0.25/0.5/1/2/4/8 buckets the 2018 spec
420
+ * defined. Empirically verified on a 32 GB Apple Silicon Mac running Chrome 147
421
+ * (cromite harvest 2026-05-11): `navigator.deviceMemory === 32`. Reporting the
422
+ * spec-bucketed 8 is now a population minority (<15% of real Mac traffic) and
423
+ * is an instant detection vector.
424
+ *
425
+ * Pick a seeded plausible value matching the 2026 Apple Silicon Mac RAM
426
+ * distribution. Same seed → same value, so Mac-on-Mac vs Mac-on-Linux runs
427
+ * are diff-stable; different seeds get different RAM tiers within the
428
+ * realistic population. Windows / Linux distributions follow the same shape
429
+ * since the consumer-laptop population is similar.
212
430
  *
213
- * Rule (per spec): the returned value is the closest bucket that is less
214
- * than or equal to the actual value, capped at 8.
431
+ * Distribution rationale (rough 2026 mix; conservative, weighted toward
432
+ * common configurations):
433
+ * 8 GB – 15% base-spec MacBook Air M1/M2 still in service
434
+ * 16 GB – 40% most common mid-range (default M2/M3/M4 MacBook Air, Pro 14)
435
+ * 24 GB – 15% M3 Pro / M4 Pro mid configurations
436
+ * 32 GB – 20% M3/M4 Pro & Mac Studio default
437
+ * 48 GB – 5% M3/M4 Max
438
+ * 64 GB – 4% high-end Pro / Studio
439
+ * 128 GB – 1% Studio Ultra
440
+ *
441
+ * If the upstream Apify fingerprint already exposes a higher raw value
442
+ * (i.e. the upstream sampled from a 32 GB Mac and reported it pre-clamp),
443
+ * keep that value rather than overwriting — we lose entropy by re-rolling
444
+ * when the pool already gave us something realistic.
215
445
  */
216
- function clampDeviceMemoryToSpecBuckets(raw) {
217
- const buckets = [0.25, 0.5, 1, 2, 4, 8];
218
- if (!Number.isFinite(raw) || raw <= 0)
219
- return 8;
220
- if (raw >= 8)
221
- return 8;
222
- let bucket = buckets[0];
223
- for (const b of buckets) {
224
- if (b <= raw)
225
- bucket = b;
446
+ function deriveRealisticDeviceMemory(seed, rawFromFingerprint) {
447
+ // Trust raw upstream values that ARE plausible (8, 16, 24, 32, 48, 64, 128).
448
+ // Apify pool legacy values (≤ 8) get re-sampled because they reflect the old
449
+ // spec-bucket cap that real Chrome 147 no longer enforces.
450
+ const PLAUSIBLE_RAW = new Set([16, 24, 32, 48, 64, 96, 128]);
451
+ if (Number.isFinite(rawFromFingerprint) && PLAUSIBLE_RAW.has(rawFromFingerprint)) {
452
+ return rawFromFingerprint;
453
+ }
454
+ // Seeded resample. Cumulative-weight table; pick the first bucket whose
455
+ // cumulative weight ≥ (seed % 100).
456
+ const DISTRIBUTION = [
457
+ [8, 15],
458
+ [16, 55], // 15+40
459
+ [24, 70], // 55+15
460
+ [32, 90], // 70+20
461
+ [48, 95], // 90+5
462
+ [64, 99], // 95+4
463
+ [128, 100], // 99+1
464
+ ];
465
+ const pick = Math.abs(Math.trunc(seed)) % 100;
466
+ for (const [gb, cumulative] of DISTRIBUTION) {
467
+ if (pick < cumulative)
468
+ return gb;
226
469
  }
227
- return bucket;
470
+ return 16; // unreachable, satisfies TS
228
471
  }
229
472
  /** Extract full Chrome version string from User-Agent (e.g. "Chrome/136.0.7103.0") */
230
473
  function extractFullVersion(userAgent) {
@@ -1 +1 @@
1
- {"version":3,"file":"anti-detect-config.js","sourceRoot":"","sources":["../../src/browser-process/anti-detect-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anti-detect-config.js","sourceRoot":"","sources":["../../src/browser-process/anti-detect-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAI5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAiQpE,iFAAiF;AAEjF;;;;;;;;;GASG;AACH,SAAS,kBAAkB,CAAC,IAAY,EAAE,cAAsB;IAC5D,MAAM,SAAS,GAAG,cAAc,IAAI,CAAC;QACjC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC1B,CAAC,CAAC,cAAc,IAAI,EAAE;YAClB,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3B,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,eAAe;IACjF,MAAM,UAAU,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAClD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,IAAY;IAC/B,iEAAiE;IACjE,MAAM,QAAQ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;IAClD,MAAM,MAAM,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE7B,2EAA2E;IAC3E,sEAAsE;IACtE,gBAAgB;IAChB,MAAM,cAAc,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IAEzE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACnE,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,QAAgB;IAC3C,OAAO,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AACtD,CAAC;AAED,iFAAiF;AAEjF;;;;GAIG;AACH,SAAS,UAAU,CAAC,SAA6B,EAAE,SAAiB;IAChE,mBAAmB;IACnB,4EAA4E;IAC5E,2EAA2E;IAC3E,8EAA8E;IAC9E,wEAAwE;IACxE,wEAAwE;IACxE,2EAA2E;IAC3E,0EAA0E;IAC1E,sEAAsE;IACtE,MAAM,UAAU,GAAG,SAAS;QACxB,CAAC,CAAC,GAAG,SAAS,IAAI,SAAS,EAAE;QAC7B,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,CAAC;IACzE,6FAA6F;IAC7F,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AAWD;;;GAGG;AACH,SAAS,qBAAqB,CAC1B,EAAgD,EAChD,OAAiD,EACjD,IAAY,EACZ,MAAiD;IAEjD,2EAA2E;IAC3E,4CAA4C;IAC5C,gFAAgF;IAChF,2EAA2E;IAC3E,oEAAoE;IACpE,yEAAyE;IACzE,mEAAmE;IACnE,kEAAkE;IAClE,EAAE;IACF,gCAAgC;IAChC,oEAAoE;IACpE,iFAAiF;IACjF,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,EAAE,CAAC,SAAS,EAAE,QAAQ,IAAI,OAAO,CAAC;IACnD,MAAM,YAAY,GAA2B;QACzC,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,OAAO;QACnB,cAAc,EAAE,OAAO;KAC1B,CAAC;IACF,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;IAExD,gCAAgC;IAChC,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,EAAE,aAAoD,CAAC;IAClF,MAAM,MAAM,GAAI,MAAM,EAAE,MAAgE,IAAI,EAAE,CAAC;IAC/F,MAAM,eAAe,GAAI,MAAM,EAAE,eAAyE,IAAI,MAAM,CAAC;IAErH,MAAM,QAAQ,GAA+B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO;KACzD,CAAC,CAAC,CAAC;IAEJ,iDAAiD;IACjD,MAAM,SAAS,GAAI,OAAO,CAAC,YAAY,CAAwB;WACxD,EAAE,CAAC,SAAS,EAAE,SAAS;WACvB,EAAE,CAAC;IAEV,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAExD,2EAA2E;IAC3E,oEAAoE;IACpE,mEAAmE;IACnE,yEAAyE;IACzE,iEAAiE;IACjE,iEAAiE;IACjE,qEAAqE;IACrE,8DAA8D;IAC9D,MAAM,eAAe,GAAI,EAAE,CAAC,SAA2D,EAAE,YAAY,IAAI,CAAC,CAAC;IAC3G,MAAM,YAAY,GAAG,2BAA2B,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAExE,8EAA8E;IAC9E,yEAAyE;IACzE,0EAA0E;IAC1E,2EAA2E;IAC3E,4EAA4E;IAC5E,wEAAwE;IACxE,iDAAiD;IACjD,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,YAAY,IAAI,YAAY,CAAC,CAAC;IAE1F,MAAM,SAAS,GAAuC;QAClD,QAAQ,EAAE,qDAAqD;QAC/D,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrD,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;QACxD,mBAAmB,EAAE,EAAE,CAAC,SAAS,EAAE,mBAAmB,IAAI,CAAC;QAC3D,YAAY;QACZ,YAAY;QACZ,SAAS;QACT,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI;YACvB,aAAa,EAAE;gBACX,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAG,MAAM,EAAE,MAA8B,IAAI,KAAK;gBACxD,QAAQ,EAAG,MAAM,EAAE,QAA+B,IAAI,YAAY;gBAClE,eAAe,EAAG,MAAM,EAAE,eAAsC,IAAI,QAAQ;gBAC5E,YAAY,EAAG,MAAM,EAAE,YAAmC,IAAI,KAAK;gBACnE,OAAO,EAAG,MAAM,EAAE,OAA8B,IAAI,IAAI;gBACxD,KAAK,EAAG,MAAM,EAAE,KAA4B,IAAI,EAAE;gBAClD,aAAa,EAAG,MAAM,EAAE,aAAoC,IAAI,kBAAkB,CAAC,SAAS,CAAC;gBAC7F,eAAe,EAAE,QAAQ;aAC5B;SACJ,CAAC;KACL,CAAC;IAEF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AAC5D,CAAC;AAUD;;;GAGG;AACH,SAAS,iBAAiB,CAAC,EAAgD;IACvE,qEAAqE;IACrE,oEAAoE;IACpE,mEAAmE;IACnE,0EAA0E;IAC1E,yEAAyE;IACzE,mEAAmE;IACnE,MAAM,SAAS,GAAG,EAAE,CAAC,SAA+C,CAAC;IACrE,MAAM,WAAW,GAAG,SAAS,EAAE,MAAM,IAAI,sBAAsB,CAAC;IAChE,MAAM,aAAa,GAAG,SAAS,EAAE,QAAQ;WAClC,yEAAyE,CAAC;IACjF,8EAA8E;IAC9E,2EAA2E;IAC3E,yEAAyE;IACzE,0DAA0D;IAC1D,EAAE;IACF,kEAAkE;IAClE,kEAAkE;IAClE,2EAA2E;IAC3E,yEAAyE;IACzE,yEAAyE;IACzE,sBAAsB;IACtB,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IAClD,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE,GACtD,wBAAwB,CAAC,aAAa,CAAC,CAAC;IAC5C,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE;QAC9B,IAAI,qIAAqI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC5J,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,4EAA4E,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACnG,OAAO,KAAK,CAAC,CAAE,6BAA6B;QAChD,CAAC;QACD,IAAI,sCAAsC,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC,CAAE,2BAA2B;QAC7C,CAAC;QACD,OAAO,kBAAkB,CAAC,cAAc,CAAC,CAAE,uBAAuB;IACtE,CAAC,CAAC,EAAE,CAAC;IAEL,MAAM,KAAK,GAAmC;QAC1C,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,aAAa;QACvB,cAAc,EAAE,mBAAmB;QACnC,cAAc,EAAE,kBAAkB,CAAC,cAAc;QACjD,UAAU,EAAE,kBAAkB,CAAC,UAAU;QACzC,GAAG,CAAC,WAAW,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;QAC/C,cAAc,EAAE,kBAAkB,CAAC,cAAc;QACjD,UAAU,EAAE,kBAAkB,CAAC,UAAU;QACzC,gBAAgB,EAAE,kBAAkB,CAAC,gBAAgB;QACrD,qBAAqB,EAAE,kBAAkB,CAAC,qBAAqB;QAC/D,YAAY,EAAE,kBAAkB,CAAC,YAAY;QAC7C,yCAAyC,EACrC,kBAAkB,CAAC,yCAAyC;QAChE,qBAAqB,EAAE,kBAAkB,CAAC,qBAAqB;QAC/D,qBAAqB,EAAE,kBAAkB,CAAC,qBAAqB;KAClE,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AAC/D,CAAC;AAED,yFAAyF;AACzF,SAAS,kBAAkB,CACvB,EAAgD,EAChD,WAAmB;IAEnB,8EAA8E;IAC9E,oFAAoF;IACpF,MAAM,UAAU,GAAI,EAAyC,CAAC,MAAuG,CAAC;IACtK,MAAM,mBAAmB,GAAG,UAAU,EAAE,MAAM,IAAI,2BAA2B,CAAC,WAAW,CAAC,CAAC;IAC3F,IAAI,CAAC,mBAAmB;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO;QACH,MAAM,EAAE,mBAAmB;QAC3B,YAAY,EAAE,UAAU,EAAE,YAAY,IAAI,EAAE;QAC5C,MAAM,EAAE,UAAU,EAAE,MAAM,IAAI,EAAE;QAChC,WAAW,EAAE,UAAU,EAAE,WAAW,IAAI,EAAE;KAC7C,CAAC;AACN,CAAC;AAED,yFAAyF;AACzF,SAAS,kBAAkB,CAAC,EAAgD;IACxE,MAAM,MAAM,GAAG,EAAE,CAAC,MAAuD,CAAC;IAC1E,0EAA0E;IAC1E,8EAA8E;IAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1D,OAAO;QACH,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,IAAI;QAC5B,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI;QAC9B,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,MAAM,EAAE,KAAK,IAAI,IAAI;QACvD,WAAW,EAAE,MAAM,EAAE,WAAW,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,UAAU;QACV,UAAU,EAAE,MAAM,EAAE,gBAAgB,IAAI,CAAC;KAC5C,CAAC;AACN,CAAC;AAQD;;;;GAIG;AACH,SAAS,kBAAkB,CACvB,OAAiD,EACjD,cAA0C,EAC1C,IAAY;IAEZ,mFAAmF;IACnF,oEAAoE;IACpE,EAAE;IACF,+EAA+E;IAC/E,qFAAqF;IACrF,8EAA8E;IAC9E,mFAAmF;IACnF,kFAAkF;IAClF,gFAAgF;IAChF,+EAA+E;IAC/E,IAAI,cAAc,EAAE,CAAC;QACjB,yEAAyE;QACzE,2EAA2E;QAC3E,0EAA0E;QAC1E,wBAAwB;QACxB,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS;eAC5B,OAAO,CAAC,iBAAiB,CAAwB;eACjD,OAAO,CAAC,iBAAiB,CAAwB,CAAC;QAC1D,MAAM,SAAS,GAAG,GAAG;YACjB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAC7E,CAAC,CAAC,SAAS,CAAC;QAChB,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC;IAC7F,CAAC;IAED,uEAAuE;IACvE,wEAAwE;IACxE,kEAAkE;IAClE,2EAA2E;IAC3E,mEAAmE;IACnE,wEAAwE;IACxE,iDAAiD;IACjD,EAAE;IACF,yEAAyE;IACzE,oEAAoE;IACpE,mEAAmE;IACnE,+DAA+D;IAC/D,qCAAqC;IACrC,MAAM,aAAa,GAAmE;QAClF,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,qBAAqB,EAAE;QAC3E,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE;QACxE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE;QACvE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE;QACtE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE;QACrE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE;QACvE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE;KAC3E,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC;IAC9D,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC;AACnF,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CACvB,MAA8B;IAE9B,0EAA0E;IAC1E,2EAA2E;IAC3E,yEAAyE;IACzE,kEAAkE;IAClE,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE;QAC5B,QAAQ,MAAM,EAAE,CAAC;YACb,KAAK,aAAa,CAAC,CAAC,OAAO,wBAAiC,CAAC;YAC7D,KAAK,oBAAoB,CAAC;YAC1B,KAAK,iBAAiB,CAAC;YACvB,KAAK,mBAAmB;gBACpB,OAAO,2BAAoC,CAAC;YAChD,KAAK,gBAAgB,CAAC;YACtB,KAAK,mBAAmB,CAAC;YACzB,KAAK,kBAAkB;gBACnB,OAAO,6BAAsC,CAAC;YAClD;gBACI,OAAO,SAAS,CAAC;QACzB,CAAC;IACL,CAAC,CAAC,EAAE,CAAC;IACL,OAAO,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,yBAAyB,CACrC,WAA0C,EAC1C,SAAkB,EAClB,cAA+B;IAE/B,MAAM,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC;IACnC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;IAEpC,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IAElE,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,qBAAqB,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAE3C,MAAM,MAAM,GAA0B;QAClC,OAAO,EAAE,CAAC;QACV,IAAI;QACJ,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrD,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,MAAM,EAAE,kBAAkB,CAAC,EAAE,CAAC;QAC9B,gEAAgE;QAChE,oFAAoF;QACpF,OAAO,EAAE,qBAAqB,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC;QACtD,KAAK,EAAE;YACH,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,IAAI;SACpB;QACD,MAAM,EAAE;YACJ,0BAA0B,EAAE,CAAC;SAChC;KACJ,CAAC;IAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IAEnC,yEAAyE;IACzE,wEAAwE;IACxE,sCAAsC;IACtC,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAErC,wEAAwE;IACxE,qEAAqE;IACrE,MAAM,CAAC,KAAK,GAAG,EAAE,UAAU,EAAE,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IAEnE,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IAEnC,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,MAA6B;IAC1E,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;IAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACtE,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,QAAgB;IAC/D,IAAI,CAAC;QACD,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACL,yDAAyD;IAC7D,CAAC;AACL,CAAC;AAED,iFAAiF;AAEjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,SAAS,2BAA2B,CAAC,IAAY,EAAE,kBAA0B;IACzE,6EAA6E;IAC7E,6EAA6E;IAC7E,2DAA2D;IAC3D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC/E,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IACD,wEAAwE;IACxE,oCAAoC;IACpC,MAAM,YAAY,GAA4B;QAC1C,CAAC,CAAC,EAAE,EAAE,CAAC;QACP,CAAC,EAAE,EAAE,EAAE,CAAC,EAAI,QAAQ;QACpB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAI,QAAQ;QACpB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAI,QAAQ;QACpB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAI,OAAO;QACnB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAI,OAAO;QACnB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO;KACtB,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;IAC9C,KAAK,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,YAAY,EAAE,CAAC;QAC1C,IAAI,IAAI,GAAG,UAAU;YAAE,OAAO,EAAE,CAAC;IACrC,CAAC;IACD,OAAO,EAAE,CAAC,CAAC,4BAA4B;AAC3C,CAAC;AAED,sFAAsF;AACtF,SAAS,kBAAkB,CAAC,SAAiB;IACzC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC9D,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,MAAkC,EAAE,SAAiB;IAC3E,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,OAAO,CAAC,CAAC,KAAK,CAAC;QACnB,CAAC;IACL,CAAC;IACD,0CAA0C;IAC1C,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,gBAAgB,CAAC;IACxD,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/C,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAChD,OAAO,eAAe,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,QAAgB,EAAE,IAAY;IACzD,0CAA0C;IAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,MAAM,SAAS,GAAG,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,OAAO,CAAC;IACjE,MAAM,KAAK,GAAG,QAAQ,KAAK,OAAO,CAAC;IAEnC,IAAI,SAAS,EAAE,CAAC;QACZ,kDAAkD;QAClD,wDAAwD;QACxD,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;YACd,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;QACtF,CAAC;QACD,mDAAmD;QACnD,MAAM,KAAK,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;QAC/C,OAAO;YACH,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG;YACpC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,oBAAoB;YAC5D,eAAe,EAAE,QAAQ;SAC5B,CAAC;IACN,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACR,kDAAkD;QAClD,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,WAAW;YAC5C,OAAO;gBACH,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG;gBACpC,YAAY,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC;gBACjE,eAAe,EAAE,QAAQ;aAC5B,CAAC;QACN,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;QAC9C,OAAO;YACH,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG;YACpC,YAAY,EAAE,QAAQ;YACtB,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,wBAAwB;SACvE,CAAC;IACN,CAAC;IAED,8BAA8B;IAC9B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;AACtF,CAAC;AAED,uDAAuD;AACvD,SAAS,OAAO,CAAC,IAAY;IACzB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;IACjB,OAAO,GAAG,EAAE;QACR,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;IACjD,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,SAAS,2BAA2B,CAAC,WAAmB;IACpD,MAAM,CAAC,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC1C,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACxC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACxC,OAAO,EAAE,CAAC;AACd,CAAC"}