fpscanner 0.2.0 → 0.9.2

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 (168) hide show
  1. package/README.md +639 -55
  2. package/bin/cli.js +216 -0
  3. package/dist/crypto-helpers.d.ts +19 -0
  4. package/dist/crypto-helpers.d.ts.map +1 -0
  5. package/dist/detections/hasCDP.d.ts +3 -0
  6. package/dist/detections/hasCDP.d.ts.map +1 -0
  7. package/dist/detections/hasContextMismatch.d.ts +3 -0
  8. package/dist/detections/hasContextMismatch.d.ts.map +1 -0
  9. package/dist/detections/hasHeadlessChromeScreenResolution.d.ts +3 -0
  10. package/dist/detections/hasHeadlessChromeScreenResolution.d.ts.map +1 -0
  11. package/dist/detections/hasHighCPUCount.d.ts +3 -0
  12. package/dist/detections/hasHighCPUCount.d.ts.map +1 -0
  13. package/dist/detections/hasImpossibleDeviceMemory.d.ts +3 -0
  14. package/dist/detections/hasImpossibleDeviceMemory.d.ts.map +1 -0
  15. package/dist/detections/hasMismatchPlatformIframe.d.ts +3 -0
  16. package/dist/detections/hasMismatchPlatformIframe.d.ts.map +1 -0
  17. package/dist/detections/hasMismatchPlatformWorker.d.ts +3 -0
  18. package/dist/detections/hasMismatchPlatformWorker.d.ts.map +1 -0
  19. package/dist/detections/hasMismatchWebGLInWorker.d.ts +3 -0
  20. package/dist/detections/hasMismatchWebGLInWorker.d.ts.map +1 -0
  21. package/dist/detections/hasMissingChromeObject.d.ts +3 -0
  22. package/dist/detections/hasMissingChromeObject.d.ts.map +1 -0
  23. package/dist/detections/hasPlaywright.d.ts +3 -0
  24. package/dist/detections/hasPlaywright.d.ts.map +1 -0
  25. package/dist/detections/hasSeleniumProperty.d.ts +3 -0
  26. package/dist/detections/hasSeleniumProperty.d.ts.map +1 -0
  27. package/dist/detections/hasSwiftshaderRenderer.d.ts +3 -0
  28. package/dist/detections/hasSwiftshaderRenderer.d.ts.map +1 -0
  29. package/dist/detections/hasUTCTimezone.d.ts +3 -0
  30. package/dist/detections/hasUTCTimezone.d.ts.map +1 -0
  31. package/dist/detections/hasWebdriver.d.ts +3 -0
  32. package/dist/detections/hasWebdriver.d.ts.map +1 -0
  33. package/dist/detections/hasWebdriverIframe.d.ts +3 -0
  34. package/dist/detections/hasWebdriverIframe.d.ts.map +1 -0
  35. package/dist/detections/hasWebdriverWorker.d.ts +3 -0
  36. package/dist/detections/hasWebdriverWorker.d.ts.map +1 -0
  37. package/dist/detections/hasWebdriverWritable.d.ts +3 -0
  38. package/dist/detections/hasWebdriverWritable.d.ts.map +1 -0
  39. package/dist/fpScanner.cjs.js +31 -0
  40. package/dist/fpScanner.es.js +1066 -0
  41. package/dist/index.d.ts +39 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/signals/browserExtensions.d.ts +5 -0
  44. package/dist/signals/browserExtensions.d.ts.map +1 -0
  45. package/dist/signals/browserFeatures.d.ts +14 -0
  46. package/dist/signals/browserFeatures.d.ts.map +1 -0
  47. package/dist/signals/canvas.d.ts +6 -0
  48. package/dist/signals/canvas.d.ts.map +1 -0
  49. package/dist/signals/cdp.d.ts +2 -0
  50. package/dist/signals/cdp.d.ts.map +1 -0
  51. package/dist/signals/cpuCount.d.ts +2 -0
  52. package/dist/signals/cpuCount.d.ts.map +1 -0
  53. package/dist/signals/etsl.d.ts +2 -0
  54. package/dist/signals/etsl.d.ts.map +1 -0
  55. package/dist/signals/highEntropyValues.d.ts +11 -0
  56. package/dist/signals/highEntropyValues.d.ts.map +1 -0
  57. package/dist/signals/iframe.d.ts +9 -0
  58. package/dist/signals/iframe.d.ts.map +1 -0
  59. package/dist/signals/internationalization.d.ts +5 -0
  60. package/dist/signals/internationalization.d.ts.map +1 -0
  61. package/dist/signals/languages.d.ts +5 -0
  62. package/dist/signals/languages.d.ts.map +1 -0
  63. package/dist/signals/maths.d.ts +2 -0
  64. package/dist/signals/maths.d.ts.map +1 -0
  65. package/dist/signals/mediaCodecs.d.ts +11 -0
  66. package/dist/signals/mediaCodecs.d.ts.map +1 -0
  67. package/dist/signals/mediaQueries.d.ts +13 -0
  68. package/dist/signals/mediaQueries.d.ts.map +1 -0
  69. package/dist/signals/memory.d.ts +2 -0
  70. package/dist/signals/memory.d.ts.map +1 -0
  71. package/dist/signals/multimediaDevices.d.ts +2 -0
  72. package/dist/signals/multimediaDevices.d.ts.map +1 -0
  73. package/dist/signals/navigatorPropertyDescriptors.d.ts +2 -0
  74. package/dist/signals/navigatorPropertyDescriptors.d.ts.map +1 -0
  75. package/dist/signals/nonce.d.ts +2 -0
  76. package/dist/signals/nonce.d.ts.map +1 -0
  77. package/dist/signals/platform.d.ts +2 -0
  78. package/dist/signals/platform.d.ts.map +1 -0
  79. package/dist/signals/playwright.d.ts +2 -0
  80. package/dist/signals/playwright.d.ts.map +1 -0
  81. package/dist/signals/plugins.d.ts +9 -0
  82. package/dist/signals/plugins.d.ts.map +1 -0
  83. package/dist/signals/screenResolution.d.ts +12 -0
  84. package/dist/signals/screenResolution.d.ts.map +1 -0
  85. package/dist/signals/seleniumProperties.d.ts +2 -0
  86. package/dist/signals/seleniumProperties.d.ts.map +1 -0
  87. package/dist/signals/time.d.ts +2 -0
  88. package/dist/signals/time.d.ts.map +1 -0
  89. package/dist/signals/toSourceError.d.ts +5 -0
  90. package/dist/signals/toSourceError.d.ts.map +1 -0
  91. package/dist/signals/url.d.ts +2 -0
  92. package/dist/signals/url.d.ts.map +1 -0
  93. package/dist/signals/userAgent.d.ts +2 -0
  94. package/dist/signals/userAgent.d.ts.map +1 -0
  95. package/dist/signals/utils.d.ts +11 -0
  96. package/dist/signals/utils.d.ts.map +1 -0
  97. package/dist/signals/webGL.d.ts +5 -0
  98. package/dist/signals/webGL.d.ts.map +1 -0
  99. package/dist/signals/webdriver.d.ts +2 -0
  100. package/dist/signals/webdriver.d.ts.map +1 -0
  101. package/dist/signals/webdriverWritable.d.ts +2 -0
  102. package/dist/signals/webdriverWritable.d.ts.map +1 -0
  103. package/dist/signals/webgpu.d.ts +7 -0
  104. package/dist/signals/webgpu.d.ts.map +1 -0
  105. package/dist/signals/worker.d.ts +2 -0
  106. package/dist/signals/worker.d.ts.map +1 -0
  107. package/dist/types.d.ts +207 -0
  108. package/dist/types.d.ts.map +1 -0
  109. package/package.json +58 -15
  110. package/scripts/build-custom.js +246 -0
  111. package/src/crypto-helpers.ts +50 -0
  112. package/src/detections/hasCDP.ts +5 -0
  113. package/src/detections/hasContextMismatch.ts +19 -0
  114. package/src/detections/hasHeadlessChromeScreenResolution.ts +10 -0
  115. package/src/detections/hasHighCPUCount.ts +9 -0
  116. package/src/detections/hasImpossibleDeviceMemory.ts +9 -0
  117. package/src/detections/hasMismatchPlatformIframe.ts +10 -0
  118. package/src/detections/hasMismatchPlatformWorker.ts +10 -0
  119. package/src/detections/hasMismatchWebGLInWorker.ts +13 -0
  120. package/src/detections/hasMissingChromeObject.ts +6 -0
  121. package/src/detections/hasPlaywright.ts +5 -0
  122. package/src/detections/hasSeleniumProperty.ts +5 -0
  123. package/src/detections/hasSwiftshaderRenderer.ts +5 -0
  124. package/src/detections/hasUTCTimezone.ts +5 -0
  125. package/src/detections/hasWebdriver.ts +5 -0
  126. package/src/detections/hasWebdriverIframe.ts +5 -0
  127. package/src/detections/hasWebdriverWorker.ts +5 -0
  128. package/src/detections/hasWebdriverWritable.ts +5 -0
  129. package/src/globals.d.ts +10 -0
  130. package/src/index.ts +644 -0
  131. package/src/signals/browserExtensions.ts +57 -0
  132. package/src/signals/browserFeatures.ts +24 -0
  133. package/src/signals/canvas.ts +84 -0
  134. package/src/signals/cdp.ts +18 -0
  135. package/src/signals/cpuCount.ts +5 -0
  136. package/src/signals/etsl.ts +3 -0
  137. package/src/signals/highEntropyValues.ts +48 -0
  138. package/src/signals/iframe.ts +34 -0
  139. package/src/signals/internationalization.ts +24 -0
  140. package/src/signals/languages.ts +6 -0
  141. package/src/signals/maths.ts +30 -0
  142. package/src/signals/mediaCodecs.ts +120 -0
  143. package/src/signals/mediaQueries.ts +85 -0
  144. package/src/signals/memory.ts +5 -0
  145. package/src/signals/multimediaDevices.ts +34 -0
  146. package/src/signals/navigatorPropertyDescriptors.ts +17 -0
  147. package/src/signals/nonce.ts +3 -0
  148. package/src/signals/platform.ts +3 -0
  149. package/src/signals/playwright.ts +3 -0
  150. package/src/signals/plugins.ts +70 -0
  151. package/src/signals/screenResolution.ts +15 -0
  152. package/src/signals/seleniumProperties.ts +40 -0
  153. package/src/signals/time.ts +3 -0
  154. package/src/signals/toSourceError.ts +27 -0
  155. package/src/signals/url.ts +3 -0
  156. package/src/signals/userAgent.ts +3 -0
  157. package/src/signals/utils.ts +29 -0
  158. package/src/signals/webGL.ts +28 -0
  159. package/src/signals/webdriver.ts +3 -0
  160. package/src/signals/webdriverWritable.ts +15 -0
  161. package/src/signals/webgpu.ts +28 -0
  162. package/src/signals/worker.ts +77 -0
  163. package/src/types.ts +237 -0
  164. package/.babelrc +0 -3
  165. package/.travis.yml +0 -17
  166. package/src/fpScanner.js +0 -222
  167. package/test/test.html +0 -11
  168. package/test/test.js +0 -116
@@ -0,0 +1,39 @@
1
+ import { Fingerprint, CollectFingerprintOptions } from './types';
2
+ declare class FingerprintScanner {
3
+ private fingerprint;
4
+ constructor();
5
+ private collectSignal;
6
+ /**
7
+ * Generate a JA4-inspired fingerprint scanner ID
8
+ * Format: FS1_<det>_<auto>_<dev>_<brw>_<gfx>_<cod>_<loc>_<ctx>
9
+ *
10
+ * Each section is delimited by '_', allowing partial matching.
11
+ * Sections use the pattern: <bitmask>h<hash> where applicable.
12
+ * Bitmasks are extensible - new boolean fields are appended without breaking existing positions.
13
+ *
14
+ * Sections:
15
+ * - det: fastBotDetectionDetails bitmask (14 bits: headlessChromeScreenResolution, hasWebdriver,
16
+ * hasWebdriverWritable, hasSeleniumProperty, hasCDP, hasPlaywright, hasImpossibleDeviceMemory,
17
+ * hasHighCPUCount, hasMissingChromeObject, hasWebdriverIframe, hasWebdriverWorker,
18
+ * hasMismatchWebGLInWorker, hasMismatchPlatformIframe, hasMismatchPlatformWorker)
19
+ * - auto: automation bitmask (5 bits: webdriver, webdriverWritable, selenium, cdp, playwright) + hash
20
+ * - dev: WIDTHxHEIGHT + cpu + mem + device bitmask + hash of all device signals
21
+ * - brw: features.bitmask + extensions.bitmask + plugins bitmask (3 bits) + hash of browser signals
22
+ * - gfx: canvas bitmask (1 bit: hasModifiedCanvas) + hash of all graphics signals
23
+ * - cod: codecs bitmask (1 bit: hasMediaSource) + hash of all codec hashes
24
+ * - loc: language code (2 chars) + language count + hash of locale signals
25
+ * - ctx: context mismatch bitmask (2 bits: iframe, worker) + hash of all context signals
26
+ */
27
+ private generateFingerprintScannerId;
28
+ private encryptFingerprint;
29
+ /**
30
+ * Detection rules with name and severity.
31
+ * All rules are currently HIGH severity as they indicate bot-like behavior.
32
+ */
33
+ private getDetectionRules;
34
+ private runDetectionRules;
35
+ collectFingerprint(options?: CollectFingerprintOptions): Promise<string | Fingerprint>;
36
+ }
37
+ export default FingerprintScanner;
38
+ export * from './types';
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsDA,OAAO,EAAE,WAAW,EAA0C,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAGzG,cAAM,kBAAkB;IACpB,OAAO,CAAC,WAAW,CAAc;;YAiLnB,aAAa;IAQ3B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,4BAA4B;YA2LtB,kBAAkB;IAShC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,iBAAiB;IAiCnB,kBAAkB,CAAC,OAAO,GAAE,yBAA6C;CA0HlF;AAED,eAAe,kBAAkB,CAAC;AAClC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function browserExtensions(): {
2
+ bitmask: string;
3
+ extensions: string[];
4
+ };
5
+ //# sourceMappingURL=browserExtensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserExtensions.d.ts","sourceRoot":"","sources":["../../src/signals/browserExtensions.ts"],"names":[],"mappings":"AAEA,wBAAgB,iBAAiB;;gBAGP,MAAM,EAAE;EAmDjC"}
@@ -0,0 +1,14 @@
1
+ export declare function browserFeatures(): {
2
+ bitmask: string;
3
+ chrome: boolean;
4
+ brave: boolean;
5
+ applePaySupport: boolean;
6
+ opera: boolean;
7
+ serial: boolean;
8
+ attachShadow: boolean;
9
+ caches: boolean;
10
+ webAssembly: boolean;
11
+ buffer: boolean;
12
+ showModalDialog: boolean;
13
+ };
14
+ //# sourceMappingURL=browserFeatures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserFeatures.d.ts","sourceRoot":"","sources":["../../src/signals/browserFeatures.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe;;;;;;;;;;;;EAqB9B"}
@@ -0,0 +1,6 @@
1
+ import { SignalValue } from '../types';
2
+ export declare function canvas(): Promise<{
3
+ hasModifiedCanvas: SignalValue<boolean>;
4
+ canvasFingerprint: SignalValue<string>;
5
+ }>;
6
+ //# sourceMappingURL=canvas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../src/signals/canvas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAuEvC,wBAAsB,MAAM;uBAEO,WAAW,CAAC,OAAO,CAAC;uBACpB,WAAW,CAAC,MAAM,CAAC;GAQrD"}
@@ -0,0 +1,2 @@
1
+ export declare function cdp(): false | "ERROR";
2
+ //# sourceMappingURL=cdp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdp.d.ts","sourceRoot":"","sources":["../../src/signals/cdp.ts"],"names":[],"mappings":"AAEA,wBAAgB,GAAG,oBAelB"}
@@ -0,0 +1,2 @@
1
+ export declare function cpuCount(): number | "NA";
2
+ //# sourceMappingURL=cpuCount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpuCount.d.ts","sourceRoot":"","sources":["../../src/signals/cpuCount.ts"],"names":[],"mappings":"AAEA,wBAAgB,QAAQ,kBAEvB"}
@@ -0,0 +1,2 @@
1
+ export declare function etsl(): number;
2
+ //# sourceMappingURL=etsl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"etsl.d.ts","sourceRoot":"","sources":["../../src/signals/etsl.ts"],"names":[],"mappings":"AAAA,wBAAgB,IAAI,WAEnB"}
@@ -0,0 +1,11 @@
1
+ export declare function highEntropyValues(): Promise<{
2
+ architecture: string;
3
+ bitness: string;
4
+ brands: string;
5
+ mobile: string;
6
+ model: string;
7
+ platform: string;
8
+ platformVersion: string;
9
+ uaFullVersion: string;
10
+ }>;
11
+ //# sourceMappingURL=highEntropyValues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highEntropyValues.d.ts","sourceRoot":"","sources":["../../src/signals/highEntropyValues.ts"],"names":[],"mappings":"AAEA,wBAAsB,iBAAiB;;;;;;;;;GA6CtC"}
@@ -0,0 +1,9 @@
1
+ export declare function iframe(): {
2
+ webdriver: string;
3
+ userAgent: string;
4
+ platform: string;
5
+ memory: string;
6
+ cpuCount: string;
7
+ language: string;
8
+ };
9
+ //# sourceMappingURL=iframe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iframe.d.ts","sourceRoot":"","sources":["../../src/signals/iframe.ts"],"names":[],"mappings":"AAEA,wBAAgB,MAAM;;;;;;;EA+BrB"}
@@ -0,0 +1,5 @@
1
+ export declare function internationalization(): {
2
+ timezone: string;
3
+ localeLanguage: string;
4
+ };
5
+ //# sourceMappingURL=internationalization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internationalization.d.ts","sourceRoot":"","sources":["../../src/signals/internationalization.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB;;;EAqBnC"}
@@ -0,0 +1,5 @@
1
+ export declare function languages(): {
2
+ languages: readonly string[];
3
+ language: string;
4
+ };
5
+ //# sourceMappingURL=languages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"languages.d.ts","sourceRoot":"","sources":["../../src/signals/languages.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS;;;EAKxB"}
@@ -0,0 +1,2 @@
1
+ export declare function maths(): string;
2
+ //# sourceMappingURL=maths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maths.d.ts","sourceRoot":"","sources":["../../src/signals/maths.ts"],"names":[],"mappings":"AAEA,wBAAgB,KAAK,WA2BpB"}
@@ -0,0 +1,11 @@
1
+ import { ERROR, NA } from './utils';
2
+ export declare function mediaCodecs(): {
3
+ audioCanPlayTypeHash: string | typeof NA | typeof ERROR;
4
+ videoCanPlayTypeHash: string | typeof NA | typeof ERROR;
5
+ audioMediaSourceHash: string | typeof NA | typeof ERROR;
6
+ videoMediaSourceHash: string | typeof NA | typeof ERROR;
7
+ rtcAudioCapabilitiesHash: string | typeof NA | typeof ERROR;
8
+ rtcVideoCapabilitiesHash: string | typeof NA | typeof ERROR;
9
+ hasMediaSource: boolean;
10
+ };
11
+ //# sourceMappingURL=mediaCodecs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaCodecs.d.ts","sourceRoot":"","sources":["../../src/signals/mediaCodecs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,EAA6B,MAAM,SAAS,CAAC;AAmF/D,wBAAgB,WAAW;0BAES,MAAM,GAAG,OAAO,EAAE,GAAG,OAAO,KAAK;0BACjC,MAAM,GAAG,OAAO,EAAE,GAAG,OAAO,KAAK;0BACjC,MAAM,GAAG,OAAO,EAAE,GAAG,OAAO,KAAK;0BACjC,MAAM,GAAG,OAAO,EAAE,GAAG,OAAO,KAAK;8BAC7B,MAAM,GAAG,OAAO,EAAE,GAAG,OAAO,KAAK;8BACjC,MAAM,GAAG,OAAO,EAAE,GAAG,OAAO,KAAK;;EA6BxE"}
@@ -0,0 +1,13 @@
1
+ import { ERROR, INIT } from './utils';
2
+ export declare function mediaQueries(): {
3
+ prefersColorScheme: string | null | typeof INIT | typeof ERROR;
4
+ prefersReducedMotion: boolean | typeof INIT | typeof ERROR;
5
+ prefersReducedTransparency: boolean | typeof INIT | typeof ERROR;
6
+ colorGamut: string | null | typeof INIT | typeof ERROR;
7
+ pointer: string | null | typeof INIT | typeof ERROR;
8
+ anyPointer: string | null | typeof INIT | typeof ERROR;
9
+ hover: boolean | typeof INIT | typeof ERROR;
10
+ anyHover: boolean | typeof INIT | typeof ERROR;
11
+ colorDepth: number | typeof INIT | typeof ERROR;
12
+ };
13
+ //# sourceMappingURL=mediaQueries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaQueries.d.ts","sourceRoot":"","sources":["../../src/signals/mediaQueries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAmB,MAAM,SAAS,CAAC;AAEvD,wBAAgB,YAAY;wBAEQ,MAAM,GAAG,IAAI,GAAG,OAAO,IAAI,GAAG,OAAO,KAAK;0BACxC,OAAO,GAAG,OAAO,IAAI,GAAG,OAAO,KAAK;gCAC9B,OAAO,GAAG,OAAO,IAAI,GAAG,OAAO,KAAK;gBACpD,MAAM,GAAG,IAAI,GAAG,OAAO,IAAI,GAAG,OAAO,KAAK;aAC7C,MAAM,GAAG,IAAI,GAAG,OAAO,IAAI,GAAG,OAAO,KAAK;gBACvC,MAAM,GAAG,IAAI,GAAG,OAAO,IAAI,GAAG,OAAO,KAAK;WAC/C,OAAO,GAAG,OAAO,IAAI,GAAG,OAAO,KAAK;cACjC,OAAO,GAAG,OAAO,IAAI,GAAG,OAAO,KAAK;gBAClC,MAAM,GAAG,OAAO,IAAI,GAAG,OAAO,KAAK;EAwE9D"}
@@ -0,0 +1,2 @@
1
+ export declare function memory(): any;
2
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/signals/memory.ts"],"names":[],"mappings":"AAEA,wBAAgB,MAAM,QAErB"}
@@ -0,0 +1,2 @@
1
+ export declare function multimediaDevices(): Promise<unknown>;
2
+ //# sourceMappingURL=multimediaDevices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multimediaDevices.d.ts","sourceRoot":"","sources":["../../src/signals/multimediaDevices.ts"],"names":[],"mappings":"AAEA,wBAAsB,iBAAiB,qBA+BtC"}
@@ -0,0 +1,2 @@
1
+ export declare function navigatorPropertyDescriptors(): string;
2
+ //# sourceMappingURL=navigatorPropertyDescriptors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigatorPropertyDescriptors.d.ts","sourceRoot":"","sources":["../../src/signals/navigatorPropertyDescriptors.ts"],"names":[],"mappings":"AAAA,wBAAgB,4BAA4B,WAgB3C"}
@@ -0,0 +1,2 @@
1
+ export declare function nonce(): string;
2
+ //# sourceMappingURL=nonce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nonce.d.ts","sourceRoot":"","sources":["../../src/signals/nonce.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,WAEpB"}
@@ -0,0 +1,2 @@
1
+ export declare function platform(): string;
2
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/signals/platform.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,WAEvB"}
@@ -0,0 +1,2 @@
1
+ export declare function playwright(): boolean;
2
+ //# sourceMappingURL=playwright.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../../src/signals/playwright.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,YAEzB"}
@@ -0,0 +1,9 @@
1
+ import { SignalValue } from "../types";
2
+ export declare function plugins(): {
3
+ isValidPluginArray: SignalValue<boolean>;
4
+ pluginCount: SignalValue<number>;
5
+ pluginNamesHash: SignalValue<string>;
6
+ pluginConsistency1: SignalValue<boolean>;
7
+ pluginOverflow: SignalValue<boolean>;
8
+ };
9
+ //# sourceMappingURL=plugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/signals/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAkDvC,wBAAgB,OAAO;wBAEa,WAAW,CAAC,OAAO,CAAC;iBAC3B,WAAW,CAAC,MAAM,CAAC;qBACf,WAAW,CAAC,MAAM,CAAC;wBAChB,WAAW,CAAC,OAAO,CAAC;oBACxB,WAAW,CAAC,OAAO,CAAC;EAanD"}
@@ -0,0 +1,12 @@
1
+ export declare function screenResolution(): {
2
+ width: number;
3
+ height: number;
4
+ pixelDepth: number;
5
+ colorDepth: number;
6
+ availableWidth: number;
7
+ availableHeight: number;
8
+ innerWidth: number;
9
+ innerHeight: number;
10
+ hasMultipleDisplays: any;
11
+ };
12
+ //# sourceMappingURL=screenResolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenResolution.d.ts","sourceRoot":"","sources":["../../src/signals/screenResolution.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB;;;;;;;;;;EAY/B"}
@@ -0,0 +1,2 @@
1
+ export declare function hasSeleniumProperties(): boolean;
2
+ //# sourceMappingURL=seleniumProperties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seleniumProperties.d.ts","sourceRoot":"","sources":["../../src/signals/seleniumProperties.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,YAuCpC"}
@@ -0,0 +1,2 @@
1
+ export declare function time(): number;
2
+ //# sourceMappingURL=time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/signals/time.ts"],"names":[],"mappings":"AAAA,wBAAgB,IAAI,WAEnB"}
@@ -0,0 +1,5 @@
1
+ export declare function toSourceError(): {
2
+ toSourceError: string;
3
+ hasToSource: boolean;
4
+ };
5
+ //# sourceMappingURL=toSourceError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toSourceError.d.ts","sourceRoot":"","sources":["../../src/signals/toSourceError.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa;;;EAwB5B"}
@@ -0,0 +1,2 @@
1
+ export declare function pageURL(): string;
2
+ //# sourceMappingURL=url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/signals/url.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,WAEtB"}
@@ -0,0 +1,2 @@
1
+ export declare function userAgent(): string;
2
+ //# sourceMappingURL=userAgent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userAgent.d.ts","sourceRoot":"","sources":["../../src/signals/userAgent.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,WAExB"}
@@ -0,0 +1,11 @@
1
+ export declare const ERROR = "ERROR";
2
+ export declare const INIT = "INIT";
3
+ export declare const NA = "NA";
4
+ export declare const SKIPPED = "SKIPPED";
5
+ export declare const HIGH = "high";
6
+ export declare const LOW = "low";
7
+ export declare const MEDIUM = "medium";
8
+ export declare function hashCode(str: string): string;
9
+ export declare function setObjectValues(object: any, value: any): void;
10
+ export declare function isFirefox(): boolean;
11
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/signals/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,UAAU,CAAC;AAC7B,eAAO,MAAM,IAAI,SAAS,CAAC;AAC3B,eAAO,MAAM,EAAE,OAAO,CAAC;AACvB,eAAO,MAAM,OAAO,YAAY,CAAC;AACjC,eAAO,MAAM,IAAI,SAAS,CAAA;AAC1B,eAAO,MAAM,GAAG,QAAQ,CAAA;AACxB,eAAO,MAAM,MAAM,WAAW,CAAA;AAG9B,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,UAQnC;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,QAItD;AAGD,wBAAgB,SAAS,YAExB"}
@@ -0,0 +1,5 @@
1
+ export declare function webGL(): {
2
+ vendor: string;
3
+ renderer: string;
4
+ };
5
+ //# sourceMappingURL=webGL.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webGL.d.ts","sourceRoot":"","sources":["../../src/signals/webGL.ts"],"names":[],"mappings":"AAEA,wBAAgB,KAAK;;;EAyBpB"}
@@ -0,0 +1,2 @@
1
+ export declare function webdriver(): boolean;
2
+ //# sourceMappingURL=webdriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webdriver.d.ts","sourceRoot":"","sources":["../../src/signals/webdriver.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,YAExB"}
@@ -0,0 +1,2 @@
1
+ export declare function webdriverWritable(): boolean;
2
+ //# sourceMappingURL=webdriverWritable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webdriverWritable.d.ts","sourceRoot":"","sources":["../../src/signals/webdriverWritable.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,YAchC"}
@@ -0,0 +1,7 @@
1
+ export declare function webgpu(): Promise<{
2
+ vendor: string;
3
+ architecture: string;
4
+ device: string;
5
+ description: string;
6
+ }>;
7
+ //# sourceMappingURL=webgpu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgpu.d.ts","sourceRoot":"","sources":["../../src/signals/webgpu.ts"],"names":[],"mappings":"AAEA,wBAAsB,MAAM;;;;;GAyB3B"}
@@ -0,0 +1,2 @@
1
+ export declare function worker(): Promise<unknown>;
2
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/signals/worker.ts"],"names":[],"mappings":"AAEA,wBAAsB,MAAM,qBA0E3B"}
@@ -0,0 +1,207 @@
1
+ import { ERROR, INIT, NA, SKIPPED } from './signals/utils';
2
+ export type SignalValue<T> = T | typeof ERROR | typeof INIT | typeof NA | typeof SKIPPED;
3
+ export interface WebGLSignal {
4
+ vendor: SignalValue<string>;
5
+ renderer: SignalValue<string>;
6
+ }
7
+ export interface InternationalizationSignal {
8
+ timezone: SignalValue<string>;
9
+ localeLanguage: SignalValue<string>;
10
+ }
11
+ export interface ScreenResolutionSignal {
12
+ width: SignalValue<number>;
13
+ height: SignalValue<number>;
14
+ pixelDepth: SignalValue<number>;
15
+ colorDepth: SignalValue<number>;
16
+ availableWidth: SignalValue<number>;
17
+ availableHeight: SignalValue<number>;
18
+ innerWidth: SignalValue<number>;
19
+ innerHeight: SignalValue<number>;
20
+ hasMultipleDisplays: SignalValue<boolean>;
21
+ }
22
+ export interface LanguagesSignal {
23
+ languages: SignalValue<string[]>;
24
+ language: SignalValue<string>;
25
+ }
26
+ export interface WebGPUSignal {
27
+ vendor: SignalValue<string>;
28
+ architecture: SignalValue<string>;
29
+ device: SignalValue<string>;
30
+ description: SignalValue<string>;
31
+ }
32
+ export interface IframeSignal {
33
+ webdriver: SignalValue<boolean>;
34
+ userAgent: SignalValue<string>;
35
+ platform: SignalValue<string>;
36
+ memory: SignalValue<number>;
37
+ cpuCount: SignalValue<number>;
38
+ language: SignalValue<string>;
39
+ }
40
+ export interface WebWorkerSignal {
41
+ webdriver: SignalValue<boolean>;
42
+ userAgent: SignalValue<string>;
43
+ platform: SignalValue<string>;
44
+ memory: SignalValue<number>;
45
+ cpuCount: SignalValue<number>;
46
+ language: SignalValue<string>;
47
+ vendor: SignalValue<string>;
48
+ renderer: SignalValue<string>;
49
+ }
50
+ export interface BrowserExtensionsSignal {
51
+ bitmask: SignalValue<string>;
52
+ extensions: SignalValue<string[]>;
53
+ }
54
+ export interface BrowserFeaturesSignal {
55
+ bitmask: SignalValue<string>;
56
+ chrome: SignalValue<boolean>;
57
+ brave: SignalValue<boolean>;
58
+ applePaySupport: SignalValue<boolean>;
59
+ opera: SignalValue<boolean>;
60
+ serial: SignalValue<boolean>;
61
+ attachShadow: SignalValue<boolean>;
62
+ caches: SignalValue<boolean>;
63
+ webAssembly: SignalValue<boolean>;
64
+ buffer: SignalValue<boolean>;
65
+ showModalDialog: SignalValue<boolean>;
66
+ }
67
+ export interface MediaQueriesSignal {
68
+ prefersColorScheme: SignalValue<string | null>;
69
+ prefersReducedMotion: SignalValue<boolean>;
70
+ prefersReducedTransparency: SignalValue<boolean>;
71
+ colorGamut: SignalValue<string | null>;
72
+ pointer: SignalValue<string | null>;
73
+ anyPointer: SignalValue<string | null>;
74
+ hover: SignalValue<boolean>;
75
+ anyHover: SignalValue<boolean>;
76
+ colorDepth: SignalValue<number>;
77
+ }
78
+ export interface ToSourceErrorSignal {
79
+ toSourceError: SignalValue<string>;
80
+ hasToSource: SignalValue<boolean>;
81
+ }
82
+ export interface CanvasSignal {
83
+ hasModifiedCanvas: SignalValue<boolean>;
84
+ canvasFingerprint: SignalValue<string>;
85
+ }
86
+ export interface HighEntropyValuesSignal {
87
+ architecture: SignalValue<string>;
88
+ bitness: SignalValue<string>;
89
+ brands: SignalValue<string[]>;
90
+ mobile: SignalValue<boolean>;
91
+ model: SignalValue<string>;
92
+ platform: SignalValue<string>;
93
+ platformVersion: SignalValue<string>;
94
+ uaFullVersion: SignalValue<string>;
95
+ }
96
+ export interface PluginsSignal {
97
+ isValidPluginArray: SignalValue<boolean>;
98
+ pluginCount: SignalValue<number>;
99
+ pluginNamesHash: SignalValue<string>;
100
+ pluginConsistency1: SignalValue<boolean>;
101
+ pluginOverflow: SignalValue<boolean>;
102
+ }
103
+ export interface MultimediaDevicesSignal {
104
+ speakers: SignalValue<number>;
105
+ microphones: SignalValue<number>;
106
+ webcams: SignalValue<number>;
107
+ }
108
+ export interface MediaCodecsSignal {
109
+ audioCanPlayTypeHash: SignalValue<string>;
110
+ videoCanPlayTypeHash: SignalValue<string>;
111
+ audioMediaSourceHash: SignalValue<string>;
112
+ videoMediaSourceHash: SignalValue<string>;
113
+ rtcAudioCapabilitiesHash: SignalValue<string>;
114
+ rtcVideoCapabilitiesHash: SignalValue<string>;
115
+ hasMediaSource: SignalValue<boolean>;
116
+ }
117
+ export interface AutomationSignals {
118
+ webdriver: SignalValue<boolean>;
119
+ webdriverWritable: SignalValue<boolean>;
120
+ selenium: SignalValue<boolean>;
121
+ cdp: SignalValue<boolean>;
122
+ playwright: SignalValue<boolean>;
123
+ navigatorPropertyDescriptors: SignalValue<string>;
124
+ }
125
+ export interface DeviceSignals {
126
+ cpuCount: SignalValue<number>;
127
+ memory: SignalValue<number>;
128
+ platform: SignalValue<string>;
129
+ screenResolution: ScreenResolutionSignal;
130
+ multimediaDevices: MultimediaDevicesSignal;
131
+ mediaQueries: MediaQueriesSignal;
132
+ }
133
+ export interface BrowserSignals {
134
+ userAgent: SignalValue<string>;
135
+ features: BrowserFeaturesSignal;
136
+ plugins: PluginsSignal;
137
+ extensions: BrowserExtensionsSignal;
138
+ highEntropyValues: HighEntropyValuesSignal;
139
+ etsl: SignalValue<number>;
140
+ maths: SignalValue<string>;
141
+ toSourceError: ToSourceErrorSignal;
142
+ }
143
+ export interface GraphicsSignals {
144
+ webGL: WebGLSignal;
145
+ webgpu: WebGPUSignal;
146
+ canvas: CanvasSignal;
147
+ }
148
+ export interface LocaleSignals {
149
+ internationalization: InternationalizationSignal;
150
+ languages: LanguagesSignal;
151
+ }
152
+ export interface ContextsSignals {
153
+ iframe: IframeSignal;
154
+ webWorker: WebWorkerSignal;
155
+ }
156
+ export interface FingerprintSignals {
157
+ automation: AutomationSignals;
158
+ device: DeviceSignals;
159
+ browser: BrowserSignals;
160
+ graphics: GraphicsSignals;
161
+ codecs: MediaCodecsSignal;
162
+ locale: LocaleSignals;
163
+ contexts: ContextsSignals;
164
+ }
165
+ export interface FastBotDetectionDetails {
166
+ headlessChromeScreenResolution: DetectionRuleResult;
167
+ hasWebdriver: DetectionRuleResult;
168
+ hasWebdriverWritable: DetectionRuleResult;
169
+ hasSeleniumProperty: DetectionRuleResult;
170
+ hasCDP: DetectionRuleResult;
171
+ hasPlaywright: DetectionRuleResult;
172
+ hasImpossibleDeviceMemory: DetectionRuleResult;
173
+ hasHighCPUCount: DetectionRuleResult;
174
+ hasMissingChromeObject: DetectionRuleResult;
175
+ hasWebdriverIframe: DetectionRuleResult;
176
+ hasWebdriverWorker: DetectionRuleResult;
177
+ hasMismatchWebGLInWorker: DetectionRuleResult;
178
+ hasMismatchPlatformIframe: DetectionRuleResult;
179
+ hasMismatchPlatformWorker: DetectionRuleResult;
180
+ hasSwiftshaderRenderer: DetectionRuleResult;
181
+ hasUTCTimezone: DetectionRuleResult;
182
+ }
183
+ export interface Fingerprint {
184
+ signals: FingerprintSignals;
185
+ fsid: string;
186
+ nonce: string;
187
+ time: SignalValue<number>;
188
+ url: string;
189
+ fastBotDetection: boolean;
190
+ fastBotDetectionDetails: FastBotDetectionDetails;
191
+ }
192
+ export type DetectionSeverity = 'low' | 'medium' | 'high';
193
+ export interface DetectionRuleResult {
194
+ detected: boolean;
195
+ severity: DetectionSeverity;
196
+ }
197
+ export interface DetectionRule {
198
+ name: string;
199
+ severity: DetectionSeverity;
200
+ test: (fingerprint: Fingerprint) => boolean;
201
+ }
202
+ export interface CollectFingerprintOptions {
203
+ encrypt?: boolean;
204
+ timeout?: number;
205
+ skipWorker?: boolean;
206
+ }
207
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE3D,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,KAAK,GAAG,OAAO,IAAI,GAAG,OAAO,EAAE,GAAG,OAAO,OAAO,CAAC;AAEzF,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,0BAA0B;IACvC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,sBAAsB;IACnC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,mBAAmB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACjC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IACzB,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,uBAAuB;IACpC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IAClC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5B,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,YAAY,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,kBAAkB;IAC/B,kBAAkB,EAAE,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/C,oBAAoB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,0BAA0B,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACjD,UAAU,EAAE,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvC,OAAO,EAAE,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACpC,UAAU,EAAE,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAChC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IACzB,iBAAiB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACxC,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,uBAAuB;IACpC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC1B,kBAAkB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACzC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,kBAAkB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACzC,cAAc,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,uBAAuB;IACpC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAC9B,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,cAAc,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACxC;AAGD,MAAM,WAAW,iBAAiB;IAC9B,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAChC,iBAAiB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACxC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC1B,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACjC,4BAA4B,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,gBAAgB,EAAE,sBAAsB,CAAC;IACzC,iBAAiB,EAAE,uBAAuB,CAAC;IAC3C,YAAY,EAAE,kBAAkB,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,uBAAuB,CAAC;IACpC,iBAAiB,EAAE,uBAAuB,CAAC;IAC3C,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,aAAa,EAAE,mBAAmB,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC1B,oBAAoB,EAAE,0BAA0B,CAAC;IACjD,SAAS,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IAC/B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,eAAe,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACpC,8BAA8B,EAAE,mBAAmB,CAAC;IACpD,YAAY,EAAE,mBAAmB,CAAC;IAClC,oBAAoB,EAAE,mBAAmB,CAAC;IAC1C,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,aAAa,EAAE,mBAAmB,CAAC;IACnC,yBAAyB,EAAE,mBAAmB,CAAC;IAC/C,eAAe,EAAE,mBAAmB,CAAC;IACrC,sBAAsB,EAAE,mBAAmB,CAAC;IAC5C,kBAAkB,EAAE,mBAAmB,CAAC;IACxC,kBAAkB,EAAE,mBAAmB,CAAC;IACxC,wBAAwB,EAAE,mBAAmB,CAAC;IAC9C,yBAAyB,EAAE,mBAAmB,CAAC;IAC/C,yBAAyB,EAAE,mBAAmB,CAAC;IAC/C,sBAAsB,EAAE,mBAAmB,CAAC;IAC5C,cAAc,EAAE,mBAAmB,CAAC;CACvC;AACD,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE,OAAO,CAAC;IAC1B,uBAAuB,EAAE,uBAAuB,CAAC;CACpD;AAED,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,mBAAmB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,IAAI,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,OAAO,CAAC;CAC/C;AAED,MAAM,WAAW,yBAAyB;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB"}