@web-to-figma/desktop 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +93 -0
  2. package/assets/chrome-version.json +11 -0
  3. package/assets/extension/README.md +18 -0
  4. package/assets/extension/chrome-mv3-headed.crx +0 -0
  5. package/assets/extension/chrome-mv3-headless.crx +0 -0
  6. package/bin/web-to-figma.js +5 -0
  7. package/db/migrations/000001_create_artifact_tables.up.sql +69 -0
  8. package/db/migrations/000002_create_tag_tables.up.sql +39 -0
  9. package/db/migrations/000003_seed_tag_values.up.sql +97 -0
  10. package/dist/auth/captureSession.d.ts +14 -0
  11. package/dist/auth/captureSession.js +1 -0
  12. package/dist/auth/jwtSecret.d.ts +2 -0
  13. package/dist/auth/jwtSecret.js +1 -0
  14. package/dist/capture/browserPool.d.ts +24 -0
  15. package/dist/capture/browserPool.js +1 -0
  16. package/dist/capture/captureService.d.ts +25 -0
  17. package/dist/capture/captureService.js +1 -0
  18. package/dist/capture/captureStatus.d.ts +7 -0
  19. package/dist/capture/captureStatus.js +1 -0
  20. package/dist/capture/chromeDownloader.d.ts +21 -0
  21. package/dist/capture/chromeDownloader.js +1 -0
  22. package/dist/capture/crxUtils.d.ts +4 -0
  23. package/dist/capture/crxUtils.js +1 -0
  24. package/dist/capture/extensionPinPolicy.d.ts +10 -0
  25. package/dist/capture/extensionPinPolicy.js +1 -0
  26. package/dist/capture/headedBrowserState.d.ts +22 -0
  27. package/dist/capture/headedBrowserState.js +1 -0
  28. package/dist/capture/headedExtension.d.ts +7 -0
  29. package/dist/capture/headedExtension.js +1 -0
  30. package/dist/capture/manualLaunch.d.ts +2 -0
  31. package/dist/capture/manualLaunch.js +1 -0
  32. package/dist/cli.d.ts +1 -0
  33. package/dist/cli.js +85 -0
  34. package/dist/config.d.ts +49 -0
  35. package/dist/config.js +109 -0
  36. package/dist/constants.d.ts +1 -0
  37. package/dist/constants.js +2 -0
  38. package/dist/index.d.ts +17 -0
  39. package/dist/index.js +241 -0
  40. package/dist/loadEnv.d.ts +1 -0
  41. package/dist/loadEnv.js +14 -0
  42. package/dist/logger.d.ts +4 -0
  43. package/dist/logger.js +32 -0
  44. package/dist/port.d.ts +4 -0
  45. package/dist/port.js +19 -0
  46. package/dist/security/redact.d.ts +3 -0
  47. package/dist/security/redact.js +34 -0
  48. package/dist/sentry.d.ts +3 -0
  49. package/dist/sentry.js +66 -0
  50. package/dist/server/app.d.ts +18 -0
  51. package/dist/server/app.js +82 -0
  52. package/dist/server/checkServer.d.ts +2 -0
  53. package/dist/server/checkServer.js +24 -0
  54. package/dist/server/context.d.ts +20 -0
  55. package/dist/server/context.js +20 -0
  56. package/dist/server/middleware/desktopJwt.d.ts +10 -0
  57. package/dist/server/middleware/desktopJwt.js +1 -0
  58. package/dist/server/routes/capture.d.ts +4 -0
  59. package/dist/server/routes/capture.js +39 -0
  60. package/dist/server/routes/captures.d.ts +3 -0
  61. package/dist/server/routes/captures.js +75 -0
  62. package/dist/server/routes/collections.d.ts +3 -0
  63. package/dist/server/routes/collections.js +41 -0
  64. package/dist/server/routes/files.d.ts +3 -0
  65. package/dist/server/routes/files.js +18 -0
  66. package/dist/server/routes/health.d.ts +2 -0
  67. package/dist/server/routes/health.js +8 -0
  68. package/dist/server/routes/image.d.ts +2 -0
  69. package/dist/server/routes/image.js +58 -0
  70. package/dist/server/routes/proxy.d.ts +2 -0
  71. package/dist/server/routes/proxy.js +24 -0
  72. package/dist/server/routes/upload.d.ts +3 -0
  73. package/dist/server/routes/upload.js +102 -0
  74. package/dist/server/uploadBody.d.ts +1 -0
  75. package/dist/server/uploadBody.js +5 -0
  76. package/dist/storage/captureRepo.d.ts +21 -0
  77. package/dist/storage/captureRepo.js +172 -0
  78. package/dist/storage/collectionRepo.d.ts +14 -0
  79. package/dist/storage/collectionRepo.js +104 -0
  80. package/dist/storage/db.d.ts +10 -0
  81. package/dist/storage/db.js +30 -0
  82. package/dist/storage/fileStore.d.ts +26 -0
  83. package/dist/storage/fileStore.js +93 -0
  84. package/dist/storage/migrate.d.ts +8 -0
  85. package/dist/storage/migrate.js +61 -0
  86. package/dist/storage/seeds.d.ts +7 -0
  87. package/dist/storage/seeds.js +30 -0
  88. package/dist/storage/tagRepo.d.ts +7 -0
  89. package/dist/storage/tagRepo.js +31 -0
  90. package/dist/terminal/banner.d.ts +10 -0
  91. package/dist/terminal/banner.js +115 -0
  92. package/dist/terminal/chromeInstall.d.ts +3 -0
  93. package/dist/terminal/chromeInstall.js +45 -0
  94. package/dist/types.d.ts +102 -0
  95. package/dist/types.js +1 -0
  96. package/dist/updater/installer.d.ts +2 -0
  97. package/dist/updater/installer.js +61 -0
  98. package/dist/updater/runtime.d.ts +25 -0
  99. package/dist/updater/runtime.js +153 -0
  100. package/dist/updater/types.d.ts +29 -0
  101. package/dist/updater/types.js +1 -0
  102. package/dist/updater/updateLog.d.ts +3 -0
  103. package/dist/updater/updateLog.js +7 -0
  104. package/dist/updater/versionCheck.d.ts +5 -0
  105. package/dist/updater/versionCheck.js +59 -0
  106. package/dist/utils.d.ts +9 -0
  107. package/dist/utils.js +55 -0
  108. package/package.json +72 -0
package/README.md ADDED
@@ -0,0 +1,93 @@
1
+ # @web-to-figma/desktop
2
+
3
+ Local capture server for [Web to Figma](https://web-to-figma.design) Lifetime users. Runs on your machine and stores exports on disk instead of the cloud.
4
+
5
+ ## Requirements
6
+
7
+ - **Node.js 18+** (`node --version`)
8
+ - **macOS or Windows** (Linux may work but is not officially supported)
9
+
10
+ ## Quick start
11
+
12
+ ```bash
13
+ npx @web-to-figma/desktop start
14
+ ```
15
+
16
+ The server listens on `http://127.0.0.1:17345` by default. If that port is in use, it tries the next ports up to 17355.
17
+
18
+ Leave the terminal open while importing in the Figma plugin.
19
+
20
+ ## Commands
21
+
22
+ | Command | Description |
23
+ |---------|-------------|
24
+ | `npx @web-to-figma/desktop start` | Start the local server |
25
+ | `npx @web-to-figma/desktop start --verbose` | Start with auth and request logging |
26
+ | `npx @web-to-figma/desktop start --port 17347` | Use a specific port |
27
+ | `npx @web-to-figma/desktop capture` | Open Chrome with the bundled extension for manual capture |
28
+ | `npx @web-to-figma/desktop capture <url>` | Same, but open directly on the given URL |
29
+ | `npx @web-to-figma/desktop doctor` | Check Node version, port availability, and Chrome setup |
30
+ | `npx @web-to-figma/desktop version` | Print installed version |
31
+
32
+ ## Global install
33
+
34
+ ```bash
35
+ npm install -g @web-to-figma/desktop@latest
36
+ web-to-figma start
37
+ ```
38
+
39
+ Press **Ctrl+U** (Windows/Linux) or **Cmd+U** (macOS) while the server is running to check for updates.
40
+
41
+ ## Data location
42
+
43
+ | Path | Contents |
44
+ |------|----------|
45
+ | `~/.web-to-figma/` | Config, SQLite database, captured files |
46
+ | `~/.web-to-figma/logs/` | Server logs |
47
+
48
+ ## Troubleshooting
49
+
50
+ 1. **Plugin shows “Waiting for server”** — confirm the start command is running and the terminal has no errors.
51
+ 2. **Port in use** — stop other desktop processes or run `npx @web-to-figma/desktop doctor`.
52
+ 3. **401 errors from plugin** — plugin and desktop JWT secrets must match (production builds inject the same secret at publish time).
53
+ 4. **Capture fails** — run `doctor` and ensure Chrome can be downloaded (corporate proxies may block downloads).
54
+
55
+ For support workflows, see [17-support-runbook.md](../docs/desktop-version/17-support-runbook.md).
56
+
57
+ ## Environment variables
58
+
59
+ | Variable | Default | Purpose |
60
+ |----------|---------|---------|
61
+ | `WTF_DESKTOP_PORT` | `17345` | HTTP port |
62
+ | `WTF_DATA_DIR` | `~/.web-to-figma` | Data directory |
63
+ | `WTF_CHROME_PATH` | auto | Chrome binary override |
64
+ | `WTF_CHROMEDRIVER_PATH` | auto | ChromeDriver override |
65
+ | `WTF_SENTRY_DSN` | from `package.json` | Sentry DSN override |
66
+ | `WTF_ENV` | `production` | Sentry environment tag |
67
+ | `DESKTOP_JWT_SECRET` | from `.env.production` at release build; dev fallback otherwise | JWT secret (must match plugin renderer) |
68
+
69
+ For local development, copy or edit `.env.development` (loaded when `NODE_ENV` is not `production`). Use `.env.production` for production-mode local runs. Put machine-specific overrides in `.env.local` or `.env.development.local` — those files are gitignored.
70
+
71
+ ## Development
72
+
73
+ From this repository:
74
+
75
+ ```bash
76
+ cd desktop
77
+ npm install
78
+ npm run dev # build + start with --verbose
79
+ npm test # unit tests
80
+ npm run build:release # reads JWT secret from .env.production, inject + obfuscate
81
+ ```
82
+
83
+ Extension CRX files for capture are built in CI from `extension/` and bundled into `assets/extension/`. For local capture without CI artifacts, build the extension:
84
+
85
+ ```bash
86
+ cd extension
87
+ npm run build-desktop-headless
88
+ cp build/chrome-mv3-prod.crx ../desktop/assets/extension/chrome-mv3-headless.crx
89
+ npm run build-desktop-headed
90
+ cp build/chrome-mv3-prod.crx ../desktop/assets/extension/chrome-mv3-headed.crx
91
+ ```
92
+
93
+ See `assets/extension/README.md` for details.
@@ -0,0 +1,11 @@
1
+ {
2
+ "chrome": {
3
+ "version": "150.0.7871.24",
4
+ "urls": {
5
+ "win64": "https://cdn.web-to-figma.design/chrome/150.0.7871.24/chrome-win64.zip",
6
+ "mac-x64": "https://cdn.web-to-figma.design/chrome/150.0.7871.24/chrome-mac-x64.zip",
7
+ "mac-arm64": "https://cdn.web-to-figma.design/chrome/150.0.7871.24/chrome-mac-arm64.zip",
8
+ "linux64": "https://cdn.web-to-figma.design/chrome/150.0.7871.24/chrome-linux64.zip"
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,18 @@
1
+ # Extension CRX assets
2
+
3
+ Place packed extension builds here:
4
+
5
+ - `chrome-mv3-headless.crx` — from `extension` build with `.env.headless.desktop.production`
6
+ - `chrome-mv3-headed.crx` — from `extension` build with `.env.desktop.production`
7
+
8
+ Build via CI or locally:
9
+
10
+ ```bash
11
+ cd extension
12
+ npm run build-desktop-headless
13
+ # pack CRX with chrome --pack-extension=...
14
+ cp build/chrome-mv3-prod.crx ../desktop/assets/extension/chrome-mv3-headless.crx
15
+
16
+ npm run build-desktop-headed
17
+ cp build/chrome-mv3-prod.crx ../desktop/assets/extension/chrome-mv3-headed.crx
18
+ ```
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { runCli } from '../dist/cli.js'
4
+
5
+ runCli()
@@ -0,0 +1,69 @@
1
+ CREATE TABLE collection (
2
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
3
+ created_at TEXT NOT NULL,
4
+ updated_at TEXT NOT NULL,
5
+ deleted_at TEXT,
6
+ name TEXT NOT NULL,
7
+ external_id TEXT NOT NULL,
8
+ parent_external_id TEXT,
9
+ active INTEGER NOT NULL DEFAULT 1,
10
+ is_default INTEGER NOT NULL DEFAULT 0,
11
+ user_id INTEGER NOT NULL DEFAULT 1,
12
+ icon_url TEXT,
13
+ UNIQUE (user_id, external_id)
14
+ );
15
+
16
+ CREATE INDEX collection_updated_at_idx ON collection (updated_at);
17
+ CREATE INDEX collection_deleted_at_idx ON collection (deleted_at);
18
+
19
+ CREATE TABLE capture (
20
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
21
+ created_at TEXT NOT NULL,
22
+ updated_at TEXT NOT NULL,
23
+ deleted_at TEXT,
24
+ external_id TEXT NOT NULL,
25
+ user_id INTEGER NOT NULL DEFAULT 1,
26
+ url TEXT NOT NULL,
27
+ is_full_page INTEGER NOT NULL DEFAULT 1,
28
+ collection_external_id TEXT NOT NULL,
29
+ UNIQUE (user_id, external_id)
30
+ );
31
+
32
+ CREATE INDEX capture_updated_at_idx ON capture (updated_at);
33
+ CREATE INDEX capture_deleted_at_idx ON capture (deleted_at);
34
+ CREATE INDEX capture_collection_idx ON capture (collection_external_id);
35
+
36
+ CREATE TABLE export (
37
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
38
+ created_at TEXT NOT NULL,
39
+ updated_at TEXT NOT NULL,
40
+ deleted_at TEXT,
41
+ capture_id INTEGER NOT NULL,
42
+ theme TEXT NOT NULL,
43
+ size_name TEXT NOT NULL,
44
+ width INTEGER NOT NULL,
45
+ height INTEGER NOT NULL,
46
+ url TEXT NOT NULL,
47
+ screenshot_url TEXT NOT NULL DEFAULT '',
48
+ thumbnail_url TEXT NOT NULL DEFAULT '',
49
+ FOREIGN KEY (capture_id) REFERENCES capture (id)
50
+ );
51
+
52
+ CREATE INDEX export_updated_at_idx ON export (updated_at);
53
+ CREATE INDEX export_deleted_at_idx ON export (deleted_at);
54
+
55
+ CREATE TABLE capture_request (
56
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
57
+ created_at TEXT NOT NULL,
58
+ updated_at TEXT NOT NULL,
59
+ deleted_at TEXT,
60
+ external_id TEXT NOT NULL,
61
+ user_id INTEGER NOT NULL DEFAULT 1,
62
+ url TEXT NOT NULL DEFAULT '',
63
+ status TEXT NOT NULL DEFAULT '',
64
+ is_cancelled INTEGER NOT NULL DEFAULT 0,
65
+ UNIQUE (user_id, external_id)
66
+ );
67
+
68
+ CREATE INDEX capture_request_updated_at_idx ON capture_request (updated_at);
69
+ CREATE INDEX capture_request_deleted_at_idx ON capture_request (deleted_at);
@@ -0,0 +1,39 @@
1
+ CREATE TABLE tag_type (
2
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
3
+ created_at TEXT NOT NULL,
4
+ updated_at TEXT NOT NULL,
5
+ deleted_at TEXT,
6
+ name TEXT NOT NULL,
7
+ active INTEGER NOT NULL DEFAULT 1,
8
+ UNIQUE (name)
9
+ );
10
+
11
+ CREATE INDEX tag_type_deleted_at_idx ON tag_type (deleted_at);
12
+
13
+ CREATE TABLE tag_value (
14
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
15
+ created_at TEXT NOT NULL,
16
+ updated_at TEXT NOT NULL,
17
+ deleted_at TEXT,
18
+ name TEXT NOT NULL,
19
+ active INTEGER NOT NULL DEFAULT 1,
20
+ tag_type_id INTEGER NOT NULL,
21
+ FOREIGN KEY (tag_type_id) REFERENCES tag_type (id),
22
+ UNIQUE (tag_type_id, name)
23
+ );
24
+
25
+ CREATE INDEX tag_value_deleted_at_idx ON tag_value (deleted_at);
26
+
27
+ CREATE TABLE capture_tag_mapping (
28
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
29
+ created_at TEXT NOT NULL,
30
+ updated_at TEXT NOT NULL,
31
+ deleted_at TEXT,
32
+ capture_id INTEGER NOT NULL,
33
+ tag_value_id INTEGER NOT NULL,
34
+ FOREIGN KEY (capture_id) REFERENCES capture (id),
35
+ FOREIGN KEY (tag_value_id) REFERENCES tag_value (id),
36
+ UNIQUE (capture_id, tag_value_id)
37
+ );
38
+
39
+ CREATE INDEX capture_tag_mapping_deleted_at_idx ON capture_tag_mapping (deleted_at);
@@ -0,0 +1,97 @@
1
+ INSERT INTO tag_type (created_at, updated_at, deleted_at, name, active) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Component Type', 1);
2
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, '404 page examples', 1, 1);
3
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, '404 page headers', 1, 1);
4
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'About page examples', 1, 1);
5
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Activity feeds', 1, 1);
6
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Activity gauges', 1, 1);
7
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Alerts', 1, 1);
8
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Application header navigations', 1, 1);
9
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Avatars', 1, 1);
10
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Badges', 1, 1);
11
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Banners', 1, 1);
12
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Blog examples', 1, 1);
13
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Blog post examples', 1, 1);
14
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Blog post sections', 1, 1);
15
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Blog sections', 1, 1);
16
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Breadcrumbs', 1, 1);
17
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Button groups', 1, 1);
18
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Buttons', 1, 1);
19
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Card headers', 1, 1);
20
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Careers sections', 1, 1);
21
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Carousels', 1, 1);
22
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Checkbox groups', 1, 1);
23
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Checkboxes', 1, 1);
24
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Code snippets', 1, 1);
25
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Command menus', 1, 1);
26
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Contact page examples', 1, 1);
27
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Contact sections', 1, 1);
28
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Content & rich text sections', 1, 1);
29
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Content dividers', 1, 1);
30
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Credit cards', 1, 1);
31
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'CTA sections', 1, 1);
32
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Dashboard examples', 1, 1);
33
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Date pickers', 1, 1);
34
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Design annotations', 1, 1);
35
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Device mockups', 1, 1);
36
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Dropdowns', 1, 1);
37
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Email templates', 1, 1);
38
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Empty states', 1, 1);
39
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'FAQ page examples', 1, 1);
40
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'FAQ sections', 1, 1);
41
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Features sections', 1, 1);
42
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'File uploaders', 1, 1);
43
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Footers', 1, 1);
44
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Forgot password headers', 1, 1);
45
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Grids & spacing', 1, 1);
46
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Header navigations', 1, 1);
47
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Header sections', 1, 1);
48
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Horizontal tabs', 1, 1);
49
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Icons', 1, 1);
50
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Informational page examples', 1, 1);
51
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Inline CTAs', 1, 1);
52
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Inputs', 1, 1);
53
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Landing page examples', 1, 1);
54
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Legal page examples', 1, 1);
55
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Line & bar charts', 1, 1);
56
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Loading indicators', 1, 1);
57
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Log in page examples', 1, 1);
58
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Log in page headers', 1, 1);
59
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Logos', 1, 1);
60
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Messaging', 1, 1);
61
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Metrics', 1, 1);
62
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Metrics sections', 1, 1);
63
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Miscellaneous assets', 1, 1);
64
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Modals', 1, 1);
65
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Newsletter CTA sections', 1, 1);
66
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Notifications', 1, 1);
67
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Page headers', 1, 1);
68
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Pagination', 1, 1);
69
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Pie charts', 1, 1);
70
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Portfolio mockups', 1, 1);
71
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Press mentions sections', 1, 1);
72
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Pricing page examples', 1, 1);
73
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Pricing sections', 1, 1);
74
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Progress circles', 1, 1);
75
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Progress indicators', 1, 1);
76
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Progress steps', 1, 1);
77
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Radar charts', 1, 1);
78
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Section footers', 1, 1);
79
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Section headers', 1, 1);
80
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Settings page examples', 1, 1);
81
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Shadows & blurs', 1, 1);
82
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Sidebar navigations', 1, 1);
83
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Sign up page examples', 1, 1);
84
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Sign up page headers', 1, 1);
85
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Slideout menus', 1, 1);
86
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Sliders', 1, 1);
87
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Social proof sections', 1, 1);
88
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Tables', 1, 1);
89
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Tags', 1, 1);
90
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Team page examples', 1, 1);
91
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Team sections', 1, 1);
92
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Testimonial sections', 1, 1);
93
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Toggles', 1, 1);
94
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Tooltips', 1, 1);
95
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Verification page headers', 1, 1);
96
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Vertical tabs', 1, 1);
97
+ INSERT INTO tag_value (created_at, updated_at, deleted_at, name, active, tag_type_id) VALUES ('2023-11-03T22:39:27.000Z', '2023-11-03T22:39:27.000Z', NULL, 'Video players', 1, 1);
@@ -0,0 +1,14 @@
1
+ export type CaptureSession = {
2
+ id: string;
3
+ requestId: string;
4
+ createdAt: number;
5
+ };
6
+ export declare class CaptureSessionManager {
7
+ create(requestId: string): CaptureSession;
8
+ get(sessionId: string): CaptureSession | undefined;
9
+ getByRequestId(requestId: string): CaptureSession | undefined;
10
+ validateForKey(sessionId: string, key: string): boolean;
11
+ end(requestId: string): void;
12
+ endBySessionId(sessionId: string): void;
13
+ }
14
+ export declare const captureSessionManager: CaptureSessionManager;
@@ -0,0 +1 @@
1
+ (function(_0x75f87c,_0xaf5e4){const _0x2892da=_0x418b,_0x229ec4=_0x75f87c();while(!![]){try{const _0x21bbed=parseInt(_0x2892da(0x163))/0x1*(parseInt(_0x2892da(0x11f))/0x2)+-parseInt(_0x2892da(0x13a))/0x3*(-parseInt(_0x2892da(0x127))/0x4)+parseInt(_0x2892da(0x148))/0x5*(-parseInt(_0x2892da(0x168))/0x6)+-parseInt(_0x2892da(0x120))/0x7*(parseInt(_0x2892da(0x116))/0x8)+-parseInt(_0x2892da(0x12b))/0x9*(-parseInt(_0x2892da(0x107))/0xa)+-parseInt(_0x2892da(0x14c))/0xb*(parseInt(_0x2892da(0x119))/0xc)+-parseInt(_0x2892da(0x12a))/0xd*(-parseInt(_0x2892da(0x135))/0xe);if(_0x21bbed===_0xaf5e4)break;else _0x229ec4['push'](_0x229ec4['shift']());}catch(_0x1f45ca){_0x229ec4['push'](_0x229ec4['shift']());}}}(_0x560e,0x67780),(function(_0x156c20,_0x1a744c){const _0x42bc80=_0x418b,_0x5a490=_0x5808,_0xd69afb=_0x156c20();while(!![]){try{const _0x39d2f0=parseInt(_0x5a490(0x201))/0x1+-parseInt(_0x5a490(0x232))/0x2+parseInt(_0x5a490(0x220))/0x3*(parseInt(_0x5a490(0x1f6))/0x4)+-parseInt(_0x5a490(0x21e))/0x5*(parseInt(_0x5a490(0x211))/0x6)+-parseInt(_0x5a490(0x1eb))/0x7*(parseInt(_0x5a490(0x1e0))/0x8)+-parseInt(_0x5a490(0x23c))/0x9*(-parseInt(_0x5a490(0x225))/0xa)+-parseInt(_0x5a490(0x216))/0xb;if(_0x39d2f0===_0x1a744c)break;else _0xd69afb['push'](_0xd69afb['shift']());}catch(_0x16d9aa){_0xd69afb['push'](_0xd69afb[_0x42bc80(0x169)]());}}}(_0xf15d,0xed9bd),(function(_0x1a2637,_0x59da50){const _0x43dbc5=_0x418b,_0x17b246=_0x5808,_0x367ba0=_0x1c1b,_0x4910ee=_0x1a2637();while(!![]){try{const _0x31c954=parseInt(_0x367ba0(0x231))/0x1*(parseInt(_0x367ba0(0x1df))/0x2)+parseInt(_0x367ba0(0x1e5))/0x3+parseInt(_0x367ba0(0x1d7))/0x4*(parseInt(_0x367ba0(0x217))/0x5)+parseInt(_0x367ba0(0x22b))/0x6+parseInt(_0x367ba0(0x208))/0x7*(-parseInt(_0x367ba0(0x1f4))/0x8)+parseInt(_0x367ba0(0x20e))/0x9+-parseInt(_0x367ba0(0x209))/0xa;if(_0x31c954===_0x59da50)break;else _0x4910ee['push'](_0x4910ee[_0x17b246(0x20e)]());}catch(_0x3156d5){_0x4910ee[_0x43dbc5(0x117)](_0x4910ee[_0x17b246(0x20e)]());}}}(_0x1bca,0x5608e),(function(_0xcf3e88,_0x55c434){const _0xcc114b=_0x5808,_0x31b4e3=_0x1c1b,_0x3037e7=_0x1d45,_0x1e9c8b=_0xcf3e88();while(!![]){try{const _0x545957=parseInt(_0x3037e7(0xf5))/0x1+parseInt(_0x3037e7(0xd1))/0x2+parseInt(_0x3037e7(0xcb))/0x3*(parseInt(_0x3037e7(0xf6))/0x4)+parseInt(_0x3037e7(0xec))/0x5*(-parseInt(_0x3037e7(0xe5))/0x6)+parseInt(_0x3037e7(0xd5))/0x7+-parseInt(_0x3037e7(0xb8))/0x8+parseInt(_0x3037e7(0xe9))/0x9*(-parseInt(_0x3037e7(0xb3))/0xa);if(_0x545957===_0x55c434)break;else _0x1e9c8b[_0x31b4e3(0x222)](_0x1e9c8b[_0x31b4e3(0x233)]());}catch(_0xdadf51){_0x1e9c8b[_0x31b4e3(0x222)](_0x1e9c8b[_0xcc114b(0x20e)]());}}}(_0x6d52,0x89d58),(function(_0x127318,_0x332bd6){const _0x1852d0=_0x1c1b,_0x17dd24=_0x1d45,_0x200107=_0x13d5,_0x34f069=_0x127318();while(!![]){try{const _0x515a74=parseInt(_0x200107(0x111))/0x1*(-parseInt(_0x200107(0x10d))/0x2)+parseInt(_0x200107(0xf4))/0x3*(parseInt(_0x200107(0xf7))/0x4)+parseInt(_0x200107(0x115))/0x5+parseInt(_0x200107(0x114))/0x6*(-parseInt(_0x200107(0x106))/0x7)+-parseInt(_0x200107(0xdc))/0x8*(-parseInt(_0x200107(0xd9))/0x9)+-parseInt(_0x200107(0xec))/0xa+parseInt(_0x200107(0xea))/0xb*(-parseInt(_0x200107(0xe0))/0xc);if(_0x515a74===_0x332bd6)break;else _0x34f069[_0x17dd24(0xc3)](_0x34f069[_0x1852d0(0x233)]());}catch(_0x58bf19){_0x34f069[_0x17dd24(0xc3)](_0x34f069[_0x1852d0(0x233)]());}}}(_0x40f2,0xbf431),function(_0x3476cb,_0x1e33a0){const _0x546f9c=_0x13d5,_0x4d90ec=_0x4092,_0x46a572=_0x3476cb();while(!![]){try{const _0x53fd1f=-parseInt(_0x4d90ec(0x18c))/0x1*(parseInt(_0x4d90ec(0x17e))/0x2)+-parseInt(_0x4d90ec(0x19e))/0x3+parseInt(_0x4d90ec(0x192))/0x4*(parseInt(_0x4d90ec(0x181))/0x5)+parseInt(_0x4d90ec(0x168))/0x6+-parseInt(_0x4d90ec(0x19d))/0x7+parseInt(_0x4d90ec(0x173))/0x8+parseInt(_0x4d90ec(0x197))/0x9;if(_0x53fd1f===_0x1e33a0)break;else _0x46a572[_0x546f9c(0xf2)](_0x46a572[_0x546f9c(0xd1)]());}catch(_0x166298){_0x46a572[_0x546f9c(0xf2)](_0x46a572[_0x546f9c(0xd1)]());}}}(_0x5f29,0x3dbc8))))));const _0x5e2f22=_0x5b1f;function _0xf15d(){const _0x42007e=_0x418b,_0x5f4f51=[_0x42007e(0x173),_0x42007e(0x111),'qK5Ymw53nwTbDLbvENr2qxjKzK1bDxj4',_0x42007e(0x105),'q3u1mKn1zK5TzKXurhr2DNjKyNLZtMOZC2zMwM0Yt1PftMu',_0x42007e(0x177),_0x42007e(0x138),_0x42007e(0x142),_0x42007e(0x10b),_0x42007e(0x15b),'CuS1ww13mw5TDgjICZfitevlmxbTs3joCtfd','CNu1zg14BNG',_0x42007e(0x17b),'q3uXzw1oEJr0mvbKC1Ph',_0x42007e(0x128),'Ctn2Cxz4rdrcsZvurhr2DNjOELLfs2O0reXmzw1OELzYzvHTBNHTwKfnmwv0DuHurxu1vhDlzMXVyq','CuTyCxv3nu96sMPMDhzYExjODtq',_0x42007e(0x16b),_0x42007e(0x178),'BNrdng1AytfVzxi2qMv2sNDH',_0x42007e(0x182),'qNvqtg0Ymtb6DgjuqwvYmernEM1Tm3zy',_0x42007e(0x12d),_0x42007e(0x172),_0x42007e(0x14a),'Cu1emNz4t1PdsZG',_0x42007e(0x144),_0x42007e(0x162),_0x42007e(0x188),_0x42007e(0x141),_0x42007e(0x174),_0x42007e(0x151),'qNHYzg1nouT5DgzMrfP2whjKyLL2rW','qKXqzhDnmwTbDKrzBti1C0nore15rW','Aw5KzxHpzG',_0x42007e(0x122),_0x42007e(0x160),_0x42007e(0x115),'q3rHwg14re9dsNjLreTXmKmWmdfZmg5bEu1mmhP4ELjXs1a2BwHYBKvmALHZmuHUrxrItxr4tdb5txjurhCW',_0x42007e(0x17d),_0x42007e(0x170),_0x42007e(0x147),_0x42007e(0x109),_0x42007e(0x17e),_0x42007e(0x11d),'CNvtmxv4EMXbsMzJC1Plmxj3rhfZm2zRquXmmhLX',_0x42007e(0x14e),_0x42007e(0x187),'s1b0vgLi',_0x42007e(0x134),_0x42007e(0x10c),_0x42007e(0x158),_0x42007e(0x13e),'Cta1mKrNmtresNjMDhzisumWmtzZs21yDwDyvevNt1PdtuHnD00WwuvmALHeDKHuqNDiBxDH',_0x42007e(0x11c),_0x42007e(0x11a),_0x42007e(0x123),'q051mxPNmtrctKC','Ctn2Dg14rdrYztLzEMC1DxjNrfffs3fxBwrMzur4AM9YztfTENvMtKvmALHZwMzurdaWwhqWzM9ZvW',_0x42007e(0x16c),_0x42007e(0x10a),'mteWnZG3mhLqCu9oua','Ctn6Cxv1zJresZKXELPms3eZzq',_0x42007e(0x125),_0x42007e(0x180),_0x42007e(0x179),_0x42007e(0x161),_0x42007e(0x16f),_0x42007e(0x146),_0x42007e(0x10f),_0x42007e(0x13b),_0x42007e(0x112),'CtnYvw14re91zg5urfPmtumWnvb2mgO0ruTmwM1NmxLeD0rO',_0x42007e(0x175),'C2HPzNq',_0x42007e(0x150),_0x42007e(0x139),_0x42007e(0x145),'CuS1wufNmu9es1HAEK1QqxjKyNLZrW','Ctn1mw1lBJrcsZvuEKTyDNjKzMLZDw1xBNr6wNmZELzYDvHTEMHYBKvmCMres20',_0x42007e(0x12e),_0x42007e(0x16a),_0x42007e(0x12c),_0x42007e(0x183),_0x42007e(0x15c),_0x42007e(0x132),_0x42007e(0x108),_0x42007e(0x171),_0x42007e(0x13f),_0x42007e(0x153),_0x42007e(0x156),_0x42007e(0x106),_0x42007e(0x154),_0x42007e(0x126),'q3vtwef4CJretvHLC1PLmKrNrdzZDxy0ENe',_0x42007e(0x11e),_0x42007e(0x131),_0x42007e(0x15e),_0x42007e(0x17a),'CNu1zg14BvP6ttKWqwHPmNj3qZfXEgy0CvP2mKvNnfPXm2u',_0x42007e(0x181),_0x42007e(0x129),'qNHYzg0WCvLTEhOXreTima',_0x42007e(0x159),_0x42007e(0x130),_0x42007e(0x110),_0x42007e(0x121),'q3rUwxv1zJnTDZLzEJfhmKnAyMq',_0x42007e(0x176),_0x42007e(0x16e),_0x42007e(0x184),_0x42007e(0x114)];return _0xf15d=function(){return _0x5f4f51;},_0xf15d();}function _0x1d45(_0x2780bc,_0x602a32){const _0x445bdf=_0x1c1b;_0x2780bc=_0x2780bc-0x9f;const _0x5ed115=_0x6d52();let _0x4cb229=_0x5ed115[_0x2780bc];if(_0x1d45[_0x445bdf(0x225)]===undefined){var _0x486a91=function(_0x5b903d){const _0x63fe90=_0x5808,_0x3f2b5f=_0x445bdf,_0x371b71='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3e03f0='',_0x5ac425='';for(let _0x320628=0x0,_0x43c54f,_0x1827f4,_0x532504=0x0;_0x1827f4=_0x5b903d[_0x63fe90(0x1ed)](_0x532504++);~_0x1827f4&&(_0x43c54f=_0x320628%0x4?_0x43c54f*0x40+_0x1827f4:_0x1827f4,_0x320628++%0x4)?_0x3e03f0+=String[_0x3f2b5f(0x205)](0xff&_0x43c54f>>(-0x2*_0x320628&0x6)):0x0){_0x1827f4=_0x371b71[_0x3f2b5f(0x1e1)](_0x1827f4);}for(let _0x5e2bc7=0x0,_0xbb604c=_0x3e03f0[_0x3f2b5f(0x216)];_0x5e2bc7<_0xbb604c;_0x5e2bc7++){_0x5ac425+='%'+('00'+_0x3e03f0[_0x3f2b5f(0x207)](_0x5e2bc7)[_0x3f2b5f(0x1e3)](0x10))[_0x3f2b5f(0x203)](-0x2);}return decodeURIComponent(_0x5ac425);};_0x1d45[_0x445bdf(0x1c8)]=_0x486a91,_0x1d45[_0x445bdf(0x1cf)]={},_0x1d45[_0x445bdf(0x225)]=!![];}const _0x10e469=_0x5ed115[0x0],_0x3f7ac3=_0x2780bc+_0x10e469,_0x4fc25f=_0x1d45[_0x445bdf(0x1cf)][_0x3f7ac3];return!_0x4fc25f?(_0x4cb229=_0x1d45[_0x445bdf(0x1c8)](_0x4cb229),_0x1d45[_0x445bdf(0x1cf)][_0x3f7ac3]=_0x4cb229):_0x4cb229=_0x4fc25f,_0x4cb229;}function _0x31bc(){const _0x373ee3=_0x1d45,_0x3d63b1=_0x13d5,_0x1e46c0=_0x4092,_0x316a=[_0x3d63b1(0xdf),_0x1e46c0(0x189),_0x3d63b1(0xf3),_0x1e46c0(0x169),_0x3d63b1(0xe7),_0x373ee3(0xef),_0x1e46c0(0x17d),_0x1e46c0(0x195),_0x1e46c0(0x194),_0x373ee3(0xdd),_0x1e46c0(0x177),_0x1e46c0(0x196),_0x1e46c0(0x187),_0x1e46c0(0x19f),_0x1e46c0(0x166),_0x1e46c0(0x186),_0x1e46c0(0x183),_0x1e46c0(0x19c),_0x1e46c0(0x18d),_0x3d63b1(0x101),_0x1e46c0(0x185),_0x1e46c0(0x17c),_0x1e46c0(0x16d),_0x3d63b1(0xdb),_0x1e46c0(0x17f),_0x3d63b1(0x112),_0x1e46c0(0x180),_0x1e46c0(0x18a),_0x1e46c0(0x18b),_0x1e46c0(0x16f),_0x1e46c0(0x18f),_0x1e46c0(0x190),_0x1e46c0(0x176),_0x3d63b1(0x10e),_0x1e46c0(0x171),_0x1e46c0(0x193),_0x1e46c0(0x191),_0x1e46c0(0x188),_0x1e46c0(0x175),_0x1e46c0(0x179),_0x3d63b1(0xd0),_0x1e46c0(0x199),_0x3d63b1(0xcb)];return _0x31bc=function(){return _0x316a;},_0x31bc();}function _0x5f29(){const _0x277bce=_0x5808,_0x4e657d=_0x1c1b,_0x5ef0a1=_0x1d45,_0x3fadcb=_0x13d5,_0x2077f5=[_0x3fadcb(0xd2),_0x5ef0a1(0xc5),_0x5ef0a1(0xea),_0x3fadcb(0x105),_0x3fadcb(0xf0),_0x3fadcb(0xcf),_0x5ef0a1(0xe4),_0x3fadcb(0xe1),_0x3fadcb(0xe4),_0x5ef0a1(0xd6),_0x3fadcb(0xda),_0x3fadcb(0xf6),_0x3fadcb(0x10f),_0x3fadcb(0x104),_0x5ef0a1(0xa7),_0x3fadcb(0xfa),_0x3fadcb(0xfb),_0x3fadcb(0xe8),_0x3fadcb(0x10b),_0x3fadcb(0x108),_0x3fadcb(0x109),_0x3fadcb(0xcd),_0x3fadcb(0xeb),_0x3fadcb(0xf9),_0x3fadcb(0xd7),_0x3fadcb(0x110),_0x3fadcb(0xf3),_0x3fadcb(0xce),_0x3fadcb(0xe5),_0x5ef0a1(0xf7),_0x5ef0a1(0xdf),_0x3fadcb(0xfe),_0x4e657d(0x1fb),_0x5ef0a1(0xa4),_0x3fadcb(0xf8),_0x3fadcb(0xee),_0x3fadcb(0xed),_0x4e657d(0x1cb),_0x5ef0a1(0xbd),_0x3fadcb(0xfd),_0x4e657d(0x1ff),_0x3fadcb(0x103),_0x3fadcb(0x113),_0x3fadcb(0xe3),_0x3fadcb(0xdd),_0x5ef0a1(0xc7),_0x5ef0a1(0xd4),_0x3fadcb(0xd6),_0x5ef0a1(0xa6),_0x3fadcb(0x102),_0x3fadcb(0xe6),_0x4e657d(0x229),_0x3fadcb(0xef),_0x3fadcb(0xd5),_0x4e657d(0x1cc),_0x3fadcb(0x107),_0x3fadcb(0x10c),_0x4e657d(0x1fa),_0x277bce(0x21d),_0x3fadcb(0x100)];return _0x5f29=function(){return _0x2077f5;},_0x5f29();}function _0x418b(_0x99e116,_0x404b5a){_0x99e116=_0x99e116-0x105;const _0x560eeb=_0x560e();let _0x418b4e=_0x560eeb[_0x99e116];if(_0x418b['zMWGQM']===undefined){var _0x41dfc5=function(_0x34f0d2){const _0xb23d5e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x156c20='',_0x1a744c='';for(let _0x5a490=0x0,_0xd69afb,_0x39d2f0,_0x16d9aa=0x0;_0x39d2f0=_0x34f0d2['charAt'](_0x16d9aa++);~_0x39d2f0&&(_0xd69afb=_0x5a490%0x4?_0xd69afb*0x40+_0x39d2f0:_0x39d2f0,_0x5a490++%0x4)?_0x156c20+=String['fromCharCode'](0xff&_0xd69afb>>(-0x2*_0x5a490&0x6)):0x0){_0x39d2f0=_0xb23d5e['indexOf'](_0x39d2f0);}for(let _0x1a2637=0x0,_0x59da50=_0x156c20['length'];_0x1a2637<_0x59da50;_0x1a2637++){_0x1a744c+='%'+('00'+_0x156c20['charCodeAt'](_0x1a2637)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1a744c);};_0x418b['VbZizY']=_0x41dfc5,_0x418b['tpwFiS']={},_0x418b['zMWGQM']=!![];}const _0x2638fd=_0x560eeb[0x0],_0x4cb5e9=_0x99e116+_0x2638fd,_0x5d3b61=_0x418b['tpwFiS'][_0x4cb5e9];return!_0x5d3b61?(_0x418b4e=_0x418b['VbZizY'](_0x418b4e),_0x418b['tpwFiS'][_0x4cb5e9]=_0x418b4e):_0x418b4e=_0x5d3b61,_0x418b4e;}function _0x1c1b(_0x19ba3a,_0xcc28bd){const _0x992b2=_0x418b,_0x57da35=_0x5808;_0x19ba3a=_0x19ba3a-0x1c6;const _0x4b9ae5=_0x1bca();let _0x1849d2=_0x4b9ae5[_0x19ba3a];if(_0x1c1b[_0x57da35(0x205)]===undefined){var _0x347053=function(_0x3e3204){const _0x57e983=_0x418b,_0x39938c=_0x57da35,_0x5f0cce=_0x39938c(0x239);let _0x773d0a='',_0x2208e5='';for(let _0x9e177f=0x0,_0x543f08,_0x788b81,_0x332380=0x0;_0x788b81=_0x3e3204[_0x39938c(0x1ed)](_0x332380++);~_0x788b81&&(_0x543f08=_0x9e177f%0x4?_0x543f08*0x40+_0x788b81:_0x788b81,_0x9e177f++%0x4)?_0x773d0a+=String[_0x57e983(0x185)](0xff&_0x543f08>>(-0x2*_0x9e177f&0x6)):0x0){_0x788b81=_0x5f0cce[_0x39938c(0x1e6)](_0x788b81);}for(let _0x5bce47=0x0,_0x5f316b=_0x773d0a[_0x57e983(0x118)];_0x5bce47<_0x5f316b;_0x5bce47++){_0x2208e5+='%'+('00'+_0x773d0a[_0x39938c(0x1d8)](_0x5bce47)[_0x39938c(0x204)](0x10))[_0x57e983(0x113)](-0x2);}return decodeURIComponent(_0x2208e5);};_0x1c1b[_0x57da35(0x1fa)]=_0x347053,_0x1c1b[_0x992b2(0x165)]={},_0x1c1b[_0x57da35(0x205)]=!![];}const _0x3d89cb=_0x4b9ae5[0x0],_0x2d0334=_0x19ba3a+_0x3d89cb,_0x3b5718=_0x1c1b['RBYBgL'][_0x2d0334];return!_0x3b5718?(_0x1849d2=_0x1c1b[_0x992b2(0x152)](_0x1849d2),_0x1c1b[_0x992b2(0x165)][_0x2d0334]=_0x1849d2):_0x1849d2=_0x3b5718,_0x1849d2;}function _0x40f2(){const _0x487e75=_0x418b,_0x4e4dcc=_0x5808,_0x1e3e4b=_0x1c1b,_0x10b920=_0x1d45,_0x1f6f42=[_0x10b920(0xa2),_0x10b920(0xa1),_0x4e4dcc(0x1f5),_0x1e3e4b(0x21f),_0x10b920(0xa3),_0x10b920(0xad),_0x10b920(0xbe),_0x10b920(0xf9),_0x1e3e4b(0x21d),_0x10b920(0xaa),_0x10b920(0xaf),_0x10b920(0xdb),_0x10b920(0xa0),_0x10b920(0xf0),_0x1e3e4b(0x1da),_0x10b920(0xeb),_0x10b920(0xc1),_0x1e3e4b(0x1e4),_0x10b920(0xed),_0x10b920(0xb7),_0x1e3e4b(0x1f8),_0x10b920(0xb4),_0x10b920(0xcf),_0x10b920(0xd0),_0x10b920(0xa8),_0x10b920(0xca),_0x10b920(0xb0),_0x10b920(0xe3),_0x10b920(0xcc),_0x10b920(0xd4),_0x10b920(0xbb),_0x10b920(0xc0),_0x10b920(0xa9),_0x10b920(0xe1),_0x10b920(0xf3),_0x10b920(0xc9),_0x1e3e4b(0x21c),_0x1e3e4b(0x202),_0x10b920(0xf4),_0x10b920(0xbf),_0x1e3e4b(0x1de),_0x10b920(0xea),_0x1e3e4b(0x1f6),_0x1e3e4b(0x200),_0x10b920(0xdc),_0x10b920(0xda),_0x1e3e4b(0x1e2),_0x10b920(0xee),_0x10b920(0xf2),_0x10b920(0xf1),_0x10b920(0xb5),_0x1e3e4b(0x1fb),_0x10b920(0xe8),_0x10b920(0xe6),_0x10b920(0xe2),_0x10b920(0xb2),_0x1e3e4b(0x1d1),_0x10b920(0xd3),_0x10b920(0xd9),_0x1e3e4b(0x22a),_0x1e3e4b(0x1f2),_0x10b920(0xae),_0x1e3e4b(0x1d9),_0x10b920(0xf8),_0x10b920(0xb9),_0x1e3e4b(0x1d6),_0x10b920(0xab),_0x10b920(0xd7),_0x10b920(0x9f),_0x10b920(0xd2),_0x10b920(0xc8),_0x487e75(0x17c),_0x10b920(0xc4),_0x10b920(0xba),_0x10b920(0xcd),_0x10b920(0xc6)];return _0x40f2=function(){return _0x1f6f42;},_0x40f2();}(function(_0x186755,_0x2a4baf){const _0xcf0bb=_0x4092,_0x1dbf49=_0x5b1f,_0x4b3a26=_0x186755();while(!![]){try{const _0x3e2a47=parseInt(_0x1dbf49(0xd5))/0x1*(-parseInt(_0x1dbf49(0xc3))/0x2)+parseInt(_0x1dbf49(0xe0))/0x3*(-parseInt(_0x1dbf49(0xdc))/0x4)+-parseInt(_0x1dbf49(0xc7))/0x5*(-parseInt(_0x1dbf49(0xc6))/0x6)+-parseInt(_0x1dbf49(0xd7))/0x7*(parseInt(_0x1dbf49(0xce))/0x8)+parseInt(_0x1dbf49(0xcc))/0x9+parseInt(_0x1dbf49(0xe5))/0xa*(-parseInt(_0x1dbf49(0xc2))/0xb)+-parseInt(_0x1dbf49(0xd2))/0xc*(-parseInt(_0x1dbf49(0xbf))/0xd);if(_0x3e2a47===_0x2a4baf)break;else _0x4b3a26[_0xcf0bb(0x178)](_0x4b3a26[_0xcf0bb(0x198)]());}catch(_0x3251a1){_0x4b3a26[_0xcf0bb(0x178)](_0x4b3a26[_0xcf0bb(0x198)]());}}}(_0x31bc,0x65f0e));function _0x13d5(_0x24ccef,_0x595099){const _0x7377ed=_0x5808,_0x266a69=_0x1d45;_0x24ccef=_0x24ccef-0xca;const _0x1fcdc8=_0x40f2();let _0x2ff259=_0x1fcdc8[_0x24ccef];if(_0x13d5[_0x266a69(0xe7)]===undefined){var _0x308534=function(_0x366bd4){const _0x3e3ad5=_0x5808,_0x4aedb3=_0x266a69,_0x457665=_0x3e3ad5(0x239);let _0x4e29c7='',_0x576057='';for(let _0xa116aa=0x0,_0x43be79,_0x3b5752,_0x231b0d=0x0;_0x3b5752=_0x366bd4[_0x4aedb3(0xc2)](_0x231b0d++);~_0x3b5752&&(_0x43be79=_0xa116aa%0x4?_0x43be79*0x40+_0x3b5752:_0x3b5752,_0xa116aa++%0x4)?_0x4e29c7+=String[_0x4aedb3(0xfa)](0xff&_0x43be79>>(-0x2*_0xa116aa&0x6)):0x0){_0x3b5752=_0x457665[_0x4aedb3(0xbc)](_0x3b5752);}for(let _0x3f0eac=0x0,_0x269f8f=_0x4e29c7[_0x4aedb3(0xe0)];_0x3f0eac<_0x269f8f;_0x3f0eac++){_0x576057+='%'+('00'+_0x4e29c7[_0x4aedb3(0xb1)](_0x3f0eac)[_0x4aedb3(0xa5)](0x10))[_0x4aedb3(0xb6)](-0x2);}return decodeURIComponent(_0x576057);};_0x13d5[_0x266a69(0xde)]=_0x308534,_0x13d5[_0x266a69(0xac)]={},_0x13d5[_0x266a69(0xe7)]=!![];}const _0x3f6db2=_0x1fcdc8[0x0],_0x14c21f=_0x24ccef+_0x3f6db2,_0xdc7429=_0x13d5[_0x266a69(0xac)][_0x14c21f];return!_0xdc7429?(_0x2ff259=_0x13d5[_0x266a69(0xde)](_0x2ff259),_0x13d5[_0x7377ed(0x1f4)][_0x14c21f]=_0x2ff259):_0x2ff259=_0xdc7429,_0x2ff259;}const _0x20bb10=_0x4260;function _0x6d52(){const _0x12fc2d=_0x418b,_0x433afa=_0x5808,_0x523ecb=_0x1c1b,_0x183d00=[_0x433afa(0x22b),_0x523ecb(0x21b),_0x523ecb(0x22d),_0x433afa(0x221),_0x523ecb(0x215),_0x433afa(0x1e1),_0x523ecb(0x230),_0x523ecb(0x1fd),_0x523ecb(0x220),'y2HHCKf0',_0x523ecb(0x1f1),_0x523ecb(0x21a),_0x523ecb(0x204),_0x523ecb(0x206),_0x523ecb(0x20c),_0x523ecb(0x1f3),_0x523ecb(0x219),_0x523ecb(0x224),_0x523ecb(0x1d4),_0x523ecb(0x1d3),_0x523ecb(0x22e),_0x12fc2d(0x177),_0x433afa(0x218),_0x523ecb(0x1db),_0x523ecb(0x1f5),_0x12fc2d(0x159),_0x523ecb(0x218),_0x523ecb(0x201),_0x523ecb(0x1d2),_0x523ecb(0x20a),_0x523ecb(0x20b),_0x433afa(0x1f8),_0x523ecb(0x1ed),_0x433afa(0x1df),_0x433afa(0x230),_0x523ecb(0x1c7),_0x523ecb(0x232),_0x523ecb(0x1ef),_0x523ecb(0x228),_0x433afa(0x231),_0x523ecb(0x1e0),_0x523ecb(0x1c6),_0x523ecb(0x1e9),_0x523ecb(0x1ea),_0x523ecb(0x1fe),_0x523ecb(0x1fc),_0x12fc2d(0x15f),_0x523ecb(0x223),_0x523ecb(0x1f9),_0x523ecb(0x1cb),_0x523ecb(0x1f0),_0x523ecb(0x1c9),_0x523ecb(0x21f),_0x523ecb(0x1d8),_0x523ecb(0x22f),_0x523ecb(0x213),_0x523ecb(0x22c),_0x433afa(0x214),_0x523ecb(0x1ca),_0x523ecb(0x1ee),_0x523ecb(0x211),_0x523ecb(0x1dc),_0x523ecb(0x1e8),_0x523ecb(0x212),_0x433afa(0x22a),_0x523ecb(0x1e6),_0x523ecb(0x20d),_0x523ecb(0x214),_0x523ecb(0x210),_0x523ecb(0x1ce),_0x523ecb(0x1e7),_0x523ecb(0x221),_0x433afa(0x20f),_0x523ecb(0x1eb),_0x12fc2d(0x149),_0x433afa(0x202),_0x12fc2d(0x157),_0x523ecb(0x1cd),_0x433afa(0x20b),_0x523ecb(0x226),_0x523ecb(0x20f),_0x523ecb(0x1ec),_0x523ecb(0x1d0),_0x523ecb(0x1dd),_0x433afa(0x1da),_0x523ecb(0x1f7),_0x523ecb(0x234),_0x12fc2d(0x155),_0x523ecb(0x1d5),_0x523ecb(0x1fb),_0x523ecb(0x21e),_0x523ecb(0x227)];return _0x6d52=function(){return _0x183d00;},_0x6d52();}function _0x5b1f(_0x3f6a6e,_0x594b1e){const _0xfb4d8a=_0x13d5,_0x69cd78=_0x4092;_0x3f6a6e=_0x3f6a6e-0xbd;const _0x25f8ef=_0x31bc();let _0x5dfef0=_0x25f8ef[_0x3f6a6e];if(_0x5b1f[_0x69cd78(0x17a)]===undefined){var _0x157645=function(_0xad8423){const _0x5607d9=_0x13d5,_0x3cb18a=_0x69cd78,_0x25ee6e=_0x3cb18a(0x17b);let _0x53d315='',_0x397b9a='';for(let _0x2c60ef=0x0,_0x4d42e3,_0xe5fc16,_0x84f2ff=0x0;_0xe5fc16=_0xad8423[_0x5607d9(0xe2)](_0x84f2ff++);~_0xe5fc16&&(_0x4d42e3=_0x2c60ef%0x4?_0x4d42e3*0x40+_0xe5fc16:_0xe5fc16,_0x2c60ef++%0x4)?_0x53d315+=String[_0x3cb18a(0x172)](0xff&_0x4d42e3>>(-0x2*_0x2c60ef&0x6)):0x0){_0xe5fc16=_0x25ee6e[_0x3cb18a(0x184)](_0xe5fc16);}for(let _0xde22ee=0x0,_0xc01b54=_0x53d315[_0x3cb18a(0x16a)];_0xde22ee<_0xc01b54;_0xde22ee++){_0x397b9a+='%'+('00'+_0x53d315[_0x3cb18a(0x182)](_0xde22ee)[_0x3cb18a(0x19a)](0x10))[_0x3cb18a(0x1a0)](-0x2);}return decodeURIComponent(_0x397b9a);};_0x5b1f[_0x69cd78(0x19b)]=_0x157645,_0x5b1f[_0x69cd78(0x174)]={},_0x5b1f[_0x69cd78(0x17a)]=!![];}const _0x58a48a=_0x25f8ef[0x0],_0x4fa7b9=_0x3f6a6e+_0x58a48a,_0x395f47=_0x5b1f[_0xfb4d8a(0xf5)][_0x4fa7b9];return!_0x395f47?(_0x5dfef0=_0x5b1f[_0x69cd78(0x19b)](_0x5dfef0),_0x5b1f[_0x69cd78(0x174)][_0x4fa7b9]=_0x5dfef0):_0x5dfef0=_0x395f47,_0x5dfef0;}function _0x4f48(){const _0xff24d4=_0x13d5,_0x231f8a=_0x4092,_0x31773d=_0x5b1f,_0xdb4941=[_0x31773d(0xcb),_0x31773d(0xcf),_0x31773d(0xdf),_0x31773d(0xe3),_0x231f8a(0x165),_0x231f8a(0x170),_0x31773d(0xd3),_0x31773d(0xe4),_0x31773d(0xc8),_0x31773d(0xc0),_0x31773d(0xe1),_0x231f8a(0x16e),_0x31773d(0xca),_0x231f8a(0x16c),_0x31773d(0xe7),_0x31773d(0xbd),_0x31773d(0xc5),_0xff24d4(0xde),_0xff24d4(0xe9),_0x231f8a(0x167),_0x31773d(0xc9)];return _0x4f48=function(){return _0xdb4941;},_0x4f48();}function _0x4092(_0x44cab5,_0x148db2){const _0x1a47de=_0x1d45,_0x50cad7=_0x13d5;_0x44cab5=_0x44cab5-0x165;const _0x1ee3b7=_0x5f29();let _0x34c920=_0x1ee3b7[_0x44cab5];if(_0x4092[_0x50cad7(0xfc)]===undefined){var _0x37debd=function(_0x5723e6){const _0x490619=_0x1d45,_0xd41128=_0x50cad7,_0x24bb0c=_0x490619(0xce);let _0xcd6ff4='',_0x54229b='';for(let _0x315f15=0x0,_0x138f78,_0x3d03db,_0x910f48=0x0;_0x3d03db=_0x5723e6[_0xd41128(0xe2)](_0x910f48++);~_0x3d03db&&(_0x138f78=_0x315f15%0x4?_0x138f78*0x40+_0x3d03db:_0x3d03db,_0x315f15++%0x4)?_0xcd6ff4+=String[_0xd41128(0x10a)](0xff&_0x138f78>>(-0x2*_0x315f15&0x6)):0x0){_0x3d03db=_0x24bb0c[_0xd41128(0xff)](_0x3d03db);}for(let _0x45edfe=0x0,_0x17d235=_0xcd6ff4[_0xd41128(0xcc)];_0x45edfe<_0x17d235;_0x45edfe++){_0x54229b+='%'+('00'+_0xcd6ff4[_0xd41128(0xca)](_0x45edfe)[_0xd41128(0xf1)](0x10))[_0xd41128(0xd4)](-0x2);}return decodeURIComponent(_0x54229b);};_0x4092[_0x50cad7(0xd8)]=_0x37debd,_0x4092[_0x50cad7(0xd3)]={},_0x4092[_0x50cad7(0xfc)]=!![];}const _0x1f1e73=_0x1ee3b7[0x0],_0x5c9b72=_0x44cab5+_0x1f1e73,_0x47663a=_0x4092[_0x50cad7(0xd3)][_0x5c9b72];return!_0x47663a?(_0x34c920=_0x4092[_0x1a47de(0xd8)](_0x34c920),_0x4092[_0x50cad7(0xd3)][_0x5c9b72]=_0x34c920):_0x34c920=_0x47663a,_0x34c920;}function _0x5808(_0x911c9d,_0x4784a4){const _0x4a522f=_0x418b;_0x911c9d=_0x911c9d-0x1d6;const _0xa48fda=_0xf15d();let _0x4b36c9=_0xa48fda[_0x911c9d];if(_0x5808[_0x4a522f(0x11b)]===undefined){var _0x57e27b=function(_0x1a37dd){const _0x10dc9b=_0x4a522f,_0x58e004=_0x10dc9b(0x17f);let _0x21772f='',_0x428c2d='';for(let _0x6e89e7=0x0,_0x634dc1,_0x129c00,_0xd84c90=0x0;_0x129c00=_0x1a37dd['charAt'](_0xd84c90++);~_0x129c00&&(_0x634dc1=_0x6e89e7%0x4?_0x634dc1*0x40+_0x129c00:_0x129c00,_0x6e89e7++%0x4)?_0x21772f+=String[_0x10dc9b(0x185)](0xff&_0x634dc1>>(-0x2*_0x6e89e7&0x6)):0x0){_0x129c00=_0x58e004[_0x10dc9b(0x166)](_0x129c00);}for(let _0x28e9a7=0x0,_0x5b2ace=_0x21772f[_0x10dc9b(0x118)];_0x28e9a7<_0x5b2ace;_0x28e9a7++){_0x428c2d+='%'+('00'+_0x21772f[_0x10dc9b(0x15d)](_0x28e9a7)['toString'](0x10))[_0x10dc9b(0x113)](-0x2);}return decodeURIComponent(_0x428c2d);};_0x5808[_0x4a522f(0x133)]=_0x57e27b,_0x5808[_0x4a522f(0x140)]={},_0x5808[_0x4a522f(0x11b)]=!![];}const _0x3ba4c6=_0xa48fda[0x0],_0x3d01f1=_0x911c9d+_0x3ba4c6,_0x3e85a9=_0x5808['ncVcTS'][_0x3d01f1];return!_0x3e85a9?(_0x4b36c9=_0x5808[_0x4a522f(0x133)](_0x4b36c9),_0x5808[_0x4a522f(0x140)][_0x3d01f1]=_0x4b36c9):_0x4b36c9=_0x3e85a9,_0x4b36c9;}function _0x4260(_0x2bd0c2,_0x53e9ce){const _0x4144e0=_0x4092,_0x40c065=_0x5b1f;_0x2bd0c2=_0x2bd0c2-0x1cb;const _0x101e2f=_0x4f48();let _0x414425=_0x101e2f[_0x2bd0c2];if(_0x4260[_0x40c065(0xbe)]===undefined){var _0x649b80=function(_0x35c1f7){const _0x21782a=_0x4092,_0x1d3483=_0x40c065,_0x4f0c3e=_0x1d3483(0xc1);let _0x51b210='',_0x2e889b='';for(let _0x1d3ea1=0x0,_0x18851d,_0x22b0ab,_0x27fe12=0x0;_0x22b0ab=_0x35c1f7[_0x1d3483(0xda)](_0x27fe12++);~_0x22b0ab&&(_0x18851d=_0x1d3ea1%0x4?_0x18851d*0x40+_0x22b0ab:_0x22b0ab,_0x1d3ea1++%0x4)?_0x51b210+=String[_0x1d3483(0xde)](0xff&_0x18851d>>(-0x2*_0x1d3ea1&0x6)):0x0){_0x22b0ab=_0x4f0c3e[_0x1d3483(0xdd)](_0x22b0ab);}for(let _0x307dc9=0x0,_0x26eae1=_0x51b210[_0x21782a(0x16a)];_0x307dc9<_0x26eae1;_0x307dc9++){_0x2e889b+='%'+('00'+_0x51b210[_0x1d3483(0xd9)](_0x307dc9)[_0x1d3483(0xd8)](0x10))[_0x1d3483(0xd1)](-0x2);}return decodeURIComponent(_0x2e889b);};_0x4260[_0x4144e0(0x18e)]=_0x649b80,_0x4260[_0x40c065(0xd4)]={},_0x4260[_0x40c065(0xbe)]=!![];}const _0x38c632=_0x101e2f[0x0],_0xc9e121=_0x2bd0c2+_0x38c632,_0x4e1b71=_0x4260[_0x4144e0(0x16b)][_0xc9e121];return!_0x4e1b71?(_0x414425=_0x4260[_0x4144e0(0x18e)](_0x414425),_0x4260[_0x40c065(0xd4)][_0xc9e121]=_0x414425):_0x414425=_0x4e1b71,_0x414425;}function _0x560e(){const _0x3ef3fd=['C2HPzNq','CtnYvw13mtf6sNjzEMHPwevoCM1fs3zUCvPMzuvNugXfs1HTD00WwxvNowr0EgKYru5ivhDlDM1etxiWrhvivxfordj0EhjVreS1veqZENveztvXrhHQmw10AJbfAgPvqK5YuxPoCKXZAhzJrhr1wa','CtniAxPNmtrcDLaXEMHQqxf3rfbTs25TCvC','Cu5iwxrOre5VDgjJrgHQDKvoDMLdEgOXBxCXzKr4AJq','qK12txmZtdfbsM5yCLC','Cu1emNz4t1PdsZG','Cta1zw1nmwXdDLaWEMHPmurOsde','Ctn2Cxz4rdrcDLaXENrmquvkBKW','Ctn1muf4rdf6sZLzENr2DxjNrfbTEgPmD2vimM1OAM1ctKHnENCXt0vmELL6DhzUre1inKvH','CuSXzuv1zM9ctvHwrwzHmunmqW','qNHYsxDoDvDdteXzBwDl','CuPUwxPNmfLTD1rKreThwxjLntzUzxjSDvPMmenX','q3vqvxD4BvP1ztLAEJnL','q3rUmKr1DJfcsNjJC1P2DuvlvhLeEgPlEKXmwM0Yug9dtxPjBtnqm3rAyMr0EfbQqNuWv3D1DM1bteHAD012ENjKytf1Dxzi','ExDQsNPNDK16mKHqqu1uu0j3nvzdAgzzqZnYmurordrfEfbICuTUzxj1EMHZzuXRCZbyBNrloxf1DMP0DMz2D3yXshP3sMfyBuPTmg50EtnVzeTsBfOW','qJjYmw5Nmw5btvq1rhrmBhjMqW','qZb6vNrLBM4','CtnYuuf3mw9Yz1G2CZbd','CtnYvw13mtnUD1HJC05QtumXug1fs3zUC2zIm3P4ELvdtuHjDMHTww14sgn0s0HUrdaWwhqWzM5VD3juDeXIvxfoDtfUs3zi','q05iwxz4DJrdsZKWEMHQs0nAzMHTs3zVCMr2mNzx','B3rHv21nmwHYD1bMC0C','CtaXmKr4udfdtvHIreTxwevkAvC','ywjJzgvMz2HPAMTSBw5VChfYC3r1DND4ExPbqKneruzhseLks0XntK9quvjtvfvwv1HzwJaXmJm0nty3odKRlZ0','rgC5DerOALbctum','Ctn2Dg14rdrdsZvurhr2DxjKzLHTs21xBxzMwKr3t1DfDtvTBwvYm253AMzfAgP5','EtjisenlBLz6z3zIrge','q05iwxv1zJrcs1HJDhzisKrNshbTs3zRqKP6wKvNug9ftMu','Bxrhmg10r1DTs0q2C0S1v3rH','zNjVBunOyxjdB2rL','CtnYvw5lBJrfsNjJC05QthjLvfHTs21xBNzMwM0YDKfftMu','CuTuCxrNmw91zZLAEK1qturLnvfdyq','B3r5v3iWrhHezZLS','q1PQDxvorg9YzZq','q3zquuv4DK9ZmuXLq3e','mtq5mfjlCfbKCq','CuTyCxvNmfLVDvrJreTYDuvoEMLTs24XBxzMmM1Nudq','q3u1AxD4BK9YztvvrgHQs0mWmxb3zxjoruTmmxmZAvLdDKm','CuTuCufNmu5VDgjAD01qDuj1wgHTs3i0CMDmzw0YENK','BxrPwg5KzMH5mJLjCtn5','BxrHng5NDJrez2zlC3e','CNvquw1nmuG','BKPPwNvotfvcz3ju','q3rUwxz3mwXdsZLMreTyDNjNqZfeEgOZre1X','qNHYwg13nwTYwMyZDhziuuvkANf6yq','q05iwxz4DJrdsZKWEMHQs0nAzMq','q3rUmw13mwXcsM5vrgC1DxjOCJjetMPlEKXivhrnug9dDLbnENCXt0vmELHTzgj5rxrPwhqWzM53z3PLrgD2ENjKAJjTtNfxre1uzenX','C2XPy2u','q3u1mw11AJr0murLC05Pv0vkAtf0Dw5TCvC','Cu56CufNnu5TDvq1rgC1tej1udjXEgzVC2z2mNzx','ofvnCvPIqG','ChvZAa','BgvUz3rO','mZiXmZzKDMDfEfC','CMHYvxz4rg96sMPLDhrH','u29OqMPt','rhzQuNOZzM0','CvPQAxvOug9dCq','q3u1AxD4re9YztvurgDQsNjNrffes2OWqKXImM1OALneDLbnBtbMtxLnsW','mZCZngTzvKvnsW','mZiWnZa5mNvvBMrdvq','Cta1AxD4DJf6sNjJCZfisKrOEMHTs21xBxvx','q3rUwxz1zJnUDZLzEMHPwevmugXTtMPmD2vimM0YEvPYztvy','Ctn2DhDOrdr1ztvuEKTyDNjKzLHTtMPmDMHim3P4AM1ctNPnBtbYm252DMrTs0HUqNu1nKvH','qxC1s3P4shb6rW','CtnYvuf1zJr1ztvurgHQsNjLweH3zxzUC2zMwevNEvPdtxPjDMHTww52CMres20','CxHdmxmZudrZAgi2CLC','ndu2nZe2AgzvB0jZ','Ctn2Cxv4rdrfsZLzELP2DNjNrffZm2PmDMHmzw1OELjfDtfTD2v2tKv2rfHZmweYre52ww0WDMXVyq','q3rUmKrOEvLUDg5urwvd','mJe4nZm0mvLmBNjorq','mJq4odvtr01qwfC','Bxrdv25kBtbVDermDtnICxnnna','rxrQAxnLBMXcthO2EJn6sxjNzq','q3zquuf4DK91zZLKq3e','Cu5iwxDOrg5TDgjMDhHQs0j4DNHTAgzSDMDx','q3rUmKrOre9YzhjJC1PmEKvmudjeEgPpruXmwKvNug1etuHTEK5TwKfoyLL6DKHqqNrImNrlCMX6teW2rgD6DxjKytf1Dxzi','CtnimxDLzJfcDLbJDhr2terNDLq','Ctn1muf4rdnUDhjzENr2D3jNrfbTEgPoC2zMzw1OELjXsZvnEu5Tww52BMv0EfbUrxrImNrnntnZvW','yvj2t3jz','q3rQAw1orgX6s0C','mtqWwNnhEMX1','q3u1AxD4ue9fDKXwrgDQthjLvhLeEgyZruTmvhmZzKfdmNOYBxCXtKvosW','CMu1nM1lBM9YzZvvreTt','ru12mKjOzvPdthe','q3rUmw13nwXcsNjJC05QsKrOEMLZDw1yDwrQzxrnuhbXmfbnBu0WwxvNwfHZmwjT','m0LstNz2uq','q3rHmw1lBJresM5urfP2DxjOCMXTs3jpq01ymM0YEvPdDLbjDMHYBNqXugr0EgLzqNrUCw5LDM1ftxjuDeS5ENjLmtj0EhjUBNuXmxPlshvcDtuX','qNHYsuj1BM5ctwPyBtbt','q3rUmKn4EJrYzg5vrgHQEKvnqZfeEgPpCMr2ver3nwjfs1rTBwvYnefnovLeDNjuqNvutxrlDM1ctw5MENviCa','re56mKnorg5UDKS','Ctn2DhDOrdfbsZLzELP2DxjOrdzfs3fxBNr6mhP3nwjXDva2DMHqnefmBMnfzuHUru52vxDH','BMnwy1rt','CtaXzxPNntfds1HKC1PmsurNrffZs3jpreXX','qNHYshyYnufbttLLENvyBhf4rhq','Bxr6EhfntgPbs2K','qKTqthD3ouTeDgyWDhHqmKv0AtfcCq','Bxr5wg5AAtfTtMziC01Qvujx','q3vtwhD3mtnTDtvwrhrLwevnsffZm2PmDMzmvg1OELndDKm','EtjisenlzJa','mZGWsuXXrvrK','q0Tyzuv4EK5Zz2K','q3rUmKr1BJresMzLC05QEKvkzMLZs25bEK1ivhmZAM9dDLbjBtnqm252CMres20','qKTuuuiZt1DVDgPJq3e','mZa5mwvLweDiDW','BKPHwM50BvHTzxjQCZa5ENLh','CtjimNDlzKG','Cta1mKn4DJnTDZvurhvd','CMDdnurLCK9btgjJDhvT','Cta1mxDOudnTDZLLreXHwevnsffZmg5bEK1X','DvjRz3fm','qJjevxnlAvD6tMzzCLC','Bxrdmg5KAJf3Aer4CMv5','Ctn6Cxv1DJresZLABxvytheZzq','BNvmmerltdrcyq','qKTqshDnmuTfDhjMEKXIu0rlu1HXCq','Ctn2Dun4BK5TDhjzENrmsNjLweL0zxjoC2r2m3rnDKfftMu','q3rUnKn4DJnTDZvurhvd','qZjyuhKYDq','ruS1uxzlAJfcsZK1rwDqs3fkALL0yq','Cta1Auf4udresNjJDhrlwevoCJj0zw1yDwvyvhmYt1HeturTEMv2tKv2sgnfzuDzqNHdwhroCvH1z24WDeS4wxj1mtj0EhjSre05mxPlr1PeAhiYBK5MB3nKAJneD0XbCxvuDxPOCJr1ztfMC1PMCNf1nuX3s3jVrePQzNPnzvDdEhzXDhHqB0nkzLP6D3Pnrgu1nM51CJf2zNzyrwvyvKrNrfvTAhjUDwHYwhnnnvbeAenyBxvUBM50zJz6mLbTCMDiAunOrdrbs1rJC055wNf3qZfdzxiZq0X2m3roAvPYDvaYD2HYB0vmsgv0Dw55rguWmw1Otg5ftxy2D055wKnoDvHTs3iXqNzeyNnAzvDcEhzu','y2HHCKnVzgvbDa','B2rdnw1OBNPeteqZCNe','qZjmwur3vfy','q3u1mKn4ue5UDg5wrgDPmxjNrffeEgPlqK5Mver4AtbYDtvnEu0WwhLloa','CNHYuuf4BKXctvG2C01L','Cta1zw5oDJr1zvHKreXIEKvlvgq','mtzqqNnTAvi','q1PMsw1OEK50z0S','uKjzqMDm','Aw5KzxHpzG','Cu5iwxzNmu5TD1q2reTiDuqWmvffzw5SBxuXmhmYufvcmMu','ndC2otr4uxjQBLq'];_0x560e=function(){return _0x3ef3fd;};return _0x560e();}(function(_0x96ed54,_0x32b9bd){const _0x53084f=_0x5b1f,_0x5b7e3a=_0x4260,_0x229271=_0x96ed54();while(!![]){try{const _0x219f1a=-parseInt(_0x5b7e3a(0x1db))/0x1+-parseInt(_0x5b7e3a(0x1dc))/0x2+parseInt(_0x5b7e3a(0x1d1))/0x3+-parseInt(_0x5b7e3a(0x1dd))/0x4*(parseInt(_0x5b7e3a(0x1d3))/0x5)+parseInt(_0x5b7e3a(0x1d8))/0x6*(parseInt(_0x5b7e3a(0x1df))/0x7)+parseInt(_0x5b7e3a(0x1da))/0x8+parseInt(_0x5b7e3a(0x1cd))/0x9;if(_0x219f1a===_0x32b9bd)break;else _0x229271[_0x53084f(0xd0)](_0x229271[_0x53084f(0xe6)]());}catch(_0x584f1f){_0x229271[_0x53084f(0xd0)](_0x229271[_0x53084f(0xe6)]());}}}(_0x4f48,0xeba0a));import{randomUUID}from'node:crypto';const sessions=new Map(),requestToSession=new Map(),SESSION_TTL_MS=0x1e*0x3c*0x3e8;export class CaptureSessionManager{[_0x20bb10(0x1cc)](_0x1733ac){const _0x3b2b00=_0x5b1f,_0x281862=_0x20bb10;this[_0x281862(0x1d6)](_0x1733ac);const _0x17b9b3={'id':randomUUID(),'requestId':_0x1733ac,'createdAt':Date[_0x3b2b00(0xcd)]()};return sessions[_0x3b2b00(0xe2)](_0x17b9b3['id'],_0x17b9b3),requestToSession[_0x281862(0x1d4)](_0x1733ac,_0x17b9b3['id']),_0x17b9b3;}[_0x20bb10(0x1cb)](_0x10f351){const _0x3ae09e=_0x20bb10,_0x5a2994=sessions[_0x3ae09e(0x1cb)](_0x10f351);if(!_0x5a2994)return undefined;if(Date[_0x3ae09e(0x1cf)]()-_0x5a2994[_0x3ae09e(0x1d5)]>SESSION_TTL_MS)return this[_0x3ae09e(0x1d6)](_0x5a2994[_0x3ae09e(0x1d9)]),undefined;return _0x5a2994;}[_0x20bb10(0x1d7)](_0x49905b){const _0x5a434a=_0x20bb10,_0x26e0d1=requestToSession[_0x5a434a(0x1cb)](_0x49905b);if(!_0x26e0d1)return undefined;return this[_0x5a434a(0x1cb)](_0x26e0d1);}[_0x20bb10(0x1d2)](_0x5b493a,_0x237fd7){const _0x5962c4=_0x20bb10,_0x57ee4b=this[_0x5962c4(0x1cb)](_0x5b493a);if(!_0x57ee4b)return![];const _0x39d7c8=_0x237fd7[_0x5962c4(0x1ce)]('/')[0x0];return _0x39d7c8[_0x5962c4(0x1de)]>0x0;}[_0x20bb10(0x1d6)](_0x5493d9){const _0x1dcf67=_0x5b1f,_0x56564f=_0x20bb10,_0xa6e75a=requestToSession[_0x1dcf67(0xdb)](_0x5493d9);_0xa6e75a&&(sessions[_0x56564f(0x1d0)](_0xa6e75a),requestToSession[_0x56564f(0x1d0)](_0x5493d9));}[_0x5e2f22(0xd6)](_0x4a88e1){const _0x544fa5=_0x5e2f22,_0xe62986=_0x20bb10,_0x43acb4=sessions[_0xe62986(0x1cb)](_0x4a88e1);_0x43acb4&&this[_0x544fa5(0xc4)](_0x43acb4[_0xe62986(0x1d9)]);}}function _0x1bca(){const _0x220da9=_0x418b,_0x1856c9=_0x5808,_0x33bbac=[_0x1856c9(0x245),'CtninND4ug96DLaWqwvt',_0x1856c9(0x242),_0x1856c9(0x1f2),_0x1856c9(0x213),_0x1856c9(0x1ee),_0x1856c9(0x23a),_0x220da9(0x164),_0x1856c9(0x1ff),_0x1856c9(0x223),_0x220da9(0x12f),_0x1856c9(0x1f3),'mZCWmduWyxLJzLvm',_0x1856c9(0x209),_0x1856c9(0x222),_0x1856c9(0x20c),_0x220da9(0x10d),_0x1856c9(0x208),_0x1856c9(0x234),_0x1856c9(0x1fd),_0x1856c9(0x1f0),_0x220da9(0x13c),_0x1856c9(0x202),_0x1856c9(0x203),_0x1856c9(0x237),_0x1856c9(0x1d9),_0x1856c9(0x228),_0x1856c9(0x217),'DJnUChnMBKW','q3u1mKn1AK5TDtvvrhD6terODMLZmgOWqKP6wevNELjXsZfO',_0x220da9(0x136),'thfuv1nr',_0x1856c9(0x23e),_0x1856c9(0x1e4),_0x1856c9(0x236),_0x1856c9(0x1f9),_0x1856c9(0x1e2),_0x1856c9(0x224),_0x1856c9(0x206),_0x220da9(0x143),_0x1856c9(0x243),_0x1856c9(0x227),_0x220da9(0x14f),_0x220da9(0x186),_0x220da9(0x16d),_0x1856c9(0x218),_0x1856c9(0x21a),_0x1856c9(0x1d6),_0x1856c9(0x21c),_0x220da9(0x124),_0x1856c9(0x21b),_0x1856c9(0x20f),_0x1856c9(0x20a),_0x1856c9(0x1de),_0x220da9(0x15b),_0x1856c9(0x1e1),_0x1856c9(0x1e8),_0x1856c9(0x1fe),_0x1856c9(0x238),_0x1856c9(0x1ec),_0x1856c9(0x1e3),'Cu5iwxrNmu5UDwzJDhr2sNjKzML1zxy0ruXh',_0x1856c9(0x1dc),_0x1856c9(0x1fb),_0x1856c9(0x207),_0x1856c9(0x1f5),'q3rHwg1oreXdsM5LDgzItevoDNLcyq',_0x1856c9(0x22e),_0x1856c9(0x23b),_0x1856c9(0x1e5),_0x1856c9(0x233),_0x220da9(0x137),_0x1856c9(0x1ef),_0x1856c9(0x200),_0x1856c9(0x212),_0x1856c9(0x21f),_0x1856c9(0x219),_0x1856c9(0x240),_0x220da9(0x14b),_0x1856c9(0x235),_0x1856c9(0x1dd),_0x1856c9(0x1f1),_0x1856c9(0x23f),_0x220da9(0x15a),'qNvqAg0YmuT5DgyWBtnqnKqYDNL6vW',_0x1856c9(0x23d),_0x220da9(0x167),_0x1856c9(0x1da),_0x220da9(0x10e),_0x220da9(0x14d),_0x1856c9(0x1f7),_0x1856c9(0x22f),_0x1856c9(0x229),_0x1856c9(0x215),_0x1856c9(0x1d7),_0x1856c9(0x226),_0x1856c9(0x1ea),_0x1856c9(0x1e9),_0x1856c9(0x244),_0x220da9(0x13d),'CuTyCxnNmtnUDwzKrgDQD3j3rfb3EgyWqu5mnw0XyNK',_0x1856c9(0x241),_0x1856c9(0x231),_0x1856c9(0x22d),_0x1856c9(0x210),_0x1856c9(0x1e7),_0x1856c9(0x1fc),'qKTqvg1nmwTbDhzMEK5QyKnAAvHcvW',_0x1856c9(0x1db),_0x1856c9(0x20d),_0x1856c9(0x22c)];return _0x1bca=function(){return _0x33bbac;},_0x1bca();}export const captureSessionManager=new CaptureSessionManager();
@@ -0,0 +1,2 @@
1
+ export declare function getDesktopJwtSecret(): string;
2
+ export declare function getSecretForKid(kid: string | undefined): string;
@@ -0,0 +1 @@
1
+ const _0x460541=_0x2df5;(function(_0x45196a,_0x5ebf7c){const _0x19960e=_0x2df5,_0x42d37e=_0x45196a();while(!![]){try{const _0x47162a=-parseInt(_0x19960e(0xfb))/0x1*(parseInt(_0x19960e(0xfd))/0x2)+parseInt(_0x19960e(0xfe))/0x3+parseInt(_0x19960e(0xfa))/0x4*(-parseInt(_0x19960e(0xff))/0x5)+-parseInt(_0x19960e(0xfc))/0x6+-parseInt(_0x19960e(0x104))/0x7+parseInt(_0x19960e(0x103))/0x8*(parseInt(_0x19960e(0x106))/0x9)+parseInt(_0x19960e(0x105))/0xa;if(_0x47162a===_0x5ebf7c)break;else _0x42d37e['push'](_0x42d37e['shift']());}catch(_0x1cf0e6){_0x42d37e['push'](_0x42d37e['shift']());}}}(_0x2710,0x897d5));function _0x2df5(_0x16fe84,_0x4bd2ed){_0x16fe84=_0x16fe84-0xfa;const _0x271045=_0x2710();let _0x2df5f5=_0x271045[_0x16fe84];if(_0x2df5['kWZMQC']===undefined){var _0x5d7dab=function(_0x363551){const _0x5e4a37='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x41926e='',_0x4646e9='';for(let _0x311521=0x0,_0x2b554b,_0x3f9a34,_0x18a240=0x0;_0x3f9a34=_0x363551['charAt'](_0x18a240++);~_0x3f9a34&&(_0x2b554b=_0x311521%0x4?_0x2b554b*0x40+_0x3f9a34:_0x3f9a34,_0x311521++%0x4)?_0x41926e+=String['fromCharCode'](0xff&_0x2b554b>>(-0x2*_0x311521&0x6)):0x0){_0x3f9a34=_0x5e4a37['indexOf'](_0x3f9a34);}for(let _0x1626f0=0x0,_0x2dff30=_0x41926e['length'];_0x1626f0<_0x2dff30;_0x1626f0++){_0x4646e9+='%'+('00'+_0x41926e['charCodeAt'](_0x1626f0)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4646e9);};_0x2df5['ecLqHH']=_0x5d7dab,_0x2df5['aCKNAI']={},_0x2df5['kWZMQC']=!![];}const _0x13a073=_0x271045[0x0],_0xd2609a=_0x16fe84+_0x13a073,_0x350b5e=_0x2df5['aCKNAI'][_0xd2609a];return!_0x350b5e?(_0x2df5f5=_0x2df5['ecLqHH'](_0x2df5f5),_0x2df5['aCKNAI'][_0xd2609a]=_0x2df5f5):_0x2df5f5=_0x350b5e,_0x2df5f5;}const PLACEHOLDER=_0x460541(0x102),EMBEDDED_SECRET=_0x460541(0x102),DEV_FALLBACK='dev-desktop-jwt-secret-v1-local-only';export function getDesktopJwtSecret(){const _0x17670f=_0x460541,_0x41926e=process[_0x17670f(0x101)][_0x17670f(0x100)];if(_0x41926e&&_0x41926e!==PLACEHOLDER)return _0x41926e;if(EMBEDDED_SECRET!==PLACEHOLDER)return EMBEDDED_SECRET;return DEV_FALLBACK;}function _0x2710(){const _0x3ac7d5=['mtqWmdmYntbPvwPvEu0','odaXDhHuzLDN','nZa5nMf2DhfQAW','mxfvu3nbBq','mZyXotq1ogrjwgLUwG','mJa1nZCWt2vfv0n6','mteYnZC5nKz6Awn6sW','mtuZnwLtBLj2rq','revts1rpuf9kv1rFu0vduKvu','zw52','mZzKywjInZfIzgvLyJK0yJGWnMy1yZrLzMe1mtG3ztC2nJLMmMzKnZrMytK4nJzKzMe5mtq5ngzJn2i1ytrMmW','nJK3nKDWAKf2sq','mJC5nZm0A2LUz3z6'];_0x2710=function(){return _0x3ac7d5;};return _0x2710();}export function getSecretForKid(_0x4646e9){if(!_0x4646e9||_0x4646e9==='v1')return getDesktopJwtSecret();throw new Error('Unknown\x20JWT\x20kid:\x20'+_0x4646e9);}
@@ -0,0 +1,24 @@
1
+ import { type WebDriver } from 'selenium-webdriver';
2
+ import type { ResolvedPaths } from '../config.js';
3
+ import type { HeadedExtensionInstall } from './headedExtension.js';
4
+ export type BrowserPoolConfig = {
5
+ chromePath: string;
6
+ chromedriverPath: string;
7
+ paths: ResolvedPaths;
8
+ headedExtension?: HeadedExtensionInstall | null;
9
+ };
10
+ export type HeadedBrowserSession = {
11
+ driver: WebDriver;
12
+ sessionDir: string;
13
+ cookiesPath: string;
14
+ };
15
+ export declare class BrowserPool {
16
+ private readonly config;
17
+ constructor(config: BrowserPoolConfig);
18
+ launchHeadless(): Promise<WebDriver>;
19
+ launchHeaded(): Promise<HeadedBrowserSession>;
20
+ private applyQuietChromeOptions;
21
+ private buildChromeService;
22
+ private launch;
23
+ release(driver: WebDriver): Promise<void>;
24
+ }
@@ -0,0 +1 @@
1
+ const _0x12d98c=_0x27a0;(function(_0x242df1,_0x1cd99f){const _0x446b15=_0x27a0,_0x46a743=_0x242df1();while(!![]){try{const _0x3778d4=parseInt(_0x446b15(0x114))/0x1+-parseInt(_0x446b15(0x123))/0x2*(parseInt(_0x446b15(0x103))/0x3)+-parseInt(_0x446b15(0x116))/0x4+parseInt(_0x446b15(0x11d))/0x5*(-parseInt(_0x446b15(0x120))/0x6)+-parseInt(_0x446b15(0x11b))/0x7*(parseInt(_0x446b15(0xfa))/0x8)+parseInt(_0x446b15(0x119))/0x9*(-parseInt(_0x446b15(0x125))/0xa)+-parseInt(_0x446b15(0x108))/0xb*(-parseInt(_0x446b15(0x110))/0xc);if(_0x3778d4===_0x1cd99f)break;else _0x46a743['push'](_0x46a743['shift']());}catch(_0x534db9){_0x46a743['push'](_0x46a743['shift']());}}}(_0x4771,0x56c58));import _0x133713 from'fs';function _0x4771(){const _0x2da2f8=['y2HYB21LzhjPDMvYugf0Aa','zxHPC3rZu3LUyW','ls1OzwfKBgvZCZ1UzxC','Bgf1BMnOsgvHzgvK','AgvHzgvKq29VA2LLC1bHDgG','Dw5WywnRzwreAxi','Bg9Nz2LUz1rV','mtqXwvfTt0fr','yNvPBgq','ls1SB2CTBgv2zwW9mW','Bgf1BMnO','AgvHzgXLC3ndCNHqyxrO','mtu2mKP1rgPuBG','y29UzMLN','zgv2tNvSBa','CMvSzwfZzq','CMvZB2X2zq','CxvPDa','ls11C2vYlwrHDgeTzgLYpq','zxH0zw5ZAw9Uswq','mtC1ndG4ELrdELLP','yxbWBhLrDwLLDenOCM9Tzu9WDgLVBNm','y2HYB21L','Aw5PDgLHBfbYzwzLCMvUy2vZugf0Aa','ndG0ntn3wMndug0','Bgf1BMnOsgvHzgXLC3m','mte2ndi2oe5qzNv3sq','C2v0u3rKAw8','C2v0q2HYB21LqMLUyxj5ugf0Aa','mJuYDvbmwNHX','ls1UBY1Zyw5KyM94','mJuYBefPzfvT','ywrKrxH0zw5ZAw9UCW','nuTPseTQsq','ls11C2vYlwfNzw50pq','C2v0q2HYB21Lt3b0Aw9UCW','mJi1nZC4mLnmAKfXAG','t3b0Aw9UCW','Cgf0Ahm','mta2ntrMA0rdDwC','ls1KAxnHyMXLlwDWDq','mtC4ndyWsMLnrgHL','C2v0q2HYB21Lu2vYDMLJzq','ls1KAxnHyMXLlwrLDI1ZAg0TDxnHz2u','sgvHzgvKigv4DgvUC2LVBIbPCYbUB3qGAw5ZDgfSBgvK','y2HYB21Lugf0Aa','ls1KAxnHyMXLlwjHy2TNCM91BMqTBMv0D29YA2LUzW','zM9YqNjVD3nLCG','yNvPBgrdAhjVBwvtzxj2AwnL','nZGYnZj6Aevcz1q','ywrKqxjNDw1LBNrZ'];_0x4771=function(){return _0x2da2f8;};return _0x4771();}import _0x405852 from'os';import _0x38631d from'path';import{Builder}from'selenium-webdriver';function _0x27a0(_0x582d32,_0x95c607){_0x582d32=_0x582d32-0xf4;const _0x477110=_0x4771();let _0x27a0f4=_0x477110[_0x582d32];if(_0x27a0['yyukHP']===undefined){var _0x42de57=function(_0x15313f){const _0xa47ade='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x133713='',_0x405852='';for(let _0x38631d=0x0,_0x58aead,_0x22f016,_0x4658dc=0x0;_0x22f016=_0x15313f['charAt'](_0x4658dc++);~_0x22f016&&(_0x58aead=_0x38631d%0x4?_0x58aead*0x40+_0x22f016:_0x22f016,_0x38631d++%0x4)?_0x133713+=String['fromCharCode'](0xff&_0x58aead>>(-0x2*_0x38631d&0x6)):0x0){_0x22f016=_0xa47ade['indexOf'](_0x22f016);}for(let _0x47f6bb=0x0,_0x24bfe3=_0x133713['length'];_0x47f6bb<_0x24bfe3;_0x47f6bb++){_0x405852+='%'+('00'+_0x133713['charCodeAt'](_0x47f6bb)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x405852);};_0x27a0['HRlHue']=_0x42de57,_0x27a0['OiFxFD']={},_0x27a0['yyukHP']=!![];}const _0x2fe883=_0x477110[0x0],_0x15a343=_0x582d32+_0x2fe883,_0xba77ce=_0x27a0['OiFxFD'][_0x15a343];return!_0xba77ce?(_0x27a0f4=_0x27a0['HRlHue'](_0x27a0f4),_0x27a0['OiFxFD'][_0x15a343]=_0x27a0f4):_0x27a0f4=_0xba77ce,_0x27a0f4;}import _0x58aead from'selenium-webdriver/chrome.js';import{CUSTOM_USER_AGENT}from'../utils.js';import{cleanupOrphanSessionDirs,createHeadedSessionDir,createInitialPreferencesFile,importPersistedCookies,seedPinnedExtensionPreferences}from'./headedBrowserState.js';export class BrowserPool{[_0x12d98c(0x109)];constructor(_0x22f016){this['config']=_0x22f016;}async[_0x12d98c(0x115)](){const _0x350687=_0x12d98c;return this['launch'](![],this[_0x350687(0x109)][_0x350687(0x122)][_0x350687(0x107)]);}async[_0x12d98c(0xff)](){const _0x3a068=_0x12d98c,_0x4658dc=this[_0x3a068(0x109)]['headedExtension'];if(!_0x4658dc)throw new Error(_0x3a068(0xf5));cleanupOrphanSessionDirs(this['config'][_0x3a068(0x122)]['chromeSessionsDir']);const _0x47f6bb=createHeadedSessionDir(this[_0x3a068(0x109)][_0x3a068(0x122)]['chromeSessionsDir']),_0x24bfe3=createInitialPreferencesFile(_0x47f6bb,_0x4658dc['extensionId']);seedPinnedExtensionPreferences(_0x47f6bb,_0x4658dc[_0x3a068(0x10f)]);const _0x1357ef=await this[_0x3a068(0x106)](!![],undefined,_0x47f6bb,{'initialPreferencesPath':_0x24bfe3,'unpackedExtensionDir':_0x4658dc[_0x3a068(0x101)]});return await importPersistedCookies(_0x1357ef,this['config'][_0x3a068(0x122)][_0x3a068(0x100)]),{'driver':_0x1357ef,'sessionDir':_0x47f6bb,'cookiesPath':this[_0x3a068(0x109)][_0x3a068(0x122)][_0x3a068(0x100)]};}[_0x12d98c(0x111)](_0x477aed){const _0x5036fd=_0x12d98c;_0x477aed['excludeSwitches']('enable-logging'),_0x477aed['addArguments'](_0x5036fd(0x105)),_0x477aed[_0x5036fd(0xfb)](_0x5036fd(0xf7));}[_0x12d98c(0xf9)](){const _0x3c2862=_0x12d98c;return new _0x58aead['ServiceBuilder'](this[_0x3c2862(0x109)][_0x3c2862(0xfc)])['enableChromeLogging']()[_0x3c2862(0x102)](_0x405852[_0x3c2862(0x10a)])[_0x3c2862(0x117)]('ignore');}async[_0x12d98c(0x106)](_0xe4f7be,_0x147edc,_0x5e10a2,_0xa55576){const _0x46340d=_0x12d98c,_0x4cb7bf=new _0x58aead[(_0x46340d(0x121))]();_0x4cb7bf[_0x46340d(0x118)](this[_0x46340d(0x109)][_0x46340d(0xf6)]),this[_0x46340d(0x111)](_0x4cb7bf),_0x4cb7bf['addArguments']('--window-size=1920,1080'),_0x4cb7bf[_0x46340d(0xfb)](_0x46340d(0x11e)+CUSTOM_USER_AGENT);_0x405852['platform']()==='win32'&&(_0x4cb7bf['addArguments'](_0x46340d(0x11a)),_0x4cb7bf[_0x46340d(0xfb)](_0x46340d(0xf4)));_0xe4f7be&&_0x5e10a2&&_0x4cb7bf[_0x46340d(0xfb)](_0x46340d(0x10e)+_0x38631d[_0x46340d(0x10c)](_0x5e10a2));_0xe4f7be&&_0xa55576&&(_0x4cb7bf[_0x46340d(0xfb)]('--initial-preferences-file='+_0x38631d['resolve'](_0xa55576[_0x46340d(0x113)])),_0x4cb7bf['addArguments']('--load-extension='+_0x38631d[_0x46340d(0x10c)](_0xa55576['unpackedExtensionDir'])));!_0xe4f7be&&(_0x4cb7bf[_0x46340d(0xfb)](_0x46340d(0xfe)),_0x4cb7bf['addArguments'](_0x46340d(0x124)),_0x4cb7bf['addArguments']('--enable-unsafe-swiftshader'));if(!_0xe4f7be&&_0x147edc)try{_0x133713[_0x46340d(0xfd)](_0x147edc)&&_0x4cb7bf[_0x46340d(0x11c)](_0x147edc);}catch{}const _0x240dde=this['buildChromeService']();return new Builder()[_0x46340d(0xf8)](_0x46340d(0x112))[_0x46340d(0x11f)](_0x4cb7bf)[_0x46340d(0x126)](_0x240dde)[_0x46340d(0x104)]();}async[_0x12d98c(0x10b)](_0xecdec3){const _0x1a98b9=_0x12d98c;try{await _0xecdec3[_0x1a98b9(0x10d)]();}catch{}}}
@@ -0,0 +1,25 @@
1
+ import type { ResolvedPaths } from '../config.js';
2
+ import type { Logger } from '../logger.js';
3
+ import type { CaptureRepo } from '../storage/captureRepo.js';
4
+ import type { Size, Theme } from '../types.js';
5
+ import type { BrowserPool } from './browserPool.js';
6
+ export declare class CaptureService {
7
+ private readonly browserPool;
8
+ private readonly captures;
9
+ private readonly paths;
10
+ private readonly logger;
11
+ private busy;
12
+ private currentRequestId;
13
+ constructor(browserPool: BrowserPool, captures: CaptureRepo, paths: ResolvedPaths, logger: Logger);
14
+ isBusy(): boolean;
15
+ cancel(requestId: string): void;
16
+ startCapture(url: string, sizes: Size[], themes: Theme[]): Promise<{
17
+ requestId: string;
18
+ }>;
19
+ private runCapture;
20
+ private capture;
21
+ private saveCaptureUpdate;
22
+ private saveFailed;
23
+ private waitForCancelled;
24
+ private interruptibleSleep;
25
+ }
@@ -0,0 +1 @@
1
+ const _0x4ff563=_0x2851;function _0x2851(_0x28393d,_0x29a826){_0x28393d=_0x28393d-0x154;const _0x2c2beb=_0x2c2b();let _0x2851f7=_0x2c2beb[_0x28393d];if(_0x2851['wHwkNy']===undefined){var _0x5ac0a8=function(_0x51f24b){const _0xd6c14c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x11b48f='',_0x4b4f25='';for(let _0xd2cf84=0x0,_0x2177a3,_0x4691d4,_0xfde13b=0x0;_0x4691d4=_0x51f24b['charAt'](_0xfde13b++);~_0x4691d4&&(_0x2177a3=_0xd2cf84%0x4?_0x2177a3*0x40+_0x4691d4:_0x4691d4,_0xd2cf84++%0x4)?_0x11b48f+=String['fromCharCode'](0xff&_0x2177a3>>(-0x2*_0xd2cf84&0x6)):0x0){_0x4691d4=_0xd6c14c['indexOf'](_0x4691d4);}for(let _0x1eda8c=0x0,_0x486ff2=_0x11b48f['length'];_0x1eda8c<_0x486ff2;_0x1eda8c++){_0x4b4f25+='%'+('00'+_0x11b48f['charCodeAt'](_0x1eda8c)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4b4f25);};_0x2851['MOnCcg']=_0x5ac0a8,_0x2851['HhDlYi']={},_0x2851['wHwkNy']=!![];}const _0x5dc24a=_0x2c2beb[0x0],_0x4c9e85=_0x28393d+_0x5dc24a,_0x3269a1=_0x2851['HhDlYi'][_0x4c9e85];return!_0x3269a1?(_0x2851f7=_0x2851['MOnCcg'](_0x2851f7),_0x2851['HhDlYi'][_0x4c9e85]=_0x2851f7):_0x2851f7=_0x3269a1,_0x2851f7;}(function(_0x1f16d2,_0x1f3bf9){const _0x41985b=_0x2851,_0x541a42=_0x1f16d2();while(!![]){try{const _0x39dfd7=parseInt(_0x41985b(0x17c))/0x1+-parseInt(_0x41985b(0x186))/0x2*(parseInt(_0x41985b(0x171))/0x3)+-parseInt(_0x41985b(0x18b))/0x4*(-parseInt(_0x41985b(0x16c))/0x5)+parseInt(_0x41985b(0x15d))/0x6*(-parseInt(_0x41985b(0x188))/0x7)+-parseInt(_0x41985b(0x175))/0x8+parseInt(_0x41985b(0x161))/0x9*(parseInt(_0x41985b(0x16e))/0xa)+parseInt(_0x41985b(0x16f))/0xb;if(_0x39dfd7===_0x1f3bf9)break;else _0x541a42['push'](_0x541a42['shift']());}catch(_0x2c5bb9){_0x541a42['push'](_0x541a42['shift']());}}}(_0x2c2b,0xcb035));import{By,until}from'selenium-webdriver';import{captureDesktopException}from'../sentry.js';import{marshalString,randSeq}from'../utils.js';import{buildCaptureUpdate}from'./captureStatus.js';function _0x2c2b(){const _0x435aab=['z2v0','y3nZ','cIaGicaGicaGicaGicaGicaGicaGicaGihzHCIbUid0Gzg9JDw1LBNqUCxvLCNLtzwXLy3rVCIGNAhrTBcCPoWOGicaGicaGicaGicaGicaGicaGicaGicbUlNnLDef0DhjPyNv0zsGND3rMq2fWDhvYzvjLCxvLC3rvCMWNlcbHCMD1BwvUDhnBmf0PoWOGicaGicaGicaGicaGicaGicaGicaGicbUlNnLDef0DhjPyNv0zsGND3rMq2fWDhvYzvjLCxvLC3rtAxPLCYCSigfYz3vTzw50C1SXxsK7cIaGicaGicaGicaGicaGicaGicaGicaGig4UC2v0qxr0CMLIDxrLkcD3Dgzdyxb0DxjLuMvXDwvZDfrOzw1LCYCSigfYz3vTzw50C1SYxsK7cIaGicaGicaGicaGicaGicaGicaGicaGig4UC2v0qxr0CMLIDxrLkcD3Dgzdyxb0DxjLuMvXDwvZDfvZzxiNlcbHCMD1BwvUDhnBm10PoWOGicaGicaGicaGicaGicaGicaGia','Bg9Nz2vY','nuviCvnQwG','y2fUy2vS','mta2mdi3nJbbEwjLy3u','mJm1nta1mZHLrun4BNa','CNvUq2fWDhvYzq','mta1q29xrwD6','y3vYCMvUDfjLCxvLC3rjza','zgvZA3rVCc1SB2nHBc11C2vY','D2fPDezVCKnHBMnLBgXLza','mte3mZCYmZjfuLjPsg4','CMvSzwfZzq','Cgf0Ahm','q2fWDhvYzvbYB2DYzxnZ','Bgf1BMnOsgvHzgXLC3m','C2f2zuzHAwXLza','CMv0DxjUigrVy3vTzw50lNf1zxj5u2vSzwn0B3iOj2H0BwWNks5NzxrbDhrYAwj1DguOj3D0zKnHChr1CMvtDgf0DxneyxrHjYK','ndq2nZC4zfzcwxvy','C3rHCNrdyxb0DxjL','BM93','y2fWDhvYzxm','CMv0DxjUigrVy3vTzw50lNjLywr5u3rHDgu','BgvUz3rO','AgvPz2H0','yNjVD3nLCLbVB2W','Aw50zxjYDxb0AwjSzvnSzwvW','q2fWDhvYzunVBxbSzxrLza','nZCWodzgD1Pfz1K','q2fWDhvYzsbHBhjLywr5igLUihbYB2DYzxnZ','ntGWm0TmAM9RDG','q2fWDhvYzsb0Aw1LzcbVDxqGywz0zxiGnYbTAw51DgvZ','yNvZEq','ndm5mJq1mMjRyuTqqG','DhLWzq','BwLU','cIaGicaGicaGicaGihzHCIbUid0Gzg9JDw1LBNqUCxvLCNLtzwXLy3rVCIGNAhrTBcCPoWOGicaGicaGicaGicbUlNnLDef0DhjPyNv0zsGND3rMq2fWDhvYzvjLCxvLC3rvCMWNlcbHCMD1BwvUDhnBmf0PoWOGicaGicaGicaGicbUlNnLDef0DhjPyNv0zsGND3rMq2fWDhvYzvjLCxvLC3rtAxPLCYCSigfYz3vTzw50C1SXxsK7cIaGicaGicaGicaGig4UC2v0qxr0CMLIDxrLkcD3Dgzdyxb0DxjLuMvXDwvZDfrOzw1LCYCSigfYz3vTzw50C1SYxsK7cIaGicaGicaGicaGig4UC2v0qxr0CMLIDxrLkcD3Dgzdyxb0DxjLuMvXDwvZDfvZzxiNlcbHCMD1BwvUDhnBm10PoWOGicaGicaGia','CMv0DxjUigrVy3vTzw50lNf1zxj5u2vSzwn0B3iOj2H0BwWNks5NzxrbDhrYAwj1DguOj3D0zKnHChr1CMvtDgf0DxmNkq','C3rYAw5NAwz5','AhrTBa','zgvZA3rVCc1SB2nHBc10B2TLBG','Axndyxb0DxjLuMvXDwvZDenHBMnLBgXLza','D2LKDgG','BMfTzq','rgvZA3rVCcbvC2vY','y2fWDhvYzq','AxncDxn5','nZK1mfDqDMTmAq','ChjVz3jLC3m','BwvZC2fNzq','D2fPDa','ow50DufRrW','C2f2zunHChr1CMvszxf1zxn0','rMfPBgvKihrVihjLywqGy2fWDhvYzsbZDgf0Dxm','zxHLy3v0zvnJCMLWDa','q2fWDhvYzuzHAwXLza','zMLUywXSEq','C2f2zunHChr1CMvvCgrHDgu'];_0x2c2b=function(){return _0x435aab;};return _0x2c2b();}import{checkDiskSpace}from'./chromeDownloader.js';const CAPTURE_TIMEOUT_MS=0x7*0x3c*0x3e8,POLL_INTERVAL_MS=0xbb8,CAPTURE_PAGE_LOAD_TIMEOUT_MS=0xafc8,CAPTURE_READY_STATE_TIMEOUT_MS=0xafc8,CAPTURE_STATUS_FAIL_STREAK=0x5,CAPTURE_CANCEL_POLL_MS=0x1f4;export class CaptureService{['browserPool'];[_0x4ff563(0x17f)];[_0x4ff563(0x177)];[_0x4ff563(0x16b)];['busy']=![];['currentRequestId']=null;constructor(_0x11b48f,_0x4b4f25,_0xd2cf84,_0x2177a3){const _0x32dd07=_0x4ff563;this[_0x32dd07(0x183)]=_0x11b48f,this[_0x32dd07(0x17f)]=_0x4b4f25,this[_0x32dd07(0x177)]=_0xd2cf84,this[_0x32dd07(0x16b)]=_0x2177a3;}[_0x4ff563(0x15c)](){const _0x2083a5=_0x4ff563;return this[_0x2083a5(0x18a)];}[_0x4ff563(0x16d)](_0x4691d4){const _0x17bab7=_0x4ff563;this[_0x17bab7(0x172)]===_0x4691d4&&(this[_0x17bab7(0x172)]=null);}async[_0x4ff563(0x17d)](_0xfde13b,_0x1eda8c,_0x486ff2){const _0xdb5493=_0x4ff563;if(this['busy'])throw new Error(_0xdb5493(0x187));checkDiskSpace(this[_0xdb5493(0x177)],0x1f4*0x400*0x400);const _0x5a72f7=randSeq(0x14);this['busy']=!![],this['currentRequestId']=_0x5a72f7;const _0x2652d5=_0x1eda8c[0x0],_0x540b55=_0x486ff2[0x0];return this[_0xdb5493(0x17f)]['saveCaptureRequest'](_0x5a72f7,_0xfde13b,{'type':_0xdb5493(0x178),'data':marshalString({'total':_0x1eda8c['length']*_0x486ff2[_0xdb5493(0x181)],'current':0x0,'width':_0x2652d5?.[_0xdb5493(0x158)]??0x0,'height':_0x2652d5?.[_0xdb5493(0x182)]??0x0,'sizeName':_0x2652d5?.[_0xdb5493(0x159)]??'','theme':_0x540b55?.[_0xdb5493(0x159)]??''})}),void this[_0xdb5493(0x170)](_0xfde13b,_0x1eda8c,_0x486ff2,_0x5a72f7)[_0xdb5493(0x166)](()=>{this['busy']=![],this['currentRequestId']=null;}),{'requestId':_0x5a72f7};}async['runCapture'](_0x55a525,_0x5c6ca5,_0x2bda4c,_0x23e3bb){const _0x3698cc=_0x4ff563;let _0x538859=null;try{_0x538859=await this[_0x3698cc(0x183)][_0x3698cc(0x179)](),await this[_0x3698cc(0x15b)](_0x538859,_0x55a525,_0x5c6ca5,_0x2bda4c,_0x23e3bb);}catch(_0x345543){const _0x5cc4a3=_0x345543 instanceof Error?_0x345543['message']:String(_0x345543);this[_0x3698cc(0x17a)](_0x23e3bb,_0x55a525,_0x5cc4a3),this[_0x3698cc(0x16b)]['error']({'err':_0x345543,'requestId':_0x23e3bb},'capture_failed'),captureDesktopException(_0x345543,{'requestId':_0x23e3bb,'url':_0x55a525,'phase':_0x3698cc(0x15b)});}finally{_0x538859&&await this[_0x3698cc(0x183)][_0x3698cc(0x176)](_0x538859);}}async['capture'](_0x22b86f,_0x48c69f,_0x47830b,_0x560568,_0x2b5d6b){const _0x7d43e4=_0x4ff563,_0x23203a={'externalId':_0x7d43e4(0x173),'name':_0x7d43e4(0x15a),'photoUrl':'','token':_0x7d43e4(0x156)};try{await _0x22b86f[_0x7d43e4(0x168)](_0x48c69f);}catch(_0x10084b){const _0x46862b=_0x10084b instanceof Error?_0x10084b[_0x7d43e4(0x15f)]:String(_0x10084b);this[_0x7d43e4(0x17a)](_0x2b5d6b,_0x48c69f,_0x46862b);return;}if(await this[_0x7d43e4(0x174)](_0x2b5d6b))return;try{await _0x22b86f[_0x7d43e4(0x160)](until['elementLocated'](By[_0x7d43e4(0x169)](_0x7d43e4(0x155))),CAPTURE_PAGE_LOAD_TIMEOUT_MS),await _0x22b86f['wait'](async()=>{const _0x30794c=_0x7d43e4,_0x8bd9a=await _0x22b86f[_0x30794c(0x164)](_0x30794c(0x180));return _0x8bd9a==='complete';},CAPTURE_READY_STATE_TIMEOUT_MS);}catch(_0x1b93ad){const _0x2029c9=_0x1b93ad instanceof Error?_0x1b93ad['message']:String(_0x1b93ad);this['saveFailed'](_0x2b5d6b,_0x48c69f,'Page\x20load\x20timed\x20out:\x20'+_0x2029c9);return;}await _0x22b86f[_0x7d43e4(0x164)](_0x7d43e4(0x18e),_0x48c69f,JSON[_0x7d43e4(0x154)](_0x47830b),JSON[_0x7d43e4(0x154)](_0x560568),JSON[_0x7d43e4(0x154)](_0x23203a));const _0x5798cb=Date[_0x7d43e4(0x17e)]();let _0x23ef9c=![],_0x695308=0x0;while(Date[_0x7d43e4(0x17e)]()-_0x5798cb<CAPTURE_TIMEOUT_MS){if(await this[_0x7d43e4(0x174)](_0x2b5d6b))return;const _0x374664=await _0x22b86f[_0x7d43e4(0x164)](_0x7d43e4(0x18f)),_0x5e94cf=await _0x22b86f['executeScript'](_0x7d43e4(0x17b));if(!_0x374664){_0x695308+=0x1;if(_0x695308>=CAPTURE_STATUS_FAIL_STREAK){if(_0x23ef9c){this[_0x7d43e4(0x17a)](_0x2b5d6b,_0x48c69f,_0x7d43e4(0x163));return;}await _0x22b86f[_0x7d43e4(0x164)](_0x7d43e4(0x16a),_0x48c69f,JSON[_0x7d43e4(0x154)](_0x47830b),JSON[_0x7d43e4(0x154)](_0x560568),JSON[_0x7d43e4(0x154)](_0x23203a)),_0x23ef9c=!![],_0x695308=0x0;}if(await this[_0x7d43e4(0x184)](POLL_INTERVAL_MS,_0x2b5d6b))return;continue;}_0x695308=0x0;switch(_0x374664){case'complete':if(this[_0x7d43e4(0x167)](_0x2b5d6b,_0x48c69f,buildCaptureUpdate('CaptureCompleted',_0x5e94cf)))return;break;case'error':if(this[_0x7d43e4(0x167)](_0x2b5d6b,_0x48c69f,buildCaptureUpdate(_0x7d43e4(0x165),_0x5e94cf)))return;break;case _0x7d43e4(0x15e):this[_0x7d43e4(0x167)](_0x2b5d6b,_0x48c69f,buildCaptureUpdate('CaptureProgress',_0x5e94cf));break;default:break;}if(await this[_0x7d43e4(0x184)](POLL_INTERVAL_MS,_0x2b5d6b))return;}this['saveFailed'](_0x2b5d6b,_0x48c69f,_0x7d43e4(0x189));}[_0x4ff563(0x167)](_0x5c4ca2,_0x1effa8,_0x95a885){const _0x112187=_0x4ff563;if(this[_0x112187(0x17f)][_0x112187(0x157)](_0x5c4ca2))return!![];return this[_0x112187(0x17f)][_0x112187(0x162)](_0x5c4ca2,_0x1effa8,_0x95a885),_0x95a885['type']===_0x112187(0x185)||_0x95a885[_0x112187(0x18c)]===_0x112187(0x165);}[_0x4ff563(0x17a)](_0x2bdd33,_0x38ed5d,_0x5b0d18){const _0x4a965f=_0x4ff563;if(this[_0x4a965f(0x17f)]['isCaptureRequestCancelled'](_0x2bdd33))return;this[_0x4a965f(0x17f)][_0x4a965f(0x162)](_0x2bdd33,_0x38ed5d,{'type':_0x4a965f(0x165),'data':marshalString({'url':_0x38ed5d,'message':_0x5b0d18})});}async[_0x4ff563(0x174)](_0x53fe57){const _0x36ebe5=_0x4ff563;return this[_0x36ebe5(0x17f)]['isCaptureRequestCancelled'](_0x53fe57);}async[_0x4ff563(0x184)](_0x495d79,_0x376a0e){const _0x988f6e=_0x4ff563,_0xa13dfd=Date[_0x988f6e(0x17e)]();while(Date['now']()-_0xa13dfd<_0x495d79){if(this[_0x988f6e(0x17f)][_0x988f6e(0x157)](_0x376a0e))return!![];const _0x5a1031=_0x495d79-(Date['now']()-_0xa13dfd);if(_0x5a1031<=0x0)break;await sleep(Math[_0x988f6e(0x18d)](CAPTURE_CANCEL_POLL_MS,_0x5a1031));}return![];}}function sleep(_0x376b38){return new Promise(_0x521d56=>setTimeout(_0x521d56,_0x376b38));}
@@ -0,0 +1,7 @@
1
+ type CaptureUpdatePayload = {
2
+ type: 'CaptureProgress' | 'CaptureCompleted' | 'CaptureFailed';
3
+ data: string;
4
+ };
5
+ export declare function normalizeCaptureStatusData(raw: unknown): string;
6
+ export declare function buildCaptureUpdate(type: CaptureUpdatePayload['type'], rawData: unknown): CaptureUpdatePayload;
7
+ export {};
@@ -0,0 +1 @@
1
+ (function(_0x3d99a9,_0x27d91f){const _0xa0042a=_0x4ce0,_0x51c46a=_0x3d99a9();while(!![]){try{const _0x52c8f1=parseInt(_0xa0042a(0x1b0))/0x1+-parseInt(_0xa0042a(0x1a8))/0x2*(-parseInt(_0xa0042a(0x1af))/0x3)+parseInt(_0xa0042a(0x1a7))/0x4+-parseInt(_0xa0042a(0x1a5))/0x5+-parseInt(_0xa0042a(0x1ab))/0x6*(-parseInt(_0xa0042a(0x1ac))/0x7)+-parseInt(_0xa0042a(0x1ae))/0x8+-parseInt(_0xa0042a(0x1a0))/0x9;if(_0x52c8f1===_0x27d91f)break;else _0x51c46a['push'](_0x51c46a['shift']());}catch(_0xdb2ec3){_0x51c46a['push'](_0x51c46a['shift']());}}}(_0x326a,0xb86b4));import{marshalString}from'../utils.js';function _0x326a(){const _0x510978=['oduXndeWmNbjCwfAzW','n2LozLvRCq','C3rYAw5N','odG1mZe4nerhBLP4wa','nZi5svzOrMzy','mtqWoduWmezdDNDYyq','mtiWnZK4mtHrv3rStxK','Bwv0ywrHDge','B2jQzwn0','CgfYC2u','AxnbCNjHEq','nJmZmteXnu9zvgPuzW','y2fWDhvYzq','ntm2ntq5mLjnugz3zW','mJq4mKX4vgTjvW','DhjPBq','C3rYAw5NAwz5'];_0x326a=function(){return _0x510978;};return _0x326a();}export function normalizeCaptureStatusData(_0x146630){const _0x13dbbf=_0x4ce0;if(_0x146630===null||_0x146630===undefined)return'{}';let _0x31d25b=_0x146630;if(typeof _0x146630==='string'){if(_0x146630[_0x13dbbf(0x1a9)]()==='')return'{}';try{_0x31d25b=JSON[_0x13dbbf(0x1a3)](_0x146630);}catch{return _0x146630;}}if(typeof _0x31d25b!==_0x13dbbf(0x1a2)||_0x31d25b===null||Array[_0x13dbbf(0x1a4)](_0x31d25b))return typeof _0x146630===_0x13dbbf(0x1ad)?_0x146630:marshalString(_0x146630);const _0x20467e=_0x31d25b;return _0x20467e['capture']!==undefined&&_0x20467e[_0x13dbbf(0x1a1)]===undefined&&(_0x20467e[_0x13dbbf(0x1a1)]=_0x20467e[_0x13dbbf(0x1a6)],delete _0x20467e[_0x13dbbf(0x1a6)]),JSON[_0x13dbbf(0x1aa)](_0x20467e);}function _0x4ce0(_0x1cea3a,_0x4c7fd3){_0x1cea3a=_0x1cea3a-0x1a0;const _0x326a9f=_0x326a();let _0x4ce09c=_0x326a9f[_0x1cea3a];if(_0x4ce0['MckQwk']===undefined){var _0x132ad0=function(_0x58ec1f){const _0x2c01e5='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x146630='',_0x31d25b='';for(let _0x20467e=0x0,_0x40afdb,_0x32e650,_0x4572f9=0x0;_0x32e650=_0x58ec1f['charAt'](_0x4572f9++);~_0x32e650&&(_0x40afdb=_0x20467e%0x4?_0x40afdb*0x40+_0x32e650:_0x32e650,_0x20467e++%0x4)?_0x146630+=String['fromCharCode'](0xff&_0x40afdb>>(-0x2*_0x20467e&0x6)):0x0){_0x32e650=_0x2c01e5['indexOf'](_0x32e650);}for(let _0x5c23df=0x0,_0x3934a7=_0x146630['length'];_0x5c23df<_0x3934a7;_0x5c23df++){_0x31d25b+='%'+('00'+_0x146630['charCodeAt'](_0x5c23df)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x31d25b);};_0x4ce0['CrdeeA']=_0x132ad0,_0x4ce0['rXSbEE']={},_0x4ce0['MckQwk']=!![];}const _0x15c80c=_0x326a9f[0x0],_0x159504=_0x1cea3a+_0x15c80c,_0x25eb82=_0x4ce0['rXSbEE'][_0x159504];return!_0x25eb82?(_0x4ce09c=_0x4ce0['CrdeeA'](_0x4ce09c),_0x4ce0['rXSbEE'][_0x159504]=_0x4ce09c):_0x4ce09c=_0x25eb82,_0x4ce09c;}export function buildCaptureUpdate(_0x40afdb,_0x32e650){return{'type':_0x40afdb,'data':normalizeCaptureStatusData(_0x32e650)};}
@@ -0,0 +1,21 @@
1
+ import type { ResolvedPaths } from '../config.js';
2
+ import type { Logger } from '../logger.js';
3
+ type ChromePlatform = 'win64' | 'mac-x64' | 'mac-arm64' | 'linux64';
4
+ declare function detectPlatform(): ChromePlatform;
5
+ declare function chromeBinaryName(platform: ChromePlatform): string;
6
+ declare function chromedriverBinaryName(platform: ChromePlatform): string;
7
+ export type ChromeInstallResult = {
8
+ chromePath: string;
9
+ chromedriverPath: string;
10
+ };
11
+ export declare function forceChromeUpdate(paths: ResolvedPaths, logger: Logger, overrides?: {
12
+ chromePath?: string | null;
13
+ chromedriverPath?: string | null;
14
+ }): Promise<ChromeInstallResult>;
15
+ export declare function ensureChromeInstalled(paths: ResolvedPaths, logger: Logger, overrides?: {
16
+ chromePath?: string | null;
17
+ chromedriverPath?: string | null;
18
+ }): Promise<ChromeInstallResult>;
19
+ export declare function ensureExtensionsCopied(paths: ResolvedPaths, logger: Logger): Promise<void>;
20
+ export declare function checkDiskSpace(paths: ResolvedPaths, minBytes: number): void;
21
+ export { detectPlatform, chromeBinaryName, chromedriverBinaryName };