From 5700ea0051d63df2e7a4f8089147d2421f7973c4 Mon Sep 17 00:00:00 2001 From: Hellings Date: Fri, 11 Sep 2026 23:59:05 -0400 Subject: [PATCH] main(init): Initial commit. --- .env | 7 + .gitignore | 19 + .gitmodules | 9 + .prettierrc | 11 + README.md | 3 + bun.lock | 724 +++++ clients/rust/Cargo.toml | 9 + clients/rust/src/lib.rs | 72 + clients/typescript/gapmind.ts | 71 + ginit.sh | 8 + go.mod | 3 + go.work | 8 + justfile | 22 + mindless | 1 + mindmount | 1 + nest-cli.json | 19 + package-lock.json | 2747 +++++++++++++++++ package.json | 52 + pnpm-workspace.yaml | 6 + scripts/generate-bindings.mjs | 250 ++ services/dht/dht_node.go | 294 ++ services/dht/go.mod | 3 + services/dht/main.go | 320 ++ services/dht/tracker.go | 80 + services/orchestra/.gitignore | 1 + services/orchestra/go.mod | 3 + services/orchestra/main.go | 451 +++ services/orchestra/orchestra.example.json | 62 + services/orchestra/service/daemon.go | 7 + services/orchestra/service/systemd.go | 145 + services/pathfinder/go.mod | 3 + services/pathfinder/main.go | 196 ++ services/replica/go.mod | 3 + services/replica/main.go | 79 + socmind | 1 + src/app.module.ts | 116 + src/dto.ts | 236 ++ src/main.ts | 47 + src/resolution.controller.ts | 751 +++++ src/services/account.service.ts | 84 + src/services/background-inventory.service.ts | 83 + src/services/banner.service.ts | 141 + src/services/calibration-collector.service.ts | 49 + src/services/dedup.util.ts | 55 + src/services/dht.service.ts | 118 + src/services/entities.ts | 189 ++ src/services/favicon.service.ts | 165 + src/services/geonames.service.ts | 78 + src/services/http.service.ts | 20 + src/services/live-feed.service.ts | 94 + src/services/ml-geolocation.service.ts | 181 ++ src/services/peer-relay.service.ts | 86 + src/services/providers.service.ts | 365 +++ src/services/registry/afrinic.service.ts | 12 + src/services/registry/apnic.service.ts | 12 + src/services/registry/arin.service.ts | 12 + src/services/registry/lacnic.service.ts | 12 + src/services/registry/registry.service.ts | 56 + src/services/registry/ripe.service.ts | 12 + src/services/resolution.service.ts | 199 ++ src/services/routing/bgp.service.ts | 32 + src/services/routing/ncc.service.ts | 18 + src/services/scan.gateway.ts | 33 + src/services/search-language.service.ts | 77 + src/services/sweep.service.ts | 347 +++ src/services/triangulation.service.ts | 209 ++ test/dedup.test.ts | 57 + test/expand.test.ts | 25 + test/ml-gate.test.ts | 34 + test/sweep.test.ts | 39 + tsconfig.build.json | 8 + tsconfig.build.tsbuildinfo | 1 + tsconfig.json | 21 + 73 files changed, 9764 insertions(+) create mode 100644 .env create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 .prettierrc create mode 100644 README.md create mode 100644 bun.lock create mode 100644 clients/rust/Cargo.toml create mode 100644 clients/rust/src/lib.rs create mode 100644 clients/typescript/gapmind.ts create mode 100755 ginit.sh create mode 100644 go.mod create mode 100644 go.work create mode 100644 justfile create mode 160000 mindless create mode 160000 mindmount create mode 100644 nest-cli.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pnpm-workspace.yaml create mode 100644 scripts/generate-bindings.mjs create mode 100644 services/dht/dht_node.go create mode 100644 services/dht/go.mod create mode 100644 services/dht/main.go create mode 100644 services/dht/tracker.go create mode 100644 services/orchestra/.gitignore create mode 100644 services/orchestra/go.mod create mode 100644 services/orchestra/main.go create mode 100644 services/orchestra/orchestra.example.json create mode 100644 services/orchestra/service/daemon.go create mode 100644 services/orchestra/service/systemd.go create mode 100644 services/pathfinder/go.mod create mode 100644 services/pathfinder/main.go create mode 100644 services/replica/go.mod create mode 100644 services/replica/main.go create mode 160000 socmind create mode 100644 src/app.module.ts create mode 100644 src/dto.ts create mode 100644 src/main.ts create mode 100644 src/resolution.controller.ts create mode 100644 src/services/account.service.ts create mode 100644 src/services/background-inventory.service.ts create mode 100644 src/services/banner.service.ts create mode 100644 src/services/calibration-collector.service.ts create mode 100644 src/services/dedup.util.ts create mode 100644 src/services/dht.service.ts create mode 100644 src/services/entities.ts create mode 100644 src/services/favicon.service.ts create mode 100644 src/services/geonames.service.ts create mode 100644 src/services/http.service.ts create mode 100644 src/services/live-feed.service.ts create mode 100644 src/services/ml-geolocation.service.ts create mode 100644 src/services/peer-relay.service.ts create mode 100644 src/services/providers.service.ts create mode 100644 src/services/registry/afrinic.service.ts create mode 100644 src/services/registry/apnic.service.ts create mode 100644 src/services/registry/arin.service.ts create mode 100644 src/services/registry/lacnic.service.ts create mode 100644 src/services/registry/registry.service.ts create mode 100644 src/services/registry/ripe.service.ts create mode 100644 src/services/resolution.service.ts create mode 100644 src/services/routing/bgp.service.ts create mode 100644 src/services/routing/ncc.service.ts create mode 100644 src/services/scan.gateway.ts create mode 100644 src/services/search-language.service.ts create mode 100644 src/services/sweep.service.ts create mode 100644 src/services/triangulation.service.ts create mode 100644 test/dedup.test.ts create mode 100644 test/expand.test.ts create mode 100644 test/ml-gate.test.ts create mode 100644 test/sweep.test.ts create mode 100644 tsconfig.build.json create mode 100644 tsconfig.build.tsbuildinfo create mode 100644 tsconfig.json diff --git a/.env b/.env new file mode 100644 index 0000000..5e23478 --- /dev/null +++ b/.env @@ -0,0 +1,7 @@ +MAXMIND_ACCOUNT_ID=1027646 +MAXMIND_LICENSE_KEY=https://download.maxmind.com/app/geoip_download_by_token?date=20260911&edition_id=GeoLite2-City-CSV&suffix=zip&token=v2.local.aD8lesxw-3-bc77b9_IDDKdEAqhHQ0H4O5ohC1dpy5J5UmGtim3s4bw7sYJAQBy0xd54tMuhprtebRU9PbCpBLslYS5YDXHTHUf3DByyjwgH_X7mBZpZ-UWsFsF4OUqopwA8Xog1g45e17uROIPvfzXAdfz6xH-WdgxUU8v0Pd8u3XiP4b8oRWh7jUQD50zg5jQUTIA + +PEER_API_TOKEN=4642627935 +GAPMIND_SSH_PASSWORD=4642627935 + +GAPMIND_API_KEY=EonEBmSwnKSN0dmjkgzN6AH825DqtuAjahmOwakWIiw \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4b14af2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +dist/ +node_modules/ +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +services/dht/dht +services/orchestra/orchestra +services/pathfinder/pathfinder +services/replica/replica + +HelveticaWorld.txt +gapmind.sqlite + +.agents/ + +pnpm-lock.yaml \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..da9d9ed --- /dev/null +++ b/.gitmodules @@ -0,0 +1,9 @@ +[submodule "socmind"] + path = socmind + url = https://ai.crit.rip/mind/socmind +[submodule "mindmount"] + path = mindmount + url = https://ai.crit.rip/mind/mindmount +[submodule "mindless"] + path = mindless + url = https://ai.crit.rip/mind/mindless diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..03b3a20 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,11 @@ +{ + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true, + "trailingComma": "all", + "bracketSpacing": true, + "arrowParens": "always", + "endOfLine": "lf" +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..7ddaef3 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Gapmind + +IP resolution service. diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..06f6abc --- /dev/null +++ b/bun.lock @@ -0,0 +1,724 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "gapmind", + "dependencies": { + "@nestjs/common": "^12.0.1", + "@nestjs/core": "^12.0.1", + "@nestjs/platform-express": "^12.0.1", + "@nestjs/platform-fastify": "^12.0.1", + "@nestjs/platform-socket.io": "^12.0.1", + "@nestjs/swagger": "^12.0.1", + "@nestjs/typeorm": "^12.0.1", + "@nestjs/websockets": "^12.0.1", + "@tensorflow/tfjs": "^4.22.0", + "dotenv": "^17.4.2", + "nodemon": "^3.1.14", + "reflect-metadata": "^0.2.2", + "sharp": "^0.35.4", + "socket.io": "^4.8.3", + "sql.js": "^1.14.2", + "typeorm": "^1.1.1", + }, + "devDependencies": { + "tsx": "^4.23.13", + }, + }, + }, + "trustedDependencies": [ + "esbuild", + "core-js", + "@scarf/scarf", + ], + "packages": { + "@borewit/text-codec": ["@borewit/text-codec@0.2.2", "", {}, "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ=="], + + "@emnapi/runtime": ["@emnapi/runtime@1.11.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.28.2", "", { "os": "android", "cpu": "arm" }, "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.2", "", { "os": "android", "cpu": "arm64" }, "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.28.2", "", { "os": "android", "cpu": "x64" }, "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.2", "", { "os": "linux", "cpu": "arm" }, "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.2", "", { "os": "linux", "cpu": "x64" }, "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.2", "", { "os": "none", "cpu": "arm64" }, "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.2", "", { "os": "none", "cpu": "x64" }, "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw=="], + + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.2", "", { "os": "none", "cpu": "arm64" }, "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g=="], + + "@fastify/ajv-compiler": ["@fastify/ajv-compiler@4.0.6", "", { "dependencies": { "ajv": "^8.12.0", "ajv-formats": "^3.0.1", "fast-uri": "^4.0.0" } }, "sha512-NtuzM0SfaMJbGlnjr9LWQUN5LzgSrbB8tf/wRZNas+4E1O/Nmzl53e7ruT61HDZyRCJGC6FxIogmNZO1c5ETBA=="], + + "@fastify/cors": ["@fastify/cors@11.3.0", "", { "dependencies": { "fastify-plugin": "^6.0.0", "toad-cache": "^3.7.0" } }, "sha512-ggQGua+xHv1MvePbPr0v//xLYEsCXbWspquXCJS9Ot5YoRXq8J8ZWzHnxDBVnbtXosvistXo6LtNzOJswf64Fw=="], + + "@fastify/error": ["@fastify/error@4.2.0", "", {}, "sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ=="], + + "@fastify/fast-json-stringify-compiler": ["@fastify/fast-json-stringify-compiler@5.1.0", "", { "dependencies": { "fast-json-stringify": "^7.0.0" } }, "sha512-PxcYtKLbQ8Z+yApiqjK8FwxIwvEj38k2OiLc17u8dkJSlmfi2wHHPaSnaoqBPQqtvF8YVsDgDpP2snDCfFrpfw=="], + + "@fastify/formbody": ["@fastify/formbody@9.0.0", "", { "dependencies": { "fast-querystring": "^1.1.2", "fastify-plugin": "^6.0.0" } }, "sha512-T/af26CSrUARBCvsEmv+DJLPfZlrRKESzqironxP1j7qzuLyKcoZtj6MuTGShuKx1THXugoie2oFbUJxXfGFzA=="], + + "@fastify/forwarded": ["@fastify/forwarded@3.0.2", "", {}, "sha512-NE8HgKLgYejV9lDpqkEFaDKMLYelJBVfHekhB0UKvX0ghagXRJqg68feg8er1NPXxG4N9i6vPxzt8E+3wHfcmA=="], + + "@fastify/merge-json-schemas": ["@fastify/merge-json-schemas@0.2.1", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A=="], + + "@fastify/proxy-addr": ["@fastify/proxy-addr@5.1.0", "", { "dependencies": { "@fastify/forwarded": "^3.0.0", "ipaddr.js": "^2.1.0" } }, "sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw=="], + + "@img/colour": ["@img/colour@1.1.0", "", {}, "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ=="], + + "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.35.4", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.3.3" }, "os": "darwin", "cpu": "arm64" }, "sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA=="], + + "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.35.4", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.3.3" }, "os": "darwin", "cpu": "x64" }, "sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw=="], + + "@img/sharp-freebsd-wasm32": ["@img/sharp-freebsd-wasm32@0.35.4", "", { "dependencies": { "@img/sharp-wasm32": "0.35.4" }, "os": "freebsd" }, "sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA=="], + + "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.3.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg=="], + + "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.3.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw=="], + + "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.3.3", "", { "os": "linux", "cpu": "arm" }, "sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA=="], + + "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.3.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A=="], + + "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.3.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w=="], + + "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.3.3", "", { "os": "linux", "cpu": "none" }, "sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ=="], + + "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.3.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q=="], + + "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.3.3", "", { "os": "linux", "cpu": "x64" }, "sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA=="], + + "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.3.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw=="], + + "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.3.3", "", { "os": "linux", "cpu": "x64" }, "sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw=="], + + "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.35.4", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.3.3" }, "os": "linux", "cpu": "arm" }, "sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A=="], + + "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.35.4", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.3.3" }, "os": "linux", "cpu": "arm64" }, "sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ=="], + + "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.35.4", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.3.3" }, "os": "linux", "cpu": "ppc64" }, "sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ=="], + + "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.35.4", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.3.3" }, "os": "linux", "cpu": "none" }, "sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA=="], + + "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.35.4", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.3.3" }, "os": "linux", "cpu": "s390x" }, "sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ=="], + + "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.35.4", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.3.3" }, "os": "linux", "cpu": "x64" }, "sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA=="], + + "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.35.4", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.3.3" }, "os": "linux", "cpu": "arm64" }, "sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA=="], + + "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.35.4", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.3.3" }, "os": "linux", "cpu": "x64" }, "sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg=="], + + "@img/sharp-wasm32": ["@img/sharp-wasm32@0.35.4", "", { "dependencies": { "@emnapi/runtime": "^1.11.3" } }, "sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA=="], + + "@img/sharp-webcontainers-wasm32": ["@img/sharp-webcontainers-wasm32@0.35.4", "", { "dependencies": { "@img/sharp-wasm32": "0.35.4" }, "cpu": "none" }, "sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA=="], + + "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.35.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw=="], + + "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.35.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw=="], + + "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.35.4", "", { "os": "win32", "cpu": "x64" }, "sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg=="], + + "@lukeed/csprng": ["@lukeed/csprng@1.1.0", "", {}, "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA=="], + + "@microsoft/tsdoc": ["@microsoft/tsdoc@0.16.0", "", {}, "sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA=="], + + "@nestjs/common": ["@nestjs/common@12.0.1", "", { "dependencies": { "@standard-schema/spec": "1.1.0", "file-type": "22.0.2", "iterare": "1.2.1", "load-esm": "1.0.3", "tslib": "2.8.1", "uid": "2.0.2" }, "peerDependencies": { "class-transformer": ">=0.4.1", "class-validator": ">=0.13.2", "reflect-metadata": "^0.1.12 || ^0.2.0", "rxjs": "^7.1.0" }, "optionalPeers": ["class-transformer", "class-validator"] }, "sha512-v0zTaRCTV2K2xSnb3GnJoQKtaR6VxouJtm+P2gpr5w61dlXeWpXl1WVknCSzUqx2QwTV10tBkHETxvQvkf2Exg=="], + + "@nestjs/core": ["@nestjs/core@12.0.1", "", { "dependencies": { "fast-safe-stringify": "2.1.1", "iterare": "1.2.1", "path-to-regexp": "8.4.2", "tslib": "2.8.1", "uid": "2.0.2" }, "peerDependencies": { "@nestjs/common": "^12.0.0", "@nestjs/microservices": "^12.0.0", "@nestjs/platform-express": "^12.0.0", "@nestjs/websockets": "^12.0.0", "reflect-metadata": "^0.1.12 || ^0.2.0", "rxjs": "^7.1.0" }, "optionalPeers": ["@nestjs/microservices", "@nestjs/websockets"] }, "sha512-rU6tAi8vDdyzHgN0iW0J4UJvziroOqzHqzlqL7phOSPizaXVEePfv+OUOsdJEOh0Qd14mslc3udOheLrAEcZow=="], + + "@nestjs/mapped-types": ["@nestjs/mapped-types@12.0.0", "", { "peerDependencies": { "@nestjs/common": "^10.0.0 || ^11.0.0 || ^12.0.0", "class-transformer": "^0.4.0 || ^0.5.0", "class-validator": "^0.13.0 || ^0.14.0 || ^0.15.0", "reflect-metadata": "^0.1.12 || ^0.2.0" }, "optionalPeers": ["class-transformer", "class-validator"] }, "sha512-aX7lxZcqXldtnSr0bgT2ZPQvpTpIwBMW1GMX29o4s3q02vmq6JoTYuPW0GwYXa8BiFMRX7WbGZVDA703pNqOMQ=="], + + "@nestjs/platform-express": ["@nestjs/platform-express@12.0.1", "", { "dependencies": { "cors": "2.8.6", "express": "5.2.1", "multer": "2.2.0", "path-to-regexp": "8.4.2", "tslib": "2.8.1" }, "peerDependencies": { "@nestjs/common": "^12.0.0", "@nestjs/core": "^12.0.0" } }, "sha512-nF8bRgROptMyixYBfiJUAsjj2o9k13zxAjUKYaqHTPk8mTSd+gk7hXz6NykXNrfHWmMEYC9RttQlMUdMHNTbuA=="], + + "@nestjs/platform-fastify": ["@nestjs/platform-fastify@12.0.1", "", { "dependencies": { "@fastify/cors": "11.3.0", "@fastify/formbody": "9.0.0", "fast-querystring": "1.1.2", "fastify": "5.12.1", "fastify-plugin": "6.0.0", "find-my-way": "9.9.0", "light-my-request": "6.6.0", "path-to-regexp": "8.4.2", "reusify": "1.1.0", "tslib": "2.8.1" }, "peerDependencies": { "@fastify/static": "^10.1.2", "@fastify/view": "^10.0.0 || ^11.0.0 || ^12.0.0", "@nestjs/common": "^12.0.0", "@nestjs/core": "^12.0.0" }, "optionalPeers": ["@fastify/static", "@fastify/view"] }, "sha512-LqR0kOahuZAei3wJK+SJfHc9o9H/OSdA7gMSMaW+Kfjy6GtpTNPdfpHeq3w2PuiPgUGk2QIX/dqUAYntJ5arSw=="], + + "@nestjs/platform-socket.io": ["@nestjs/platform-socket.io@12.0.1", "", { "dependencies": { "socket.io": "4.8.3", "tslib": "2.8.1" }, "peerDependencies": { "@nestjs/common": "^12.0.0", "@nestjs/websockets": "^12.0.0", "rxjs": "^7.1.0" } }, "sha512-1lNTp0tjlRp+5rMX5b3G0l9bt1CH4ejH4ZMn7Qi7dJc536UpweNVWmL5zm8EHFN71Q3CxP1PbqL6aw+QrtS+8w=="], + + "@nestjs/swagger": ["@nestjs/swagger@12.0.1", "", { "dependencies": { "@microsoft/tsdoc": "0.16.0", "@nestjs/mapped-types": "12.0.0", "@standard-schema/spec": "1.1.0", "es-toolkit": "1.51.0", "js-yaml": "5.4.1", "path-to-regexp": "8.4.2", "swagger-ui-dist": "5.32.14" }, "peerDependencies": { "@fastify/static": "^8.0.0 || ^9.0.0 || ^10.0.0", "@nestjs/common": "^12.0.0", "@nestjs/core": "^12.0.0", "class-transformer": "*", "class-validator": "*", "reflect-metadata": "^0.1.12 || ^0.2.0" }, "optionalPeers": ["@fastify/static", "class-transformer", "class-validator"] }, "sha512-fQ0WyutSSHedO9HzSkOFKFaRygYNGBno5EggcZljs+KL8tHzPPTO5oyJpaf3BoOKFGGsN/0B13EbIpH2pkPx8g=="], + + "@nestjs/typeorm": ["@nestjs/typeorm@12.0.1", "", { "peerDependencies": { "@nestjs/common": "^10.0.0 || ^11.0.0 || ^12.0.0", "@nestjs/core": "^10.0.0 || ^11.0.0 || ^12.0.0", "reflect-metadata": "^0.1.13 || ^0.2.0", "rxjs": "^7.2.0", "typeorm": "^0.3.0 || ^1.0.0-dev" } }, "sha512-7dsdaD/PSiwCAAhv78+ScS3e6lW41BOMZ8LB7/v5p/hovSUc1wUH1DBXhLgqYx0ChXYLzDybBIADN6lvBhiM6w=="], + + "@nestjs/websockets": ["@nestjs/websockets@12.0.1", "", { "dependencies": { "iterare": "1.2.1", "object-hash": "3.0.0", "tslib": "2.8.1" }, "peerDependencies": { "@nestjs/common": "^12.0.0", "@nestjs/core": "^12.0.0", "@nestjs/platform-socket.io": "^12.0.0", "reflect-metadata": "^0.1.12 || ^0.2.0", "rxjs": "^7.1.0" }, "optionalPeers": ["@nestjs/platform-socket.io"] }, "sha512-TxyfPg726saaaRihjBc5izQjQ7bRV1VJrZiEH9KO1LztJQyFbMDVztUI8ZXRgMYDuv8ZY0ENUaDb2JkpCkny0Q=="], + + "@pinojs/redact": ["@pinojs/redact@0.4.0", "", {}, "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg=="], + + "@scarf/scarf": ["@scarf/scarf@1.4.0", "", {}, "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ=="], + + "@socket.io/component-emitter": ["@socket.io/component-emitter@3.1.2", "", {}, "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA=="], + + "@sqltools/formatter": ["@sqltools/formatter@1.2.5", "", {}, "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw=="], + + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + + "@tensorflow/tfjs": ["@tensorflow/tfjs@4.22.0", "", { "dependencies": { "@tensorflow/tfjs-backend-cpu": "4.22.0", "@tensorflow/tfjs-backend-webgl": "4.22.0", "@tensorflow/tfjs-converter": "4.22.0", "@tensorflow/tfjs-core": "4.22.0", "@tensorflow/tfjs-data": "4.22.0", "@tensorflow/tfjs-layers": "4.22.0", "argparse": "^1.0.10", "chalk": "^4.1.0", "core-js": "3.29.1", "regenerator-runtime": "^0.13.5", "yargs": "^16.0.3" }, "bin": { "tfjs-custom-module": "dist/tools/custom_module/cli.js" } }, "sha512-0TrIrXs6/b7FLhLVNmfh8Sah6JgjBPH4mZ8JGb7NU6WW+cx00qK5BcAZxw7NCzxj6N8MRAIfHq+oNbPUNG5VAg=="], + + "@tensorflow/tfjs-backend-cpu": ["@tensorflow/tfjs-backend-cpu@4.22.0", "", { "dependencies": { "@types/seedrandom": "^2.4.28", "seedrandom": "^3.0.5" }, "peerDependencies": { "@tensorflow/tfjs-core": "4.22.0" } }, "sha512-1u0FmuLGuRAi8D2c3cocHTASGXOmHc/4OvoVDENJayjYkS119fcTcQf4iHrtLthWyDIPy3JiPhRrZQC9EwnhLw=="], + + "@tensorflow/tfjs-backend-webgl": ["@tensorflow/tfjs-backend-webgl@4.22.0", "", { "dependencies": { "@tensorflow/tfjs-backend-cpu": "4.22.0", "@types/offscreencanvas": "~2019.3.0", "@types/seedrandom": "^2.4.28", "seedrandom": "^3.0.5" }, "peerDependencies": { "@tensorflow/tfjs-core": "4.22.0" } }, "sha512-H535XtZWnWgNwSzv538czjVlbJebDl5QTMOth4RXr2p/kJ1qSIXE0vZvEtO+5EC9b00SvhplECny2yDewQb/Yg=="], + + "@tensorflow/tfjs-converter": ["@tensorflow/tfjs-converter@4.22.0", "", { "peerDependencies": { "@tensorflow/tfjs-core": "4.22.0" } }, "sha512-PT43MGlnzIo+YfbsjM79Lxk9lOq6uUwZuCc8rrp0hfpLjF6Jv8jS84u2jFb+WpUeuF4K33ZDNx8CjiYrGQ2trQ=="], + + "@tensorflow/tfjs-core": ["@tensorflow/tfjs-core@4.22.0", "", { "dependencies": { "@types/long": "^4.0.1", "@types/offscreencanvas": "~2019.7.0", "@types/seedrandom": "^2.4.28", "@webgpu/types": "0.1.38", "long": "4.0.0", "node-fetch": "~2.6.1", "seedrandom": "^3.0.5" } }, "sha512-LEkOyzbknKFoWUwfkr59vSB68DMJ4cjwwHgicXN0DUi3a0Vh1Er3JQqCI1Hl86GGZQvY8ezVrtDIvqR1ZFW55A=="], + + "@tensorflow/tfjs-data": ["@tensorflow/tfjs-data@4.22.0", "", { "dependencies": { "@types/node-fetch": "^2.1.2", "node-fetch": "~2.6.1", "string_decoder": "^1.3.0" }, "peerDependencies": { "@tensorflow/tfjs-core": "4.22.0", "seedrandom": "^3.0.5" } }, "sha512-dYmF3LihQIGvtgJrt382hSRH4S0QuAp2w1hXJI2+kOaEqo5HnUPG0k5KA6va+S1yUhx7UBToUKCBHeLHFQRV4w=="], + + "@tensorflow/tfjs-layers": ["@tensorflow/tfjs-layers@4.22.0", "", { "peerDependencies": { "@tensorflow/tfjs-core": "4.22.0" } }, "sha512-lybPj4ZNj9iIAPUj7a8ZW1hg8KQGfqWLlCZDi9eM/oNKCCAgchiyzx8OrYoWmRrB+AM6VNEeIT+2gZKg5ReihA=="], + + "@tokenizer/inflate": ["@tokenizer/inflate@0.4.1", "", { "dependencies": { "debug": "^4.4.3", "token-types": "^6.1.1" } }, "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA=="], + + "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], + + "@types/cors": ["@types/cors@2.8.19", "", { "dependencies": { "@types/node": "*" } }, "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg=="], + + "@types/long": ["@types/long@4.0.2", "", {}, "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="], + + "@types/node": ["@types/node@22.20.2", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-xlvWf4Vs9n1PEVYwP1n4vvG07M6y8WgvJ2t0vbrWTmijsIHp1cS+uJ2kMIRdY3nHZK0nCYKrPeD171+SzF4/zw=="], + + "@types/node-fetch": ["@types/node-fetch@2.6.13", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.4" } }, "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw=="], + + "@types/offscreencanvas": ["@types/offscreencanvas@2019.3.0", "", {}, "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q=="], + + "@types/seedrandom": ["@types/seedrandom@2.4.34", "", {}, "sha512-ytDiArvrn/3Xk6/vtylys5tlY6eo7Ane0hvcx++TKo6RxQXuVfW0AF/oeWqAj9dN29SyhtawuXstgmPlwNcv/A=="], + + "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], + + "@webgpu/types": ["@webgpu/types@0.1.38", "", {}, "sha512-7LrhVKz2PRh+DD7+S+PVaFd5HxaWQvoMqBbsV9fNJO1pjUs1P8bM2vQVNfk+3URTqbuTI7gkXi0rfsN0IadoBA=="], + + "abstract-logging": ["abstract-logging@2.0.1", "", {}, "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA=="], + + "accepts": ["accepts@1.3.8", "", { "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="], + + "ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], + + "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "ansis": ["ansis@4.3.1", "", {}, "sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA=="], + + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "append-field": ["append-field@1.0.0", "", {}, "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw=="], + + "argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], + + "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + + "atomic-sleep": ["atomic-sleep@1.0.0", "", {}, "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="], + + "avvio": ["avvio@9.3.0", "", { "dependencies": { "@fastify/error": "^4.0.0", "fastq": "^1.17.1" } }, "sha512-g2tQ7LE7oOSqDfwEm3M+ZCMTJc7KiZCdJ4UwyZJb5ckTKyYu50OYmvv0mCFXPuYXoM4zkSt8zM9XQ9KCvxA74A=="], + + "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "base64id": ["base64id@2.0.0", "", {}, "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="], + + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], + + "body-parser": ["body-parser@2.3.0", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^2.0.0", "debug": "^4.4.3", "http-errors": "^2.0.1", "iconv-lite": "^0.7.2", "on-finished": "^2.4.1", "qs": "^6.15.2", "raw-body": "^3.0.2", "type-is": "^2.1.0" } }, "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw=="], + + "brace-expansion": ["brace-expansion@5.0.9", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + + "busboy": ["busboy@1.6.0", "", { "dependencies": { "streamsearch": "^1.1.0" } }, "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA=="], + + "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + + "cliui": ["cliui@7.0.4", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], + + "concat-stream": ["concat-stream@2.0.0", "", { "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.0.2", "typedarray": "^0.0.6" } }, "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A=="], + + "content-disposition": ["content-disposition@1.1.0", "", {}, "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g=="], + + "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], + + "cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], + + "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], + + "core-js": ["core-js@3.29.1", "", {}, "sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw=="], + + "cors": ["cors@2.8.6", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="], + + "dayjs": ["dayjs@1.11.23", "", {}, "sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "dedent": ["dedent@1.7.2", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA=="], + + "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], + + "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], + + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + + "dotenv": ["dotenv@17.4.2", "", {}, "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], + + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], + + "engine.io": ["engine.io@6.6.10", "", { "dependencies": { "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "@types/ws": "^8.5.12", "accepts": "~1.3.4", "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.4.1", "engine.io-parser": "~5.2.1", "ws": "~8.21.0" } }, "sha512-9/lX2bdlizlCXMHRMOIm03VBQHQYC7VvydcxtTAUJRxNW1QzM/2PMFSmr6h/lCiMHcyCP6abK+t9Q+j4vekk8Q=="], + + "engine.io-parser": ["engine.io-parser@5.2.3", "", {}, "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-object-atoms": ["es-object-atoms@1.1.2", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw=="], + + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + + "es-toolkit": ["es-toolkit@1.51.0", "", {}, "sha512-zC2lQGkM7QX+Gm6iM3+WIdZJzthsEd14LvRNJneSO2hzyz/zNBENR8+YXWo1cKxgPBtV6ksPYHELbcwBRzmdCw=="], + + "esbuild": ["esbuild@0.28.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.2", "@esbuild/android-arm": "0.28.2", "@esbuild/android-arm64": "0.28.2", "@esbuild/android-x64": "0.28.2", "@esbuild/darwin-arm64": "0.28.2", "@esbuild/darwin-x64": "0.28.2", "@esbuild/freebsd-arm64": "0.28.2", "@esbuild/freebsd-x64": "0.28.2", "@esbuild/linux-arm": "0.28.2", "@esbuild/linux-arm64": "0.28.2", "@esbuild/linux-ia32": "0.28.2", "@esbuild/linux-loong64": "0.28.2", "@esbuild/linux-mips64el": "0.28.2", "@esbuild/linux-ppc64": "0.28.2", "@esbuild/linux-riscv64": "0.28.2", "@esbuild/linux-s390x": "0.28.2", "@esbuild/linux-x64": "0.28.2", "@esbuild/netbsd-arm64": "0.28.2", "@esbuild/netbsd-x64": "0.28.2", "@esbuild/openbsd-arm64": "0.28.2", "@esbuild/openbsd-x64": "0.28.2", "@esbuild/openharmony-arm64": "0.28.2", "@esbuild/sunos-x64": "0.28.2", "@esbuild/win32-arm64": "0.28.2", "@esbuild/win32-ia32": "0.28.2", "@esbuild/win32-x64": "0.28.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], + + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + + "express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="], + + "fast-decode-uri-component": ["fast-decode-uri-component@1.0.1", "", {}, "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-json-stringify": ["fast-json-stringify@7.0.1", "", { "dependencies": { "@fastify/merge-json-schemas": "^0.2.0", "ajv": "^8.12.0", "ajv-formats": "^3.0.1", "fast-uri": "^4.0.0", "json-schema-ref-resolver": "^3.0.0", "rfdc": "^1.2.0" } }, "sha512-eRSayARSbbwlBjpP4vnTTIRD5QPcIrmihPxDeN1DtKnHPg66UuJLx+8hlK1kaFdjvzyQ/dzALoi4vwAQ+T+iZA=="], + + "fast-querystring": ["fast-querystring@1.1.2", "", { "dependencies": { "fast-decode-uri-component": "^1.0.1" } }, "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg=="], + + "fast-safe-stringify": ["fast-safe-stringify@2.1.1", "", {}, "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="], + + "fast-uri": ["fast-uri@4.1.4", "", {}, "sha512-dODXrIxlS9JSdgAnhIUKOosKV1oMtU2VtVw87QRaHzyl5jxO290Ii5tEZfCfzfWNHi3jKWwBSdQj0qIyshdZdQ=="], + + "fastify": ["fastify@5.12.1", "", { "dependencies": { "@fastify/ajv-compiler": "^4.0.5", "@fastify/error": "^4.0.0", "@fastify/fast-json-stringify-compiler": "^5.0.0", "@fastify/proxy-addr": "^5.0.0", "abstract-logging": "^2.0.1", "avvio": "^9.0.0", "fast-json-stringify": "^7.0.0", "find-my-way": "^9.6.0", "light-my-request": "^6.0.0", "pino": "^9.14.0 || ^10.1.0", "process-warning": "^5.1.0", "rfdc": "^1.3.1", "secure-json-parse": "^4.0.0", "semver": "^7.6.0", "toad-cache": "^3.7.0" } }, "sha512-FWi+tQvwxR/PeRX7Z2mhfEF5ozJ3jn9asiiclzKXNSzJRHAYcU924aIOKAdHFJ+YIKieh3cqr1IwCOvTr41B3Q=="], + + "fastify-plugin": ["fastify-plugin@6.0.0", "", {}, "sha512-fZOty7z3O7vOliF6d8bHE3wiEh1KcNnKEQensSgTk9C1DvN6nRLS++XVd86v33Hw/8u9Un8A1zDrQ8ujcQDHEg=="], + + "fastq": ["fastq@1.20.3", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "file-type": ["file-type@22.0.2", "", { "dependencies": { "@tokenizer/inflate": "^0.4.1", "strtok3": "^10.3.5", "token-types": "^6.1.2", "uint8array-extras": "^1.5.0" } }, "sha512-0H8TsCUGBLx+V5adH3EY52hTAcyLKbV1D4gq5cIOJ6DnQAHeV9Z2Hhuc5CoBX4YmvB2oL+JIC84z0qO7JsCoNw=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="], + + "find-my-way": ["find-my-way@9.9.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", "safe-regex2": "^5.0.0" } }, "sha512-sJsgZ1sQH2UDuowPuMKg8az7Qc8F0jnj+SKkFWU/+T0xcFlgV5skgXOGUqmQzOdmW6ALA7AhJINWx3qFBkbLHA=="], + + "form-data": ["form-data@4.0.6", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.4", "mime-types": "^2.1.35" } }, "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ=="], + + "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], + + "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + + "get-east-asian-width": ["get-east-asian-width@1.6.0", "", {}, "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + + "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], + + "iconv-lite": ["iconv-lite@0.7.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ=="], + + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "ignore-by-default": ["ignore-by-default@1.0.1", "", {}, "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], + + "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], + + "iterare": ["iterare@1.2.1", "", {}, "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q=="], + + "js-yaml": ["js-yaml@5.4.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.mjs" } }, "sha512-28R/k+NAjeuf7+CKlTxWZVExJGwVVLwY06DgEnOMz2gEpfNkDcD7QvyiVPT0xy0XXhU8vHsd4Ot42OOPdJG7dQ=="], + + "json-schema-ref-resolver": ["json-schema-ref-resolver@3.0.0", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A=="], + + "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + + "light-my-request": ["light-my-request@6.6.0", "", { "dependencies": { "cookie": "^1.0.1", "process-warning": "^4.0.0", "set-cookie-parser": "^2.6.0" } }, "sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A=="], + + "load-esm": ["load-esm@1.0.3", "", {}, "sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA=="], + + "long": ["long@4.0.0", "", {}, "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "media-typer": ["media-typer@1.1.1", "", {}, "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ=="], + + "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], + + "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + + "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], + + "minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "multer": ["multer@2.2.0", "", { "dependencies": { "append-field": "^1.0.0", "busboy": "^1.6.0", "concat-stream": "^2.0.0", "type-is": "^1.6.18" } }, "sha512-6rdyFg2kLrMh9Jee7/BMPuV9lEAd7lLW2YUpF9/YxR7njyoUwwQ0ZPh3TaIY50Sw6vlyD2HW3wGOkTS4P79xrQ=="], + + "negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], + + "node-fetch": ["node-fetch@2.6.13", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA=="], + + "nodemon": ["nodemon@3.1.14", "", { "dependencies": { "chokidar": "^3.5.2", "debug": "^4", "ignore-by-default": "^1.0.1", "minimatch": "^10.2.1", "pstree.remy": "^1.1.8", "semver": "^7.5.3", "simple-update-notifier": "^2.0.0", "supports-color": "^5.5.0", "touch": "^3.1.0", "undefsafe": "^2.0.5" }, "bin": { "nodemon": "bin/nodemon.js" } }, "sha512-jakjZi93UtB3jHMWsXL68FXSAosbLfY0In5gtKq3niLSkrWznrVBzXFNOEMJUfc9+Ke7SHWoAZsiMkNP3vq6Jw=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "object-hash": ["object-hash@3.0.0", "", {}, "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="], + + "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], + + "on-exit-leak-free": ["on-exit-leak-free@2.1.2", "", {}, "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="], + + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], + + "path-to-regexp": ["path-to-regexp@8.4.2", "", {}, "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA=="], + + "picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="], + + "pino": ["pino@10.3.1", "", { "dependencies": { "@pinojs/redact": "^0.4.0", "atomic-sleep": "^1.0.0", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^3.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^4.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg=="], + + "pino-abstract-transport": ["pino-abstract-transport@3.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg=="], + + "pino-std-serializers": ["pino-std-serializers@7.1.0", "", {}, "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw=="], + + "process-warning": ["process-warning@5.1.0", "", {}, "sha512-jQSaVHsPgtyw60e1rQ/A+/ArPEj/S8pS/vFnyGa/gYFXrKk/6RuDkoqVDQ5NI5MmS01698ltlAk0NoDBNLujRw=="], + + "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], + + "pstree.remy": ["pstree.remy@1.1.8", "", {}, "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="], + + "qs": ["qs@6.16.0", "", { "dependencies": { "es-define-property": "^1.0.1", "side-channel": "^1.1.1" } }, "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA=="], + + "quick-format-unescaped": ["quick-format-unescaped@4.0.4", "", {}, "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="], + + "range-parser": ["range-parser@1.3.0", "", {}, "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw=="], + + "raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="], + + "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + + "real-require": ["real-require@0.2.0", "", {}, "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="], + + "reflect-metadata": ["reflect-metadata@0.2.2", "", {}, "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q=="], + + "regenerator-runtime": ["regenerator-runtime@0.13.11", "", {}, "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="], + + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + + "ret": ["ret@0.5.0", "", {}, "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw=="], + + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + + "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], + + "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="], + + "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "safe-regex2": ["safe-regex2@5.1.1", "", { "dependencies": { "ret": "~0.5.0" }, "bin": { "safe-regex2": "bin/safe-regex2.js" } }, "sha512-mOSBvHGDZMuIEZMdOz/aCEYDCv0E7nfcNsIhUF+/P+xC7Hyf3FkvymqgPbg9D1EdSGu+uKbJgy09K/RKKc7kJA=="], + + "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "secure-json-parse": ["secure-json-parse@4.1.0", "", {}, "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA=="], + + "seedrandom": ["seedrandom@3.0.5", "", {}, "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg=="], + + "semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], + + "send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="], + + "serve-static": ["serve-static@2.2.1", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw=="], + + "set-cookie-parser": ["set-cookie-parser@2.7.2", "", {}, "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw=="], + + "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], + + "sharp": ["sharp@0.35.4", "", { "dependencies": { "@img/colour": "^1.1.0", "detect-libc": "^2.1.2", "semver": "^7.8.5" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.35.4", "@img/sharp-darwin-x64": "0.35.4", "@img/sharp-freebsd-wasm32": "0.35.4", "@img/sharp-libvips-darwin-arm64": "1.3.3", "@img/sharp-libvips-darwin-x64": "1.3.3", "@img/sharp-libvips-linux-arm": "1.3.3", "@img/sharp-libvips-linux-arm64": "1.3.3", "@img/sharp-libvips-linux-ppc64": "1.3.3", "@img/sharp-libvips-linux-riscv64": "1.3.3", "@img/sharp-libvips-linux-s390x": "1.3.3", "@img/sharp-libvips-linux-x64": "1.3.3", "@img/sharp-libvips-linuxmusl-arm64": "1.3.3", "@img/sharp-libvips-linuxmusl-x64": "1.3.3", "@img/sharp-linux-arm": "0.35.4", "@img/sharp-linux-arm64": "0.35.4", "@img/sharp-linux-ppc64": "0.35.4", "@img/sharp-linux-riscv64": "0.35.4", "@img/sharp-linux-s390x": "0.35.4", "@img/sharp-linux-x64": "0.35.4", "@img/sharp-linuxmusl-arm64": "0.35.4", "@img/sharp-linuxmusl-x64": "0.35.4", "@img/sharp-webcontainers-wasm32": "0.35.4", "@img/sharp-win32-arm64": "0.35.4", "@img/sharp-win32-ia32": "0.35.4", "@img/sharp-win32-x64": "0.35.4" }, "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA=="], + + "side-channel": ["side-channel@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4", "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ=="], + + "side-channel-list": ["side-channel-list@1.0.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4" } }, "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w=="], + + "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], + + "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + + "simple-update-notifier": ["simple-update-notifier@2.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w=="], + + "socket.io": ["socket.io@4.8.3", "", { "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.4.1", "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" } }, "sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A=="], + + "socket.io-adapter": ["socket.io-adapter@2.5.8", "", { "dependencies": { "debug": "~4.4.1", "ws": "~8.21.0" } }, "sha512-6Oy52pbg+kvdCVvjcN+FnY7BvxZ7cIHNScbvztT/It5d0vbwoJoVZmF2gjJmnV0/4WlXRfG15zc45ySk9Ah8bw=="], + + "socket.io-parser": ["socket.io-parser@4.2.7", "", { "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.4.1" } }, "sha512-IH/iSeO9T6gz1KkFleGDWkG9N3dl4jXVYUtMhIqH10Md0ttMer8nUNWiP1DKuNrybD2xBrixLJdCC9J6ECoYkg=="], + + "sonic-boom": ["sonic-boom@4.2.1", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q=="], + + "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], + + "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], + + "sql-highlight": ["sql-highlight@6.1.0", "", {}, "sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA=="], + + "sql.js": ["sql.js@1.14.2", "", {}, "sha512-3ZGPovObMFrdw79zrUHbfdE/DLIsy8jdNdssmMSQuRAymedU6q84asPt0kgiqrdMYlPegDItiIMfmIXzZnYFcw=="], + + "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], + + "streamsearch": ["streamsearch@1.1.0", "", {}, "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg=="], + + "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strtok3": ["strtok3@10.3.5", "", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA=="], + + "supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], + + "swagger-ui-dist": ["swagger-ui-dist@5.32.14", "", { "dependencies": { "@scarf/scarf": "=1.4.0" } }, "sha512-nOA2pSQhcmODMUQZpJHYKNuwniDUqcOWGNaSCOoZv12FdOSJ9JxV95HtyRGNMqEBj6h6lCNTy20TgZDYTSuUIg=="], + + "thread-stream": ["thread-stream@4.2.0", "", { "dependencies": { "real-require": "^1.0.0" } }, "sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ=="], + + "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "toad-cache": ["toad-cache@3.7.4", "", {}, "sha512-m1TdR/rvT7kgGJZhspNtXdsdYk0fddFpJJFlG5s+UkPFo6lkLoZ3YLOaovPYjq1R75NP5JfeTlSHaOsE09peCg=="], + + "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], + + "token-types": ["token-types@6.1.2", "", { "dependencies": { "@borewit/text-codec": "^0.2.1", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww=="], + + "touch": ["touch@3.1.1", "", { "bin": { "nodetouch": "bin/nodetouch.js" } }, "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA=="], + + "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "tsx": ["tsx@4.23.13", "", { "dependencies": { "esbuild": "~0.28.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-BL5MGkRln6aDYhb0xbQlEAGw743BaZYWdbWtdJOBriYJboKgUUYCadFp2/FpBBZquBC/ezNBn7wMMPx7FDZUDw=="], + + "type-is": ["type-is@2.1.0", "", { "dependencies": { "content-type": "^2.0.0", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA=="], + + "typedarray": ["typedarray@0.0.6", "", {}, "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="], + + "typeorm": ["typeorm@1.1.1", "", { "dependencies": { "@sqltools/formatter": "^1.2.5", "ansis": "^4.3.1", "dayjs": "^1.11.21", "debug": "^4.4.3", "dedent": "^1.7.2", "reflect-metadata": "^0.2.2", "sql-highlight": "^6.1.0", "tinyglobby": "^0.2.17", "tslib": "^2.8.1", "yargs": "^18.0.0" }, "peerDependencies": { "@google-cloud/spanner": "^8.0.0", "@sap/hana-client": "^2.14.22", "better-sqlite3": "^12.0.0", "ioredis": "^5.0.4", "mongodb": "^7.0.0", "mssql": "^12.0.0", "mysql2": "^3.15.3", "oracledb": "^6.3.0 || ^7.0.0", "pg": "^8.5.1", "pg-native": "^3.0.0", "pg-query-stream": "^4.0.0", "redis": "^5.0.0 || ^6.0.0", "sql.js": "^1.4.0", "ts-node": "^10.9.2", "typeorm-aurora-data-api-driver": "^3.0.0" }, "optionalPeers": ["@google-cloud/spanner", "@sap/hana-client", "better-sqlite3", "ioredis", "mongodb", "mssql", "mysql2", "oracledb", "pg", "pg-native", "pg-query-stream", "redis", "sql.js", "ts-node", "typeorm-aurora-data-api-driver"], "bin": { "typeorm": "cli.js", "typeorm-ts-node-esm": "cli-ts-node-esm.js", "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js" } }, "sha512-og9mG4Lwlvj6MfvYd8yRCzXy73gETtwgTKQ/ISLYvEOpJPy4IrjU/89HK4ZAFmRIbEg1hkIk04v8phTrxfgPmQ=="], + + "uid": ["uid@2.0.2", "", { "dependencies": { "@lukeed/csprng": "^1.0.0" } }, "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g=="], + + "uint8array-extras": ["uint8array-extras@1.5.0", "", {}, "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A=="], + + "undefsafe": ["undefsafe@2.0.5", "", {}, "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="], + + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + + "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], + + "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + + "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="], + + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + + "yargs": ["yargs@16.2.2", "", { "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "sha512-Nt9ZJjXTv5R8MHbqby/wXQ6Gi0Bb3TcYZkR1bzuL4yB2OxWPkXknz513gEF0GoA6tn00UpbPvERW8rzCuWCA6w=="], + + "yargs-parser": ["yargs-parser@20.2.9", "", {}, "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="], + + "@fastify/proxy-addr/ipaddr.js": ["ipaddr.js@2.5.0", "", {}, "sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w=="], + + "@tensorflow/tfjs-core/@types/offscreencanvas": ["@types/offscreencanvas@2019.7.3", "", {}, "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A=="], + + "accepts/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "ajv/fast-uri": ["fast-uri@3.1.7", "", {}, "sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg=="], + + "anymatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + + "body-parser/content-type": ["content-type@2.1.0", "", {}, "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag=="], + + "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "express/accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], + + "form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "light-my-request/cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], + + "light-my-request/process-warning": ["process-warning@4.0.1", "", {}, "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q=="], + + "multer/type-is": ["type-is@1.6.18", "", { "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="], + + "readdirp/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + + "thread-stream/real-require": ["real-require@1.0.0", "", {}, "sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g=="], + + "type-is/content-type": ["content-type@2.1.0", "", {}, "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag=="], + + "typeorm/yargs": ["yargs@18.0.0", "", { "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "string-width": "^7.2.0", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" } }, "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg=="], + + "accepts/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "chalk/supports-color/has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "express/accepts/negotiator": ["negotiator@1.1.0", "", { "dependencies": { "content-type": "^2.1.0" } }, "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg=="], + + "form-data/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "multer/type-is/media-typer": ["media-typer@0.3.0", "", {}, "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="], + + "multer/type-is/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "typeorm/yargs/cliui": ["cliui@9.0.1", "", { "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w=="], + + "typeorm/yargs/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + + "typeorm/yargs/yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], + + "express/accepts/negotiator/content-type": ["content-type@2.1.0", "", {}, "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag=="], + + "multer/type-is/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "typeorm/yargs/cliui/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], + + "typeorm/yargs/cliui/wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], + + "typeorm/yargs/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + + "typeorm/yargs/string-width/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], + + "typeorm/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.3.0", "", {}, "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ=="], + + "typeorm/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + + "typeorm/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.3.0", "", {}, "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ=="], + } +} diff --git a/clients/rust/Cargo.toml b/clients/rust/Cargo.toml new file mode 100644 index 0000000..8f0bab7 --- /dev/null +++ b/clients/rust/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "gapmind-client" +version = "0.1.0" +edition = "2021" + +[dependencies] +serde = { version = "1", features = ["derive"] } +serde_json = "1" +reqwest = { version = "0.12", features = ["json"] } diff --git a/clients/rust/src/lib.rs b/clients/rust/src/lib.rs new file mode 100644 index 0000000..7393101 --- /dev/null +++ b/clients/rust/src/lib.rs @@ -0,0 +1,72 @@ +// Auto-generated by scripts/generate-bindings.mjs — do not edit. +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone)] +pub struct GapmindClient { base_url: String, token: Option, http: reqwest::Client } + +impl GapmindClient { + pub fn new(base_url: impl Into, token: Option) -> Self { + Self { base_url: base_url.into().trim_end_matches('/').to_string(), token, http: reqwest::Client::new() } + } + fn auth(&self, b: reqwest::RequestBuilder) -> reqwest::RequestBuilder { + match &self.token { Some(t) => b.bearer_auth(t), None => b } + } + pub async fn get_json(&self, path: &str) -> Result { + let url = format!("{}{}", self.base_url, path); + let res = self.auth(self.http.get(&url)).send().await?.error_for_status()?; + res.json().await + } + pub async fn post_json(&self, path: &str, body: &serde_json::Value) -> Result { + let url = format!("{}{}", self.base_url, path); + let res = self.auth(self.http.post(&url).json(body)).send().await?.error_for_status()?; + res.json().await + } + pub async fn health(&self) -> Result { + let mut url = format!("{}{}", self.base_url, format!("/health")); + self.get_json(&url[self.base_url.len()..]).await + } + pub async fn routes(&self) -> Result { + let mut url = format!("{}{}", self.base_url, format!("/api/routes")); + self.get_json(&url[self.base_url.len()..]).await + } + pub async fn ips_get(&self, path: &str) -> Result { + let mut url = format!("{}{}", self.base_url, format!("/ips/{}", path)); + self.get_json(&url[self.base_url.len()..]).await + } + pub async fn ips_post(&self, path: &str) -> Result { + let mut url = format!("{}{}", self.base_url, format!("/ips/{}", path)); + self.post_json(&url[self.base_url.len()..], body).await + } + pub async fn ips_put(&self, path: &str) -> Result { + let mut url = format!("{}{}", self.base_url, format!("/ips/{}", path)); + { let res = self.auth(self.http.request(reqwest::Method::PUT, &url)).send().await?.error_for_status()?; res.json().await } + } + pub async fn ips_delete(&self, path: &str) -> Result { + let mut url = format!("{}{}", self.base_url, format!("/ips/{}", path)); + { let res = self.auth(self.http.request(reqwest::Method::DELETE, &url)).send().await?.error_for_status()?; res.json().await } + } + pub async fn ips_patch(&self, path: &str) -> Result { + let mut url = format!("{}{}", self.base_url, format!("/ips/{}", path)); + { let res = self.auth(self.http.request(reqwest::Method::PATCH, &url)).send().await?.error_for_status()?; res.json().await } + } + pub async fn socials_get(&self, path: &str) -> Result { + let mut url = format!("{}{}", self.base_url, format!("/socials/{}", path)); + self.get_json(&url[self.base_url.len()..]).await + } + pub async fn socials_post(&self, path: &str) -> Result { + let mut url = format!("{}{}", self.base_url, format!("/socials/{}", path)); + self.post_json(&url[self.base_url.len()..], body).await + } + pub async fn socials_put(&self, path: &str) -> Result { + let mut url = format!("{}{}", self.base_url, format!("/socials/{}", path)); + { let res = self.auth(self.http.request(reqwest::Method::PUT, &url)).send().await?.error_for_status()?; res.json().await } + } + pub async fn socials_delete(&self, path: &str) -> Result { + let mut url = format!("{}{}", self.base_url, format!("/socials/{}", path)); + { let res = self.auth(self.http.request(reqwest::Method::DELETE, &url)).send().await?.error_for_status()?; res.json().await } + } + pub async fn socials_patch(&self, path: &str) -> Result { + let mut url = format!("{}{}", self.base_url, format!("/socials/{}", path)); + { let res = self.auth(self.http.request(reqwest::Method::PATCH, &url)).send().await?.error_for_status()?; res.json().await } + } +} \ No newline at end of file diff --git a/clients/typescript/gapmind.ts b/clients/typescript/gapmind.ts new file mode 100644 index 0000000..99f0a22 --- /dev/null +++ b/clients/typescript/gapmind.ts @@ -0,0 +1,71 @@ +// Auto-generated by scripts/generate-bindings.mjs — do not edit. + +export interface GapmindClientConfig { baseUrl: string; token?: string; } + +export class GapmindClient { + private baseUrl: string; + private token?: string; + constructor(config: GapmindClientConfig) { + this.baseUrl = config.baseUrl.replace(/\/$/, ''); + this.token = config.token; + } + private headers(): Record { + const h: Record = { 'Content-Type': 'application/json' }; + if (this.token) h["Authorization"] = "Bearer " + this.token; + return h; + } + private async request(method: string, path: string, body?: unknown): Promise { + const res = await fetch(this.baseUrl + path, { method, headers: this.headers(), body: body ? JSON.stringify(body) : undefined }); + if (!res.ok) throw new Error("API error " + res.status + ": " + (await res.text())); + return res.json() as Promise; + } + + async health(): Promise { + return this.request("GET", `/health`); + } + + async routes(): Promise { + return this.request("GET", `/api/routes`); + } + + async ips_get(path: string): Promise { + return this.request("GET", `/ips/${path}`); + } + + async ips_post(path: string): Promise { + return this.request("POST", `/ips/${path}`); + } + + async ips_put(path: string): Promise { + return this.request("PUT", `/ips/${path}`); + } + + async ips_delete(path: string): Promise { + return this.request("DELETE", `/ips/${path}`); + } + + async ips_patch(path: string): Promise { + return this.request("PATCH", `/ips/${path}`); + } + + async socials_get(path: string): Promise { + return this.request("GET", `/socials/${path}`); + } + + async socials_post(path: string): Promise { + return this.request("POST", `/socials/${path}`); + } + + async socials_put(path: string): Promise { + return this.request("PUT", `/socials/${path}`); + } + + async socials_delete(path: string): Promise { + return this.request("DELETE", `/socials/${path}`); + } + + async socials_patch(path: string): Promise { + return this.request("PATCH", `/socials/${path}`); + } + +} \ No newline at end of file diff --git a/ginit.sh b/ginit.sh new file mode 100755 index 0000000..0814220 --- /dev/null +++ b/ginit.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +git init +git remote add origin https://ai.crit.rip/mind/gapmind +git branch -M main +git add --all +git commit -m "main(init): Initial commit." +git push -u origin main \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..ce1ed8d --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module crit.rip/gapmind + +go 1.26.7 diff --git a/go.work b/go.work new file mode 100644 index 0000000..85d9421 --- /dev/null +++ b/go.work @@ -0,0 +1,8 @@ +go 1.26.7 + +use ( + ./services/orchestra + ./services/pathfinder + ./services/replica + ./services/dht +) diff --git a/justfile b/justfile new file mode 100644 index 0000000..88ce610 --- /dev/null +++ b/justfile @@ -0,0 +1,22 @@ +tidy-svc: + awk '/use \(/,/\)/ {if ($1 != "use" && $1 != ")") print $1} /use [^\(]/ {print $2}' go.work | xargs -I {} sh -c 'cd "{}" && echo "Tidying {}..." && go mod tidy' + go work edit -json | grep -o '"DiskPath": "[^"]*' | cut -d'"' -f4 | xargs -I {} sh -c 'cd "{}" && go fmt ./...' + +tidy-web: + bunx prettier --write . + +build: + npm run build + cd services/pathfinder && GOCACHE=/tmp/gapmind-go-cache go build -buildvcs=false -o pathfinder . + cd services/replica && GOCACHE=/tmp/gapmind-go-cache go build -buildvcs=false -o replica . + cd services/orchestra && GOCACHE=/tmp/gapmind-go-cache go build -buildvcs=false -o orchestra . + cd services/dht && GOCACHE=/tmp/gapmind-go-cache go build -buildvcs=false -o dht . + +deploy config='services/orchestra/orchestra.json': build + services/orchestra/orchestra -config {{config}} + +sync config='services/orchestra/orchestra.json': build + services/orchestra/orchestra -config {{config}} sync + +nuke *ARGS: build + services/orchestra/orchestra -config services/orchestra/orchestra.json nuke {{ARGS}} \ No newline at end of file diff --git a/mindless b/mindless new file mode 160000 index 0000000..552ec26 --- /dev/null +++ b/mindless @@ -0,0 +1 @@ +Subproject commit 552ec26321109bcc68cc46d21044fa53c52eebe1 diff --git a/mindmount b/mindmount new file mode 160000 index 0000000..71eabae --- /dev/null +++ b/mindmount @@ -0,0 +1 @@ +Subproject commit 71eabae6f95edb852146361bc3e35a67bef9327b diff --git a/nest-cli.json b/nest-cli.json new file mode 100644 index 0000000..ba9ab0f --- /dev/null +++ b/nest-cli.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json.schemastore.org/nest-cli", + "collection": "@nestjs/schematics", + "monorepo": false, + "sourceRoot": "src", + "entryFile": "main", + "language": "ts", + "generateOptions": { + "spec": true + }, + "compilerOptions": { + "tsConfigPath": "./tsconfig.build.json", + "deleteOutDir": true, + "assets": [], + "watchAssets": false, + "plugins": [] + }, + "exclude": ["**/entry-client.tsx"] +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e565161 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2747 @@ +{ + "name": "gapmind", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "gapmind", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@nestjs/common": "^12.0.1", + "@nestjs/core": "^12.0.1", + "@nestjs/platform-express": "^12.0.1", + "reflect-metadata": "^0.2.2" + }, + "devDependencies": { + "@nestjs/cli": "^12.0.0", + "@nestjs/schematics": "^12.0.1", + "@types/node": "^22.20.2", + "typescript": "^6.0.3" + } + }, + "node_modules/@angular-devkit/core": { + "version": "22.1.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-22.1.5.tgz", + "integrity": "sha512-HiY6d5dkIdJs5grP9OHvgkf14QOcDIo+hbuT7YKuLItQ++ZxCwUabJMLCCJ5R0KrstE5NqED0dNcyk5WD01t5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.20.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.5", + "rxjs": "7.8.2", + "source-map": "0.7.6" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^5.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "22.1.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-22.1.5.tgz", + "integrity": "sha512-HTmo9y8wjXKtJGVTYomTjZsjWzhirpu1pPRAzsVob3eiYOuxv1qDRAgWiHXNGp5CpnbHunZweXY/WffNGOFRyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "22.1.5", + "jsonc-parser": "3.3.1", + "magic-string": "1.0.0", + "ora": "9.4.1", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics-cli": { + "version": "22.1.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-22.1.5.tgz", + "integrity": "sha512-VB/5fH2b/2j8eeMm25vRYCJzBbpaM/VyHc8/+WqPzJahdWuvL0CeLWrxjHHT1exQ/kgbqHLaIWMgSywZe3EBhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "22.1.5", + "@angular-devkit/schematics": "22.1.5", + "@inquirer/prompts": "8.5.2" + }, + "bin": { + "schematics": "bin/schematics.js" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/@inquirer/prompts": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.5.2.tgz", + "integrity": "sha512-IYR/3C/paEVVQYQvdDlFZVjRCJVYHHON0XXMH91KO9GSxs0TdKYWlUdvfQl2EfAHDxUaN3IBffkE/BDTh5nJ6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^5.2.1", + "@inquirer/confirm": "^6.1.1", + "@inquirer/editor": "^5.2.2", + "@inquirer/expand": "^5.1.1", + "@inquirer/input": "^5.1.2", + "@inquirer/number": "^4.1.1", + "@inquirer/password": "^5.1.1", + "@inquirer/rawlist": "^5.3.1", + "@inquirer/search": "^4.2.1", + "@inquirer/select": "^5.2.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@borewit/text-codec": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz", + "integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@inquirer/ansi": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.8.tgz", + "integrity": "sha512-WpQM+Ti6Z40EFwwt+uL2p4UabT+W179zHp6HhLVOzfbwnVn05IPO/eXIZXGNqcT1jbQ15SujNLzQ39k4QPPxBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.2.5.tgz", + "integrity": "sha512-bRt8J8m+Fot9CXv+zNQGXUq2ET0MggR1fPz7v6edN6MFYmsbfGnMmkmWZJEegMKqrAC8ej/o1sqisHZXZJMAfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/core": "^12.0.3", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.3.2.tgz", + "integrity": "sha512-Xvr/0HggjddPtGppuqVmxhTw+Hr8PvsZ/k0HmOEaAqQEt80OITNkFWnsdNmyT0/eM4Ab+iJLx2R8rctlEyfSVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.3.tgz", + "integrity": "sha512-wsSy0sznmXwkty+2PzZwx00Cazc/E0r0B7mAzdGROz2Ct+DFZXaK7WDjGZvgjRldxH5ZhFVfF2lgkYrqgOw2KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.3.3.tgz", + "integrity": "sha512-YsKkS2q63IiLtaDK/9nqzdComN97SDQrmKiyNggN+ceP4ty+Z6VwyTz3FpjeUWeW1Efss2xHFKCC9sx7hnrsxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/external-editor": "^3.0.5", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.1.5.tgz", + "integrity": "sha512-uHuXLmXW+TtIfT/9vSBotypAkqn1n34Ul+CLGPos/xANyO4Ff5xZzkYhbKR4NEcfVK4a9mHQOpwVZzluSHFRGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-3.0.5.tgz", + "integrity": "sha512-f3QQJRIX5ZEneBHNUIuPjmbdzHnmRFJA8r2dkcb8q+OM5Uv5KtnuAttQumnrjcBVBM3mcTX1CkmtAkU58VRZxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.2" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.9.tgz", + "integrity": "sha512-EAWgUTGQ/Umgga51dE3B2PUHbufuXarDfg86uVgoSgNHNNQnyFKcOrQLWVqYMghuSyHh8+2HUH0Js9cTC1WAdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/input": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.1.6.tgz", + "integrity": "sha512-HtcJhB2QFVXbLuJ5S3syhNbTUVxYvwqV4VRBDkQceBloC9bmTViUoRFP5PbSaDZb3HzfPmpuU/gG4ybVBz4FHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.2.3.tgz", + "integrity": "sha512-6Yuwh1NGSbu1Lo4N1EWjXs1jKRntLg/ZCwhmeorEHde90v1XxAozdbd4Iu30eOQLW+6h1hp2O9ujNfLSbTPJnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.2.2.tgz", + "integrity": "sha512-W9zYdyzogK+6110mqwaSJWCBu2yA5Q/OfnGSjjZB1bNpHlmUozXxTl0+QOZBNeVd6Qo81/qT75gW05gLAtITxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.7.0.tgz", + "integrity": "sha512-yQwBMYvpJ6jqrXtKiOwRD5XezjJoyt3VQvIyjsr5Arqb519nfIohOQymWVJ8/vEgg8xtZerrCsqlSaqt/LPC9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^5.2.3", + "@inquirer/confirm": "^6.3.0", + "@inquirer/editor": "^5.3.1", + "@inquirer/expand": "^5.1.3", + "@inquirer/input": "^5.1.4", + "@inquirer/number": "^4.2.1", + "@inquirer/password": "^5.2.0", + "@inquirer/rawlist": "^5.3.3", + "@inquirer/search": "^4.3.1", + "@inquirer/select": "^5.2.3" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.3.5.tgz", + "integrity": "sha512-1oHky1ONfCOwNrnkQGDE1oaSij/3fI6HFMSf2H/WsGO2lEyDX9My82iggITSy9ddSZ8yk8j9v41OI0fVoSIoaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.3.3.tgz", + "integrity": "sha512-fyuIU1Nbpvwlikjg3gXwJFDI11+EFjqQ7P+iByfmivIKQ1vmaykNrD/vy5unHuUqUpsOsnvJ25//tPF7E/RBRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.2.5.tgz", + "integrity": "sha512-9kc15hr8r/kI+3DO/xLog5nOzTz1jqsHXa6JBFzmQKhkoJ8Slda1I1L/uD8ZSZ9tF1yp79wwXe7mclvX1rqR2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/core": "^12.0.3", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.1.1.tgz", + "integrity": "sha512-yJoHYrMnxIsJZCY+0Vb66Dy3he3kL3e2wOBKhoSwWWAzZAY82emlxwgprCtp6yRixvNRNq9ztfRWQYPNr3Go7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nestjs/cli": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-12.0.0.tgz", + "integrity": "sha512-DxgGUKA4gj92lU2lF23Mlvm6y7AQBKEBuanNKNcmHeP6Cn3yqPZxN0LqyaJys25JCqO1bN8KgE3LICrvYlB93g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "22.1.5", + "@angular-devkit/schematics": "22.1.5", + "@angular-devkit/schematics-cli": "22.1.5", + "@inquirer/prompts": "8.7.0", + "@nestjs/schematics": "^12.0.0", + "ansis": "4.3.1", + "chokidar": "5.0.0", + "cli-table3": "0.6.5", + "commander": "15.0.0", + "minimatch": "10.2.6", + "node-emoji": "2.2.0", + "ora": "9.4.1", + "tsconfig-paths": "4.2.0", + "typescript": "~6.0.2" + }, + "bin": { + "nest": "bin/nest.js" + }, + "engines": { + "node": ">= 20.11" + }, + "peerDependencies": { + "@rspack/core": "^1.7.7 || ^2.1.10", + "@swc/cli": "^0.8.0", + "@swc/core": "^1.15.18", + "fork-ts-checker-webpack-plugin": "^9.1.0", + "ts-loader": "^9.5.4", + "tsconfig-paths-webpack-plugin": "^4.2.0", + "webpack": "^5.105.4", + "webpack-node-externals": "^3.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "@swc/cli": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "fork-ts-checker-webpack-plugin": { + "optional": true + }, + "ts-loader": { + "optional": true + }, + "tsconfig-paths-webpack-plugin": { + "optional": true + }, + "webpack": { + "optional": true + }, + "webpack-node-externals": { + "optional": true + } + } + }, + "node_modules/@nestjs/common": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-12.0.1.tgz", + "integrity": "sha512-v0zTaRCTV2K2xSnb3GnJoQKtaR6VxouJtm+P2gpr5w61dlXeWpXl1WVknCSzUqx2QwTV10tBkHETxvQvkf2Exg==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "1.1.0", + "file-type": "22.0.2", + "iterare": "1.2.1", + "load-esm": "1.0.3", + "tslib": "2.8.1", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "class-transformer": ">=0.4.1", + "class-validator": ">=0.13.2", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/core": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-12.0.1.tgz", + "integrity": "sha512-rU6tAi8vDdyzHgN0iW0J4UJvziroOqzHqzlqL7phOSPizaXVEePfv+OUOsdJEOh0Qd14mslc3udOheLrAEcZow==", + "license": "MIT", + "dependencies": { + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "path-to-regexp": "8.4.2", + "tslib": "2.8.1", + "uid": "2.0.2" + }, + "engines": { + "node": ">= 20" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^12.0.0", + "@nestjs/microservices": "^12.0.0", + "@nestjs/platform-express": "^12.0.0", + "@nestjs/websockets": "^12.0.0", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + }, + "@nestjs/websockets": { + "optional": true + } + } + }, + "node_modules/@nestjs/platform-express": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-12.0.1.tgz", + "integrity": "sha512-nF8bRgROptMyixYBfiJUAsjj2o9k13zxAjUKYaqHTPk8mTSd+gk7hXz6NykXNrfHWmMEYC9RttQlMUdMHNTbuA==", + "license": "MIT", + "dependencies": { + "cors": "2.8.6", + "express": "5.2.1", + "multer": "2.2.0", + "path-to-regexp": "8.4.2", + "tslib": "2.8.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^12.0.0", + "@nestjs/core": "^12.0.0" + } + }, + "node_modules/@nestjs/schematics": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-12.0.1.tgz", + "integrity": "sha512-BOhog8srf6UzpZvVZMWgyjeVOpcH4YcJZKIkbp8J2v62AiuZ6FP0O9o71jWHeoZUHO9bkvysyQzmHGweef9ZbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "22.1.6", + "@angular-devkit/schematics": "22.1.6", + "comment-json": "5.0.0", + "jsonc-parser": "3.3.1", + "pluralize": "8.0.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "prettier": "^3.0.0", + "typescript": ">=6.0.0" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } + } + }, + "node_modules/@nestjs/schematics/node_modules/@angular-devkit/core": { + "version": "22.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-22.1.6.tgz", + "integrity": "sha512-KLBsZoc2RhOy0xSdeYcLoSOqV/fBP3feBmhY9o12ry2IuyW/17sCmWr6XbIfTIYQN6M98Y1ewmwVNFsvV5b0gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.20.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.5", + "rxjs": "7.8.2", + "source-map": "0.7.6" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^5.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@nestjs/schematics/node_modules/@angular-devkit/schematics": { + "version": "22.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-22.1.6.tgz", + "integrity": "sha512-IbDO9KbQyQm20uinsfT8d9ZtQw41/WVutI/65mAw39WZfN8Ky+MOgOUJCGLiSccMprvZ9YdodBTnN9bLH149Ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "22.1.6", + "jsonc-parser": "3.3.1", + "magic-string": "1.0.0", + "ora": "9.4.1", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@tokenizer/inflate": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", + "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "token-types": "^6.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.20.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.2.tgz", + "integrity": "sha512-xlvWf4Vs9n1PEVYwP1n4vvG07M6y8WgvJ2t0vbrWTmijsIHp1cS+uJ2kMIRdY3nHZK0nCYKrPeD171+SzF4/zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansis": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.3.1.tgz", + "integrity": "sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "license": "MIT" + }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/body-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", + "on-finished": "^2.4.1", + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.2.0.tgz", + "integrity": "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", + "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/commander": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-15.0.0.tgz", + "integrity": "sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/comment-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-5.0.0.tgz", + "integrity": "sha512-uiqLcOiVDJtBP8WGkZHEP+FZIhTzP1dxvn59EfoYUi9gqupjrBWVQkO2atDrbnKPwLeotFYDsuNb26uBMqB+hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-timsort": "^1.0.3", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/emojilib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" + }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-uri": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.7.tgz", + "integrity": "sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz", + "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, + "node_modules/file-type": { + "version": "22.0.2", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-22.0.2.tgz", + "integrity": "sha512-0H8TsCUGBLx+V5adH3EY52hTAcyLKbV1D4gq5cIOJ6DnQAHeV9Z2Hhuc5CoBX4YmvB2oL+JIC84z0qO7JsCoNw==", + "license": "MIT", + "dependencies": { + "@tokenizer/inflate": "^0.4.1", + "strtok3": "^10.3.5", + "token-types": "^6.1.2", + "uint8array-extras": "^1.5.0" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", + "license": "ISC", + "engines": { + "node": ">=6" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/load-esm": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/load-esm/-/load-esm-1.0.3.tgz", + "integrity": "sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + }, + { + "type": "buymeacoffee", + "url": "https://buymeacoffee.com/borewit" + } + ], + "license": "MIT", + "engines": { + "node": ">=13.2.0" + } + }, + "node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/magic-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.0.0.tgz", + "integrity": "sha512-CGvjzMN08iv6w1mm4/x3Gh1hLb4VnyRUA15FFpl6CsCIGGoe36k7kY5KNz9QDbSBN5I/fWHM6ZlIkUTa5xdUEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/multer/-/multer-2.2.0.tgz", + "integrity": "sha512-6rdyFg2kLrMh9Jee7/BMPuV9lEAd7lLW2YUpF9/YxR7njyoUwwQ0ZPh3TaIY50Sw6vlyD2HW3wGOkTS4P79xrQ==", + "license": "MIT", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.6.0", + "concat-stream": "^2.0.0", + "type-is": "^1.6.18" + }, + "engines": { + "node": ">= 10.16.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/multer/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mute-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz", + "integrity": "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/negotiator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", + "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", + "license": "MIT", + "dependencies": { + "content-type": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/negotiator/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/node-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", + "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.6.0", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.4.1.tgz", + "integrity": "sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.6.2", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", + "stdin-discarder": "^0.3.2", + "string-width": "^8.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ora/node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz", + "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==", + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/skin-tone": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", + "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-emoji-modifier-base": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stdin-discarder": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.2.tgz", + "integrity": "sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strtok3": { + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz", + "integrity": "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==", + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", + "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", + "license": "MIT", + "dependencies": { + "@borewit/text-codec": "^0.2.1", + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "license": "MIT", + "dependencies": { + "@lukeed/csprng": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uint8array-extras": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-emoji-modifier-base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/yoctocolors": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.2.0.tgz", + "integrity": "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f1bb387 --- /dev/null +++ b/package.json @@ -0,0 +1,52 @@ +{ + "name": "gapmind", + "version": "1.0.0", + "description": "Open-source IP intelligence platform", + "main": "dist/main.js", + "type": "commonjs", + "scripts": { + "build": "tsc -p tsconfig.build.json", + "start": "node dist/main.js", + "dev": "nodemon --watch 'src/**/*.ts' --exec 'bun run build && node dist/main.js'", + "start:production": "NODE_ENV=production node dist/main.js", + "generate:bindings": "node scripts/generate-bindings.mjs", + "test": "tsx --test test/*.test.ts" + }, + "keywords": [ + "ip", + "intelligence", + "shodan", + "censys", + "dht", + "geolocation" + ], + "author": "", + "license": "ISC", + "dependencies": { + "@nestjs/common": "^12.0.1", + "@nestjs/core": "^12.0.1", + "@nestjs/platform-express": "^12.0.1", + "@nestjs/platform-fastify": "^12.0.1", + "@nestjs/platform-socket.io": "^12.0.1", + "@nestjs/swagger": "^12.0.1", + "@nestjs/typeorm": "^12.0.1", + "@nestjs/websockets": "^12.0.1", + "@tensorflow/tfjs": "^4.22.0", + "dotenv": "^17.4.2", + "nodemon": "^3.1.14", + "reflect-metadata": "^0.2.2", + "sharp": "^0.35.4", + "socket.io": "^4.8.3", + "sql.js": "^1.14.2", + "typeorm": "^1.1.1" + }, + "devDependencies": { + "tsx": "^4.23.13" + }, + "trustedDependencies": [ + "@scarf/scarf", + "core-js", + "esbuild", + "pnpm" + ] +} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..68d6f97 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,6 @@ +allowBuilds: + '@scarf/scarf': set this to true or false + core-js: set this to true or false + esbuild: set this to true or false + pnpm: set this to true or false + sqlite3: set this to true or false diff --git a/scripts/generate-bindings.mjs b/scripts/generate-bindings.mjs new file mode 100644 index 0000000..986b82e --- /dev/null +++ b/scripts/generate-bindings.mjs @@ -0,0 +1,250 @@ +#!/usr/bin/env node + +import { readFileSync, writeFileSync, mkdirSync } from 'node:fs'; +import { join, dirname } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const ROOT = join(__dirname, '..'); + +async function loadSpec(cliPath) { + if (cliPath) return JSON.parse(readFileSync(cliPath, 'utf-8')); + const res = await fetch('http://localhost:3000/api/openapi.json'); + if (!res.ok) throw new Error('HTTP ' + res.status); + return await res.json(); +} + +function cleanOpId(opId) { + if (!opId || typeof opId !== 'string') return 'unnamed'; + return opId + .replace(/^[A-Za-z0-9]+Controller_?/, '') + .replace(/^Resolution_?/, '') + .replace(/[^a-zA-Z0-9_]/g, '_') + .replace(/^_+|_+$/g, '') || 'unnamed'; +} + +function tsType(def) { + if (!def || typeof def !== 'object') return 'unknown'; + if (typeof def.$ref === 'string') return sanitizeTsName(String(def.$ref.split('/').pop())); + if (def.type === 'string') return 'string'; + if (def.type === 'integer' || def.type === 'number') return 'number'; + if (def.type === 'boolean') return 'boolean'; + if (def.type === 'array') { + const items = def.items && typeof def.items === 'object' ? def.items : { type: 'unknown' }; + return tsType(items) + '[]'; + } + if (Array.isArray(def.oneOf)) return def.oneOf.map(tsType).join(' | '); + if (Array.isArray(def.anyOf)) return def.anyOf.map(tsType).join(' | '); + if (def.additionalProperties && typeof def.additionalProperties === 'object') + return 'Record'; + if (def.type === 'object' || def.properties) return 'Record'; + return 'unknown'; +} + +function sanitizeTsName(name) { + const s = String(name == null ? 'unnamed' : name).replace(/[^a-zA-Z0-9_]/g, '_').replace(/^_+|_+$/g, ''); + return s || 'Unnamed'; +} + +function pathToTemplate(path) { + return String(path).replace(/\{([^}]+)\}/g, (_, p) => '${' + sanitizeTsName(p).charAt(0).toLowerCase() + sanitizeTsName(p).slice(1) + '}'); +} + +function pathParamNames(path) { + const out = []; + const re = /\{([^}]+)\}/g; + let m; + while ((m = re.exec(String(path)))) out.push(m[1]); + return out; +} + +function generateTypeScript(spec) { + const L = []; + L.push('// Auto-generated by scripts/generate-bindings.mjs — do not edit.'); + L.push(''); + const schemas = (spec.components && spec.components.schemas) || {}; + for (const [name, schema] of Object.entries(schemas)) { + if (!schema || typeof schema !== 'object') continue; + L.push('export interface ' + sanitizeTsName(name) + ' {'); + const props = schema.properties || {}; + const required = new Set(schema.required || []); + for (const [prop, def] of Object.entries(props)) { + const opt = required.has(prop) ? '' : '?'; + L.push(' ' + prop + opt + ': ' + tsType(def) + ';'); + } + L.push('}'); + L.push(''); + } + L.push('export interface GapmindClientConfig { baseUrl: string; token?: string; }'); + L.push(''); + L.push('export class GapmindClient {'); + L.push(' private baseUrl: string;'); + L.push(' private token?: string;'); + L.push(' constructor(config: GapmindClientConfig) {'); + L.push(" this.baseUrl = config.baseUrl.replace(/\\/$/, '');"); + L.push(' this.token = config.token;'); + L.push(' }'); + L.push(' private headers(): Record {'); + L.push(" const h: Record = { 'Content-Type': 'application/json' };"); + L.push(' if (this.token) h["Authorization"] = "Bearer " + this.token;'); + L.push(' return h;'); + L.push(' }'); + L.push(' private async request(method: string, path: string, body?: unknown): Promise {'); + L.push(' const res = await fetch(this.baseUrl + path, { method, headers: this.headers(), body: body ? JSON.stringify(body) : undefined });'); + L.push(' if (!res.ok) throw new Error("API error " + res.status + ": " + (await res.text()));'); + L.push(' return res.json() as Promise;'); + L.push(' }'); + L.push(''); + for (const [path, methods] of Object.entries(spec.paths || {})) { + if (!methods || typeof methods !== 'object') continue; + for (const [method, op] of Object.entries(methods)) { + if (!op || typeof op !== 'object' || !op.operationId) continue; + if (!['get','post','put','patch','delete'].includes(method)) continue; + const name = cleanOpId(op.operationId); + const http = method.toUpperCase(); + const qps = ((op.parameters || []).filter((p) => p && p.in === 'query')); + const tpl = pathToTemplate(path); + const pNames = pathParamNames(path); + const params = []; + for (const pn of pNames) params.push(sanitizeTsName(pn).charAt(0).toLowerCase() + sanitizeTsName(pn).slice(1) + ': string'); + for (const qp of qps) { + const qn = String(qp.name); + params.push(qn + (qp.required ? ': string' : '?: string')); + } + const hasBody = !!(op.requestBody && op.requestBody.content); + if (hasBody) params.push('body: unknown'); + L.push(' async ' + name + '(' + params.join(', ') + '): Promise {'); + if (qps.length) { + L.push(' const qs = new URLSearchParams();'); + for (const qp of qps) { + const qn = String(qp.name); + L.push(' if (' + qn + ' !== undefined) qs.set(' + JSON.stringify(qn) + ', String(' + qn + '));'); + } + const suffix = ' + (qs.toString() ? "?" + qs.toString() : "")'; + L.push(' return this.request("' + http + '", `' + tpl + '`' + suffix + (hasBody ? ', body' : '') + ');'); + } else { + L.push(' return this.request("' + http + '", `' + tpl + '`' + (hasBody ? ', body' : '') + ');'); + } + L.push(' }'); + L.push(''); + } + } + L.push('}'); + return L.join('\n'); +} + +function sanitizeRustName(name) { + const parts = String(name == null ? 'unnamed' : name).split(/[^a-zA-Z0-9]+/).filter(Boolean); + const s = parts.map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join('') || 'Unnamed'; + return s.replace(/^[^A-Za-z_]/, '_'); +} +function sanitizeRustField(name) { + const reserved = ['type','match','struct','enum','fn','pub','use','mod','crate','self','super','move','ref']; + let s = String(name).replace(/[^a-zA-Z0-9_]/g, '_'); + if (!s) s = 'field'; + // camelCase -> snake_case + s = s.replace(/([a-z0-9])([A-Z])/g, '$1_$2'); + if (/^[0-9]/.test(s)) s = '_' + s; + s = s.toLowerCase(); + if (reserved.includes(s)) s += '_'; + return s; +} +function rustType(def, optional) { + let inner = 'serde_json::Value'; + if (def && typeof def === 'object') { + if (typeof def.$ref === 'string') inner = sanitizeRustName(String(def.$ref.split('/').pop())); + else if (def.type === 'string') inner = 'String'; + else if (def.type === 'integer') inner = 'i64'; + else if (def.type === 'number') inner = 'f64'; + else if (def.type === 'boolean') inner = 'bool'; + else if (def.type === 'array') inner = 'Vec<' + rustType(def.items || {}, false) + '>'; + else if (def.type === 'object' || def.properties) inner = 'serde_json::Value'; + } + return optional ? 'Option<' + inner + '>' : inner; +} + +function generateRust(spec) { + const L = []; + L.push('// Auto-generated by scripts/generate-bindings.mjs — do not edit.'); + L.push('use serde::{Deserialize, Serialize};'); + L.push(''); + const schemas = (spec.components && spec.components.schemas) || {}; + for (const [name, schema] of Object.entries(schemas)) { + if (!schema || typeof schema !== 'object') continue; + const props = schema.properties || {}; + if (schema.type !== 'object' && !Object.keys(props).length) continue; + const sn = sanitizeRustName(name); + const required = new Set(schema.required || []); + L.push('#[derive(Debug, Clone, Serialize, Deserialize)]'); + L.push('pub struct ' + sn + ' {'); + for (const [prop, def] of Object.entries(props)) { + const f = sanitizeRustField(prop); + if (f !== prop) L.push(' #[serde(rename = "' + prop + '")]'); + if (!required.has(prop)) L.push(' #[serde(default, skip_serializing_if = "Option::is_none")]'); + L.push(' pub ' + f + ': ' + rustType(def, !required.has(prop)) + ','); + } + L.push('}'); + L.push(''); + } + L.push('#[derive(Debug, Clone)]'); + L.push('pub struct GapmindClient { base_url: String, token: Option, http: reqwest::Client }'); + L.push(''); + L.push('impl GapmindClient {'); + L.push(' pub fn new(base_url: impl Into, token: Option) -> Self {'); + L.push(' Self { base_url: base_url.into().trim_end_matches(\'/\').to_string(), token, http: reqwest::Client::new() }'); + L.push(' }'); + L.push(' fn auth(&self, b: reqwest::RequestBuilder) -> reqwest::RequestBuilder {'); + L.push(' match &self.token { Some(t) => b.bearer_auth(t), None => b }'); + L.push(' }'); + L.push(' pub async fn get_json(&self, path: &str) -> Result {'); + L.push(' let url = format!("{}{}", self.base_url, path);'); + L.push(' let res = self.auth(self.http.get(&url)).send().await?.error_for_status()?;'); + L.push(' res.json().await'); + L.push(' }'); + L.push(' pub async fn post_json(&self, path: &str, body: &serde_json::Value) -> Result {'); + L.push(' let url = format!("{}{}", self.base_url, path);'); + L.push(' let res = self.auth(self.http.post(&url).json(body)).send().await?.error_for_status()?;'); + L.push(' res.json().await'); + L.push(' }'); + for (const [path, methods] of Object.entries(spec.paths || {})) { + if (!methods || typeof methods !== 'object') continue; + for (const [method, op] of Object.entries(methods)) { + if (!op || typeof op !== 'object' || !op.operationId) continue; + if (!['get','post','put','patch','delete'].includes(method)) continue; + const fnName = sanitizeRustField(cleanOpId(op.operationId)); + const pNames = pathParamNames(path); + const qps = ((op.parameters || []).filter((p) => p && p.in === 'query')).map((p) => String(p.name)); + const args = [...pNames.map((p) => sanitizeRustField(p) + ': &str'), ...qps.map((q) => sanitizeRustField(q) + ': Option<&str>')]; + if (op.requestBody) args.push('body: &serde_json::Value'); + L.push(' pub async fn ' + fnName + '(&self' + (args.length ? ', ' + args.join(', ') : '') + ') -> Result {'); + let rsPath = String(path); + for (const p of pNames) rsPath = rsPath.split('{' + p + '}').join('{}'); + // build format string with positional args + const fmtArgs = pNames.map((p) => sanitizeRustField(p)).join(', '); + L.push(' let mut url = format!("{}{}", self.base_url, format!("' + rsPath.replace(/"/g, '') + '"' + (fmtArgs ? ', ' + fmtArgs : '') + '));'); + if (qps.length) { + L.push(' let mut q: Vec<(&str, String)> = Vec::new();'); + for (const q of qps) { + const f = sanitizeRustField(q); + L.push(' if let Some(v) = ' + f + ' { q.push(("' + q + '", v.to_string())); }'); + } + L.push(' if (!q.is_empty()) { let s: Vec = q.iter().map(|(k,v)| format!("{}={}", k, v)).collect(); url.push_str(&format!("?{}", s.join("&"))); }'); + } + if (method === 'get') L.push(' self.get_json(&url[self.base_url.len()..]).await'); + else if (method === 'post') L.push(' self.post_json(&url[self.base_url.len()..], body).await'); + else L.push(' { let res = self.auth(self.http.request(reqwest::Method::' + method.toUpperCase() + ', &url)).send().await?.error_for_status()?; res.json().await }'); + L.push(' }'); + } + } + L.push('}'); + return L.join('\n'); +} + +const spec = await loadSpec(process.argv[2]); +console.log('Loaded: ' + spec.info?.title + ' v' + spec.info?.version + ' paths=' + Object.keys(spec.paths || {}).length); +mkdirSync(join(ROOT, 'clients', 'typescript'), { recursive: true }); +writeFileSync(join(ROOT, 'clients', 'typescript', 'gapmind.ts'), generateTypeScript(spec)); +mkdirSync(join(ROOT, 'clients', 'rust', 'src'), { recursive: true }); +writeFileSync(join(ROOT, 'clients', 'rust', 'src', 'lib.rs'), generateRust(spec)); +writeFileSync(join(ROOT, 'clients', 'rust', 'Cargo.toml'), '[package]\nname = "gapmind-client"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\nreqwest = { version = "0.12", features = ["json"] }\n'); +console.log('Done.'); diff --git a/services/dht/dht_node.go b/services/dht/dht_node.go new file mode 100644 index 0000000..9f55816 --- /dev/null +++ b/services/dht/dht_node.go @@ -0,0 +1,294 @@ +package main + +import ( + "bytes" + "crypto/rand" + "encoding/binary" + "fmt" + "net" + "sort" + "sync" + "time" +) + +type SniffEvent struct { + InfoHash string + IP string + Port int + Query string + NodeID string + At time.Time +} + +type DHTNode struct { + conn *net.UDPConn + selfID []byte + mu sync.Mutex + seen map[string]time.Time + onSniff func(SniffEvent) +} + +var bootstrapNodes = []string{ + "router.bittorrent.com:6881", + "router.utorrent.com:6881", + "dht.transmissionbt.com:6881", + "router.bitcomet.com:6881", +} + +func bEncode(v any) []byte { + switch t := v.(type) { + case string: + return []byte(fmt.Sprintf("%d:%s", len(t), t)) + case []byte: + return []byte(fmt.Sprintf("%d:%s", len(t), string(t))) + case int: + return []byte(fmt.Sprintf("i%de", t)) + case int64: + return []byte(fmt.Sprintf("i%de", t)) + case map[string]any: + keys := make([]string, 0, len(t)) + for k := range t { + keys = append(keys, k) + } + sort.Strings(keys) + var b bytes.Buffer + b.WriteByte('d') + for _, k := range keys { + b.Write(bEncode(k)) + b.Write(bEncode(t[k])) + } + b.WriteByte('e') + return b.Bytes() + default: + return []byte{} + } +} + +type decoder struct { + b []byte + pos int +} + +func bDecodeDict(b []byte) (map[string]any, bool) { + d := &decoder{b: b} + v, ok := d.value() + m, ok2 := v.(map[string]any) + return m, ok && ok2 +} + +func (d *decoder) value() (any, bool) { + if d.pos >= len(d.b) { + return nil, false + } + c := d.b[d.pos] + switch { + case c == 'd': + d.pos++ + m := map[string]any{} + for d.pos < len(d.b) && d.b[d.pos] != 'e' { + ks, ok := d.bytes() + if !ok { + return nil, false + } + v, ok := d.value() + if !ok { + return nil, false + } + m[string(ks)] = v + } + if d.pos >= len(d.b) { + return nil, false + } + d.pos++ + return m, true + case c == 'l': + d.pos++ + var l []any + for d.pos < len(d.b) && d.b[d.pos] != 'e' { + v, ok := d.value() + if !ok { + return nil, false + } + l = append(l, v) + } + if d.pos >= len(d.b) { + return nil, false + } + d.pos++ + return l, true + case c == 'i': + d.pos++ + end := bytes.IndexByte(d.b[d.pos:], 'e') + if end < 0 { + return nil, false + } + var n int64 + _, _ = fmt.Sscanf(string(d.b[d.pos:d.pos+end]), "%d", &n) + d.pos += end + 1 + return n, true + case c >= '0' && c <= '9': + b, ok := d.bytes() + return b, ok + } + return nil, false +} + +func (d *decoder) bytes() ([]byte, bool) { + colon := bytes.IndexByte(d.b[d.pos:], ':') + if colon < 0 { + return nil, false + } + var n int + _, _ = fmt.Sscanf(string(d.b[d.pos:d.pos+colon]), "%d", &n) + d.pos += colon + 1 + if n < 0 || d.pos+n > len(d.b) { + return nil, false + } + out := make([]byte, n) + copy(out, d.b[d.pos:d.pos+n]) + d.pos += n + return out, true +} + +func dictStr(m map[string]any, key string) []byte { + if a, ok := m[key].(map[string]any); ok { + _ = a + } + if b, ok := m[key].([]byte); ok { + return b + } + return nil +} + +func ListenDHT(listen string, onSniff func(SniffEvent)) (*DHTNode, error) { + addr, err := net.ResolveUDPAddr("udp", listen) + if err != nil { + return nil, err + } + conn, err := net.ListenUDP("udp", addr) + if err != nil { + return nil, err + } + id := make([]byte, 20) + _, _ = rand.Read(id) + n := &DHTNode{conn: conn, selfID: id, seen: map[string]time.Time{}, onSniff: onSniff} + go n.loop() + go n.bootstrap() + go n.crawlLoop() + return n, nil +} + +func (n *DHTNode) loop() { + buf := make([]byte, 8192) + for { + m, addr, err := n.conn.ReadFromUDP(buf) + if err != nil { + continue + } + pkt := make([]byte, m) + copy(pkt, buf[:m]) + go n.handle(pkt, addr) + } +} + +func (n *DHTNode) handle(pkt []byte, addr *net.UDPAddr) { + msg, ok := bDecodeDict(pkt) + if !ok { + return + } + y, _ := msg["y"].([]byte) + if string(y) != "q" { + return + } + q, _ := msg["q"].([]byte) + a, _ := msg["a"].(map[string]any) + t := dictStr(msg, "t") + if len(t) == 0 { + t = []byte("aa") + } + querierID := "" + if a != nil { + if id := dictStr(a, "id"); len(id) == 20 { + querierID = fmt.Sprintf("%x", id) + } + } + reply := func(extra map[string]any) { + r := map[string]any{"id": n.selfID} + for k, v := range extra { + r[k] = v + } + resp := map[string]any{"t": string(t), "y": "r", "r": r} + _, _ = n.conn.WriteToUDP(bEncode(resp), addr) + } + switch string(q) { + case "ping": + reply(map[string]any{}) + case "find_node": + reply(map[string]any{"nodes": []byte{}}) + + go n.findNode(addr, dictStr(a, "target")) + case "get_peers": + ih := dictStr(a, "info_hash") + if len(ih) == 20 { + n.sniff("get_peers", ih, querierID, addr) + } + + reply(map[string]any{"nodes": []byte{}, "token": "gapmind", "values": []any{}}) + case "announce_peer": + ih := dictStr(a, "info_hash") + if len(ih) == 20 { + n.sniff("announce_peer", ih, querierID, addr) + } + reply(map[string]any{}) + case "sample_infohashes": + reply(map[string]any{"interval": 180, "nodes": []byte{}, "samples": []byte{}}) + } +} + +func (n *DHTNode) sniff(query string, infoHash []byte, querier string, addr *net.UDPAddr) { + hexHash := fmt.Sprintf("%x", infoHash) + n.mu.Lock() + last, dup := n.seen[hexHash] + if !dup || time.Since(last) > 5*time.Minute { + n.seen[hexHash] = time.Now() + dup = false + } + n.mu.Unlock() + if dup { + return + } + if n.onSniff != nil { + n.onSniff(SniffEvent{InfoHash: hexHash, IP: addr.IP.String(), Port: addr.Port, Query: query, NodeID: querier, At: time.Now()}) + } +} + +func (n *DHTNode) bootstrap() { + for _, b := range bootstrapNodes { + addr, err := net.ResolveUDPAddr("udp", b) + if err != nil { + continue + } + n.findNode(addr, n.selfID) + } +} + +func (n *DHTNode) crawlLoop() { + t := time.NewTicker(60 * time.Second) + defer t.Stop() + for range t.C { + n.bootstrap() + } +} + +func (n *DHTNode) findNode(addr *net.UDPAddr, target []byte) { + if len(target) != 20 { + target = n.selfID + } + msg := map[string]any{"t": "fn", "y": "q", "q": "find_node", + "a": map[string]any{"id": n.selfID, "target": string(target)}} + _, _ = n.conn.WriteToUDP(bEncode(msg), addr) +} + +func (n *DHTNode) Close() { _ = n.conn.Close() } + +var _ = binary.BigEndian diff --git a/services/dht/go.mod b/services/dht/go.mod new file mode 100644 index 0000000..ac27b81 --- /dev/null +++ b/services/dht/go.mod @@ -0,0 +1,3 @@ +module gapmind/dht + +go 1.23 diff --git a/services/dht/main.go b/services/dht/main.go new file mode 100644 index 0000000..0b9ce79 --- /dev/null +++ b/services/dht/main.go @@ -0,0 +1,320 @@ +package main + +import ( + "bytes" + "encoding/binary" + "encoding/hex" + "encoding/json" + "flag" + "fmt" + "io" + "net" + "net/http" + "net/url" + "os" + "strings" + "time" +) + +var builtInTrackers = []string{ + "udp://tracker.opentrackr.org:1337/announce", + "udp://open.stealth.si:80/announce", + "udp://tracker.torrent.eu.org:451/announce", +} + +var builtInRSS = []string{ + "https://eztv.re/showlist/", + "https://nyaa.si/?page=rss", + "https://www.torrentdownloads.me/rss.xml", + "https://fosstorrents.com/feed/rss.xml", +} + +func registryList(envURL, fallbackEnv string, builtIn []string) []string { + if u := os.Getenv(envURL); u != "" { + if req, err := http.NewRequest(http.MethodGet, u, nil); err == nil { + if resp, err := http.DefaultClient.Do(req); err == nil { + var list []string + if json.NewDecoder(resp.Body).Decode(&list) == nil && len(list) > 0 { + resp.Body.Close() + return list + } + resp.Body.Close() + } + } + } + if raw := os.Getenv(fallbackEnv); raw != "" { + return strings.Split(raw, ",") + } + return builtIn +} + +func main() { + central := flag.String("central", envOr("CENTRAL_URL", "http://127.0.0.1:3000"), "central gapmind URL") + interval := flag.Duration("interval", 10*time.Minute, "RSS re-ping interval") + listen := flag.String("listen", envOr("DHT_LISTEN", ":6881"), "UDP listen addr for passive DHT node") + passive := flag.Bool("passive", true, "run passive DHT get_peers/announce_peer sniffer") + flag.Parse() + client := &http.Client{Timeout: 20 * time.Second} + names := map[string]string{} + + pingRSS := func() []string { + rss := registryList("RSS_REGISTRY_URL", "RSS_FEEDS", builtInRSS) + found := scrapeRSSNames(client, rss, names) + trackers := registryList("TRACKER_REGISTRY_URL", "TRACKERS", builtInTrackers) + + raw := make([][]byte, 0, len(found)) + for _, h := range found { + if b, err := hex.DecodeString(h); err == nil { + raw = append(raw, b) + } + } + meta := map[string]TrackerMeta{} + for _, t := range trackers { + if u, err := url.Parse(t); err == nil && u.Scheme == "udp" { + for k, v := range udpScrape(u.Host, raw) { + meta[k] = v + } + break + } + } + for _, h := range found { + m := meta[h] + postJSON(client, *central+"/api/dht/torrents", map[string]any{ + "infoHash": h, "name": names[h], "source": "rss-ping+tracker-scrape", + "seeders": m.Seeders, "leechers": m.Leechers, + }) + } + return found + } + + if *passive { + node, err := ListenDHT(*listen, func(ev SniffEvent) { + + trackers := registryList("TRACKER_REGISTRY_URL", "TRACKERS", builtInTrackers) + raw, _ := hex.DecodeString(ev.InfoHash) + counts := TrackerMeta{} + for _, t := range trackers { + if u, err := url.Parse(t); err == nil && u.Scheme == "udp" { + if m, ok := udpScrape(u.Host, [][]byte{raw})[ev.InfoHash]; ok { + counts = m + break + } + } + } + postJSON(client, *central+"/api/dht/torrents", map[string]any{ + "infoHash": ev.InfoHash, "name": names[ev.InfoHash], + "source": "dht-sniff:" + ev.Query, + "seeders": counts.Seeders, "leechers": counts.Leechers, + }) + postJSON(client, *central+"/api/dht/peers", map[string]any{ + "infoHash": ev.InfoHash, + "peers": []map[string]any{{"address": ev.IP, "port": ev.Port, "client": "dht-" + ev.Query}}, + }) + fmt.Printf("sniff %s %s %s:%d seeders=%d\n", ev.Query, ev.InfoHash, ev.IP, ev.Port, counts.Seeders) + }) + if err != nil { + fmt.Println("dht listen failed:", err) + } else { + defer node.Close() + fmt.Println("dht passive listener on", *listen) + } + } + for { + hashes := pingRSS() + _ = hashes + time.Sleep(*interval) + } +} + +func scrapeRSSNames(client *http.Client, feeds []string, names map[string]string) []string { + seen := map[string]bool{} + for _, f := range feeds { + resp, err := client.Get(f) + if err != nil { + continue + } + body, _ := io.ReadAll(io.LimitReader(resp.Body, 4<<20)) + resp.Body.Close() + text := strings.ReplaceAll(string(body), "\"", " ") + for _, tok := range strings.Fields(text) { + lower := strings.ToLower(tok) + if i := strings.Index(lower, "btih:"); i >= 0 { + h := lower[i+5 : min(i+45, len(lower))] + if len(h) == 40 && isHex(h) && !seen[h] { + seen[h] = true + + if j := strings.Index(tok, "dn="); j >= 0 { + if name, err := url.QueryUnescape(strings.TrimRight(tok[j+3:], "&")); err == nil && name != "" && names[h] == "" { + names[h] = name[:min(len(name), 200)] + } + } + } + } + if len(tok) == 40 && isHex(strings.ToLower(tok)) { + seen[strings.ToLower(tok)] = true + } + } + } + out := make([]string, 0, len(seen)) + for h := range seen { + out = append(out, h) + if len(out) >= 50 { + break + } + } + return out +} + +func isHex(s string) bool { _, err := hex.DecodeString(s); return err == nil } +func min(a, b int) int { + if a < b { + return a + } + return b +} +func envOr(k, d string) string { + if v := os.Getenv(k); v != "" { + return v + } + return d +} + +func crawlTrackers(infoHash string, trackers []string) []map[string]any { + var peers []map[string]any + raw, _ := hex.DecodeString(infoHash) + for _, t := range trackers { + u, err := url.Parse(t) + if err != nil || u.Scheme != "udp" { + continue + } + if got := udpAnnounce(u.Host, raw); len(got) > 0 { + peers = append(peers, got...) + } + if len(peers) >= 100 { + break + } + } + return peers +} + +func udpAnnounce(host string, infoHash []byte) []map[string]any { + addr, err := net.ResolveUDPAddr("udp", host) + if err != nil { + return nil + } + conn, err := net.DialUDP("udp", nil, addr) + if err != nil { + return nil + } + defer conn.Close() + _ = conn.SetDeadline(time.Now().Add(5 * time.Second)) + transID := uint32(time.Now().UnixNano()) + var req bytes.Buffer + _ = binary.Write(&req, binary.BigEndian, uint64(0x41727101980)) + _ = binary.Write(&req, binary.BigEndian, uint32(0)) + _ = binary.Write(&req, binary.BigEndian, transID) + if _, err := conn.Write(req.Bytes()); err != nil { + return nil + } + resp := make([]byte, 16) + n, err := conn.Read(resp) + if err != nil || n < 16 { + return nil + } + connID := resp[8:16] + peerID := make([]byte, 20) + copy(peerID, []byte("-GM0001-123456789012")) + var ann bytes.Buffer + ann.Write(connID) + _ = binary.Write(&ann, binary.BigEndian, uint32(1)) + _ = binary.Write(&ann, binary.BigEndian, transID+1) + ann.Write(infoHash) + ann.Write(peerID) + _ = binary.Write(&ann, binary.BigEndian, uint64(0)) + _ = binary.Write(&ann, binary.BigEndian, uint64(0)) + _ = binary.Write(&ann, binary.BigEndian, uint64(0)) + _ = binary.Write(&ann, binary.BigEndian, int32(-1)) + _ = binary.Write(&ann, binary.BigEndian, uint32(0)) + _ = binary.Write(&ann, binary.BigEndian, uint32(0)) + _ = binary.Write(&ann, binary.BigEndian, int32(-1)) + _ = binary.Write(&ann, binary.BigEndian, uint16(6881)) + if _, err := conn.Write(ann.Bytes()); err != nil { + return nil + } + buf := make([]byte, 4096) + _ = conn.SetDeadline(time.Now().Add(5 * time.Second)) + n, err = conn.Read(buf) + if err != nil || n < 20 { + return nil + } + var out []map[string]any + for i := 20; i+6 <= n; i += 6 { + ip := net.IP(buf[i : i+4]) + port := int(binary.BigEndian.Uint16(buf[i+4 : i+6])) + out = append(out, map[string]any{"address": ip.String(), "port": port}) + } + return out +} + +func handshakeAll(infoHash string, peers []map[string]any) []map[string]any { + raw, _ := hex.DecodeString(infoHash) + var out []map[string]any + for _, p := range peers { + host, _ := p["address"].(string) + var port int + switch v := p["port"].(type) { + case int: + port = v + case float64: + port = int(v) + } + client := handshakeOne(host, port, raw) + entry := map[string]any{"address": host, "port": port} + if client != "" { + entry["client"] = client + } + out = append(out, entry) + if len(out) >= 100 { + break + } + } + return out +} + +func handshakeOne(host string, port int, infoHash []byte) string { + conn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", host, port), 4*time.Second) + if err != nil { + return "" + } + defer conn.Close() + _ = conn.SetDeadline(time.Now().Add(5 * time.Second)) + peerID := []byte("-GM0001-123456789012") + hs := append([]byte{19}, []byte("BitTorrent protocol")...) + hs = append(hs, []byte{0, 0, 0, 0, 0, 0x10, 0, 0}...) + hs = append(hs, infoHash...) + hs = append(hs, peerID...) + if _, err := conn.Write(hs); err != nil { + return "" + } + resp := make([]byte, 68+256) + n, err := conn.Read(resp) + if err != nil || n < 68 { + return "" + } + peerStr := string(resp[48:68]) + return strings.Trim(peerStr, "\x00 ") +} + +func postJSON(client *http.Client, endpoint string, body any) { + raw, _ := json.Marshal(body) + req, _ := http.NewRequest(http.MethodPost, endpoint, bytes.NewReader(raw)) + req.Header.Set("Content-Type", "application/json") + if tok := os.Getenv("DHT_API_TOKEN"); tok != "" { + req.Header.Set("Authorization", "Bearer "+tok) + } + resp, err := client.Do(req) + if err == nil { + _, _ = io.Copy(io.Discard, resp.Body) + _ = resp.Body.Close() + } +} diff --git a/services/dht/tracker.go b/services/dht/tracker.go new file mode 100644 index 0000000..b85cd8e --- /dev/null +++ b/services/dht/tracker.go @@ -0,0 +1,80 @@ +package main + +import ( + "bytes" + "encoding/binary" + "encoding/hex" + "net" + "time" +) + +type TrackerMeta struct { + Seeders int + Leechers int + Completed int +} + +func udpScrape(host string, infoHashes [][]byte) map[string]TrackerMeta { + out := map[string]TrackerMeta{} + if len(infoHashes) == 0 { + return out + } + addr, err := net.ResolveUDPAddr("udp", host) + if err != nil { + return out + } + conn, err := net.DialUDP("udp", nil, addr) + if err != nil { + return out + } + defer conn.Close() + _ = conn.SetDeadline(time.Now().Add(6 * time.Second)) + transID := uint32(time.Now().UnixNano() & 0x7fffffff) + var req bytes.Buffer + _ = binary.Write(&req, binary.BigEndian, uint64(0x41727101980)) + _ = binary.Write(&req, binary.BigEndian, uint32(0)) + _ = binary.Write(&req, binary.BigEndian, transID) + if _, err := conn.Write(req.Bytes()); err != nil { + return out + } + resp := make([]byte, 16) + n, err := conn.Read(resp) + if err != nil || n < 16 || binary.BigEndian.Uint32(resp[4:8]) != transID { + return out + } + connID := resp[8:16] + if len(infoHashes) > 70 { + infoHashes = infoHashes[:70] + } + var sc bytes.Buffer + sc.Write(connID) + _ = binary.Write(&sc, binary.BigEndian, uint32(2)) + _ = binary.Write(&sc, binary.BigEndian, transID+1) + for _, h := range infoHashes { + if len(h) == 20 { + sc.Write(h) + } + } + if _, err := conn.Write(sc.Bytes()); err != nil { + return out + } + buf := make([]byte, 8+12*74) + _ = conn.SetDeadline(time.Now().Add(6 * time.Second)) + n, err = conn.Read(buf) + if err != nil || n < 8 { + return out + } + off := 8 + for i, h := range infoHashes { + if off+12 > n { + break + } + _ = i + seeders := int(binary.BigEndian.Uint32(buf[off : off+4])) + done := int(binary.BigEndian.Uint32(buf[off+4 : off+8])) + leech := int(binary.BigEndian.Uint32(buf[off+8 : off+12])) + out[hex.EncodeToString(h)] = TrackerMeta{Seeders: seeders, Leechers: leech, Completed: done} + off += 12 + } + return out +} diff --git a/services/orchestra/.gitignore b/services/orchestra/.gitignore new file mode 100644 index 0000000..59695e2 --- /dev/null +++ b/services/orchestra/.gitignore @@ -0,0 +1 @@ +orchestra.json \ No newline at end of file diff --git a/services/orchestra/go.mod b/services/orchestra/go.mod new file mode 100644 index 0000000..7d0b5e1 --- /dev/null +++ b/services/orchestra/go.mod @@ -0,0 +1,3 @@ +module crit.rip/gapmind/services/orchestra + +go 1.26.7 diff --git a/services/orchestra/main.go b/services/orchestra/main.go new file mode 100644 index 0000000..32bcd82 --- /dev/null +++ b/services/orchestra/main.go @@ -0,0 +1,451 @@ +package main + +import ( + "bytes" + "encoding/json" + "flag" + "fmt" + "io" + "net/http" + "os" + "strings" + "time" + + "crit.rip/gapmind/services/orchestra/service" +) + +type Target struct { + Host string `json:"host"` + User string `json:"user"` + Service string `json:"service"` + Binary string `json:"binary"` + RemoteDir string `json:"remoteDir"` + CentralURL string `json:"centralURL"` + Token string `json:"token"` + SSHPassword string `json:"sshPassword"` + PublicURL string `json:"publicURL"` + Latitude string `json:"latitude"` + Longitude string `json:"longitude"` + TimeoutSec int `json:"timeoutSeconds"` + DHTListenPort int `json:"dhtListenPort"` + DHTPassive *bool `json:"dhtPassive"` + RSSInterval string `json:"rssInterval"` + Trackers string `json:"trackers"` + RSSFeeds string `json:"rssFeeds"` + DHTAPIToken string `json:"dhtApiToken"` +} + +func (t Target) nodeId() string { + if t.Service == "dht" { + port := t.DHTListenPort + if port == 0 { + port = 6881 + } + return fmt.Sprintf("%s:%d", t.Host, port) + } + return t.Host +} + +func (t Target) resolvedNodeId() string { + host := sshHostname(t) + if host == "" { + host = t.Host + } + if t.Service == "dht" { + port := t.DHTListenPort + if port == 0 { + port = 6881 + } + return fmt.Sprintf("%s:%d", host, port) + } + return host +} + +func sshClientFor(t Target) (*service.SSHClient, error) { + remote := t.Host + if t.User != "" { + remote = t.User + "@" + t.Host + } + password := t.SSHPassword + if password == "" { + password = t.Token + } + client, err := service.NewSSHClient(remote, password) + if err != nil { + return nil, err + } + if t.TimeoutSec > 0 { + client.SetTimeout(time.Duration(t.TimeoutSec) * time.Second) + } + return client, nil +} + +func sshHostname(t Target) string { + client, err := sshClientFor(t) + if err != nil { + return "" + } + defer client.Close() + out, err := client.Run("ssh", client.Remote(), "hostname", "-s") + if err != nil { + return "" + } + host := strings.TrimSpace(string(out)) + if host == "" { + return "" + } + return strings.ToLower(host) +} + +type Config struct { + Targets []Target `json:"targets"` +} + +type peerUpdate struct { + NodeId string `json:"nodeId"` + Metadata map[string]interface{} `json:"metadata"` + Address string `json:"address,omitempty"` + Version string `json:"version,omitempty"` + Status string `json:"status,omitempty"` + Kind string `json:"kind,omitempty"` +} + +func loadConfig(path string) Config { + data, err := os.ReadFile(path) + if err != nil { + fail(err) + } + var config Config + if err := json.Unmarshal(data, &config); err != nil { + fail(err) + } + return config +} + +func filterTargets(targets []Target, only string) []Target { + if only == "" { + return targets + } + filter := map[string]bool{} + for _, s := range strings.Split(only, ",") { + filter[strings.TrimSpace(s)] = true + } + var out []Target + for _, t := range targets { + if filter[t.Service] { + out = append(out, t) + } + } + return out +} + +func main() { + configPath := flag.String("config", "orchestra.json", "path to deployment config") + only := flag.String("service", "", "filter to services, comma-separated (e.g. dht,pathfinder)") + flag.Parse() + + args := flag.Args() + if len(args) == 0 { + fail(fmt.Errorf("usage: orchestra [flags] deploy|sync|nuke")) + } + subcommand := args[0] + config := loadConfig(*configPath) + targets := filterTargets(config.Targets, *only) + + switch subcommand { + case "deploy": + cmdDeploy(targets) + case "sync": + fs := flag.NewFlagSet("sync", flag.ExitOnError) + restart := fs.Bool("restart", false, "restart remote services after metadata sync") + fs.Parse(args[1:]) + cmdSync(targets, *restart) + case "nuke": + fs := flag.NewFlagSet("nuke", flag.ExitOnError) + confirm := fs.Bool("yes", false, "confirm destructive nuke without prompting") + redeploy := fs.Bool("redeploy", true, "redeploy all targets after nuking") + fs.Parse(args[1:]) + cmdNuke(targets, *confirm, *redeploy) + default: + fail(fmt.Errorf("unknown subcommand %q: use deploy, sync, or nuke", subcommand)) + } +} + +func cmdDeploy(targets []Target) { + for _, target := range targets { + deploy(target) + } +} + +func cmdNuke(targets []Target, confirm, redeploy bool) { + if len(targets) == 0 { + fmt.Fprintln(os.Stderr, "no targets to nuke") + return + } + if !confirm { + fmt.Fprintf(os.Stderr, "nuke: will stop + wipe %d targets and local caches. Re-run with --yes to confirm.\n", len(targets)) + os.Exit(2) + } + for _, t := range targets { + nukeRemote(t) + } + nukeLocal() + if redeploy { + fmt.Println("nuke: redeploying network") + cmdDeploy(targets) + } + fmt.Println("nuke: done") +} + +func nukeRemote(t Target) { + client, err := sshClientFor(t) + if err != nil { + fmt.Fprintf(os.Stderr, "nuke: SSH connect failed for %s: %v\n", t.Host, err) + return + } + defer client.Close() + unit := "gapmind-" + t.Service + ".service" + remoteDir := t.RemoteDir + if remoteDir == "" { + remoteDir = ".local/share/gapmind" + } + remoteBinary := strings.TrimSuffix(remoteDir, "/") + "/gapmind-" + t.Service + + + script := fmt.Sprintf( + `set +e; runtime=/run/user/$(id -u); export XDG_RUNTIME_DIR=$runtime DBUS_SESSION_BUS_ADDRESS=unix:path=$runtime/bus; `+ + `systemctl --user stop %[1]q >/dev/null 2>&1; systemctl --user disable %[1]q >/dev/null 2>&1; `+ + `rm -f .config/systemd/user/%[1]q; systemctl --user daemon-reload >/dev/null 2>&1; `+ + `rm -f %[2]q %[2]q.upload; rm -rf %[3]q; rm -rf .local/share/gapmind/%[4]q*; echo NUKED`, + unit, remoteBinary, strings.TrimSuffix(remoteDir, "/"), t.Service, + ) + out, err := client.Run("ssh", client.Remote(), "sh", "-lc", script) + fmt.Printf("nuke: %s@%s %s\n", t.Service, t.Host, strings.TrimSpace(string(out))) + if err != nil { + fmt.Fprintf(os.Stderr, "nuke: remote wipe had errors on %s: %v\n", t.Host, err) + } +} + +func nukeLocal() { + + paths := []string{"gapmind.sqlite", "gapmind.sqlite-wal", "gapmind.sqlite-shm", "gapmind.sqlite-journal", "dist", "clients/typescript/gapmind.ts", "clients/rust/src/lib.rs"} + for _, p := range paths { + if err := os.RemoveAll(p); err != nil { + fmt.Fprintf(os.Stderr, "nuke: could not remove %s: %v\n", p, err) + continue + } + fmt.Printf("nuke: removed %s\n", p) + } +} + +func deploy(target Target) { + if target.Host == "" || target.Service == "" || target.Binary == "" { + fail(fmt.Errorf("each target needs host, service, and binary")) + } + if target.Token == "" && target.Service != "dht" { + fail(fmt.Errorf("target %s has no shared peer token", target.Host)) + } + if target.Service != "replica" && target.Service != "pathfinder" && target.Service != "dht" { + fail(fmt.Errorf("unknown service %q", target.Service)) + } + remoteDir := target.RemoteDir + if remoteDir == "" { + remoteDir = ".local/share/gapmind" + } + remoteBinary := strings.TrimSuffix(remoteDir, "/") + "/gapmind-" + target.Service + execStart := remoteBinary + if target.Service == "dht" { + port := target.DHTListenPort + if port == 0 { + port = 6881 + } + passive := true + if target.DHTPassive != nil { + passive = *target.DHTPassive + } + interval := target.RSSInterval + if interval == "" { + interval = "10m" + } + execStart = fmt.Sprintf("%s --listen :%d --passive=%t --interval %s", remoteBinary, port, passive, interval) + } + if !strings.HasPrefix(execStart, "/") { + execStart = "%h/" + strings.TrimPrefix(execStart, "./") + } + remote := target.Host + if target.User != "" { + remote = target.User + "@" + target.Host + } + environment := map[string]string{"CENTRAL_URL": target.CentralURL, "PEER_API_TOKEN": target.Token, "PEER_PUBLIC_URL": target.PublicURL} + if target.Service == "pathfinder" { + environment["NODE_LATITUDE"] = target.Latitude + environment["NODE_LONGITUDE"] = target.Longitude + } + if target.Service == "dht" { + port := target.DHTListenPort + if port == 0 { + port = 6881 + } + environment["DHT_LISTEN"] = fmt.Sprintf(":%d", port) + if target.Trackers != "" { + environment["TRACKERS"] = target.Trackers + } + if target.RSSFeeds != "" { + environment["RSS_FEEDS"] = target.RSSFeeds + } + if target.DHTAPIToken != "" { + environment["DHT_API_TOKEN"] = target.DHTAPIToken + } + } + password := target.SSHPassword + if password == "" { + password = target.Token + } + unit := service.UserUnit{Description: "Gapmind " + target.Service, ExecStart: execStart, Environment: environment} + client, err := service.NewSSHClient(remote, password) + if err != nil { + fail(err) + } + defer client.Close() + if target.TimeoutSec > 0 { + client.SetTimeout(time.Duration(target.TimeoutSec) * time.Second) + } + fmt.Printf("Deploying %s to %s\n", target.Service, remote) + if err := service.CopyAndInstall(client, target.Binary, remoteBinary, "gapmind-"+target.Service+".service", unit); err != nil { + fail(err) + } +} + +func cmdSync(targets []Target, restart bool) { + if len(targets) == 0 { + fmt.Fprintln(os.Stderr, "no targets to sync") + return + } + client := &http.Client{Timeout: 20 * time.Second} + + var updates []peerUpdate + for _, t := range targets { + if t.Service != "pathfinder" && t.Service != "dht" { + continue + } + meta := map[string]interface{}{} + if t.Latitude != "" { + meta["latitude"] = t.Latitude + } + if t.Longitude != "" { + meta["longitude"] = t.Longitude + } + if t.Service == "pathfinder" { + meta["transport"] = "outbound-relay" + } + if t.Service == "dht" { + port := t.DHTListenPort + if port == 0 { + port = 6881 + } + meta["dhtListenPort"] = port + meta["dhtPassive"] = true + if t.DHTPassive != nil { + meta["dhtPassive"] = *t.DHTPassive + } + } + meta["assembled"] = true + meta["assembledAt"] = time.Now().UTC().Format(time.RFC3339) + updates = append(updates, peerUpdate{ + NodeId: t.resolvedNodeId(), + Metadata: meta, + Kind: t.Service, + }) + } + if len(updates) == 0 { + fmt.Println("nothing to sync") + return + } + for _, t := range targets { + if t.CentralURL != "" { + syncDB(client, t.CentralURL, t.Token, updates) + break + } + } + + if restart { + for _, t := range targets { + restartRemote(t) + } + } +} + +func syncDB(client *http.Client, centralURL, token string, updates []peerUpdate) { + body, _ := json.Marshal(map[string]interface{}{"updates": updates}) + req, _ := http.NewRequest("POST", strings.TrimRight(centralURL, "/")+"/api/peers/metadata", bytes.NewReader(body)) + req.Header.Set("Content-Type", "application/json") + if token != "" { + req.Header.Set("Authorization", "Bearer "+token) + } + resp, err := client.Do(req) + if err != nil { + fmt.Fprintf(os.Stderr, "sync: central API request failed: %v\n", err) + return + } + defer resp.Body.Close() + respBody, _ := io.ReadAll(io.LimitReader(resp.Body, 4096)) + if resp.StatusCode >= 300 { + fmt.Fprintf(os.Stderr, "sync: central API returned HTTP %d: %s\n", resp.StatusCode, string(respBody)) + return + } + var result struct { + Applied int `json:"applied"` + Rejected []struct { + NodeId string `json:"nodeId"` + Error string `json:"error"` + } `json:"rejected"` + } + if err := json.Unmarshal(respBody, &result); err != nil { + fmt.Fprintf(os.Stderr, "sync: could not parse response: %v\n", err) + return + } + fmt.Printf("sync: %d peers updated, %d rejected\n", result.Applied, len(result.Rejected)) + for _, r := range result.Rejected { + fmt.Fprintf(os.Stderr, " rejected %s: %s\n", r.NodeId, r.Error) + } +} + +func RestartUnit(client *service.SSHClient, unitName string) error { + if _, err := client.Run("sudo systemctl daemon-reload"); err != nil { + return fmt.Errorf("daemon-reload failed: %w", err) + } + if _, err := client.Run("sudo systemctl restart " + unitName); err != nil { + return fmt.Errorf("restart failed: %w", err) + } + if _, err := client.Run("sudo systemctl enable " + unitName); err != nil { + return fmt.Errorf("enable failed: %w", err) + } + return nil +} + +func restartRemote(target Target) { + remote := target.Host + if target.User != "" { + remote = target.User + "@" + target.Host + } + password := target.SSHPassword + if password == "" { + password = target.Token + } + client, err := service.NewSSHClient(remote, password) + if err != nil { + fmt.Fprintf(os.Stderr, "restart: SSH connect failed for %s: %v\n", target.Host, err) + return + } + defer client.Close() + if target.TimeoutSec > 0 { + client.SetTimeout(time.Duration(target.TimeoutSec) * time.Second) + } + serviceName := "gapmind-" + target.Service + ".service" + fmt.Printf("restart: restarting %s on %s\n", serviceName, target.Host) + if err := RestartUnit(client, serviceName); err != nil { + fmt.Fprintf(os.Stderr, "restart: %s failed on %s: %v\n", serviceName, target.Host, err) + } +} + +func fail(err error) { fmt.Fprintln(os.Stderr, "orchestra:", err); os.Exit(1) } diff --git a/services/orchestra/orchestra.example.json b/services/orchestra/orchestra.example.json new file mode 100644 index 0000000..5e9ff76 --- /dev/null +++ b/services/orchestra/orchestra.example.json @@ -0,0 +1,62 @@ +{ + "targets": [ + { + "host": "192.168.1.1", + "user": "gapmind", + "service": "pathfinder", + "binary": "services/pathfinder/pathfinder", + "remoteDir": ".local/share/gapmind", + "centralURL": "https://reg.crit.rip", + "publicURL": "", + "latitude": "45.5229", + "longitude": "-122.9898", + "timeoutSeconds": 90, + "token": "abcxyz", + "sshPassword": "xyzabc" + }, + { + "host": "192.168.1.2", + "user": "gapmind", + "service": "pathfinder", + "binary": "services/pathfinder/pathfinder", + "remoteDir": ".local/share/gapmind", + "centralURL": "https://reg.crit.rip", + "publicURL": "", + "latitude": "43.8041", + "longitude": "-120.5542", + "timeoutSeconds": 90, + "token": "abcxyz", + "sshPassword": "xyzabc" + }, + { + "host": "192.168.1.3", + "user": "gapmind", + "service": "dht", + "binary": "services/dht/dht", + "remoteDir": ".local/share/gapmind", + "centralURL": "https://reg.crit.rip", + "timeoutSeconds": 90, + "token": "", + "sshPassword": "xyzabc", + "dhtListenPort": 6881, + "dhtPassive": true, + "rssInterval": "10m", + "trackers": "udp://tracker.opentrackr.org:1337/announce,udp://open.stealth.si:80/announce", + "rssFeeds": "https://nyaa.si/?page=rss" + }, + { + "host": "192.168.1.4", + "user": "gapmind", + "service": "dht", + "binary": "services/dht/dht", + "remoteDir": ".local/share/gapmind", + "centralURL": "https://reg.crit.rip", + "timeoutSeconds": 90, + "token": "", + "sshPassword": "xyzabc", + "dhtListenPort": 6882, + "dhtPassive": true, + "rssInterval": "10m" + } + ] +} diff --git a/services/orchestra/service/daemon.go b/services/orchestra/service/daemon.go new file mode 100644 index 0000000..1a03e32 --- /dev/null +++ b/services/orchestra/service/daemon.go @@ -0,0 +1,7 @@ +package service + +type UserUnit struct { + Description string + ExecStart string + Environment map[string]string +} diff --git a/services/orchestra/service/systemd.go b/services/orchestra/service/systemd.go new file mode 100644 index 0000000..2123c2b --- /dev/null +++ b/services/orchestra/service/systemd.go @@ -0,0 +1,145 @@ +package service + +import ( + "context" + "encoding/base64" + "fmt" + "os" + "os/exec" + "path" + "path/filepath" + "sort" + "strings" + "time" +) + +const defaultCommandTimeout = 45 * time.Second + +type SSHClient struct { + remote string + askPassPath string + password string + sshConfig string + timeout time.Duration +} + +func NewSSHClient(remote, password string) (*SSHClient, error) { + if remote == "" { + return nil, fmt.Errorf("remote host is required") + } + sshConfig := "/dev/null" + if home, err := os.UserHomeDir(); err == nil { + candidate := filepath.Join(home, ".ssh", "config") + if info, statErr := os.Stat(candidate); statErr == nil && info.Mode().IsRegular() { + sshConfig = candidate + } + } + client := &SSHClient{remote: remote, password: password, sshConfig: sshConfig, timeout: defaultCommandTimeout} + if password == "" { + return client, nil + } + file, err := os.CreateTemp("", "gapmind-ssh-askpass-*") + if err != nil { + return nil, fmt.Errorf("create SSH password helper: %w", err) + } + client.askPassPath = file.Name() + if _, err := file.WriteString("#!/bin/sh\nprintf '%s\\n' \"$GAPMIND_SSH_PASSWORD\"\n"); err != nil { + _ = file.Close() + client.Close() + return nil, err + } + if err := file.Close(); err != nil { + client.Close() + return nil, err + } + if err := os.Chmod(client.askPassPath, 0700); err != nil { + client.Close() + return nil, err + } + return client, nil +} + +func (c *SSHClient) Close() { + if c.askPassPath != "" { + _ = os.Remove(c.askPassPath) + } +} + +func (c *SSHClient) SetTimeout(timeout time.Duration) { + if timeout > 0 { + c.timeout = timeout + } +} + +func (c *SSHClient) Remote() string { + return c.remote +} + +func (c *SSHClient) command(ctx context.Context, name string, args ...string) *exec.Cmd { + connectionOptions := []string{ + "-F", c.sshConfig, + "-o", "ConnectTimeout=12", + "-o", "ConnectionAttempts=1", + "-o", "ServerAliveInterval=10", + "-o", "ServerAliveCountMax=2", + "-o", "NumberOfPasswordPrompts=1", + "-o", "StrictHostKeyChecking=accept-new", + "-o", "ClearAllForwardings=yes", + } + args = append(connectionOptions, args...) + if c.password != "" { + args = append([]string{"-o", "BatchMode=no", "-o", "PreferredAuthentications=password,keyboard-interactive", "-o", "PubkeyAuthentication=no"}, args...) + } + cmd := exec.CommandContext(ctx, name, args...) + if c.password != "" { + cmd.Env = append(os.Environ(), "SSH_ASKPASS="+c.askPassPath, "SSH_ASKPASS_REQUIRE=force", "DISPLAY=gapmind:0", "GAPMIND_SSH_PASSWORD="+c.password) + } + return cmd +} + +func (c *SSHClient) Run(name string, args ...string) ([]byte, error) { + ctx, cancel := context.WithTimeout(context.Background(), c.timeout) + defer cancel() + output, err := c.command(ctx, name, args...).CombinedOutput() + if ctx.Err() == context.DeadlineExceeded { + return output, fmt.Errorf("%s timed out after %s", name, c.timeout) + } + return output, err +} + +func (u UserUnit) Render() string { + lines := []string{"[Unit]", "Description=" + u.Description, "After=network-online.target", "", "[Service]", "Type=simple", "Restart=on-failure", "RestartSec=5"} + keys := make([]string, 0, len(u.Environment)) + for key := range u.Environment { + keys = append(keys, key) + } + sort.Strings(keys) + for _, key := range keys { + if value := u.Environment[key]; value != "" { + lines = append(lines, "Environment="+key+"="+systemdQuote(value)) + } + } + lines = append(lines, "ExecStart="+u.ExecStart, "", "[Install]", "WantedBy=default.target", "") + return strings.Join(lines, "\n") +} + +func systemdQuote(value string) string { + return `"` + strings.NewReplacer(`\`, `\\`, `"`, `\"`, "\n", "").Replace(value) + `"` +} + +func CopyAndInstall(client *SSHClient, localBinary, remoteBinary, unitName string, unit UserUnit) error { + if output, err := client.Run("ssh", client.remote, "mkdir", "-p", path.Dir(remoteBinary), ".config/systemd/user"); err != nil { + return fmt.Errorf("create remote directories: %w: %s", err, output) + } + temporaryBinary := remoteBinary + ".upload" + if output, err := client.Run("scp", localBinary, client.remote+":"+temporaryBinary); err != nil { + return fmt.Errorf("copy binary: %w: %s", err, output) + } + encoded := base64.StdEncoding.EncodeToString([]byte(unit.Render())) + remoteUnit := ".config/systemd/user/" + unitName + command := fmt.Sprintf("set -eu; user=$(id -un); loginctl enable-linger $user >/dev/null 2>&1 || true; runtime=/run/user/$(id -u); export XDG_RUNTIME_DIR=$runtime DBUS_SESSION_BUS_ADDRESS=unix:path=$runtime/bus; for attempt in 1 2 3 4 5; do test -S $runtime/bus && break; sleep 1; done; test -S $runtime/bus || { echo 'systemd user bus is unavailable after enabling lingering' >&2; exit 1; }; test ! -d %q || { echo 'deployment target is a directory: %s' >&2; exit 1; }; chmod +x %q; mv -f %q %q; printf %%s %q | base64 -d > %q; systemctl --user daemon-reload; systemctl --user enable --now %q; systemctl --user --no-pager is-active %q", remoteBinary, remoteBinary, temporaryBinary, temporaryBinary, remoteBinary, encoded, remoteUnit, unitName, unitName) + if output, err := client.Run("ssh", client.remote, "sh", "-lc", command); err != nil { + return fmt.Errorf("install systemd unit: %w: %s", err, output) + } + return nil +} diff --git a/services/pathfinder/go.mod b/services/pathfinder/go.mod new file mode 100644 index 0000000..103b7c9 --- /dev/null +++ b/services/pathfinder/go.mod @@ -0,0 +1,3 @@ +module crit.rip/gapmind/services/pathfinder + +go 1.26.7 diff --git a/services/pathfinder/main.go b/services/pathfinder/main.go new file mode 100644 index 0000000..476764b --- /dev/null +++ b/services/pathfinder/main.go @@ -0,0 +1,196 @@ +package main + +import ( + "bytes" + "encoding/json" + "flag" + "fmt" + "io" + "math" + "net" + "net/http" + "net/url" + "os" + "sort" + "strconv" + "strings" + "time" +) + +type Probe struct { + Latitude float64 `json:"latitude"` + Longitude float64 `json:"longitude"` + Milliseconds float64 `json:"milliseconds"` +} +type Estimate struct { + Latitude float64 `json:"latitude"` + Longitude float64 `json:"longitude"` + Confidence float64 `json:"confidence"` + Samples int `json:"samples"` +} +type relayCommand struct { + ID string `json:"id"` + Type string `json:"type"` + Host string `json:"host"` + Port string `json:"port"` +} +type relayEnvelope struct { + Command *relayCommand `json:"command"` +} + +func main() { + listen := flag.String("listen", "127.0.0.1:8092", "HTTP listen address") + flag.Parse() + go heartbeat() + go relay() + http.HandleFunc("/healthz", func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusNoContent) }) + http.HandleFunc("/probe", probe) + http.HandleFunc("/triangulate", triangulate) + fmt.Println(http.ListenAndServe(*listen, nil)) +} + +func probe(w http.ResponseWriter, r *http.Request) { + host := r.URL.Query().Get("host") + if host == "" { + http.Error(w, "host is required", http.StatusBadRequest) + return + } + port := r.URL.Query().Get("port") + if port == "" { + port = "443" + } + milliseconds, err := measure(host, port) + if err != nil { + http.Error(w, err.Error(), http.StatusBadGateway) + return + } + _ = json.NewEncoder(w).Encode(map[string]any{"host": host, "milliseconds": milliseconds}) +} + +func measure(host, port string) (float64, error) { + started := time.Now() + connection, err := net.DialTimeout("tcp", net.JoinHostPort(host, port), 3*time.Second) + if err != nil { + return 0, err + } + _ = connection.Close() + return float64(time.Since(started).Microseconds()) / 1000, nil +} + +func triangulate(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + http.Error(w, "POST required", http.StatusMethodNotAllowed) + return + } + var probes []Probe + if err := json.NewDecoder(r.Body).Decode(&probes); err != nil || len(probes) < 2 { + http.Error(w, "at least two valid probes are required", http.StatusBadRequest) + return + } + valid := make([]Probe, 0, len(probes)) + for _, probe := range probes { + if probe.Latitude >= -90 && probe.Latitude <= 90 && probe.Longitude >= -180 && probe.Longitude <= 180 && probe.Milliseconds > 0 { + valid = append(valid, probe) + } + } + if len(valid) < 2 { + http.Error(w, "at least two valid probes are required", http.StatusBadRequest) + return + } + _ = json.NewEncoder(w).Encode(weighted(valid)) +} + +func weighted(probes []Probe) Estimate { + var latitude, longitude, totalWeight float64 + values := make([]float64, len(probes)) + for index, probe := range probes { + weight := 1 / math.Max(probe.Milliseconds, 1) + latitude += probe.Latitude * weight + longitude += probe.Longitude * weight + totalWeight += weight + values[index] = probe.Milliseconds + } + sort.Float64s(values) + median, variance := values[len(values)/2], 0.0 + for _, value := range values { + variance += math.Pow(value-median, 2) + } + confidence := math.Max(0, math.Min(1, 1-math.Sqrt(variance/float64(len(values)))/math.Max(median, 1))) + return Estimate{Latitude: latitude / totalWeight, Longitude: longitude / totalWeight, Confidence: confidence, Samples: len(probes)} +} + +func heartbeat() { + central := os.Getenv("CENTRAL_URL") + if central == "" { + return + } + host, _ := os.Hostname() + latitude, _ := strconv.ParseFloat(os.Getenv("NODE_LATITUDE"), 64) + longitude, _ := strconv.ParseFloat(os.Getenv("NODE_LONGITUDE"), 64) + for { + body, _ := json.Marshal(map[string]any{"nodeId": host, "kind": "pathfinder", "address": os.Getenv("PEER_PUBLIC_URL"), "version": "0.2.0", "status": "online", "metadata": map[string]any{"transport": "outbound-relay", "latitude": latitude, "longitude": longitude}}) + request, _ := http.NewRequest(http.MethodPost, central+"/api/peers/heartbeat", bytes.NewReader(body)) + request.Header.Set("Content-Type", "application/json") + if token := os.Getenv("PEER_API_TOKEN"); token != "" { + request.Header.Set("Authorization", "Bearer "+token) + } + response, err := http.DefaultClient.Do(request) + if err == nil { + _, _ = io.Copy(io.Discard, response.Body) + _ = response.Body.Close() + } + time.Sleep(time.Minute) + } +} + +func relay() { + central := strings.TrimRight(os.Getenv("CENTRAL_URL"), "/") + if central == "" { + return + } + host, _ := os.Hostname() + client := &http.Client{Timeout: 35 * time.Second} + for { + request, err := http.NewRequest(http.MethodGet, central+"/api/peers/commands?nodeId="+url.QueryEscape(host), nil) + if err != nil { + time.Sleep(5 * time.Second) + continue + } + if token := os.Getenv("PEER_API_TOKEN"); token != "" { + request.Header.Set("Authorization", "Bearer "+token) + } + response, err := client.Do(request) + if err != nil || response.StatusCode != http.StatusOK { + if response != nil { + _ = response.Body.Close() + } + time.Sleep(5 * time.Second) + continue + } + var envelope relayEnvelope + err = json.NewDecoder(response.Body).Decode(&envelope) + _ = response.Body.Close() + if err != nil || envelope.Command == nil || envelope.Command.Type != "probe" { + continue + } + milliseconds, probeErr := measure(envelope.Command.Host, envelope.Command.Port) + result := map[string]any{"id": envelope.Command.ID} + if probeErr != nil { + result["error"] = probeErr.Error() + } else { + result["milliseconds"] = milliseconds + } + body, _ := json.Marshal(result) + request, err = http.NewRequest(http.MethodPost, central+"/api/peers/results", bytes.NewReader(body)) + if err == nil { + request.Header.Set("Content-Type", "application/json") + if token := os.Getenv("PEER_API_TOKEN"); token != "" { + request.Header.Set("Authorization", "Bearer "+token) + } + if response, err := client.Do(request); err == nil { + _, _ = io.Copy(io.Discard, response.Body) + _ = response.Body.Close() + } + } + } +} diff --git a/services/replica/go.mod b/services/replica/go.mod new file mode 100644 index 0000000..43a29c0 --- /dev/null +++ b/services/replica/go.mod @@ -0,0 +1,3 @@ +module crit.rip/gapmind/services/replica + +go 1.26.7 diff --git a/services/replica/main.go b/services/replica/main.go new file mode 100644 index 0000000..534eaae --- /dev/null +++ b/services/replica/main.go @@ -0,0 +1,79 @@ +package main + +import ( + "bytes" + "encoding/json" + "flag" + "fmt" + "io" + "net/http" + "os" + "os/exec" + "path/filepath" + "time" +) + +type report struct { + NodeID string `json:"nodeId"` + Kind string `json:"kind"` + Address string `json:"address,omitempty"` + Version string `json:"version"` + Status string `json:"status"` + Metadata map[string]any `json:"metadata"` +} + +func main() { + listen := flag.String("listen", ":8091", "HTTP listen address") + source := flag.String("source", ".", "directory permitted for replication") + flag.Parse() + root, err := filepath.Abs(*source) + if err != nil { + panic(err) + } + go heartbeat(root) + + http.HandleFunc("/healthz", func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusNoContent) }) + http.HandleFunc("/replicate", func(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + http.Error(w, "POST required", http.StatusMethodNotAllowed) + return + } + var request struct { + Host string `json:"host"` + Destination string `json:"destination"` + } + if json.NewDecoder(r.Body).Decode(&request) != nil || request.Host == "" || request.Destination == "" || filepath.IsAbs(request.Destination) || filepath.Clean(request.Destination) == ".." { + http.Error(w, "host and relative destination required", http.StatusBadRequest) + return + } + output, err := exec.Command("scp", "-r", root+"/.", request.Host+":"+request.Destination).CombinedOutput() + if err != nil { + http.Error(w, string(output), http.StatusBadGateway) + return + } + w.WriteHeader(http.StatusAccepted) + }) + fmt.Println(http.ListenAndServe(*listen, nil)) +} + +func heartbeat(root string) { + central := os.Getenv("CENTRAL_URL") + if central == "" { + return + } + host, _ := os.Hostname() + for { + body, _ := json.Marshal(report{NodeID: host, Kind: "replica", Address: os.Getenv("PEER_PUBLIC_URL"), Version: "0.1.0", Status: "online", Metadata: map[string]any{"source": root}}) + request, _ := http.NewRequest(http.MethodPost, central+"/api/peers/heartbeat", bytes.NewReader(body)) + request.Header.Set("Content-Type", "application/json") + if token := os.Getenv("PEER_API_TOKEN"); token != "" { + request.Header.Set("Authorization", "Bearer "+token) + } + response, err := http.DefaultClient.Do(request) + if err == nil { + _, _ = io.Copy(io.Discard, response.Body) + _ = response.Body.Close() + } + time.Sleep(time.Minute) + } +} diff --git a/socmind b/socmind new file mode 160000 index 0000000..ed929f6 --- /dev/null +++ b/socmind @@ -0,0 +1 @@ +Subproject commit ed929f6c3dabcf6c74078293c101e3bc7e72fd38 diff --git a/src/app.module.ts b/src/app.module.ts new file mode 100644 index 0000000..0f340fb --- /dev/null +++ b/src/app.module.ts @@ -0,0 +1,116 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { ResolutionController } from './resolution.controller'; +import { ResolutionService } from './services/resolution.service'; +import { BgpService } from './services/routing/bgp.service'; +import { NccService } from './services/routing/ncc.service'; +import { AfrinicService } from './services/registry/afrinic.service'; +import { ApnicService } from './services/registry/apnic.service'; +import { ArinService } from './services/registry/arin.service'; +import { LacnicService } from './services/registry/lacnic.service'; +import { RipeService } from './services/registry/ripe.service'; +import { GeonamesService } from './services/geonames.service'; +import { HttpService } from './services/http.service'; +import { + Account, + DhtPeer, + DhtTorrent, + GeoCalibration, + PeerNode, + ResolutionSnapshot, + ScanObservation, + FaviconFingerprint, + SweepJob, +} from './services/entities'; +import { TriangulationService } from './services/triangulation.service'; +import { MlGeolocationService } from './services/ml-geolocation.service'; +import { AccountService } from './services/account.service'; +import { GeoProvidersService } from './services/providers.service'; +import { PeerRelayService } from './services/peer-relay.service'; +import { BannerService } from './services/banner.service'; +import { FaviconService } from './services/favicon.service'; +import { CalibrationCollectorService } from './services/calibration-collector.service'; +import { BackgroundInventoryService } from './services/background-inventory.service'; +import { ScanGateway } from './services/scan.gateway'; +import { SweepService } from './services/sweep.service'; +import { SearchLanguageService } from './services/search-language.service'; +import { DhtService } from './services/dht.service'; +import { LiveFeedService } from './services/live-feed.service'; + +@Module({ + imports: [ + TypeOrmModule.forRoot({ + type: 'sqljs', + location: process.env.DATABASE_PATH || 'gapmind.sqlite', + autoSave: true, + synchronize: process.env.NODE_ENV !== 'production', + entities: [ + PeerNode, + ResolutionSnapshot, + GeoCalibration, + Account, + ScanObservation, + FaviconFingerprint, + SweepJob, + DhtTorrent, + DhtPeer, + ], + }), + TypeOrmModule.forFeature([ + PeerNode, + ResolutionSnapshot, + ScanObservation, + FaviconFingerprint, + GeoCalibration, + Account, + SweepJob, + DhtTorrent, + DhtPeer, + ]), + ], + controllers: [ResolutionController], + providers: [ + ResolutionService, + { + provide: 'REGISTRY_SERVICES', + inject: [ + ArinService, + RipeService, + ApnicService, + LacnicService, + AfrinicService, + ], + useFactory: ( + arin: ArinService, + ripe: RipeService, + apnic: ApnicService, + lacnic: LacnicService, + afrinic: AfrinicService, + ) => [arin, ripe, apnic, lacnic, afrinic], + }, + BgpService, + NccService, + AfrinicService, + ApnicService, + ArinService, + LacnicService, + RipeService, + GeonamesService, + HttpService, + TriangulationService, + MlGeolocationService, + AccountService, + GeoProvidersService, + PeerRelayService, + BannerService, + FaviconService, + CalibrationCollectorService, + BackgroundInventoryService, + ScanGateway, + SweepService, + SearchLanguageService, + DhtService, + LiveFeedService, + ], +}) +export class AppModule {} diff --git a/src/dto.ts b/src/dto.ts new file mode 100644 index 0000000..8f7c3dc --- /dev/null +++ b/src/dto.ts @@ -0,0 +1,236 @@ +import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; + +export class ResolveQueryDto { + @ApiProperty({ description: 'IPv4 or IPv6 address to resolve', example: '8.8.8.8' }) + ip!: string; + + @ApiPropertyOptional({ description: 'Comma-separated expand flags', example: 'registry,bgp,dns,geo,probes,dht,banners' }) + expand?: string; +} + +export class ScanQueryDto { + @ApiProperty({ description: 'Comma-separated IP addresses', example: '8.8.8.8,1.1.1.1' }) + targets!: string; + + @ApiPropertyOptional({ description: 'Comma-separated expand flags' }) + expand?: string; +} + +export class BannerQueryDto { + @ApiProperty({ description: 'IP address to scan', example: '8.8.8.8' }) + ip!: string; + + @ApiPropertyOptional({ description: 'Comma-separated port numbers', example: '22,80,443' }) + ports?: string; +} + +export class SweepBodyDto { + @ApiPropertyOptional({ description: 'CIDR to sweep', example: '8.8.8.0/24' }) + cidr?: string; + + @ApiPropertyOptional({ description: 'Target (CIDR, ASN, or prefix)', example: 'AS15169' }) + target?: string; + + @ApiPropertyOptional({ enum: ['cidr', 'asn', 'prefix'], description: 'Sweep kind' }) + kind?: 'cidr' | 'asn' | 'prefix'; + + @ApiPropertyOptional({ description: 'Ports to scan', example: [80, 443] }) + ports?: number[]; +} + +export class BackgroundIndexBodyDto { + @ApiPropertyOptional({ description: 'Specific ASN to index. Omit for all RIR allocations.', example: 'AS15169' }) + asn?: string; +} + +export class FaviconUploadBodyDto { + @ApiProperty({ description: 'Base64-encoded image data' }) + image!: string; + + @ApiPropertyOptional({ description: 'Label for this favicon (usually an IP or domain)' }) + label?: string; + + @ApiPropertyOptional({ description: 'Source URL of the favicon' }) + source?: string; +} + +export class FaviconSearchQueryDto { + @ApiProperty({ description: 'Perceptual hash to search for', example: 'a1b2c3d4' }) + phash!: string; + + @ApiPropertyOptional({ description: 'Maximum Hamming distance', example: '8' }) + distance?: string; +} + +export class FaviconMmh3QueryDto { + @ApiProperty({ description: 'MurmurHash3 hash to search', example: '-1234567890' }) + hash!: string; +} + +export class AdvancedSearchQueryDto { + @ApiPropertyOptional({ description: 'Shodan-style query string', example: 'port:80 product:nginx' }) + q?: string; + + @ApiPropertyOptional({ description: 'Filter by ASN', example: '15169' }) + asn?: string; + + @ApiPropertyOptional({ description: 'Filter by RIR', example: 'ripe' }) + rir?: string; + + @ApiPropertyOptional({ description: 'Filter by port', example: '443' }) + port?: string; + + @ApiPropertyOptional({ description: 'Filter by open status' }) + open?: string; + + @ApiPropertyOptional({ description: 'Max results', example: '200' }) + take?: string; +} + +export class DhtTorrentsQueryDto { + @ApiPropertyOptional({ description: 'Max torrents to return', example: '100' }) + take?: string; +} + +export class DhtPeersQueryDto { + @ApiProperty({ description: 'Info hash to look up', example: 'a1b2c3d4e5f6...' }) + infoHash!: string; +} + +export class DhtReverseQueryDto { + @ApiProperty({ description: 'IP address for reverse lookup', example: '8.8.8.8' }) + ip!: string; +} + +export class DhtByAddressQueryDto { + @ApiProperty({ description: 'IP address', example: '8.8.8.8' }) + ip!: string; +} + +export class TorrentIngestBodyDto { + @ApiProperty({ description: 'Info hash (hex)' }) + infoHash!: string; + + @ApiPropertyOptional({ description: 'Torrent name' }) + name?: string; + + @ApiPropertyOptional({ description: 'Source identifier' }) + source?: string; + + @ApiPropertyOptional({ description: 'Seeder count' }) + seeders?: number; + + @ApiPropertyOptional({ description: 'Leecher count' }) + leechers?: number; + + @ApiPropertyOptional({ description: 'Tracker URLs' }) + trackers?: string[]; +} + +export class PeerIngestBodyDto { + @ApiProperty({ description: 'Info hash' }) + infoHash!: string; + + @ApiProperty({ description: 'Array of peer addresses', type: [Object] }) + peers!: Array<{ address: string; port: number; peerId?: string; client?: string }>; +} + +export class ServiceScanBodyDto { + @ApiProperty({ description: 'IP address to scan', example: '8.8.8.8' }) + ip!: string; + + @ApiPropertyOptional({ description: 'Ports to scan', example: [22, 80, 443] }) + ports?: number[]; +} + +export class NetworkIndexQueryDto { + @ApiPropertyOptional({ description: 'Filter by ASN' }) + asn?: string; + + @ApiPropertyOptional({ description: 'Filter by RIR' }) + rir?: string; + + @ApiPropertyOptional({ description: 'Filter by prefix' }) + prefix?: string; +} + +export class TriangulateQueryDto { + @ApiProperty({ description: 'Host to triangulate', example: '8.8.8.8' }) + host!: string; +} + +export class RelatedNodesQueryDto { + @ApiPropertyOptional({ description: 'Filter by ASN' }) + asn?: string; + + @ApiPropertyOptional({ description: 'Center latitude' }) + latitude?: string; + + @ApiPropertyOptional({ description: 'Center longitude' }) + longitude?: string; + + @ApiPropertyOptional({ description: 'Radius in km', example: '5' }) + radius?: string; +} + +export class CalibrationBodyDto { + @ApiProperty() target!: string; + @ApiProperty() latitude!: number; + @ApiProperty() longitude!: number; + @ApiProperty() geoliteLatitude!: number; + @ApiProperty() geoliteLongitude!: number; + @ApiProperty() pennsylvaniaMs!: number; + @ApiProperty() oregonMs!: number; +} + +export class MlPredictBodyDto { + @ApiProperty() geoliteLatitude!: number; + @ApiProperty() geoliteLongitude!: number; + @ApiProperty() pennsylvaniaMs!: number; + @ApiProperty() oregonMs!: number; +} + +export class SignupBodyDto { + @ApiProperty({ example: 'user@example.com' }) email!: string; + @ApiProperty({ example: 'securepassword' }) password!: string; +} + +export class NonfreeOptOutBodyDto { + @ApiPropertyOptional() enabled?: boolean; +} + +export class PeerHeartbeatBodyDto { + @ApiProperty() nodeId!: string; + @ApiProperty({ enum: ['replica', 'pathfinder'] }) kind!: string; + @ApiPropertyOptional() address?: string; + @ApiPropertyOptional() version?: string; + @ApiPropertyOptional() metadata?: Record; + @ApiPropertyOptional() status?: string; +} + +export class PeerMetadataBodyDto { + @ApiProperty({ type: [Object] }) + updates!: Array<{ + nodeId: string; + metadata?: Record; + address?: string; + version?: string; + status?: string; + kind?: 'replica' | 'pathfinder'; + }>; +} + +export class PeerResultBodyDto { + @ApiProperty() id!: string; + @ApiPropertyOptional() milliseconds?: number; + @ApiPropertyOptional() error?: string; +} + +export class PeerCommandsQueryDto { + @ApiProperty({ description: 'Node ID' }) nodeId!: string; +} + +export class LiveFeedQueryDto { + @ApiPropertyOptional({ description: 'Number of recent events to return', example: '50' }) + count?: string; +} diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..e1e2ac3 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,47 @@ +import 'reflect-metadata'; +import { NestFactory } from '@nestjs/core'; +import { NestFastifyApplication } from '@nestjs/platform-fastify'; +import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'; +import { AppModule } from './app.module'; +import { config } from 'dotenv'; + +config(); + +async function bootstrap() { + const app = await NestFactory.create(AppModule); + + + app.enableShutdownHooks(); + app.enableCors(); + + const config = new DocumentBuilder() + .setTitle('gapmind') + .setDescription( + 'IP intelligence.', + ) + .setVersion('1.0.0') + .addBearerAuth() + .addTag('Resolution', 'IP address resolution and enrichment') + .addTag('Sweep', 'CIDR/ASN scanning and background indexing') + .addTag('DHT', 'Passive DHT torrent and peer tracking') + .addTag('Search', 'Advanced query-based observation search') + .addTag('Favicon', 'Favicon perceptual hash fingerprinting') + .addTag('Geolocation', 'Triangulation and ML-corrected geolocation') + .addTag('Accounts', 'User account management') + .addTag('Peers', 'Replica and Pathfinder node network') + .addTag('Live Feed', 'Real-time WebSocket feed of new data') + .build(); + + const document = SwaggerModule.createDocument(app, config); + SwaggerModule.setup('/', app, document); + + app.getHttpServer().on('request', (req: any, res: any) => { + if (req.url === '/api/openapi.json' && req.method === 'GET') { + res.writeHead(200, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify(document)); + } + }); + + await app.listen(process.env.PORT || 3002); +} +bootstrap(); diff --git a/src/resolution.controller.ts b/src/resolution.controller.ts new file mode 100644 index 0000000..d14271e --- /dev/null +++ b/src/resolution.controller.ts @@ -0,0 +1,751 @@ +import { + BadRequestException, + Body, + Controller, + ForbiddenException, + Get, + Headers, + Ip, + Post, + Query, +} from "@nestjs/common"; +import { + ApiBearerAuth, + ApiOperation, + ApiQuery, + ApiResponse, + ApiTags, +} from "@nestjs/swagger"; +import { InjectRepository } from "@nestjs/typeorm"; +import { Repository } from "typeorm"; +import { parseExpand, ResolutionService } from "./services/resolution.service"; +import { + FaviconFingerprint, + PeerNode, + ScanObservation, +} from "./services/entities"; +import { TriangulationService } from "./services/triangulation.service"; +import { GeoCalibration } from "./services/entities"; +import { + GeoFeatures, + MlGeolocationService, +} from "./services/ml-geolocation.service"; +import { AccountService } from "./services/account.service"; +import { PeerRelayService } from "./services/peer-relay.service"; +import { BannerService } from "./services/banner.service"; +import { FaviconService } from "./services/favicon.service"; +import { SweepService } from "./services/sweep.service"; +import { SearchLanguageService } from "./services/search-language.service"; +import { DhtService } from "./services/dht.service"; +import { LiveFeedService } from "./services/live-feed.service"; +import { isIP } from "node:net"; +import { promises as dns } from "node:dns"; +import { + AdvancedSearchQueryDto, + BackgroundIndexBodyDto, + BannerQueryDto, + CalibrationBodyDto, + DhtByAddressQueryDto, + DhtPeersQueryDto, + DhtReverseQueryDto, + DhtTorrentsQueryDto, + FaviconMmh3QueryDto, + FaviconSearchQueryDto, + FaviconUploadBodyDto, + LiveFeedQueryDto, + MlPredictBodyDto, + NetworkIndexQueryDto, + NonfreeOptOutBodyDto, + PeerCommandsQueryDto, + PeerHeartbeatBodyDto, + PeerIngestBodyDto, + PeerMetadataBodyDto, + PeerResultBodyDto, + RelatedNodesQueryDto, + ResolveQueryDto, + ScanQueryDto, + ServiceScanBodyDto, + SignupBodyDto, + SweepBodyDto, + TorrentIngestBodyDto, + TriangulateQueryDto, +} from "./dto"; + +@ApiTags("Resolution") +@Controller() +export class ResolutionController { + constructor( + private readonly resolution: ResolutionService, + private readonly triangulation: TriangulationService, + private readonly ml: MlGeolocationService, + private readonly accounts: AccountService, + private readonly relay: PeerRelayService, + private readonly banners: BannerService, + private readonly favicons: FaviconService, + private readonly sweeps: SweepService, + private readonly searchLang: SearchLanguageService, + private readonly dht: DhtService, + private readonly liveFeedService: LiveFeedService, + @InjectRepository(PeerNode) private readonly peers: Repository, + @InjectRepository(ScanObservation) private readonly observations: + Repository, + ) {} + + @Get("api/resolve") + @ApiOperation({ summary: "Resolve an IP address" }) + @ApiQuery({ name: "ip", required: true, description: "IPv4 or IPv6 address" }) + @ApiQuery({ + name: "expand", + required: false, + description: + "Comma-separated expand flags: registry,bgp,dns,geo,providers,probes,raw,dht,banners", + }) + @ApiBearerAuth() + @ApiResponse({ status: 200, description: "Full resolution payload" }) + @ApiResponse({ status: 400, description: "Invalid IP" }) + async resolve( + @Query() query: ResolveQueryDto, + @Headers("authorization") authorization?: string, + ) { + const account = await this.accounts.fromAuthorization(authorization); + return this.resolution.resolve( + query.ip, + !account?.nonfreeProvidersOptOut, + parseExpand(query.expand), + ); + } + + @Get("api/scan") + @ApiOperation({ summary: "Resolve multiple IP addresses (quick scan)" }) + @ApiQuery({ + name: "targets", + required: true, + description: "Comma-separated IPs", + }) + @ApiQuery({ name: "expand", required: false }) + @ApiBearerAuth() + @ApiResponse({ status: 200, description: "Array of resolution payloads" }) + async scan( + @Query() query: ScanQueryDto, + @Headers("authorization") authorization?: string, + ) { + const addresses = [ + ...new Set((query.targets || "").split(/[\s,]+/).filter(Boolean)), + ].slice(0, 12); + if (!addresses.length) { + throw new BadRequestException("Provide one or more IP addresses."); + } + const account = await this.accounts.fromAuthorization(authorization); + return Promise.all( + addresses.map((address) => + this.resolution.resolve( + address, + !account?.nonfreeProvidersOptOut, + parseExpand(query.expand), + ) + ), + ); + } + + @Get("api/whoami") + @ApiOperation({ summary: "Get the caller's public IP address" }) + @ApiResponse({ status: 200, description: "{ address: string }" }) + whoami( + @Ip() address: string, + @Headers("x-forwarded-for") forwarded?: string, + ) { + const candidate = forwarded?.split(",")[0]?.trim(); + return { address: candidate && isIP(candidate) ? candidate : address }; + } + + @Get("api/banner") + @ApiOperation({ summary: "Grab live banners from an IP" }) + @ApiQuery({ name: "ip", required: true }) + @ApiQuery({ + name: "ports", + required: false, + description: "Comma-separated ports", + }) + @ApiResponse({ status: 200, description: "Array of port/banner results" }) + banner(@Query() query: BannerQueryDto) { + if (!query.ip) { + throw new BadRequestException('Query parameter "ip" is required.'); + } + const requested = (query.ports || "") + .split(",") + .map((value) => Number(value)) + .filter(Number.isInteger); + return this.banners.inspect(query.ip, requested); + } + + @Post("api/scans") + @ApiOperation({ summary: "Full service scan: resolve + banner grab + index" }) + @ApiBearerAuth() + @ApiResponse({ status: 201, description: "Scan results with banners" }) + async serviceScan( + @Headers("authorization") authorization: string | undefined, + @Body() body: ServiceScanBodyDto, + ) { + this.accounts.require(await this.accounts.fromAuthorization(authorization)); + if (!body.ip) throw new BadRequestException("An IP address is required."); + const [network, banners] = await Promise.all([ + this.resolution.resolve(body.ip, false, new Set(["registry", "bgp"])), + this.banners.inspect( + body.ip, + Array.isArray(body.ports) ? body.ports : [], + ), + ]); + const records = banners.map((banner) => { + const item = banner as { port: number; open: boolean; banner?: string }; + return this.observations.create({ + address: body.ip!, + port: item.port, + open: item.open, + banner: item.banner?.slice(0, 1024), + asn: network.bgp?.asn, + prefix: network.bgp?.prefix, + rir: network.registry?.registry, + }); + }); + await this.observations.save(records); + return { + address: body.ip, + network: { + asn: network.bgp?.asn, + prefix: network.bgp?.prefix, + rir: network.registry?.registry, + holder: network.bgp?.holder, + }, + banners, + }; + } + + @Post("api/sweeps") + @ApiOperation({ summary: "Start a CIDR/ASN/prefix sweep" }) + @ApiBearerAuth() + @ApiResponse({ status: 201, description: "Sweep job queued" }) + async startSweep( + @Headers("authorization") authorization: string | undefined, + @Body() body: SweepBodyDto, + ) { + this.accounts.require(await this.accounts.fromAuthorization(authorization)); + const target = body.target ?? body.cidr; + if (!target) throw new BadRequestException("CIDR is required."); + return this.sweeps.start( + body.kind ?? "cidr", + target, + Array.isArray(body.ports) ? body.ports : [], + ); + } + + @Post("api/background-index") + @ApiOperation({ summary: "Start background CIDR indexing from BGP prefixes" }) + @ApiBearerAuth() + @ApiResponse({ status: 201, description: "Background job started" }) + async startBackgroundIndex( + @Headers("authorization") authorization: string | undefined, + @Body() body: BackgroundIndexBodyDto, + ) { + this.accounts.require(await this.accounts.fromAuthorization(authorization)); + return this.sweeps.backgroundIndex(body.asn); + } + + @Post("api/background-index/stop") + @ApiOperation({ summary: "Stop background indexing" }) + @ApiBearerAuth() + @ApiResponse({ status: 200, description: "Stop signal sent" }) + async stopBackgroundIndex( + @Headers("authorization") authorization: string | undefined, + ) { + this.accounts.require(await this.accounts.fromAuthorization(authorization)); + return this.sweeps.stopBackgroundIndex(); + } + + @Get("api/background-index/status") + @ApiOperation({ summary: "Get background indexing status" }) + @ApiBearerAuth() + @ApiResponse({ status: 200, description: "Background index status" }) + async backgroundIndexStatus( + @Headers("authorization") authorization: string | undefined, + ) { + this.accounts.require(await this.accounts.fromAuthorization(authorization)); + return this.sweeps.backgroundIndexStatus(); + } + + @Get("api/live-feed") + @ApiOperation({ + summary: "Get recent live feed events (DHT + scan observations)", + }) + @ApiQuery({ + name: "count", + required: false, + description: "Number of events (default 50)", + }) + @ApiResponse({ status: 200, description: "Recent feed events" }) + liveFeed(@Query() query: LiveFeedQueryDto) { + return this.liveFeedService.recent(Number(query.count) || 50); + } + + @Get("api/search") + @ApiOperation({ summary: "Advanced search with Shodan-style query language" }) + @ApiBearerAuth() + @ApiResponse({ status: 200, description: "Matching scan observations" }) + async advancedSearch( + @Headers("authorization") authorization: string | undefined, + @Query() query: AdvancedSearchQueryDto, + ) { + this.accounts.require(await this.accounts.fromAuthorization(authorization)); + const qb = this.observations + .createQueryBuilder("obs") + .orderBy("obs.observedAt", "DESC") + .take(Math.min(Number(query.take) || 200, 1000)); + if (query.q) this.searchLang.apply(qb, this.observations, query.q); + else { + if (query.asn) qb.andWhere("obs.asn = :asn", { asn: query.asn }); + if (query.rir) qb.andWhere("obs.rir = :rir", { rir: query.rir }); + if (query.port) { + qb.andWhere("obs.port = :port", { port: Number(query.port) }); + } + if (query.open === "true") { + qb.andWhere("obs.open = :open", { open: true }); + } + } + return qb.getMany(); + } + + @Get("api/network-index") + @ApiOperation({ summary: "Get indexed observations for a network" }) + @ApiBearerAuth() + @ApiResponse({ status: 200, description: "Network observations" }) + async networkIndex( + @Headers("authorization") authorization: string | undefined, + @Query() query: NetworkIndexQueryDto, + ) { + this.accounts.require(await this.accounts.fromAuthorization(authorization)); + if (!query.asn && !query.rir && !query.prefix) { + throw new BadRequestException("Provide asn, rir, or prefix."); + } + const items = await this.observations.find({ + order: { observedAt: "DESC" }, + take: 200, + }); + return items.filter( + (item) => + (query.asn ? item.asn === query.asn : true) && + (query.rir ? item.rir === query.rir : true) && + (query.prefix ? item.prefix === query.prefix : true), + ); + } + + @Post("api/favicons") + @ApiOperation({ summary: "Upload and index a favicon" }) + @ApiBearerAuth() + @ApiResponse({ status: 201, description: "Fingerprint result" }) + async uploadFavicon( + @Headers("authorization") authorization: string | undefined, + @Body() body: FaviconUploadBodyDto, + ) { + this.accounts.require(await this.accounts.fromAuthorization(authorization)); + if (!body.image) { + throw new BadRequestException("Base64 image data is required."); + } + return this.favicons.index(body.image, body.label, body.source); + } + + @Get("api/favicons/search") + @ApiOperation({ summary: "Search favicons by perceptual hash" }) + @ApiBearerAuth() + @ApiResponse({ status: 200, description: "Matching favicons" }) + async searchFavicon( + @Headers("authorization") authorization: string | undefined, + @Query() query: FaviconSearchQueryDto, + ) { + this.accounts.require(await this.accounts.fromAuthorization(authorization)); + if (!query.phash) throw new BadRequestException("pHash is required."); + return this.favicons.search(query.phash, Number(query.distance) || 8); + } + + @Get("api/favicons/by-mmh3") + @ApiOperation({ summary: "Search favicons by MurmurHash3" }) + @ApiBearerAuth() + @ApiResponse({ + status: 200, + description: "Matching favicons + associated observations", + }) + async faviconByMmh3( + @Headers("authorization") authorization: string | undefined, + @Query() query: FaviconMmh3QueryDto, + ) { + this.accounts.require(await this.accounts.fromAuthorization(authorization)); + if (!query.hash) throw new BadRequestException("hash is required."); + const fps = await this.favicons.searchMmh3(query.hash); + const labels = fps.map((f) => f.label).filter(Boolean); + const banners = labels.length + ? await this.observations + .createQueryBuilder("obs") + .where("obs.address IN (:...labels)", { labels }) + .take(500) + .getMany() + : []; + return { hash: query.hash, fingerprints: fps, banners }; + } + + @Post("api/dht/torrents") + @ApiOperation({ summary: "Ingest a DHT torrent" }) + @ApiResponse({ status: 201, description: "Torrent saved" }) + ingestTorrent(@Body() body: TorrentIngestBodyDto) { + if (!body.infoHash) throw new BadRequestException("infoHash required"); + return this.dht.ingestTorrent(body); + } + + @Post("api/dht/peers") + @ApiOperation({ summary: "Ingest DHT peers for a torrent" }) + @ApiResponse({ status: 201, description: "Peers accepted" }) + ingestPeers(@Body() body: PeerIngestBodyDto) { + if (!body.infoHash || !Array.isArray(body.peers)) { + throw new BadRequestException("infoHash + peers required"); + } + return this.dht.ingestPeers(body.infoHash, body.peers); + } + + @Get("api/dht/torrents") + @ApiOperation({ summary: "List recent DHT torrents" }) + @ApiQuery({ name: "take", required: false }) + @ApiResponse({ status: 200, description: "Array of torrents" }) + listTorrents(@Query() query: DhtTorrentsQueryDto) { + return this.dht.torrentsList(Number(query.take) || 100); + } + + @Get("api/dht/peers") + @ApiOperation({ summary: "List peers for a torrent" }) + @ApiQuery({ name: "infoHash", required: true }) + @ApiResponse({ status: 200, description: "Array of peers" }) + peersFor(@Query() query: DhtPeersQueryDto) { + if (!query.infoHash) throw new BadRequestException("infoHash required"); + return this.dht.peersFor(query.infoHash); + } + + @Get("api/dht/reverse") + @ApiOperation({ + summary: "Reverse lookup: find torrents a peer is downloading", + }) + @ApiQuery({ name: "ip", required: true }) + @ApiResponse({ status: 200, description: "Array of peers" }) + reverseIp(@Query() query: DhtReverseQueryDto) { + if (!query.ip) throw new BadRequestException("ip required"); + return this.dht.reverseIp(query.ip); + } + + @Get("api/dht/by-address") + @ApiOperation({ summary: "Get DHT data for an IP address" }) + @ApiBearerAuth() + @ApiQuery({ name: "ip", required: true }) + @ApiResponse({ + status: 200, + description: "DHT torrents associated with this IP", + }) + async dhtByAddress( + @Query() query: DhtByAddressQueryDto, + @Headers("authorization") authorization?: string, + ) { + this.accounts.require(await this.accounts.fromAuthorization(authorization)); + if (!query.ip) throw new BadRequestException("ip required"); + return this.dht.byAddress(query.ip); + } + + @Get("api/triangulate") + @ApiOperation({ summary: "Triangulate an IP using Pathfinder probes" }) + @ApiQuery({ name: "host", required: true }) + @ApiResponse({ status: 200, description: "Triangulation result" }) + triangulate(@Query() query: TriangulateQueryDto) { + if (!query.host) { + throw new BadRequestException('Query parameter "host" is required.'); + } + return this.triangulation.locate(query.host); + } + + @Get("api/related-nodes") + @ApiOperation({ summary: "Find Pathfinder nodes near a location or ASN" }) + @ApiBearerAuth() + @ApiResponse({ status: 200, description: "Array of matching PeerNodes" }) + async relatedNodes( + @Headers("authorization") authorization: string | undefined, + @Query() query: RelatedNodesQueryDto, + ) { + this.accounts.require(await this.accounts.fromAuthorization(authorization)); + const lat = Number(query.latitude), + lon = Number(query.longitude), + max = Math.min(Math.max(Number(query.radius) || 5, 1), 50); + const peers = await this.peers.findBy({ kind: "pathfinder" }); + return peers.filter((peer) => { + const metadata = peer.metadata as { + asn?: string; + latitude?: number; + longitude?: number; + } | undefined; + const sameAsn = query.asn ? metadata?.asn === query.asn : true; + const sameArea = Number.isFinite(lat) && Number.isFinite(lon) + ? Math.hypot( + (metadata?.latitude ?? 999) - lat, + (metadata?.longitude ?? 999) - lon, + ) <= max + : true; + return sameAsn && sameArea; + }); + } + + @Post("api/calibration") + @ApiOperation({ summary: "Record a geolocation calibration sample" }) + @ApiResponse({ status: 201, description: "Calibration saved" }) + calibration( + @Headers("authorization") authorization: string | undefined, + @Body() input: CalibrationBodyDto, + ) { + const token = process.env.CALIBRATION_API_TOKEN; + if (token && authorization !== `Bearer ${token}`) { + throw new ForbiddenException("Invalid calibration credential."); + } + return this.ml.record(input as Omit); + } + + @Post("api/ml/predict") + @ApiOperation({ summary: "Predict corrected geolocation from features" }) + @ApiResponse({ status: 200, description: "ML prediction" }) + predict(@Body() features: MlPredictBodyDto) { + return this.ml.predict(features as GeoFeatures); + } + + @Get("api/ml/status") + @ApiOperation({ summary: "Get ML model training status" }) + @ApiResponse({ status: 200, description: "ML status" }) + mlStatus() { + return this.ml.status(); + } + + @Post("api/accounts/signup") + @ApiOperation({ summary: "Create a new account" }) + @ApiResponse({ status: 201, description: "Account created" }) + signup(@Body() body: SignupBodyDto) { + return this.accounts.signup(body.email || "", body.password || ""); + } + + @Get("api/accounts/profile") + @ApiOperation({ summary: "Get current account profile" }) + @ApiBearerAuth() + @ApiResponse({ status: 200, description: "Account profile" }) + async profile(@Headers("authorization") authorization: string | undefined) { + const account = this.accounts.require( + await this.accounts.fromAuthorization(authorization), + ); + return { + id: account.id, + email: account.email, + nonfreeProvidersOptOut: account.nonfreeProvidersOptOut, + createdAt: account.createdAt, + }; + } + + @Post("api/accounts/api-key/rotate") + @ApiOperation({ summary: "Rotate API key" }) + @ApiBearerAuth() + @ApiResponse({ status: 200, description: "New API key" }) + async rotateApiKey( + @Headers("authorization") authorization: string | undefined, + ) { + const account = this.accounts.require( + await this.accounts.fromAuthorization(authorization), + ); + return this.accounts.rotateToken(account); + } + + @Post("api/accounts/nonfree-opt-out") + @ApiOperation({ summary: "Toggle nonfree geolocation provider opt-out" }) + @ApiBearerAuth() + @ApiResponse({ status: 200, description: "Updated preference" }) + async nonfreeOptOut( + @Headers("authorization") authorization: string | undefined, + @Body() body: NonfreeOptOutBodyDto, + ) { + const account = this.accounts.require( + await this.accounts.fromAuthorization(authorization), + ); + return this.accounts.setNonfreeOptOut(account, Boolean(body.enabled)); + } + + @Post("api/peers/heartbeat") + @ApiOperation({ summary: "Heartbeat from a replica or pathfinder node" }) + @ApiResponse({ status: 201, description: "Peer updated" }) + async heartbeat( + @Headers("authorization") authorization: string | undefined, + @Body() body: PeerHeartbeatBodyDto, + ) { + const expected = process.env.PEER_API_TOKEN; + if (expected && authorization !== `Bearer ${expected}`) { + throw new ForbiddenException("Invalid peer credential."); + } + if ( + !body.nodeId || (body.kind !== "replica" && body.kind !== "pathfinder") + ) { + throw new BadRequestException("nodeId and a valid kind are required."); + } + const existing = await this.peers.findOneBy({ nodeId: body.nodeId }); + return this.peers.save( + this.peers.create({ + ...existing, + nodeId: body.nodeId, + kind: body.kind as any, + address: body.address, + version: body.version, + metadata: body.metadata, + status: body.status || "online", + lastSeenAt: new Date(), + }), + ); + } + + @Get("api/peers") + @ApiOperation({ summary: "List all registered peers" }) + @ApiResponse({ status: 200, description: "Array of PeerNodes" }) + listPeers() { + return this.peers.find({ order: { lastSeenAt: "DESC" } }); + } + + @Post("api/peers/metadata") + @ApiOperation({ summary: "Batch update peer metadata from orchestra sync" }) + @ApiResponse({ status: 200, description: "Sync results" }) + async syncMetadata( + @Headers("authorization") authorization: string | undefined, + @Body() body: PeerMetadataBodyDto, + ) { + this.requirePeerToken(authorization); + if (!Array.isArray(body.updates) || body.updates.length === 0) { + throw new BadRequestException("updates array is required."); + } + const results: Array<{ nodeId: string; applied: boolean; error?: string }> = + []; + for (const update of body.updates.slice(0, 50)) { + try { + if (!update.nodeId) { + results.push({ + nodeId: "", + applied: false, + error: "nodeId required", + }); + continue; + } + const existing = await this.findPeer(update.nodeId); + if (!existing) { + results.push({ + nodeId: update.nodeId, + applied: false, + error: "peer not found in DB", + }); + continue; + } + const merged = this.peers.create({ + ...existing, + metadata: { + ...(existing.metadata as object), + ...(update.metadata || {}), + }, + ...(update.address && { address: update.address }), + ...(update.version && { version: update.version }), + ...(update.status && { status: update.status }), + ...(update.kind && { kind: update.kind }), + lastSeenAt: existing.lastSeenAt, + }); + await this.peers.save(merged); + results.push({ nodeId: existing.nodeId, applied: true }); + } catch (err) { + results.push({ + nodeId: update.nodeId, + applied: false, + error: err instanceof Error ? err.message : "unknown error", + }); + } + } + return { + applied: results.filter((r) => r.applied).length, + rejected: results.filter((r) => !r.applied), + results, + }; + } + + private async findPeer(nodeId: string) { + const exact = await this.peers.findOneBy({ nodeId }); + if (exact) return exact; + + const colonIdx = nodeId.lastIndexOf(":"); + if (colonIdx > 0) { + const host = nodeId.slice(0, colonIdx); + const byHost = await this.peers.findOneBy({ nodeId: host }); + if (byHost) return byHost; + } + + const hostname = nodeId.includes(":") + ? nodeId.slice(0, nodeId.lastIndexOf(":")) + : nodeId; + if (!isIP(hostname)) { + try { + const { address } = await dns.lookup(hostname); + const byAddr = await this.peers.findOneBy({ address }); + if (byAddr) return byAddr; + + if (colonIdx > 0) { + const port = Number(nodeId.slice(colonIdx + 1)); + const portMatch = await this.peers + .createQueryBuilder("p") + .where("p.address = :address", { address }) + .getOne(); + if (portMatch) return portMatch; + } + } catch { + } + } + + const byPrefix = await this.peers + .createQueryBuilder("p") + .where("p.nodeId LIKE :prefix", { prefix: `${hostname}%` }) + .getOne(); + if (byPrefix) return byPrefix; + + return null; + } + + @Get("api/peers/commands") + @ApiOperation({ summary: "Get pending commands for a peer" }) + @ApiQuery({ name: "nodeId", required: true }) + @ApiResponse({ status: 200, description: "Pending command or null" }) + async peerCommand( + @Headers("authorization") authorization: string | undefined, + @Query() query: PeerCommandsQueryDto, + ) { + this.requirePeerToken(authorization); + if (!query.nodeId) throw new BadRequestException("nodeId is required."); + return { command: await this.relay.next(query.nodeId) }; + } + + @Post("api/peers/results") + @ApiOperation({ summary: "Submit probe results from a peer" }) + @ApiResponse({ status: 200, description: "Result accepted" }) + peerResult( + @Headers("authorization") authorization: string | undefined, + @Body() body: PeerResultBodyDto, + ) { + this.requirePeerToken(authorization); + if (!body.id) throw new BadRequestException("Probe result id is required."); + return { + accepted: this.relay.complete(body.id, { + milliseconds: body.milliseconds, + error: body.error, + }), + }; + } + + private requirePeerToken(authorization: string | undefined) { + const expected = process.env.PEER_API_TOKEN; + if (expected && authorization !== `Bearer ${expected}`) { + throw new ForbiddenException("Invalid peer credential."); + } + } +} diff --git a/src/services/account.service.ts b/src/services/account.service.ts new file mode 100644 index 0000000..55a2112 --- /dev/null +++ b/src/services/account.service.ts @@ -0,0 +1,84 @@ +import { + BadRequestException, + Injectable, + UnauthorizedException, +} from '@nestjs/common'; +import { + createHash, + randomBytes, + scrypt as scryptCallback, + timingSafeEqual, +} from 'node:crypto'; +import { promisify } from 'node:util'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { Account } from './entities'; +const scrypt = promisify(scryptCallback); + +@Injectable() +export class AccountService { + constructor( + @InjectRepository(Account) private readonly accounts: Repository, + ) {} + async signup(email: string, password: string) { + const normalized = email.trim().toLowerCase(); + if (!/^\S+@\S+\.\S+$/.test(normalized) || password.length < 12) { + throw new BadRequestException( + 'Use a valid email and a password with at least 12 characters.', + ); + } + if (await this.accounts.findOneBy({ email: normalized })) { + throw new BadRequestException( + 'An account already exists for that email.', + ); + } + const token = randomBytes(32).toString('base64url'); + const account = this.accounts.create({ + email: normalized, + passwordHash: await this.hashPassword(password), + apiTokenHash: this.tokenHash(token), + }); + await this.accounts.save(account); + return { + id: account.id, + email: account.email, + apiToken: token, + nonfreeProvidersOptOut: false, + }; + } + async fromAuthorization(value?: string) { + if (!value?.startsWith('Bearer ')) return undefined; + const hash = this.tokenHash(value.slice(7)); + return this.accounts.findOneBy({ apiTokenHash: hash }); + } + async setNonfreeOptOut(account: Account, optOut: boolean) { + account.nonfreeProvidersOptOut = optOut; + return this.accounts.save(account); + } + async rotateToken(account: Account) { + const token = randomBytes(32).toString('base64url'); + account.apiTokenHash = this.tokenHash(token); + await this.accounts.save(account); + return { apiToken: token }; + } + private tokenHash(token: string) { + return createHash('sha256').update(token).digest('hex'); + } + private async hashPassword(password: string) { + const salt = randomBytes(16).toString('hex'); + return `${salt}:${Buffer.from( + (await scrypt(password, salt, 64)) as Buffer, + ).toString('hex')}`; + } + async verifyPassword(account: Account, password: string) { + const [salt, hash] = account.passwordHash.split(':'); + const actual = Buffer.from((await scrypt(password, salt, 64)) as Buffer); + return timingSafeEqual(actual, Buffer.from(hash, 'hex')); + } + require(account?: Account | null): Account { + if (!account) { + throw new UnauthorizedException('A bearer API token is required.'); + } + return account; + } +} diff --git a/src/services/background-inventory.service.ts b/src/services/background-inventory.service.ts new file mode 100644 index 0000000..5a21c98 --- /dev/null +++ b/src/services/background-inventory.service.ts @@ -0,0 +1,83 @@ +import { Injectable } from "@nestjs/common"; +import { InjectRepository } from "@nestjs/typeorm"; +import { Repository } from "typeorm"; +import { BannerService } from "./banner.service"; +import { FaviconService } from "./favicon.service"; +import { ScanObservation } from "./entities"; +import { ScanGateway } from "./scan.gateway"; +import { LiveFeedService } from "./live-feed.service"; + +@Injectable() +export class BackgroundInventoryService { + private readonly active = new Set(); + private lastStarted = 0; + constructor( + @InjectRepository(ScanObservation) private readonly observations: + Repository, + private readonly banners: BannerService, + private readonly favicons: FaviconService, + private readonly gateway: ScanGateway, + private readonly liveFeed: LiveFeedService, + ) {} + schedule( + address: string, + network: { asn?: string; prefix?: string; rir?: string }, + ) { + if (this.active.has(address) || Date.now() - this.lastStarted < 2000) { + return; + } + this.active.add(address); + this.lastStarted = Date.now(); + void this.collect(address, network).finally(() => + this.active.delete(address) + ); + } + private async collect( + address: string, + network: { asn?: string; prefix?: string; rir?: string }, + ) { + this.gateway.publishLookup(address, "lookup.inventory", { + address, + status: "scanning", + }); + const banners = await this.banners.inspect(address, []); + const rows = banners.map((banner: any) => + this.observations.create({ + address, + port: banner.port, + open: banner.open, + banner: banner.banner?.slice(0, 1024), + ...network, + }) + ); + + await this.observations.delete({ address }); + await this.observations.save(rows); + for (const row of rows) { + this.liveFeed.publishObservation(row); + } + this.gateway.publishLookup(address, "lookup.inventory", { + address, + status: "indexed", + banners, + }); + for (const banner of banners as any[]) { + if (banner.open && (banner.port === 80 || banner.port === 8080)) { + try { + const response = await fetch( + `http://${address}:${banner.port}/favicon.ico`, + { signal: AbortSignal.timeout(3000) }, + ); + if (response.ok) { + await this.favicons.indexBuffer( + Buffer.from(await response.arrayBuffer()), + address, + `http://${address}:${banner.port}/favicon.ico`, + ); + } + } catch { + } + } + } + } +} diff --git a/src/services/banner.service.ts b/src/services/banner.service.ts new file mode 100644 index 0000000..02bf345 --- /dev/null +++ b/src/services/banner.service.ts @@ -0,0 +1,141 @@ +import { BadRequestException, Injectable } from '@nestjs/common'; +import { isIP } from 'node:net'; +import net from 'node:net'; + +const SAFE_PORTS = new Set([ + 21, 22, 25, 53, 80, 110, 143, 443, 465, 587, 993, 995, 3306, 3389, 5432, 6379, + 8080, 8443, +]); + +const HTTP_PORTS = new Set([80, 8080, 8000, 8888, 443, 8443]); + +const PRODUCT_RULES: Array<{ product: string; service: string; re: RegExp }> = [ + { product: 'nginx', service: 'http', re: /server:\s*nginx\/?([0-9.]*)/i }, + { product: 'apache', service: 'http', re: /server:\s*Apache\/?([0-9.]*)/i }, + { product: 'caddy', service: 'http', re: /server:\s*Caddy/i }, + { product: 'lighttpd', service: 'http', re: /server:\s*lighttpd/i }, + { + product: 'openssh', + service: 'ssh', + re: /SSH-2\.0-OpenSSH[_\s]?([0-9p.]*)?/i, + }, + { product: 'dropbear', service: 'ssh', re: /SSH-2\.0-dropbear/i }, + { product: 'vsftpd', service: 'ftp', re: /220.*vsFTPd/i }, + { product: 'proftpd', service: 'ftp', re: /220.*ProFTPD/i }, + { product: 'postfix', service: 'smtp', re: /220.*Postfix/i }, + { product: 'exim', service: 'smtp', re: /220.*Exim/i }, + { product: 'dovecot', service: 'imap', re: /\* OK.*dovecot/i }, + { + product: 'mysql', + service: 'mysql', + re: /mysql_native_password|5\.[57]\.\d+|8\.\d+\.\d+/i, + }, + { product: 'postgres', service: 'postgres', re: /postgres/i }, + { product: 'redis', service: 'redis', re: /-DENIED.*redis|\+PONG/i }, + { product: 'rdp', service: 'rdp', re: /\x03\x00\x00/i }, + { product: 'mikrotik', service: 'http', re: /mikrotik|RouterOS/i }, + { product: 'squid', service: 'http-proxy', re: /squid\/?([0-9.]*)/i }, + { product: 'gunicorn', service: 'http', re: /gunicorn/i }, +]; + +@Injectable() +export class BannerService { + fingerprint(banner = ''): { + product?: string; + service?: string; + version?: string; + osGuess?: string; + httpTitle?: string; + } { + for (const rule of PRODUCT_RULES) { + const m = banner.match(rule.re); + if (m) { + const title = banner + .match(/([^<]{1,200})<\/title>/i)?.[1] + ?.trim(); + let osGuess: string | undefined; + if (/ubuntu/i.test(banner)) osGuess = 'ubuntu'; + else if (/debian/i.test(banner)) osGuess = 'debian'; + else if (/centos|red hat|rhel/i.test(banner)) osGuess = 'rhel'; + else if (/windows/i.test(banner)) osGuess = 'windows'; + return { + product: rule.product, + service: rule.service, + version: m[1] || undefined, + osGuess, + httpTitle: title, + }; + } + } + const title = banner.match(/<title>([^<]{1,200})<\/title>/i)?.[1]?.trim(); + return { httpTitle: title }; + } + + async inspect(address: string, ports: number[]) { + if (!isIP(address)) + throw new BadRequestException('Banner scans require an IP address.'); + const requested = ports.length ? ports : [...SAFE_PORTS]; + const selected = [...new Set(requested)].filter((port) => + SAFE_PORTS.has(port), + ); + if (!selected.length) + throw new BadRequestException('Use a supported inspection port.'); + return Promise.all( + selected.slice(0, 18).map((port) => this.read(address, port)), + ); + } + + private read( + address: string, + port: number, + ): Promise<Record<string, unknown>> { + return new Promise((resolve) => { + let settled = false; + let banner = ''; + const finish = (result: Record<string, unknown>) => { + if (settled) return; + settled = true; + socket.destroy(); + resolve(result); + }; + const socket = net.createConnection({ host: address, port }); + socket.setTimeout(1800); + socket.once('connect', () => { + if (HTTP_PORTS.has(port)) + socket.write( + `GET / HTTP/1.0\r\nHost: ${address}\r\nUser-Agent: gapmind/1.0\r\nAccept: */*\r\n\r\n`, + ); + else if (port === 443 || port === 8443) + setTimeout(() => finish({ port, open: true }), 400); + else setTimeout(() => finish({ port, open: true }), 250); + }); + socket.on('data', (chunk) => { + banner += chunk.toString('utf8'); + if ( + banner.length >= 4096 || + banner.includes('</html>') || + (banner.includes('\n') && banner.length > 256) + ) + finish({ + port, + open: true, + banner: banner.slice(0, 4096).trim(), + ...this.fingerprint(banner), + }); + }); + socket.once('timeout', () => + finish({ port, open: false, error: 'Timed out' }), + ); + socket.once('error', (error) => + finish({ port, open: false, error: error.message }), + ); + socket.once('close', () => + finish({ + port, + open: banner.length > 0, + banner: banner.slice(0, 1024).trim() || undefined, + }), + ); + }); + } +} diff --git a/src/services/calibration-collector.service.ts b/src/services/calibration-collector.service.ts new file mode 100644 index 0000000..a12fa5c --- /dev/null +++ b/src/services/calibration-collector.service.ts @@ -0,0 +1,49 @@ +import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { ResolutionSnapshot } from './entities'; +import { MlGeolocationService } from './ml-geolocation.service'; +import { ResolutionService } from './resolution.service'; + +@Injectable() +export class CalibrationCollectorService + implements OnModuleInit, OnModuleDestroy +{ + private timer?: ReturnType<typeof setInterval>; + private running = false; + constructor( + @InjectRepository(ResolutionSnapshot) + private readonly snapshots: Repository<ResolutionSnapshot>, + private readonly resolution: ResolutionService, + private readonly ml: MlGeolocationService, + ) {} + onModuleInit() { + if (process.env.AUTO_COLLECT_CALIBRATION === 'false') return; + void this.collect(); + this.timer = setInterval(() => void this.collect(), 15 * 60 * 1000); + } + onModuleDestroy() { + if (this.timer) clearInterval(this.timer); + } + private async collect() { + if (this.running || (await this.ml.status()).samples >= 24) return; + this.running = true; + try { + const recent = await this.snapshots.find({ + order: { createdAt: 'DESC' }, + take: 80, + }); + const addresses = [ + ...new Set(recent.map((snapshot) => snapshot.address)), + ].slice(0, 8); + for (const address of addresses) + await this.resolution.resolve( + address, + true, + new Set(['geo', 'probes']), + ); + } finally { + this.running = false; + } + } +} diff --git a/src/services/dedup.util.ts b/src/services/dedup.util.ts new file mode 100644 index 0000000..7aa7dc4 --- /dev/null +++ b/src/services/dedup.util.ts @@ -0,0 +1,55 @@ +/** + * Deduplication helpers. Scan observations, favicons, and DHT peers + * accumulate one row per scan, so reads collapse them to the latest + * record per natural key. Pure functions — unit tested. + */ + +export interface Timestamped { + observedAt?: Date | string; + createdAt?: Date | string; + lastSeen?: Date | string; +} + +function timeOf(row: Timestamped): number { + const raw = row.observedAt ?? row.createdAt ?? row.lastSeen; + const t = raw instanceof Date ? raw.getTime() : Date.parse(String(raw ?? '')); + return Number.isFinite(t) ? (t as number) : 0; +} + +/** Keep newest row per key. Input order irrelevant. */ +export function dedupBy<T extends Timestamped>( + rows: T[], + key: (row: T) => string, +): T[] { + const best = new Map<string, T>(); + for (const row of rows) { + const k = key(row); + const prev = best.get(k); + if (!prev || timeOf(row) >= timeOf(prev)) best.set(k, row); + } + return [...best.values()]; +} + +export function dedupObservations<T extends Timestamped & { port: number }>( + rows: T[], +): T[] { + return dedupBy(rows, (r) => String(r.port)); +} + +export function dedupFavicons<T extends Timestamped & { perceptualHash: string }>( + rows: T[], +): T[] { + return dedupBy(rows, (r) => r.perceptualHash); +} + +export function dedupPeersByInfoHash<T extends { infoHash: string }>( + rows: T[], +): T[] { + const seen = new Set<string>(); + return rows.filter((r) => { + const k = r.infoHash.toLowerCase(); + if (seen.has(k)) return false; + seen.add(k); + return true; + }); +} diff --git a/src/services/dht.service.ts b/src/services/dht.service.ts new file mode 100644 index 0000000..afdc65a --- /dev/null +++ b/src/services/dht.service.ts @@ -0,0 +1,118 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { DhtPeer, DhtTorrent } from './entities'; +import { TriangulationService } from './triangulation.service'; +import { BgpService } from './routing/bgp.service'; +import { LiveFeedService } from './live-feed.service'; +import { dedupPeersByInfoHash } from './dedup.util'; + +@Injectable() +export class DhtService { + constructor( + @InjectRepository(DhtTorrent) + private readonly torrents: Repository<DhtTorrent>, + @InjectRepository(DhtPeer) private readonly peers: Repository<DhtPeer>, + private readonly triangulation: TriangulationService, + private readonly bgp: BgpService, + private readonly liveFeed: LiveFeedService, + ) {} + + async ingestTorrent(t: Partial<DhtTorrent> & { infoHash: string }) { + const saved = await this.torrents.save( + this.torrents.create({ + infoHash: t.infoHash.toLowerCase(), + name: t.name, + source: t.source, + seeders: t.seeders ?? 0, + leechers: t.leechers ?? 0, + trackers: t.trackers, + lastSeen: new Date(), + }), + ); + this.liveFeed.publishTorrent(saved); + return saved; + } + + async ingestPeers( + infoHash: string, + peers: Array<{ + address: string; + port: number; + peerId?: string; + client?: string; + }>, + ) { + const rows = peers.slice(0, 500).map((p) => + this.peers.create({ + infoHash: infoHash.toLowerCase(), + address: p.address, + port: p.port, + peerId: p.peerId, + client: p.client, + }), + ); + const saved = await this.peers.save(rows); + this.liveFeed.publishPeers(infoHash, saved); + void this.resolveBatch(saved.map((r) => r.id)); + return { accepted: saved.length }; + } + + private async resolveBatch(ids: string[]) { + for (const id of ids.slice(0, 50)) { + try { + const peer = await this.peers.findOneBy({ id }); + if (!peer) continue; + const bgp = await this.bgp.lookup(peer.address).catch(() => undefined); + const loc = await this.triangulation + .locate(peer.address) + .catch(() => undefined); + peer.asn = bgp?.asn; + peer.prefix = bgp?.prefix; + if (loc && (loc as { available?: boolean }).available) { + const est = ( + loc as { + estimate: { latitude: number; longitude: number }; + confidence: number; + } + ).estimate; + peer.latitude = est.latitude; + peer.longitude = est.longitude; + peer.confidence = (loc as { confidence: number }).confidence; + } + await this.peers.save(peer); + } catch { + /* yeah it's alright */ + } + } + } + + torrentsList(take = 100) { + return this.torrents.find({ + order: { lastSeen: 'DESC' }, + take: Math.min(take, 500), + }); + } + peersFor(infoHash: string, take = 500) { + return this.peers.find({ + where: { infoHash: infoHash.toLowerCase() }, + order: { observedAt: 'DESC' }, + take: Math.min(take, 1000), + }); + } + reverseIp(address: string, take = 100) { + return this.peers.find({ + where: { address }, + order: { observedAt: 'DESC' }, + take, + }); + } + async byAddress(address: string) { + const rows = await this.peers.find({ + where: { address }, + order: { observedAt: 'DESC' }, + take: 500, + }); + return dedupPeersByInfoHash(rows); + } +} diff --git a/src/services/entities.ts b/src/services/entities.ts new file mode 100644 index 0000000..c2c3d46 --- /dev/null +++ b/src/services/entities.ts @@ -0,0 +1,189 @@ +import { Column, Entity, Index, PrimaryGeneratedColumn } from 'typeorm'; + +@Entity('peer_nodes') +export class PeerNode { + @PrimaryGeneratedColumn('uuid') + id!: string; + @Index({ unique: true }) + @Column('varchar') + nodeId!: string; + @Column('varchar') + kind!: 'replica' | 'pathfinder'; + @Column('varchar', { nullable: true }) + address?: string; + @Column('varchar', { nullable: true }) + version?: string; + @Column('varchar', { default: 'unknown' }) + status!: string; + @Column({ type: 'simple-json', nullable: true }) + metadata?: Record<string, unknown>; + @Column('datetime', { default: () => 'CURRENT_TIMESTAMP' }) + createdAt!: Date; + @Column('datetime', { default: () => 'CURRENT_TIMESTAMP' }) + updatedAt!: Date; + @Column({ type: 'datetime', nullable: true }) + lastSeenAt?: Date; +} + +@Entity('resolution_snapshots') +export class ResolutionSnapshot { + @PrimaryGeneratedColumn('uuid') + id!: string; + @Index() + @Column('varchar') + address!: string; + @Column({ type: 'simple-json' }) + payload!: Record<string, unknown>; + @Column('datetime', { default: () => 'CURRENT_TIMESTAMP' }) + createdAt!: Date; +} + +@Entity('scan_observations') +@Index(['address', 'observedAt']) +@Index(['asn', 'rir']) +@Index(['port', 'open']) +@Index(['product']) +@Index(['faviconMmh3']) +@Index(['org']) +export class ScanObservation { + @PrimaryGeneratedColumn('uuid') + id!: string; + @Column('varchar') + address!: string; + @Column('int') + port!: number; + @Column('boolean') + open!: boolean; + @Column('varchar', { nullable: true }) + banner?: string; + @Column('varchar', { nullable: true }) + product?: string; + @Column('varchar', { nullable: true }) + service?: string; + @Column('varchar', { nullable: true }) + version?: string; + @Column('varchar', { nullable: true }) + osGuess?: string; + @Column('varchar', { nullable: true }) + hostname?: string; + @Column('varchar', { nullable: true }) + org?: string; + @Column('varchar', { nullable: true }) + country?: string; + @Column('varchar', { nullable: true }) + httpTitle?: string; + @Column('varchar', { nullable: true }) + tlsSubject?: string; + @Column('varchar', { nullable: true }) + faviconMmh3?: string; + @Column('varchar', { nullable: true }) + faviconPhash?: string; + @Column('varchar', { nullable: true }) + asn?: string; + @Column('varchar', { nullable: true }) + prefix?: string; + @Column('varchar', { nullable: true }) + rir?: string; + @Column('datetime', { default: () => 'CURRENT_TIMESTAMP' }) + observedAt!: Date; +} + +@Entity('sweep_jobs') +export class SweepJob { + @PrimaryGeneratedColumn('uuid') id!: string; + @Column('varchar') kind!: 'cidr' | 'asn' | 'prefix' | 'registry'; + @Column('varchar') target!: string; + @Column('varchar', { default: 'queued' }) status!: string; + @Column('int', { default: 0 }) total!: number; + @Column('int', { default: 0 }) completed!: number; + @Column({ type: 'simple-json', nullable: true }) ports?: number[]; + @Column('datetime', { default: () => 'CURRENT_TIMESTAMP' }) createdAt!: Date; + @Column('datetime', { default: () => 'CURRENT_TIMESTAMP' }) updatedAt!: Date; +} + +@Entity('dht_torrents') +export class DhtTorrent { + @PrimaryGeneratedColumn('uuid') id!: string; + @Index({ unique: true }) + @Column('varchar') + infoHash!: string; + @Column('varchar', { nullable: true }) name?: string; + @Column('varchar', { nullable: true }) source?: string; + @Column('int', { default: 0 }) seeders!: number; + @Column('int', { default: 0 }) leechers!: number; + @Column({ type: 'simple-json', nullable: true }) trackers?: string[]; + @Column('datetime', { default: () => 'CURRENT_TIMESTAMP' }) firstSeen!: Date; + @Column('datetime', { default: () => 'CURRENT_TIMESTAMP' }) lastSeen!: Date; +} + +@Entity('dht_peers') +@Index(['infoHash', 'address']) +export class DhtPeer { + @PrimaryGeneratedColumn('uuid') id!: string; + @Column('varchar') infoHash!: string; + @Column('varchar') address!: string; + @Column('int') port!: number; + @Column('varchar', { nullable: true }) peerId?: string; + @Column('varchar', { nullable: true }) client?: string; + @Column('varchar', { nullable: true }) asn?: string; + @Column('varchar', { nullable: true }) prefix?: string; + @Column('varchar', { nullable: true }) country?: string; + @Column('float', { nullable: true }) latitude?: number; + @Column('float', { nullable: true }) longitude?: number; + @Column('float', { nullable: true }) confidence?: number; + @Column('datetime', { default: () => 'CURRENT_TIMESTAMP' }) observedAt!: Date; +} + +@Entity('favicon_fingerprints') +@Index(['perceptualHash']) +export class FaviconFingerprint { + @PrimaryGeneratedColumn('uuid') id!: string; + @Column('varchar') perceptualHash!: string; + @Column('varchar', { nullable: true }) mmh3?: string; + @Column('varchar', { nullable: true }) label?: string; + @Column('varchar', { nullable: true }) source?: string; + @Column('int') bytes!: number; + @Column('datetime', { default: () => 'CURRENT_TIMESTAMP' }) createdAt!: Date; +} + +@Entity('geo_calibrations') +export class GeoCalibration { + @PrimaryGeneratedColumn('uuid') + id!: string; + @Column('varchar', { nullable: true }) + target?: string; + @Column('float') + latitude!: number; + @Column('float') + longitude!: number; + @Column('float') + geoliteLatitude!: number; + @Column('float') + geoliteLongitude!: number; + @Column('float') + pennsylvaniaMs!: number; + @Column('float') + oregonMs!: number; + @Column('varchar', { default: 'operator-verified' }) + source!: string; + @Column('datetime', { default: () => 'CURRENT_TIMESTAMP' }) + createdAt!: Date; +} + +@Entity('accounts') +export class Account { + @PrimaryGeneratedColumn('uuid') + id!: string; + @Index({ unique: true }) + @Column('varchar') + email!: string; + @Column('varchar') + passwordHash!: string; + @Index({ unique: true }) + @Column('varchar') + apiTokenHash!: string; + @Column('boolean', { default: false }) + nonfreeProvidersOptOut!: boolean; + @Column('datetime', { default: () => 'CURRENT_TIMESTAMP' }) + createdAt!: Date; +} diff --git a/src/services/favicon.service.ts b/src/services/favicon.service.ts new file mode 100644 index 0000000..87300c8 --- /dev/null +++ b/src/services/favicon.service.ts @@ -0,0 +1,165 @@ +import { BadRequestException, Injectable } from "@nestjs/common"; +import { InjectRepository } from "@nestjs/typeorm"; +import sharp from "sharp"; +import { Repository } from "typeorm"; +import { FaviconFingerprint } from "./entities"; + +@Injectable() +export class FaviconService { + constructor( + @InjectRepository(FaviconFingerprint) private readonly fingerprints: + Repository<FaviconFingerprint>, + ) {} + async index(base64: string, label?: string, source?: string) { + const data = Buffer.from( + base64.replace(/^data:[^;]+;base64,/, ""), + "base64", + ); + return this.indexBuffer(data, label, source); + } + async indexBuffer(data: Buffer, label?: string, source?: string) { + if (!data.length || data.length > 2_000_000) { + throw new BadRequestException("Upload an image smaller than 2 MB."); + } + let pixels: Buffer; + try { + pixels = await sharp(data, { limitInputPixels: 4_000_000 }) + .resize(32, 32, { fit: "fill" }) + .grayscale() + .raw() + .toBuffer(); + } catch { + throw new BadRequestException("The upload is not a supported image."); + } + const perceptualHash = this.phash(pixels); + const mmh3 = this.mmh3(data); + return this.fingerprints.save( + this.fingerprints.create({ + perceptualHash, + mmh3, + label, + source, + bytes: data.length, + }), + ); + } + async search(perceptualHash: string, distance = 8) { + if (!/^[\da-f]{16}$/i.test(perceptualHash)) { + throw new BadRequestException("pHash must be 16 hexadecimal characters."); + } + const all = await this.fingerprints.find({ + take: 5000, + order: { createdAt: "DESC" }, + }); + return all + .map((item) => ({ + ...item, + distance: this.hamming(perceptualHash, item.perceptualHash), + })) + .filter((item) => item.distance <= Math.min(Math.max(distance, 0), 32)) + .sort((a, b) => a.distance - b.distance); + } + + mmh3(data: Buffer): string { + let h = 0; + const len = data.length; + const nblocks = Math.floor(len / 4); + for (let i = 0; i < nblocks; i++) { + let k = data.readUInt32LE(i * 4); + k = Math.imul(k, 0xcc9e2d51); + k = (k << 15) | (k >>> 17); + k = Math.imul(k, 0x1b873593); + h ^= k; + h = (h << 13) | (h >>> 19); + h = Math.imul(h, 5) + 0xe6546b64; + } + let tail = 0, + tailSize = len & 3; + for (let i = 0; i < tailSize; i++) { + tail |= data[len - tailSize + i]! << (i * 8); + } + if (tailSize) { + tail = Math.imul(tail, 0xcc9e2d51); + tail = (tail << 15) | (tail >>> 17); + tail = Math.imul(tail, 0x1b873593); + h ^= tail; + } + h ^= len; + h ^= h >>> 16; + h = Math.imul(h, 0x85ebca6b); + h ^= h >>> 13; + h = Math.imul(h, 0xc2b2ae35); + h ^= h >>> 16; + return String(h >>> 0); + } + + async fetchAndIndex( + address: string, + port = 80, + ): Promise<{ mmh3: string; phash: string } | undefined> { + for ( + const scheme of port === 443 || port === 8443 + ? ["https", "http"] + : ["http", "https"] + ) { + try { + const res = await fetch(`${scheme}://${address}:${port}/favicon.ico`, { + signal: AbortSignal.timeout(4000), + }); + if (!res.ok) continue; + const buf = Buffer.from(await res.arrayBuffer()); + if (!buf.length || buf.length > 2_000_000) continue; + const saved = await this.indexBuffer( + buf, + address, + `${scheme}://${address}:${port}/favicon.ico`, + ); + return { mmh3: this.mmh3(buf), phash: saved.perceptualHash }; + } catch { + /* try next scheme */ + } + } + return undefined; + } + + async searchMmh3(hash: string) { + const all = await this.fingerprints.find({ + take: 5000, + order: { createdAt: "DESC" }, + }); + return all.filter( + (f) => (f as unknown as { mmh3?: string }).mmh3 === String(hash), + ); + } + private phash(pixels: Buffer) { + const values: number[] = []; + for (let u = 0; u < 8; u++) { + for (let v = 0; v < 8; v++) { + let sum = 0; + for (let x = 0; x < 32; x++) { + for (let y = 0; y < 32; y++) { + sum += pixels[y * 32 + x] * + Math.cos(((2 * x + 1) * u * Math.PI) / 64) * + Math.cos(((2 * y + 1) * v * Math.PI) / 64); + } + } + values.push(sum); + } + } + const median = [...values.slice(1)].sort((a, b) => a - b)[31]; + let result = 0n; + for (const value of values) { + result = (result << 1n) | BigInt(value >= median ? 1 : 0); + } + return result.toString(16).padStart(16, "0"); + } + private hamming(a: string, b: string) { + let value = BigInt(`0x${a}`) ^ BigInt(`0x${b}`), + count = 0; + while (value) { + count++; + value &= value - 1n; + } + return count; + } +} diff --git a/src/services/geonames.service.ts b/src/services/geonames.service.ts new file mode 100644 index 0000000..c1d6295 --- /dev/null +++ b/src/services/geonames.service.ts @@ -0,0 +1,78 @@ +import { Injectable } from '@nestjs/common'; +import { HttpService } from './http.service'; + +export interface GeoLocation { + country?: string; + countryCode?: string; + city?: string; + region?: string; + postalCode?: string; + timezone?: string; + asn?: string; + organization?: string; + latitude?: number; + longitude?: number; + accuracyRadiusKm?: number; + source: string; +} + +@Injectable() +export class GeonamesService { + constructor(private readonly http: HttpService) {} + + async lookupGeoNames(ip: string): Promise<GeoLocation | undefined> { + const username = process.env.GEONAMES_USERNAME; + if (!username) return undefined; + const value = await this.http.json<{ + countryName?: string; + countryCode?: string; + city?: string; + lat?: number; + lng?: number; + }>( + `https://api.geonames.org/geoipJSON?ip=${encodeURIComponent( + ip, + )}&username=${encodeURIComponent(username)}`, + ); + return { + country: value.countryName, + countryCode: value.countryCode, + city: value.city, + latitude: value.lat, + longitude: value.lng, + source: 'GeoNames', + }; + } + + async lookupMaxMind(ip: string): Promise<GeoLocation | undefined> { + const account = process.env.MAXMIND_ACCOUNT_ID; + const key = process.env.MAXMIND_LICENSE_KEY; + if (!account || !key) return undefined; + const authorization = `Basic ${Buffer.from(`${account}:${key}`).toString( + 'base64', + )}`; + const response = await fetch( + `https://geolite.info/geoip/v2.1/city/${encodeURIComponent(ip)}`, + { headers: { authorization, accept: 'application/json' } }, + ); + if (!response.ok) return undefined; + const value = (await response.json()) as { + country?: { names?: { en?: string }; iso_code?: string }; + city?: { names?: { en?: string } }; + location?: { + latitude?: number; + longitude?: number; + accuracy_radius?: number; + }; + }; + return { + country: value.country?.names?.en, + countryCode: value.country?.iso_code, + city: value.city?.names?.en, + latitude: value.location?.latitude, + longitude: value.location?.longitude, + accuracyRadiusKm: value.location?.accuracy_radius, + source: 'MaxMind GeoLite City', + }; + } +} diff --git a/src/services/http.service.ts b/src/services/http.service.ts new file mode 100644 index 0000000..938797b --- /dev/null +++ b/src/services/http.service.ts @@ -0,0 +1,20 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class HttpService { + async json<T>(url: string, timeoutMs = 5000): Promise<T> { + const controller = new AbortController(); + const timer = setTimeout(() => controller.abort(), timeoutMs); + try { + const response = await fetch(url, { + headers: { accept: 'application/rdap+json, application/json' }, + signal: controller.signal, + }); + if (!response.ok) + throw new Error(`Remote service returned ${response.status}`); + return (await response.json()) as T; + } finally { + clearTimeout(timer); + } + } +} diff --git a/src/services/live-feed.service.ts b/src/services/live-feed.service.ts new file mode 100644 index 0000000..30cad38 --- /dev/null +++ b/src/services/live-feed.service.ts @@ -0,0 +1,94 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { ScanGateway } from './scan.gateway'; +import { DhtTorrent, DhtPeer, ScanObservation } from './entities'; + +const FEED_BUFFER_SIZE = 200; + +export interface FeedEvent { + kind: 'dht.torrent' | 'dht.peer' | 'scan.observation'; + data: unknown; + timestamp: string; +} + +@Injectable() +export class LiveFeedService { + private readonly logger = new Logger(LiveFeedService.name); + private readonly recentBuffer: FeedEvent[] = []; + private readonly FEED_NS = 'live'; + + constructor( + private readonly gateway: ScanGateway, + @InjectRepository(DhtTorrent) + private readonly torrents: Repository<DhtTorrent>, + @InjectRepository(DhtPeer) + private readonly peers: Repository<DhtPeer>, + @InjectRepository(ScanObservation) + private readonly observations: Repository<ScanObservation>, + ) {} + + publishTorrent(torrent: DhtTorrent) { + const event: FeedEvent = { + kind: 'dht.torrent', + data: { + id: torrent.id, + infoHash: torrent.infoHash, + name: torrent.name, + source: torrent.source, + seeders: torrent.seeders, + leechers: torrent.leechers, + lastSeen: torrent.lastSeen, + }, + timestamp: new Date().toISOString(), + }; + this.push(event); + } + + publishPeers(infoHash: string, peers: DhtPeer[]) { + const event: FeedEvent = { + kind: 'dht.peer', + data: { + infoHash, + count: peers.length, + sample: peers.slice(0, 5).map((p) => ({ + address: p.address, + port: p.port, + client: p.client, + })), + }, + timestamp: new Date().toISOString(), + }; + this.push(event); + } + + publishObservation(obs: ScanObservation) { + const event: FeedEvent = { + kind: 'scan.observation', + data: { + address: obs.address, + port: obs.port, + open: obs.open, + product: obs.product, + service: obs.service, + version: obs.version, + asn: obs.asn, + org: obs.org, + }, + timestamp: new Date().toISOString(), + }; + this.push(event); + } + + recent(count = 50): FeedEvent[] { + return this.recentBuffer.slice(-Math.min(count, FEED_BUFFER_SIZE)); + } + + private push(event: FeedEvent) { + this.recentBuffer.push(event); + if (this.recentBuffer.length > FEED_BUFFER_SIZE) { + this.recentBuffer.shift(); + } + this.gateway.publishFeed('feed.event', event); + } +} diff --git a/src/services/ml-geolocation.service.ts b/src/services/ml-geolocation.service.ts new file mode 100644 index 0000000..af14417 --- /dev/null +++ b/src/services/ml-geolocation.service.ts @@ -0,0 +1,181 @@ +import * as tf from '@tensorflow/tfjs'; +import { BadRequestException, Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { GeoCalibration } from './entities'; + +export type GeoFeatures = Pick< + GeoCalibration, + 'geoliteLatitude' | 'geoliteLongitude' | 'pennsylvaniaMs' | 'oregonMs' +>; + +@Injectable() +export class MlGeolocationService { + private model?: tf.LayersModel; + private trainedSamples = 0; + constructor( + @InjectRepository(GeoCalibration) + private readonly calibrations: Repository<GeoCalibration>, + ) {} + + async record(input: Omit<GeoCalibration, 'id' | 'createdAt'>) { + this.validate(input); + const saved = await this.calibrations.save(this.calibrations.create(input)); + this.model = undefined; + return saved; + } + + async collectProviderObservation( + input: Omit<GeoCalibration, 'id' | 'createdAt' | 'source'>, + ) { + if (!input.target) throw new BadRequestException('A target is required.'); + const existing = await this.calibrations.findOneBy({ + target: input.target, + source: 'provider-derived', + }); + if (existing) return { collected: false, record: existing }; + this.validate(input); + const record = await this.calibrations.save( + this.calibrations.create({ ...input, source: 'provider-derived' }), + ); + this.model = undefined; + return { collected: true, record }; + } + + async predict(features: GeoFeatures) { + this.validate({ ...features, latitude: 0, longitude: 0 }); + await this.trainIfReady(); + if (!this.model) { + return { + available: false, + reason: 'At least 25 samples are required.', + }; + } + const tensor = tf.tensor2d([this.featureVector(features)]); + const output = this.model.predict(tensor) as tf.Tensor; + const values = Array.from(await output.data()) as number[]; + tensor.dispose(); + output.dispose(); + const latitude = this.clamp( + features.geoliteLatitude + values[0] * 90, + -90, + 90, + ); + const longitude = this.wrap(features.geoliteLongitude + values[1] * 180); + return { + available: true, + latitude, + longitude, + trainedSamples: this.trainedSamples, + methodology: + 'TensorFlow.js residual calibration over GeoLite coordinates and PA/OR TCP latencies.', + }; + } + + async status() { + const providerDerived = await this.calibrations.count({ + where: { source: 'provider-derived' }, + }); + return { + samples: await this.calibrations.count(), + minimumSamples: 25, + trainedSamples: this.trainedSamples, + ready: Boolean(this.model), + providerDerived, + }; + } + + private async trainIfReady() { + const rows = await this.calibrations.find({ + order: { createdAt: 'DESC' }, + take: 1000, + }); + if ( + rows.length < 25 || + (this.model && this.trainedSamples === rows.length) + ) { + return; + } + this.model?.dispose(); + const model = tf.sequential(); + model.add( + tf.layers.dense({ + inputShape: [5], + units: 12, + activation: 'relu', + kernelInitializer: 'glorotUniform', + }), + ); + model.add(tf.layers.dense({ units: 8, activation: 'relu' })); + model.add(tf.layers.dense({ units: 2, activation: 'tanh' })); + model.compile({ optimizer: tf.train.adam(0.01), loss: 'meanSquaredError' }); + const xs = tf.tensor2d(rows.map((row) => this.featureVector(row))); + const ys = tf.tensor2d( + rows.map((row) => [ + (row.latitude - row.geoliteLatitude) / 90, + (row.longitude - row.geoliteLongitude) / 180, + ]), + ); + await model.fit(xs, ys, { + epochs: 80, + batchSize: Math.min(32, rows.length), + shuffle: true, + verbose: 0, + }); + xs.dispose(); + ys.dispose(); + this.model = model; + this.trainedSamples = rows.length; + } + + private featureVector(input: GeoFeatures) { + return [ + input.geoliteLatitude / 90, + input.geoliteLongitude / 180, + Math.min(input.pennsylvaniaMs, 1000) / 1000, + Math.min(input.oregonMs, 1000) / 1000, + Math.max(-1, Math.min(1, (input.pennsylvaniaMs - input.oregonMs) / 1000)), + ]; + } + private validate(input: Partial<GeoCalibration>) { + for (const key of [ + 'geoliteLatitude', + 'geoliteLongitude', + 'pennsylvaniaMs', + 'oregonMs', + ] as const) { + if (!Number.isFinite(input[key])) { + throw new BadRequestException(`${key} must be a finite number.`); + } + } + if ( + (input.latitude !== undefined && !Number.isFinite(input.latitude)) || + (input.longitude !== undefined && !Number.isFinite(input.longitude)) + ) { + throw new BadRequestException( + 'Verified coordinates must be finite numbers.', + ); + } + if ( + input.geoliteLatitude! < -90 || + input.geoliteLatitude! > 90 || + (input.latitude !== undefined && + (input.latitude < -90 || input.latitude > 90)) || + input.geoliteLongitude! < -180 || + input.geoliteLongitude! > 180 || + (input.longitude !== undefined && + (input.longitude < -180 || input.longitude > 180)) + ) { + throw new BadRequestException('Coordinates are out of range.'); + } + if (input.pennsylvaniaMs! <= 0 || input.oregonMs! <= 0) { + throw new BadRequestException('Latency values must be positive.'); + } + } + private clamp(value: number, min: number, max: number) { + return Math.max(min, Math.min(max, value)); + } + private wrap(value: number) { + return ((((value + 180) % 360) + 360) % 360) - 180; + } +} diff --git a/src/services/peer-relay.service.ts b/src/services/peer-relay.service.ts new file mode 100644 index 0000000..0654e76 --- /dev/null +++ b/src/services/peer-relay.service.ts @@ -0,0 +1,86 @@ +import { Injectable } from '@nestjs/common'; + +export type RelayCommand = { + id: string; + type: 'probe'; + host: string; + port: string; +}; + +type PendingProbe = { + resolve: (value: { milliseconds?: number; error?: string }) => void; + timer: ReturnType<typeof setTimeout>; +}; + +@Injectable() +export class PeerRelayService { + private readonly queues = new Map<string, RelayCommand[]>(); + private readonly waiters = new Map< + string, + (command: RelayCommand | null) => void + >(); + private readonly pending = new Map<string, PendingProbe>(); + private readonly connections = new Map<string, number>(); + + next(nodeId: string, waitMs = 25000): Promise<RelayCommand | null> { + this.connections.set(nodeId, Date.now()); + const queued = this.queues.get(nodeId)?.shift(); + if (queued) return Promise.resolve(queued); + return new Promise((resolve) => { + const timer = setTimeout( + () => { + if (this.waiters.get(nodeId) === wake) this.waiters.delete(nodeId); + resolve(null); + }, + Math.min(Math.max(waitMs, 1000), 30000), + ); + const wake = (command: RelayCommand | null) => { + clearTimeout(timer); + if (this.waiters.get(nodeId) === wake) this.waiters.delete(nodeId); + resolve(command); + }; + const prior = this.waiters.get(nodeId); + if (prior) prior(null); + this.waiters.set(nodeId, wake); + }); + } + + probe(nodeId: string, host: string, port = '443') { + if (!this.isConnected(nodeId)) { + return Promise.resolve({ + error: 'Pathfinder has not established its outbound relay connection.', + }); + } + const id = crypto.randomUUID(); + const command: RelayCommand = { id, type: 'probe', host, port }; + return new Promise<{ milliseconds?: number; error?: string }>((resolve) => { + const timer = setTimeout(() => { + this.pending.delete(id); + resolve({ + error: 'Pathfinder relay did not answer within 10 seconds.', + }); + }, 10000); + this.pending.set(id, { resolve, timer }); + const waiter = this.waiters.get(nodeId); + if (waiter) waiter(command); + else { + const queue = this.queues.get(nodeId) ?? []; + queue.push(command); + this.queues.set(nodeId, queue); + } + }); + } + + complete(id: string, result: { milliseconds?: number; error?: string }) { + const pending = this.pending.get(id); + if (!pending) return false; + clearTimeout(pending.timer); + this.pending.delete(id); + pending.resolve(result); + return true; + } + + isConnected(nodeId: string) { + return (this.connections.get(nodeId) ?? 0) > Date.now() - 35000; + } +} diff --git a/src/services/providers.service.ts b/src/services/providers.service.ts new file mode 100644 index 0000000..8ca8be7 --- /dev/null +++ b/src/services/providers.service.ts @@ -0,0 +1,365 @@ +import { Injectable } from '@nestjs/common'; +import { GeonamesService, GeoLocation } from './geonames.service'; + +export type ProviderClass = 'free' | 'credentialed'; +export type GeoProviderResult = GeoLocation & { + provider: string; + class: ProviderClass; + score: number; +}; +@Injectable() +export class GeoProvidersService { + constructor(private readonly geonames: GeonamesService) {} + async resolve( + ip: string, + permitCredentialed: boolean, + ): Promise<{ + result?: GeoLocation; + providers: GeoProviderResult[]; + consensus?: number; + }> { + const providers: GeoProviderResult[] = []; + const geoNames = await this.safe(() => this.geonames.lookupGeoNames(ip)); + if (geoNames) + providers.push({ + ...geoNames, + provider: 'GeoNames', + class: 'free', + score: 0.45, + }); + if (permitCredentialed) { + const maxMind = await this.safe(() => this.geonames.lookupMaxMind(ip)); + if (maxMind) + providers.push({ + ...maxMind, + provider: 'MaxMind GeoLite City', + class: 'credentialed', + score: 0.7, + }); + } + const hasUsableLocation = providers.some( + (provider) => + Number.isFinite(provider.latitude) && + Number.isFinite(provider.longitude) && + Boolean(provider.city), + ); + if (!hasUsableLocation) { + const fallback = await this.lookupIpWhoIs(ip); + if (fallback) providers.push(fallback); + } + if ( + permitCredentialed && + !providers.some((provider) => Boolean(provider.city)) + ) { + const fallback = await this.lookupIpApiCo(ip); + if (fallback) providers.push(fallback); + } + if (!providers.length) return { providers }; + const total = providers.reduce((sum, item) => sum + item.score, 0); + const latitude = + providers.reduce( + (sum, item) => sum + (item.latitude ?? 0) * item.score, + 0, + ) / total; + const longitude = + providers.reduce( + (sum, item) => sum + (item.longitude ?? 0) * item.score, + 0, + ) / total; + const primary = [...providers].sort((a, b) => b.score - a.score)[0]; + const consensus = + providers.length === 1 + ? primary.score + : Math.min( + 0.9, + providers.reduce( + (sum, item) => + sum + + (Math.abs((item.latitude ?? latitude) - latitude) + + Math.abs((item.longitude ?? longitude) - longitude)), + 0, + ) < 0.8 + ? 0.88 + : 0.55, + ); + return { + result: { + ...primary, + latitude, + longitude, + source: providers.map((item) => item.provider).join(' + '), + }, + providers, + consensus, + }; + } + + private async lookupIpWhoIs( + ip: string, + ): Promise<GeoProviderResult | undefined> { + try { + const response = await fetch( + `https://ipwho.is/${encodeURIComponent(ip)}`, + { + headers: { accept: 'application/json' }, + signal: AbortSignal.timeout(5000), + }, + ); + if (!response.ok) return undefined; + const value = (await response.json()) as { + success?: boolean; + country?: string; + country_code?: string; + city?: string; + region?: string; + postal?: string; + timezone?: { id?: string }; + connection?: { asn?: number; org?: string }; + latitude?: number; + longitude?: number; + }; + if (value.success === false || !value.country_code) return undefined; + return { + provider: 'ipwho.is', + class: 'free', + score: 0.48, + source: 'ipwho.is', + country: value.country, + countryCode: value.country_code, + city: value.city, + region: value.region, + postalCode: value.postal, + timezone: value.timezone?.id, + asn: value.connection?.asn?.toString(), + organization: value.connection?.org, + latitude: value.latitude, + longitude: value.longitude, + }; + } catch { + return undefined; + } + } + + private async lookupIpApiCom( + ip: string, + ): Promise<GeoProviderResult | undefined> { + try { + const response = await fetch( + `https://ip-api.com/json/${encodeURIComponent(ip)}`, + { + headers: { accept: 'application/json' }, + signal: AbortSignal.timeout(5000), + }, + ); + if (!response.ok) return undefined; + const value = (await response.json()) as { + status?: string; + country?: string; + countryCode?: string; + city?: string; + regionName?: string; + zip?: string; + timezone?: string; + as?: string; + org?: string; + lat?: number; + lon?: number; + }; + if (value.status !== 'success' || !value.countryCode) return undefined; + return { + provider: 'ip-api.com', + class: 'free', + score: 0.5, + source: 'ip-api.com', + country: value.country, + countryCode: value.countryCode, + city: value.city, + region: value.regionName, + postalCode: value.zip, + timezone: value.timezone, + asn: value.as?.split(' ')[0], + organization: value.org, + latitude: value.lat, + longitude: value.lon, + }; + } catch { + return undefined; + } + } + + private async lookupGeoLite( + ip: string, + ): Promise<GeoProviderResult | undefined> { + try { + const response = await fetch( + `https://geolite.info/geoip/v2.1/city/${encodeURIComponent(ip)}`, + { + headers: { accept: 'application/json', Authorization: `Basic ${btoa(`${process.env.MAXMIND_ACCOUNT_ID}:${process.env.MAXMIND_LICENSE_KEY}`)}` }, + signal: AbortSignal.timeout(5000), + }, + ); + if (!response.ok) return undefined; + const value = (await response.json()) as { + country?: { names?: { en?: string }; iso_code?: string }; + city?: { names?: { en?: string } }; + subdivisions?: Array<{ names?: { en?: string } }>; + postal?: { code?: string }; + location?: { latitude?: number; longitude?: number }; + traits?: { autonomous_system_number?: number; organization?: string }; + }; + if (!value.country?.iso_code) return undefined; + return { + provider: 'GeoLite City', + class: 'credentialed', + score: 0.7, + source: 'GeoLite City', + country: value.country.names?.en, + countryCode: value.country.iso_code, + city: value.city?.names?.en, + region: value.subdivisions?.[0]?.names?.en, + postalCode: value.postal?.code, + timezone: undefined, + asn: value.traits?.autonomous_system_number?.toString(), + organization: value.traits?.organization, + latitude: value.location?.latitude, + longitude: value.location?.longitude, + }; + } catch { + return undefined; + } + } + + private async lookupIpify(ip: string): Promise<GeoProviderResult | undefined> { + try { + const response = await fetch( + `https://api.ipify.org?format=json&ip=${encodeURIComponent(ip)}`, + { + headers: { accept: 'application/json' }, + signal: AbortSignal.timeout(5000), + }, + ); + if (!response.ok) return undefined; + const value = (await response.json()) as { + ip?: string; + }; + if (!value.ip) return undefined; + return { + provider: 'ipify', + class: 'free', + score: 0.5, + source: 'ipify', + country: undefined, + countryCode: undefined, + city: undefined, + region: undefined, + postalCode: undefined, + timezone: undefined, + asn: undefined, + organization: undefined, + latitude: undefined, + longitude: undefined, + }; + } catch { + return undefined; + } + } + + private async lookupFreeIpApi(ip: string): Promise<GeoProviderResult | undefined> { + try { + const response = await fetch( + `https://freeipapi.com/api/json/${encodeURIComponent(ip)}`, + { + headers: { accept: 'application/json' }, + signal: AbortSignal.timeout(5000), + }, + ); + if (!response.ok) return undefined; + const value = (await response.json()) as { + country_name?: string; + country_code?: string; + city?: string; + region_name?: string; + postal_code?: string; + timezone?: string; + asn?: string; + org?: string; + latitude?: number; + longitude?: number; + }; + if (!value.country_code) return undefined; + return { + provider: 'freeipapi.com', + class: 'free', + score: 0.5, + source: 'freeipapi.com', + country: value.country_name, + countryCode: value.country_code, + city: value.city, + region: value.region_name, + postalCode: value.postal_code, + timezone: value.timezone, + asn: value.asn, + organization: value.org, + latitude: value.latitude, + longitude: value.longitude, + }; + } catch { + return undefined; + } + } + + private async lookupIpApiCo( + ip: string, + ): Promise<GeoProviderResult | undefined> { + try { + const response = await fetch( + `https://ipapi.co/${encodeURIComponent(ip)}/json/`, + { + headers: { accept: 'application/json' }, + signal: AbortSignal.timeout(5000), + }, + ); + if (!response.ok) return undefined; + const value = (await response.json()) as { + error?: boolean; + city?: string; + region?: string; + country?: string; + country_name?: string; + postal?: string; + timezone?: string; + asn?: string; + org?: string; + latitude?: number; + longitude?: number; + }; + if (value.error || !value.country) return undefined; + return { + provider: 'ipapi.co', + class: 'credentialed', + score: 0.52, + source: 'ipapi.co', + country: value.country_name, + countryCode: value.country, + city: value.city, + region: value.region, + postalCode: value.postal, + timezone: value.timezone, + asn: value.asn, + organization: value.org, + latitude: value.latitude, + longitude: value.longitude, + }; + } catch { + return undefined; + } + } + + private async safe<T>(operation: () => Promise<T>): Promise<T | undefined> { + try { + return await operation(); + } catch { + return undefined; + } + } +} diff --git a/src/services/registry/afrinic.service.ts b/src/services/registry/afrinic.service.ts new file mode 100644 index 0000000..0841ff6 --- /dev/null +++ b/src/services/registry/afrinic.service.ts @@ -0,0 +1,12 @@ +import { Injectable } from '@nestjs/common'; +import { HttpService } from '../http.service'; +import { RegistryService } from './registry.service'; + +@Injectable() +export class AfrinicService extends RegistryService { + protected readonly registry = 'AFRINIC'; + protected readonly endpoint = 'https://rdap.afrinic.net/rdap/ip/'; + constructor(http: HttpService) { + super(http); + } +} diff --git a/src/services/registry/apnic.service.ts b/src/services/registry/apnic.service.ts new file mode 100644 index 0000000..357289f --- /dev/null +++ b/src/services/registry/apnic.service.ts @@ -0,0 +1,12 @@ +import { Injectable } from '@nestjs/common'; +import { HttpService } from '../http.service'; +import { RegistryService } from './registry.service'; + +@Injectable() +export class ApnicService extends RegistryService { + protected readonly registry = 'APNIC'; + protected readonly endpoint = 'https://rdap.apnic.net/ip/'; + constructor(http: HttpService) { + super(http); + } +} diff --git a/src/services/registry/arin.service.ts b/src/services/registry/arin.service.ts new file mode 100644 index 0000000..117e0c5 --- /dev/null +++ b/src/services/registry/arin.service.ts @@ -0,0 +1,12 @@ +import { Injectable } from '@nestjs/common'; +import { HttpService } from '../http.service'; +import { RegistryService } from './registry.service'; + +@Injectable() +export class ArinService extends RegistryService { + protected readonly registry = 'ARIN'; + protected readonly endpoint = 'https://rdap.arin.net/registry/ip/'; + constructor(http: HttpService) { + super(http); + } +} diff --git a/src/services/registry/lacnic.service.ts b/src/services/registry/lacnic.service.ts new file mode 100644 index 0000000..99f6c22 --- /dev/null +++ b/src/services/registry/lacnic.service.ts @@ -0,0 +1,12 @@ +import { Injectable } from '@nestjs/common'; +import { HttpService } from '../http.service'; +import { RegistryService } from './registry.service'; + +@Injectable() +export class LacnicService extends RegistryService { + protected readonly registry = 'LACNIC'; + protected readonly endpoint = 'https://rdap.lacnic.net/rdap/ip/'; + constructor(http: HttpService) { + super(http); + } +} diff --git a/src/services/registry/registry.service.ts b/src/services/registry/registry.service.ts new file mode 100644 index 0000000..c31b263 --- /dev/null +++ b/src/services/registry/registry.service.ts @@ -0,0 +1,56 @@ +import { Injectable } from '@nestjs/common'; +import { HttpService } from '../http.service'; + +export interface RegistryRecord { + registry: string; + handle?: string; + name?: string; + country?: string; + range?: string; + entities: string[]; + raw: unknown; +} + +type Rdap = { + handle?: string; + name?: string; + country?: string; + startAddress?: string; + endAddress?: string; + entities?: Array<{ + handle?: string; + vcardArray?: [ + string, + Array<[string, Record<string, unknown>, string, string]>, + ]; + }>; +}; + +@Injectable() +export abstract class RegistryService { + protected abstract readonly registry: string; + protected abstract readonly endpoint: string; + constructor(protected readonly http: HttpService) {} + + async lookup(ip: string): Promise<RegistryRecord> { + const data = await this.http.json<Rdap>( + `${this.endpoint}${encodeURIComponent(ip)}`, + ); + const entities = (data.entities ?? []).map((entity) => { + const fn = entity.vcardArray?.[1]?.find(([name]) => name === 'fn')?.[3]; + return fn || entity.handle || 'Unknown entity'; + }); + return { + registry: this.registry, + handle: data.handle, + name: data.name, + country: data.country, + range: + data.startAddress && data.endAddress + ? `${data.startAddress} - ${data.endAddress}` + : undefined, + entities, + raw: data, + }; + } +} diff --git a/src/services/registry/ripe.service.ts b/src/services/registry/ripe.service.ts new file mode 100644 index 0000000..9850784 --- /dev/null +++ b/src/services/registry/ripe.service.ts @@ -0,0 +1,12 @@ +import { Injectable } from '@nestjs/common'; +import { HttpService } from '../http.service'; +import { RegistryService } from './registry.service'; + +@Injectable() +export class RipeService extends RegistryService { + protected readonly registry = 'RIPE NCC'; + protected readonly endpoint = 'https://rdap.db.ripe.net/ip/'; + constructor(http: HttpService) { + super(http); + } +} diff --git a/src/services/resolution.service.ts b/src/services/resolution.service.ts new file mode 100644 index 0000000..4663265 --- /dev/null +++ b/src/services/resolution.service.ts @@ -0,0 +1,199 @@ +import { BadRequestException, Inject, Injectable } from "@nestjs/common"; +import { isIP } from "node:net"; +import { InjectRepository } from "@nestjs/typeorm"; +import { Repository } from "typeorm"; +import { BgpService } from "./routing/bgp.service"; +import { NccService } from "./routing/ncc.service"; +import { RegistryService } from "./registry/registry.service"; +import { + FaviconFingerprint, + ResolutionSnapshot, + ScanObservation, +} from "./entities"; +import { GeoProvidersService } from "./providers.service"; +import { TriangulationService } from "./triangulation.service"; +import { MlGeolocationService } from "./ml-geolocation.service"; +import { BackgroundInventoryService } from "./background-inventory.service"; +import { DhtService } from "./dht.service"; +import { ScanGateway } from "./scan.gateway"; +import { + dedupFavicons, + dedupObservations, + dedupPeersByInfoHash, +} from "./dedup.util"; + +const DEFAULT_EXPAND = new Set(["registry", "bgp", "dns", "geo", "dht"]); +export function parseExpand(value?: string): Set<string> { + if (!value) return DEFAULT_EXPAND; + const requested = new Set( + value + .split(",") + .map((item) => item.trim().toLowerCase()) + .filter(Boolean), + ); + return requested.has("all") + ? new Set([ + "registry", + "bgp", + "dns", + "geo", + "providers", + "probes", + "raw", + "dht", + "banners", + ]) + : requested; +} + +@Injectable() +export class ResolutionService { + constructor( + @Inject("REGISTRY_SERVICES") private readonly registries: RegistryService[], + @Inject(BgpService) private readonly bgp: BgpService, + @Inject(NccService) private readonly ncc: NccService, + @Inject(GeoProvidersService) private readonly providers: + GeoProvidersService, + @Inject(TriangulationService) private readonly triangulation: + TriangulationService, + @Inject(MlGeolocationService) private readonly ml: MlGeolocationService, + private readonly inventory: BackgroundInventoryService, + @InjectRepository(ResolutionSnapshot) private readonly snapshots: + Repository<ResolutionSnapshot>, + @InjectRepository(ScanObservation) private readonly observations: + Repository<ScanObservation>, + @InjectRepository(FaviconFingerprint) private readonly favicons: Repository< + FaviconFingerprint + >, + private readonly dht: DhtService, + private readonly gateway: ScanGateway, + ) {} + + async resolve( + address: string, + permitCredentialed = true, + expand = DEFAULT_EXPAND, + ) { + if (!isIP(address)) { + throw new BadRequestException( + "Only IPv4 and IPv6 addresses can be resolved.", + ); + } + const [registry, bgp, ncc, geolocation, triangulation, dht] = await Promise + .all([ + expand.has("registry") ? this.firstRegistry(address) : undefined, + expand.has("bgp") + ? this.safe(() => this.bgp.lookup(address)) + : undefined, + expand.has("dns") ? this.ncc.lookup(address) : undefined, + expand.has("geo") || expand.has("providers") + ? this.providers.resolve(address, permitCredentialed) + : undefined, + expand.has("probes") + ? this.triangulation.locate(address, (probe) => { + this.gateway.publishLookup(address, "lookup.probe", probe); + }) + : undefined, + expand.has("dht") ? this.dht.byAddress(address) : undefined, + ]); + const probeList = triangulation?.probes || []; + const east = probeList + .filter((probe: any) => Number.isFinite(probe.milliseconds)) + .sort( + (a: any, b: any) => (b.longitude || -180) - (a.longitude || -180), + )[0]; + const west = probeList + .filter((probe: any) => Number.isFinite(probe.milliseconds)) + .sort((a: any, b: any) => (a.longitude || 180) - (b.longitude || 180))[0]; + const mlFeatures = geolocation?.result?.latitude !== undefined && + geolocation.result.longitude !== undefined && + east?.milliseconds && + west?.milliseconds + ? { + geoliteLatitude: geolocation.result.latitude, + geoliteLongitude: geolocation.result.longitude, + pennsylvaniaMs: east.milliseconds, + oregonMs: west.milliseconds, + } + : undefined; + + const triangEstimate = triangulation?.available + ? (triangulation as any).estimate + : undefined; + const collectedCalibration = + mlFeatures && triangEstimate?.latitude !== undefined + ? await this.ml.collectProviderObservation({ + target: address, + latitude: triangEstimate.latitude, + longitude: triangEstimate.longitude, + ...mlFeatures, + }) + : undefined; + const mlCorrection = mlFeatures + ? await this.ml.predict(mlFeatures) + : undefined; + const registryValue = expand.has("raw") + ? registry + : registry && { ...registry, raw: undefined }; + const serviceBanners = expand.has("banners") + ? dedupObservations( + await this.observations.find({ + where: { address }, + order: { observedAt: "DESC" }, + take: 60, + }), + ).slice(0, 30) + : []; + const faviconFingerprints = expand.has("banners") + ? dedupFavicons( + await this.favicons.find({ + where: { label: address }, + order: { createdAt: "DESC" }, + take: 30, + }), + ).slice(0, 10) + : []; + this.inventory.schedule(address, { + asn: bgp?.asn, + prefix: bgp?.prefix, + rir: registry?.registry, + }); + const payload = { + address, + resolvedAt: new Date().toISOString(), + registry: registryValue, + bgp, + ncc, + geolocation: geolocation?.result, + geolocationProviders: expand.has("providers") + ? geolocation?.providers + : undefined, + geolocationConsensus: geolocation?.consensus, + probes: probeList, + triangulation, + mlCorrection, + collectedCalibration: collectedCalibration?.collected, + serviceBanners, + faviconFingerprints, + dht: dht ? dedupPeersByInfoHash(dht as Array<{ infoHash: string }>) : dht, + }; + await this.snapshots.save(this.snapshots.create({ address, payload })); + return payload; + } + + private async firstRegistry(address: string) { + for (const registry of this.registries) { + try { + return await registry.lookup(address); + } catch {} + } + return undefined; + } + private async safe<T>(operation: () => Promise<T>): Promise<T | undefined> { + try { + return await operation(); + } catch { + return undefined; + } + } +} diff --git a/src/services/routing/bgp.service.ts b/src/services/routing/bgp.service.ts new file mode 100644 index 0000000..ee91925 --- /dev/null +++ b/src/services/routing/bgp.service.ts @@ -0,0 +1,32 @@ +import { Injectable } from '@nestjs/common'; +import { HttpService } from '../http.service'; + +export interface BgpRoute { + asn?: string; + prefix?: string; + holder?: string; + announced: boolean; + source: string; +} + +@Injectable() +export class BgpService { + constructor(private readonly http: HttpService) {} + + async lookup(ip: string): Promise<BgpRoute | undefined> { + const response = await this.http.json<{ + data?: { asns?: string[]; prefix?: string; holder?: string }; + }>( + `https://stat.ripe.net/data/network-info/data.json?resource=${encodeURIComponent(ip)}`, + ); + const data = response.data; + if (!data?.prefix && !data?.asns?.length) return undefined; + return { + asn: data.asns?.[0], + prefix: data.prefix, + holder: data.holder, + announced: Boolean(data.asns?.length), + source: 'RIPEstat network-info', + }; + } +} diff --git a/src/services/routing/ncc.service.ts b/src/services/routing/ncc.service.ts new file mode 100644 index 0000000..b7ecd44 --- /dev/null +++ b/src/services/routing/ncc.service.ts @@ -0,0 +1,18 @@ +import { Injectable } from '@nestjs/common'; +import { promises as dns } from 'node:dns'; + +export interface NccRecord { + reverseDns: string[]; + source: string; +} + +@Injectable() +export class NccService { + async lookup(ip: string): Promise<NccRecord> { + try { + return { reverseDns: await dns.reverse(ip), source: 'DNS PTR' }; + } catch { + return { reverseDns: [], source: 'DNS PTR' }; + } + } +} diff --git a/src/services/scan.gateway.ts b/src/services/scan.gateway.ts new file mode 100644 index 0000000..5f49196 --- /dev/null +++ b/src/services/scan.gateway.ts @@ -0,0 +1,33 @@ +import { + SubscribeMessage, + WebSocketGateway, + WebSocketServer, +} from '@nestjs/websockets'; +import { Server } from 'socket.io'; + +@WebSocketGateway({ namespace: '/scans', cors: { origin: true } }) +export class ScanGateway { + @WebSocketServer() server!: Server; + publish(jobId: string, event: string, data: unknown) { + this.server.to(jobId).emit(event, data); + } + @SubscribeMessage('scan.join') + join(client: any, jobId: string) { + client.join(jobId); + } + @SubscribeMessage('lookup.join') + joinLookup(client: any, address: string) { + client.join(`lookup:${address}`); + } + publishLookup(address: string, event: string, data: unknown) { + this.server.to(`lookup:${address}`).emit(event, data); + } + + @SubscribeMessage('feed.join') + joinFeed(client: any) { + client.join('live-feed'); + } + publishFeed(event: string, data: unknown) { + this.server.to('live-feed').emit(event, data); + } +} diff --git a/src/services/search-language.service.ts b/src/services/search-language.service.ts new file mode 100644 index 0000000..50efd5e --- /dev/null +++ b/src/services/search-language.service.ts @@ -0,0 +1,77 @@ +import { Injectable } from '@nestjs/common'; +import { Repository, SelectQueryBuilder } from 'typeorm'; +import { ScanObservation } from './entities'; + +const KEYMAP: Record<string, string> = { + ip: 'address', + host: 'address', + port: 'port', + asn: 'asn', + org: 'org', + rir: 'rir', + prefix: 'prefix', + product: 'product', + service: 'service', + version: 'version', + os: 'osGuess', + country: 'country', + title: 'httpTitle', + banner: 'banner', + hostname: 'hostname', + hash: 'faviconMmh3', + 'favicon.hash': 'faviconMmh3', + 'favicon.phash': 'faviconPhash', +}; + +@Injectable() +export class SearchLanguageService { + apply( + qb: SelectQueryBuilder<ScanObservation>, + repo: Repository<ScanObservation>, + q: string, + ): SelectQueryBuilder<ScanObservation> { + const ors = q.split(/\s*\|\s*/).filter(Boolean); + if (!ors.length) return qb; + ors.forEach((branch, bi) => { + const tokens = branch.match(/-?"[^"]+"|-?\S+:\s*"[^"]+"|-?\S+/g) ?? []; + tokens.forEach((tok, ti) => { + let neg = false; + if (tok.startsWith('-')) { + neg = true; + tok = tok.slice(1); + } + const m = tok.match(/^([\w.]+):(.*)$/); + const param = `q${bi}_${ti}`; + const where = (sql: string, p: unknown) => { + const fn = + bi === 0 && ti === 0 + ? 'where' + : bi > 0 && ti === 0 + ? 'orWhere' + : 'andWhere'; + (qb as unknown as Record<string, (s: string, p?: unknown) => void>)[ + fn + ](neg ? `NOT (${sql})` : sql, { [param]: p }); + }; + if (!m) { + const v = tok.replace(/^"|"$/g, '').toLowerCase(); + where( + `(LOWER(obs.address) LIKE :${param} OR LOWER(obs.banner) LIKE :${param} OR LOWER(obs.product) LIKE :${param} OR LOWER(obs.httpTitle) LIKE :${param} OR LOWER(obs.org) LIKE :${param})`, + `%${v}%`, + ); + return; + } + const key = KEYMAP[m[1]!.toLowerCase()]; + const val = m[2]!.replace(/^"|"$/g, ''); + if (!key) return; + if (key === 'port') where(`obs.port = :${param}`, Number(val)); + else if (key === 'open') + where(`obs.open = :${param}`, /^(true|1|yes)$/i.test(val)); + else + where(`LOWER(obs.${key}) LIKE :${param}`, `%${val.toLowerCase()}%`); + }); + }); + void repo; + return qb; + } +} diff --git a/src/services/sweep.service.ts b/src/services/sweep.service.ts new file mode 100644 index 0000000..e30c26c --- /dev/null +++ b/src/services/sweep.service.ts @@ -0,0 +1,347 @@ +import { BadRequestException, Injectable, Logger } from "@nestjs/common"; +import { InjectRepository } from "@nestjs/typeorm"; +import { Repository } from "typeorm"; +import { BannerService } from "./banner.service"; +import { BgpService } from "./routing/bgp.service"; +import { HttpService } from "./http.service"; +import { ScanGateway } from "./scan.gateway"; +import { ScanObservation, SweepJob } from "./entities"; +import { FaviconService } from "./favicon.service"; + +const CONCURRENCY = 32; +const BG_INDEX_CONCURRENCY = 8; +const MAX_ON_DEMAND = 65536; + +@Injectable() +export class SweepService { + private readonly logger = new Logger(SweepService.name); + private readonly indexedCidrs = new Map<string, Date>(); + private bgRunning = false; + private bgAbort?: AbortController; + + constructor( + private readonly banners: BannerService, + private readonly bgp: BgpService, + private readonly http: HttpService, + private readonly favicons: FaviconService, + private readonly gateway: ScanGateway, + @InjectRepository(ScanObservation) private readonly observations: + Repository<ScanObservation>, + @InjectRepository(SweepJob) private readonly jobs: Repository<SweepJob>, + ) {} + + async start( + kind: "cidr" | "asn" | "prefix" | "registry", + target: string, + ports: number[], + ) { + const cidrs = await this.expand(kind, target); + const total = cidrs.reduce((n, c) => n + this.size(c), 0); + if (total > MAX_ON_DEMAND) { + throw new BadRequestException( + `Target expands to ${total} hosts. Maximum for on-demand is ${MAX_ON_DEMAND}. Use background indexing for larger ranges.`, + ); + } + const job = await this.jobs.save( + this.jobs.create({ kind, target, status: "running", total, ports }), + ); + setImmediate(() => void this.run(job.id, cidrs, ports)); + return { id: job.id, kind, target, hosts: total, status: "queued" }; + } + + startLegacy(cidr: string, ports: number[]) { + return this.start("cidr", cidr, ports); + } + + async backgroundIndex(asn?: string) { + if (this.bgRunning) { + return { status: "already-running", queued: this.indexedCidrs.size }; + } + this.bgAbort = new AbortController(); + this.bgRunning = true; + const job = await this.jobs.save( + this.jobs.create({ + kind: "registry", + target: asn || "all", + status: "running", + total: 0, + ports: [], + }), + ); + setImmediate(() => + void this.runBackground(job.id, asn).finally(() => { + this.bgRunning = false; + this.jobs.update(job.id, { status: "complete" }).catch(() => {}); + }) + ); + return { status: "started", jobId: job.id }; + } + + stopBackgroundIndex() { + if (!this.bgRunning) return { status: "not-running" }; + this.bgAbort?.abort(); + this.bgRunning = false; + return { status: "stopping" }; + } + + backgroundIndexStatus() { + return { + running: this.bgRunning, + indexedCidrs: this.indexedCidrs.size, + recentCidrs: [...this.indexedCidrs.entries()] + .sort((a, b) => b[1].getTime() - a[1].getTime()) + .slice(0, 50) + .map(([cidr, at]) => ({ cidr, indexedAt: at.toISOString() })), + }; + } + + private async runBackground(jobId: string, asn?: string) { + const prefixes = await this.fetchAllPrefixes(asn); + this.logger.log(`Background indexing: ${prefixes.length} prefixes to scan`); + await this.jobs.update(jobId, { total: prefixes.length }); + + const allIps: string[] = []; + for (const cidr of prefixes) { + if (this.bgAbort?.signal.aborted) break; + if (this.indexedCidrs.has(cidr)) continue; + const r = this.parse(cidr); + for (let v = r.start; v <= r.end && allIps.length < 500000; v++) { + allIps.push(this.ip(v)); + } + this.indexedCidrs.set(cidr, new Date()); + } + + this.gateway.publish(jobId, "bg.started", { jobId, total: allIps.length }); + let completed = 0; + const workers = Array.from( + { length: Math.min(BG_INDEX_CONCURRENCY, allIps.length) }, + async () => { + while (completed < allIps.length) { + if (this.bgAbort?.signal.aborted) break; + const idx = completed++; + if (idx >= allIps.length) break; + const address = allIps[idx]; + try { + await this.indexAddress(address); + this.gateway.publish(jobId, "bg.node", { address }); + } catch { + } + if (completed % 100 === 0) { + this.gateway.publish(jobId, "bg.progress", { + completed, + total: allIps.length, + }); + } + } + }, + ); + await Promise.all(workers); + this.gateway.publish(jobId, "bg.complete", { jobId, completed }); + } + + private async fetchAllPrefixes(asn?: string): Promise<string[]> { + if (asn) { + return this.fetchPrefixesForAsn(asn); + } + + const rirs = ["ripe", "arin", "apnic", "lacnic", "afrinic"]; + const allPrefixes: string[] = []; + for (const rir of rirs) { + try { + const res = await this.http.json<{ + data?: { prefixes?: Array<{ prefix: string }> }; + }>( + `https://stat.ripe.net/data/allocation-unique-id/data.json?resource=${rir}`, + ); + const pfxs = (res.data?.prefixes || []) + .map((p) => p.prefix) + .filter((p) => p.includes(".") && !p.includes(":")); + allPrefixes.push(...pfxs); + } catch { + try { + const res = await this.http.json< + { objects?: Array<{ attributes?: { inetnum?: string } }> } + >( + `https://stat.ripe.net/data/delegate-stats/data.json?resource=${rir}`, + ); + const pfxs = (res.objects || []) + .map((o) => o.attributes?.inetnum) + .filter((p): p is string => + Boolean(p && p.includes(".") && !p.includes(":")) + ); + allPrefixes.push(...pfxs); + } catch { + this.logger.warn(`Failed to fetch prefixes from ${rir}`); + } + } + } + + return this.deduplicatePrefixes(allPrefixes); + } + + private async fetchPrefixesForAsn(asn: string): Promise<string[]> { + const clean = asn.replace(/^AS/i, ""); + const res = await this.http.json<{ + data?: { prefixes?: Array<{ prefix: string }> }; + }>( + `https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS${ + encodeURIComponent(clean) + }`, + ); + return (res.data?.prefixes || []) + .map((p) => p.prefix) + .filter((p) => p.includes(".") && !p.includes(":")); + } + + private deduplicatePrefixes(prefixes: string[]): string[] { + const parsed = prefixes.map((p) => ({ cidr: p, ...this.parse(p) })); + parsed.sort((a, b) => b.start - a.start || a.end - b.end); + const kept: typeof parsed = []; + for (const p of parsed) { + if (!kept.some((k) => k.start <= p.start && k.end >= p.end)) { + kept.push(p); + } + } + return kept.map((p) => p.cidr); + } + + private async indexAddress(address: string) { + const banners = await this.banners.inspect(address, []); + const net = await this.safe(() => this.bgp.lookup(address)); + const rows: ScanObservation[] = []; + for ( + const b of banners as Array<{ + port: number; + open: boolean; + banner?: string; + product?: string; + service?: string; + version?: string; + osGuess?: string; + httpTitle?: string; + }> + ) { + let fav: { mmh3: string; phash: string } | undefined; + if ( + b.open && + (b.port === 80 || b.port === 443 || b.port === 8080 || b.port === 8443) + ) { + try { + fav = await this.favicons.fetchAndIndex(address, b.port); + } catch {} + } + rows.push( + this.observations.create({ + address, + port: b.port, + open: b.open, + banner: b.banner?.slice(0, 4096), + product: b.product, + service: b.service, + version: b.version, + osGuess: b.osGuess, + httpTitle: b.httpTitle, + org: net?.holder, + asn: net?.asn, + prefix: net?.prefix, + faviconMmh3: fav?.mmh3, + faviconPhash: fav?.phash, + }), + ); + } + await this.observations.delete({ address }); + await this.observations.save(rows); + } + + private async expand(kind: string, target: string): Promise<string[]> { + if (kind === "cidr" || kind === "prefix") { + this.parse(target.includes("/") ? target : `${target}/32`); + return [target.includes("/") ? target : `${target}/32`]; + } + if (kind === "asn") { + const prefixes = await this.fetchPrefixesForAsn(target); + if (!prefixes.length) { + throw new BadRequestException("No announced prefixes found for ASN."); + } + return prefixes; + } + throw new BadRequestException( + "Unsupported sweep kind. Use cidr, asn, or prefix.", + ); + } + + private async run(id: string, cidrs: string[], ports: number[]) { + const ips: string[] = []; + for (const cidr of cidrs) { + const r = this.parse(cidr); + for (let v = r.start; v <= r.end && ips.length < MAX_ON_DEMAND; v++) { + ips.push(this.ip(v)); + } + } + this.gateway.publish(id, "scan.started", { id, total: ips.length }); + await this.jobs.update(id, { total: ips.length }); + let completed = 0, done = 0; + const workers = Array.from( + { length: Math.min(CONCURRENCY, ips.length) }, + async () => { + while (done < ips.length) { + const address = ips[done++]!; + try { + await this.indexAddress(address); + this.gateway.publish(id, "scan.node", { address }); + } catch (e) { + this.gateway.publish(id, "scan.error", { + address, + error: e instanceof Error ? e.message : "scan failed", + }); + } + completed++; + this.gateway.publish(id, "scan.progress", { + completed, + total: ips.length, + }); + } + }, + ); + await Promise.all(workers); + await this.jobs.update(id, { status: "complete", completed }); + this.gateway.publish(id, "scan.complete", { id }); + } + + parse(cidr: string) { + const [ip, lengthText] = cidr.split("/"); + const length = Number(lengthText); + const parts = ip?.split(".").map(Number); + if ( + !parts || parts.length !== 4 || + !Number.isInteger(length) || length < 0 || length > 32 || + parts.some((part) => !Number.isInteger(part) || part < 0 || part > 255) + ) { + throw new BadRequestException("Use an IPv4 CIDR."); + } + const value = parts.reduce((sum, part) => sum * 256 + part, 0); + const mask = length === 0 ? 0 : (0xffffffff << (32 - length)) >>> 0; + const start = value & mask; + return { start, end: start + (2 ** (32 - length) - 1) }; + } + contains( + outer: { start: number; end: number }, + inner: { start: number; end: number }, + ) { + return outer.start <= inner.start && outer.end >= inner.end; + } + ip(value: number) { + return [24, 16, 8, 0].map((shift) => (value >>> shift) & 255).join("."); + } + size(cidr: string) { + const r = this.parse(cidr); + return r.end - r.start + 1; + } + private async safe<T>(op: () => Promise<T>): Promise<T | undefined> { + try { + return await op(); + } catch { + return undefined; + } + } +} diff --git a/src/services/triangulation.service.ts b/src/services/triangulation.service.ts new file mode 100644 index 0000000..3ca5c48 --- /dev/null +++ b/src/services/triangulation.service.ts @@ -0,0 +1,209 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { PeerNode } from './entities'; +import { PeerRelayService } from './peer-relay.service'; + +type Probe = { latitude: number; longitude: number; milliseconds: number }; +export type NodeProbe = { + nodeId: string; + address?: string; + milliseconds?: number; + latitude?: number; + longitude?: number; + error?: string; +}; + +const KM_PER_MS = 100; +const toRad = (d: number) => (d * Math.PI) / 180; +function haversineKm( + aLat: number, + aLon: number, + bLat: number, + bLon: number, +): number { + const R = 6371, + dLat = toRad(bLat - aLat), + dLon = toRad(bLon - aLon); + const s = + Math.sin(dLat / 2) ** 2 + + Math.cos(toRad(aLat)) * Math.cos(toRad(bLat)) * Math.sin(dLon / 2) ** 2; + return 2 * R * Math.asin(Math.sqrt(s)); +} + +@Injectable() +export class TriangulationService { + constructor( + @InjectRepository(PeerNode) private readonly peers: Repository<PeerNode>, + private readonly relay: PeerRelayService, + ) {} + + async locate(host: string, onProbe?: (probe: NodeProbe) => void) { + const peers = await this.peers.findBy({ kind: 'pathfinder' }); + const nodeProbes = await this.probeAll(host, peers, onProbe); + const probes = nodeProbes.filter( + ( + p, + ): p is NodeProbe & + Required<Pick<NodeProbe, 'latitude' | 'longitude' | 'milliseconds'>> => + Number.isFinite(p.latitude) && + Number.isFinite(p.longitude) && + Number.isFinite(p.milliseconds) && + (p.milliseconds as number) > 0, + ); + if (probes.length < 2) { + return { + host, + available: false, + reason: 'Two online pathfinders with coordinates are required.', + samples: probes.length, + probes: nodeProbes, + }; + } + const baseline = Math.min(...probes.map((p) => p.milliseconds)); + const discs = probes.map((p) => ({ + ...p, + radiusKm: Math.max( + 5, + ((p.milliseconds - baseline * 0.5) / 2) * KM_PER_MS, + ), + })); + let best = { lat: 0, lon: 0, score: Infinity }; + const lats = discs.map((d) => d.latitude), + lons = discs.map((d) => d.longitude); + const minLat = Math.min(...lats) - 10, + maxLat = Math.max(...lats) + 10; + const minLon = Math.min(...lons) - 10, + maxLon = Math.max(...lons) + 10; + for (let step = 0; step < 3; step++) { + const n = step === 0 ? 25 : 15; + const dLa = (maxLat - minLat) / n, + dLo = (maxLon - minLon) / n; + const cLa = (minLat + maxLat) / 2, + cLo = (minLon + maxLon) / 2; + const spanLa = + step === 0 ? maxLat - minLat : (maxLat - minLat) / (step * 4); + const spanLo = + step === 0 ? maxLon - minLon : (maxLon - minLon) / (step * 4); + void dLa; + void dLo; + for (let i = 0; i <= n; i++) { + for (let j = 0; j <= n; j++) { + const lat = cLa - spanLa / 2 + (spanLa * i) / n, + lon = cLo - spanLo / 2 + (spanLo * j) / n; + let score = 0; + for (const d of discs) { + const dist = haversineKm(lat, lon, d.latitude, d.longitude); + const violation = Math.max(0, dist - d.radiusKm); + const w = 1 / Math.max(d.milliseconds, 1); + score += violation * violation * w * 10 + dist * w * 0.1; + } + if (score < best.score) best = { lat, lon, score }; + } + } + } + const residuals = discs.map((d) => ({ + nodeId: d.nodeId, + residualKm: Math.abs( + haversineKm(best.lat, best.lon, d.latitude, d.longitude) - + d.radiusKm / 2, + ), + rtt: d.milliseconds, + })); + const rmse = Math.sqrt( + residuals.reduce((s, r) => s + r.residualKm ** 2, 0) / residuals.length, + ); + const spread = + Math.max(...probes.map((p) => p.milliseconds)) - + Math.min(...probes.map((p) => p.milliseconds)); + const radiusKm = Math.min(2000, Math.max(25, rmse)); + const confidence = Math.max( + 0, + Math.min(0.95, 1 - rmse / 1500 - spread / 4000), + ); + return { + host, + available: true, + estimate: { latitude: best.lat, longitude: best.lon }, + samples: probes.length, + confidence, + radiusKm, + rmseKm: rmse, + methodology: + 'CBG: RTT discs at ~100km/ms over fiber, grid least-squares, outlier-aware. Coarse network estimate, not physical location.', + discs: discs.map((d) => ({ + nodeId: d.nodeId, + latitude: d.latitude, + longitude: d.longitude, + rtt: d.milliseconds, + radiusKm: d.radiusKm, + })), + residuals, + probes: nodeProbes.map((p) => ({ + nodeId: p.nodeId, + latitude: p.latitude, + longitude: p.longitude, + milliseconds: p.milliseconds, + error: p.error, + })), + }; + } + + async probeAll(host: string, peers?: PeerNode[], onProbe?: (probe: NodeProbe) => void): Promise<NodeProbe[]> { + const targets = peers ?? (await this.peers.findBy({ kind: 'pathfinder' })); + const results = await Promise.all(targets.map((peer) => this.probe(peer, host))); + if (onProbe) results.forEach(onProbe); + return results; + } + + private async probe(peer: PeerNode, host: string): Promise<NodeProbe> { + const metadata = peer.metadata as + | { + latitude?: number; + longitude?: number; + transport?: string; + } + | undefined; + const base = { + nodeId: peer.nodeId, + address: peer.address, + latitude: metadata?.latitude, + longitude: metadata?.longitude, + }; + if (metadata?.transport === 'outbound-relay') { + const result = await this.relay.probe(peer.nodeId, host); + return { ...base, ...result }; + } + if (!peer.address) { + return { + ...base, + error: 'Pathfinder has not reported a relay or public URL.', + }; + } + try { + const response = await fetch( + `${peer.address.replace(/\/$/, '')}/probe?host=${encodeURIComponent( + host, + )}`, + { signal: AbortSignal.timeout(5000) }, + ); + if (!response.ok) { + return { + ...base, + error: `Pathfinder returned HTTP ${response.status}.`, + }; + } + const body = (await response.json()) as { milliseconds?: number }; + if (!Number.isFinite(body.milliseconds)) { + return { ...base, error: 'Pathfinder returned an invalid latency.' }; + } + return { ...base, milliseconds: body.milliseconds }; + } catch (error) { + return { + ...base, + error: + error instanceof Error ? error.message : 'Pathfinder probe failed.', + }; + } + } +} diff --git a/test/dedup.test.ts b/test/dedup.test.ts new file mode 100644 index 0000000..a8d555c --- /dev/null +++ b/test/dedup.test.ts @@ -0,0 +1,57 @@ +import { describe, it } from 'node:test'; +import assert from 'node:assert/strict'; +import { + dedupFavicons, + dedupObservations, + dedupPeersByInfoHash, +} from '../src/services/dedup.util.js'; + +describe('dedupObservations', () => { + it('keeps newest row per port', () => { + const rows = [ + { port: 80, banner: 'old', observedAt: new Date('2024-01-01') }, + { port: 80, banner: 'new', observedAt: new Date('2024-06-01') }, + { port: 443, banner: 'tls', observedAt: new Date('2024-01-01') }, + ]; + const out = dedupObservations(rows); + assert.equal(out.length, 2); + assert.equal(out.find((r) => r.port === 80)?.banner, 'new'); + }); + + it('is order-independent', () => { + const rows = [ + { port: 22, banner: 'new', observedAt: new Date('2024-06-01') }, + { port: 22, banner: 'old', observedAt: new Date('2024-01-01') }, + ]; + assert.equal(dedupObservations(rows)[0]?.banner, 'new'); + }); + + it('handles empty input', () => { + assert.deepEqual(dedupObservations([]), []); + }); +}); + +describe('dedupFavicons', () => { + it('collapses identical perceptual hashes', () => { + const rows = [ + { perceptualHash: 'ab', createdAt: new Date('2024-01-01') }, + { perceptualHash: 'ab', createdAt: new Date('2024-02-01') }, + { perceptualHash: 'cd', createdAt: new Date('2024-01-01') }, + ]; + const out = dedupFavicons(rows); + assert.equal(out.length, 2); + }); +}); + +describe('dedupPeersByInfoHash', () => { + it('dedups case-insensitively, keeps first (newest)', () => { + const rows = [ + { infoHash: 'AABB', address: '1.1.1.1' }, + { infoHash: 'aabb', address: '2.2.2.2' }, + { infoHash: 'ccdd', address: '3.3.3.3' }, + ]; + const out = dedupPeersByInfoHash(rows); + assert.equal(out.length, 2); + assert.equal(out[0]?.address, '1.1.1.1'); + }); +}); diff --git a/test/expand.test.ts b/test/expand.test.ts new file mode 100644 index 0000000..729f64c --- /dev/null +++ b/test/expand.test.ts @@ -0,0 +1,25 @@ +import { describe, it } from 'node:test'; +import assert from 'node:assert/strict'; +import { parseExpand } from '../src/services/resolution.service.js'; + +describe('parseExpand', () => { + it('returns defaults when empty', () => { + const s = parseExpand(undefined); + assert.ok(s.has('registry')); + assert.ok(s.has('dht')); + assert.ok(!s.has('probes')); + }); + + it('parses comma list, lowercases, trims', () => { + const s = parseExpand(' Geo , PROBES '); + assert.ok(s.has('geo')); + assert.ok(s.has('probes')); + assert.equal(s.size, 2); + }); + + it('expands "all" to the full set', () => { + const s = parseExpand('all'); + for (const k of ['registry', 'bgp', 'dns', 'geo', 'providers', 'probes', 'raw', 'dht', 'banners']) + assert.ok(s.has(k), `missing ${k}`); + }); +}); diff --git a/test/ml-gate.test.ts b/test/ml-gate.test.ts new file mode 100644 index 0000000..0d6ee30 --- /dev/null +++ b/test/ml-gate.test.ts @@ -0,0 +1,34 @@ +import { describe, it } from 'node:test'; +import assert from 'node:assert/strict'; +import { MlGeolocationService } from '../src/services/ml-geolocation.service.js'; + +const emptyRepo = { find: async () => [], count: async () => 0 } as any; +const features = { + geoliteLatitude: 40.7, + geoliteLongitude: -74, + pennsylvaniaMs: 20, + oregonMs: 80, +}; + +describe('MlGeolocationService gate', () => { + it('predict is unavailable below 25 samples', async () => { + const ml = new MlGeolocationService(emptyRepo); + const out = (await ml.predict(features)) as any; + assert.equal(out.available, false); + assert.match(out.reason, /25/); + }); + + it('status reports minimumSamples 25', async () => { + const ml = new MlGeolocationService(emptyRepo); + const status = await ml.status(); + assert.equal(status.minimumSamples, 25); + assert.equal(status.ready, false); + }); + + it('rejects invalid features', async () => { + const ml = new MlGeolocationService(emptyRepo); + await assert.rejects(() => + ml.predict({ ...features, pennsylvaniaMs: -1 } as any), + ); + }); +}); diff --git a/test/sweep.test.ts b/test/sweep.test.ts new file mode 100644 index 0000000..8d662b7 --- /dev/null +++ b/test/sweep.test.ts @@ -0,0 +1,39 @@ +import { describe, it } from 'node:test'; +import assert from 'node:assert/strict'; +import { SweepService } from '../src/services/sweep.service.js'; + +const none = null as any; +const svc = new SweepService(none, none, none, none, none, none, none); + +describe('SweepService.parse', () => { + it('parses /24 bounds', () => { + const r = svc.parse('10.0.0.0/24'); + assert.equal(svc.ip(r.start), '10.0.0.0'); + assert.equal(svc.ip(r.end), '10.0.0.255'); + }); + + it('rejects non-IPv4 CIDRs', () => { + assert.throws(() => svc.parse('not-a-cidr')); + assert.throws(() => svc.parse('10.0.0.0/33')); + assert.throws(() => svc.parse('::1/128')); + }); +}); + +describe('SweepService.size/ip', () => { + it('sizes /32 as 1 and /24 as 256', () => { + assert.equal(svc.size('1.2.3.4/32'), 1); + assert.equal(svc.size('1.2.3.0/24'), 256); + }); + + it('round-trips ip encoding', () => { + assert.equal(svc.ip(svc.parse('192.168.1.0/24').start), '192.168.1.0'); + }); +}); + +describe('SweepService.contains', () => { + it('detects covering ranges', () => { + const outer = svc.parse('10.0.0.0/8'); + assert.ok(svc.contains(outer, svc.parse('10.1.2.0/24'))); + assert.ok(!svc.contains(svc.parse('10.1.2.0/24'), outer)); + }); +}); diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..2eafee0 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": ["src"], + "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] +} diff --git a/tsconfig.build.tsbuildinfo b/tsconfig.build.tsbuildinfo new file mode 100644 index 0000000..14bccc3 --- /dev/null +++ b/tsconfig.build.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.dom.asynciterable.d.ts","./node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/typescript/lib/lib.es2023.full.d.ts","./node_modules/.pnpm/reflect-metadata@0.2.2/node_modules/reflect-metadata/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/core/bind.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/abstract.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/controllers/controller-metadata.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/controllers/controller.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/features/arguments-host.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/exceptions/exception-filter.interface.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Subscription.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Subscriber.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Operator.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Observable.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/types.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/audit.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/auditTime.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/buffer.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/bufferCount.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/bufferTime.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/bufferToggle.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/bufferWhen.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/catchError.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/combineLatestAll.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/combineAll.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/combineLatest.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/combineLatestWith.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concat.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concatAll.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concatMap.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concatMapTo.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/concatWith.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/connect.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/count.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/debounce.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/debounceTime.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/defaultIfEmpty.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/delay.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/delayWhen.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/dematerialize.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/distinct.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/distinctUntilChanged.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/distinctUntilKeyChanged.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/elementAt.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/endWith.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/every.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/exhaustAll.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/exhaust.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/exhaustMap.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/expand.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/filter.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/finalize.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/find.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/findIndex.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/first.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Subject.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/groupBy.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/ignoreElements.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/isEmpty.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/last.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/map.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mapTo.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Notification.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/materialize.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/max.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/merge.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeAll.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeMap.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/flatMap.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeMapTo.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeScan.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/mergeWith.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/min.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/ConnectableObservable.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/multicast.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/observeOn.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/onErrorResumeNextWith.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/pairwise.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/partition.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/pluck.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/publish.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/publishBehavior.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/publishLast.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/publishReplay.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/race.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/raceWith.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/reduce.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/repeat.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/repeatWhen.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/retry.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/retryWhen.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/refCount.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/sample.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/sampleTime.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/scan.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/sequenceEqual.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/share.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/shareReplay.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/single.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/skip.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/skipLast.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/skipUntil.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/skipWhile.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/startWith.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/subscribeOn.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/switchAll.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/switchMap.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/switchMapTo.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/switchScan.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/take.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/takeLast.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/takeUntil.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/takeWhile.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/tap.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/throttle.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/throttleTime.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/throwIfEmpty.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/timeInterval.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/timeout.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/timeoutWith.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/timestamp.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/toArray.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/window.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/windowCount.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/windowTime.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/windowToggle.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/windowWhen.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/withLatestFrom.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/zip.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/zipAll.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/operators/zipWith.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/operators/index.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/Action.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/Scheduler.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/TestMessage.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/SubscriptionLog.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/SubscriptionLoggable.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/ColdObservable.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/HotObservable.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/AsyncScheduler.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/timerHandle.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/AsyncAction.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/VirtualTimeScheduler.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/testing/TestScheduler.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/testing/index.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/symbol/observable.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/dom/animationFrames.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/BehaviorSubject.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/ReplaySubject.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/AsyncSubject.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/AsapScheduler.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/asap.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/async.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/QueueScheduler.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/queue.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/AnimationFrameScheduler.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduler/animationFrame.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/identity.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/pipe.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/noop.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/isObservable.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/lastValueFrom.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/firstValueFrom.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/ArgumentOutOfRangeError.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/EmptyError.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/NotFoundError.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/ObjectUnsubscribedError.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/SequenceError.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/util/UnsubscriptionError.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/bindCallback.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/bindNodeCallback.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/AnyCatcher.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/combineLatest.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/concat.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/connectable.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/defer.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/empty.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/forkJoin.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/from.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/fromEvent.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/fromEventPattern.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/generate.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/iif.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/interval.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/merge.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/never.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/of.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/onErrorResumeNext.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/pairs.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/partition.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/race.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/range.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/throwError.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/timer.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/using.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/observable/zip.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/scheduled/scheduled.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/internal/config.d.ts","./node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/types/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/exceptions/ws-exception-filter.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/external/validation-error.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/features/execution-context.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/features/can-activate.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/features/custom-route-param-factory.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/features/nest-interceptor.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/features/paramtype.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/type.interface.d.ts","./node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/features/pipe-transform.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/enums/request-method.enum.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/enums/http-status.enum.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/enums/shutdown-signal.enum.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/enums/version-type.enum.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/enums/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/version-options.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/middleware/middleware-configuration.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/middleware/middleware-consumer.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/middleware/middleware-config-proxy.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/middleware/nest-middleware.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/middleware/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/global-prefix-options.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/hooks/before-application-shutdown.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/hooks/on-application-bootstrap.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/hooks/on-application-shutdown.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/hooks/on-destroy.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/hooks/on-init.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/hooks/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/http/http-exception-body.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/http/http-redirect-response.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/external/cors-options.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/external/https-options.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/services/logger.service.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/nest-application-context-options.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/router-options.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/nest-application-options.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/http/http-server.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/http/message-event.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/http/raw-body-request.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/http/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/injectable.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/microservices/nest-hybrid-application-options.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/microservices/pre-request-hook.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/microservices/transport-server.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/modules/forward-reference.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/scope-options.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/modules/injection-token.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/modules/optional-factory-dependency.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/modules/provider.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/modules/module-metadata.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/modules/dynamic-module.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/modules/introspection-result.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/modules/nest-module.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/modules/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/shutdown-hooks-options.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/nest-application-context.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/websockets/web-socket-adapter.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/nest-application.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/nest-microservice.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/core/catch.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/core/controller.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/core/dependencies.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/core/exception-filters.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/core/inject.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/core/injectable.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/core/optional.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/core/set-metadata.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/core/use-guards.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/core/use-interceptors.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/core/use-pipes.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/core/apply-decorators.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/core/version.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/core/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/modules/global.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/modules/module.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/modules/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/http/request-mapping.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/http/route-params.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/http/http-code.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/http/create-route-param-metadata.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/http/render.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/http/header.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/http/redirect.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/constants.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/http/sse.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/http/sse-signal.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/http/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/decorators/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/intrinsic.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/http.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/bad-gateway.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/bad-request.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/conflict.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/forbidden.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/gateway-timeout.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/gone.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/http-version-not-supported.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/im-a-teapot.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/internal-server-error.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/method-not-allowed.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/misdirected.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/not-acceptable.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/not-found.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/not-implemented.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/payload-too-large.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/precondition-failed.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/request-timeout.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/service-unavailable.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/unauthorized.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/unprocessable-entity.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/unsupported-media-type.exception.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/exceptions/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/services/console-logger.service.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/services/utils/filter-log-levels.util.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/services/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/file-stream/interfaces/streamable-options.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/file-stream/interfaces/streamable-handler-response.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/file-stream/interfaces/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/file-stream/streamable-file.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/file-stream/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/module-utils/constants.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/module-utils/interfaces/configurable-module-async-options.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/module-utils/interfaces/configurable-module-cls.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/module-utils/interfaces/configurable-module-host.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/module-utils/interfaces/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/module-utils/configurable-module.builder.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/module-utils/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/default-value.pipe.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/file/interfaces/file.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/file/interfaces/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/file/file-validator-context.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/file/file-validator.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/file/file-type.validator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/file/max-file-size.validator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/utils/http-error-by-code.util.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/file/parse-file-options.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/file/parse-file.pipe.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/file/parse-file-pipe.builder.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/file/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/external/class-transform-options.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/external/transformer-package.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/external/validator-options.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/external/validator-package.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/validation.pipe.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/parse-array.pipe.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/parse-bool.pipe.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/parse-date.pipe.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/parse-enum.pipe.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/parse-float.pipe.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/parse-int.pipe.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/parse-uuid.pipe.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/standard-schema-validation.pipe.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/pipes/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/serializer/class-serializer.interfaces.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/serializer/class-serializer.interceptor.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/serializer/standard-schema-serializer.interfaces.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/serializer/decorators/serialize-options.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/serializer/decorators/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/serializer/standard-schema-serializer.interceptor.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/serializer/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/utils/forward-ref.util.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/utils/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/index.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/types/RelationTypes.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/types/DeferrableType.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/types/OnDeleteType.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/types/OnUpdateType.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/RelationOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/types/PropertyTypeInFunction.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/common/ObjectLiteral.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/cache/QueryResultCacheOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/options/TableColumnOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/table/TableColumn.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/OrderByCondition.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/types/TableTypes.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/FindOperatorType.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/ValueTransformer.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/FindOperator.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/types/DatabaseType.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/platform/PlatformTools.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/mongodb/bson.typings.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/mongodb/typings.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/EqualOperator.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/FindOptionsWhere.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/FindOptionsSelect.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/FindOptionsRelations.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/FindOptionsOrder.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/FindOneOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/FindManyOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/types/ColumnTypes.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/EmbeddedMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/RelationIdMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/RelationIdMetadata.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/types/EventListenerTypes.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/EntityListenerMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/EntityListenerMetadata.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/options/ViewOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/view/View.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/naming-strategy/NamingStrategyInterface.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/UniqueMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/UniqueMetadata.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/EmbeddedMetadata.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/ColumnCommonOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/ColumnOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/types/ColumnMode.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/ColumnMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/ColumnMetadata.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/ForeignKeyMetadata.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/RelationMetadata.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/WhereExpressionBuilder.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/Brackets.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/Alias.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/types/UpsertType.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/QueryBuilderCte.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-runner/QueryResult.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/result/UpdateResult.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/QueryPartialEntity.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/UpdateQueryBuilder.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/result/DeleteResult.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/DeleteQueryBuilder.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/SoftDeleteQueryBuilder.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/InsertOrUpdateOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/result/InsertResult.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/InsertQueryBuilder.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/RelationQueryBuilder.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/WhereClause.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/NotBrackets.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/types/ReturningType.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/QueryBuilder.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/relation-id/RelationIdAttribute.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/SelectQuery.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/SelectQueryBuilderOption.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/QueryExpressionMap.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/JoinAttribute.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/SelectQueryBuilder.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/TableMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/types/TreeTypes.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/types/ClosureTreeOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/TreeMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/CheckMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/CheckMetadata.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/ExclusionMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/ExclusionMetadata.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/EntityMetadata.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/options/TableIndexTypes.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/IndexMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/IndexMetadata.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/options/TableIndexOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/table/TableIndex.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/options/TableForeignKeyOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/table/TableForeignKey.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/options/TableUniqueOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/options/TableCheckOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/options/TableExclusionOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/options/TableOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/table/TableUnique.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/table/TableCheck.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/table/TableExclusion.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/table/Table.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/common/DeepPartial.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/repository/RemoveOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/repository/SaveOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/ReturningOption.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/repository/UpsertOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/repository/UpdateOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/common/PickKeysByType.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/repository/Repository.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/mongodb/MongoFindOneOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/mongodb/MongoFindManyOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/subscriber/BroadcasterResult.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/subscriber/event/BaseEvent.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/subscriber/event/TransactionCommitEvent.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/subscriber/event/TransactionRollbackEvent.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/subscriber/event/TransactionStartEvent.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/subscriber/event/UpdateEvent.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/subscriber/event/RemoveEvent.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/subscriber/event/InsertEvent.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/subscriber/event/LoadEvent.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/subscriber/event/SoftRemoveEvent.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/subscriber/event/RecoverEvent.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/subscriber/event/QueryEvent.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/subscriber/EntitySubscriberInterface.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/subscriber/Broadcaster.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/Query.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/SqlInMemory.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/types/ReplicationMode.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/mongodb/MongoQueryRunner.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/entity-manager/MongoEntityManager.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/repository/MongoRepository.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/FindTreeOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/repository/TreeRepository.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/transformer/PlainObjectToNewEntityTransformer.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/types/IsolationLevel.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/entity-manager/EntityManager.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-runner/QueryRunner.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/cache/QueryResultCache.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/common/MixedList.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/types/InvalidFindOptionsWhereBehavior.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/logger/Logger.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/logger/LoggerOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/data-source/BaseDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/SchemaBuilder.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/types/CteCapabilities.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/types/DataTypeDefaults.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/types/MappedColumnTypes.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/Driver.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/migration/MigrationInterface.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/migration/Migration.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/aurora-mysql/AuroraMysqlConnectionCredentialsOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/aurora-mysql/AuroraMysqlDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/aurora-postgres/AuroraPostgresDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/better-sqlite3/BetterSqlite3DataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/capacitor/CapacitorDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/cockroachdb/CockroachConnectionCredentialsOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/cockroachdb/CockroachDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/cordova/CordovaDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/expo/ExpoDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/mongodb/MongoDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/mysql/MysqlConnectionCredentialsOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/mysql/MysqlDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/nativescript/NativescriptDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/oracle/OracleConnectionCredentialsOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/oracle/OracleDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/postgres/PostgresConnectionCredentialsOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/postgres/PostgresDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/react-native/ReactNativeDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/sap/SapConnectionCredentialsOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/sap/SapDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/spanner/SpannerConnectionCredentialsOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/spanner/SpannerDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/sqljs/SqljsDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/sqlserver/authentication/DefaultAuthentication.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/sqlserver/authentication/AzureActiveDirectoryDefaultAuthentication.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/sqlserver/authentication/AzureActiveDirectoryServicePrincipalSecret.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/sqlserver/authentication/NtlmAuthentication.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/sqlserver/SqlServerConnectionCredentialsOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/sqlserver/SqlServerDataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/data-source/DataSourceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/entity-manager/SqljsEntityManager.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/RelationLoader.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/query-builder/RelationIdLoader.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/data-source/DataSource.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/data-source/index.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/entity-schema/EntitySchemaCheckOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/types/GeoJsonTypes.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/SpatialColumnOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/ForeignKeyOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/entity-schema/EntitySchemaColumnForeignKeyOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/entity-schema/EntitySchemaColumnOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/entity-schema/EntitySchemaEmbeddedColumnOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/entity-schema/EntitySchemaExclusionOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/entity-schema/EntitySchemaForeignKeyOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/entity-schema/EntitySchemaIndexOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/entity-schema/EntitySchemaInheritanceOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/entity-schema/EntitySchemaRelationIdOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/JoinColumnOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/JoinTableMultipleColumnsOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/JoinTableOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/entity-schema/EntitySchemaRelationOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/entity-schema/EntitySchemaUniqueOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/entity-schema/EntitySchemaOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/entity-schema/EntitySchema.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/common/ObjectType.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/common/EntityTarget.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata/types/RelationTypeInFunction.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/RelationMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/NamingStrategyMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/JoinColumnMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/JoinTableMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/EntitySubscriberMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/InheritanceMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/DiscriminatorValueMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/TransactionEntityMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/TransactionRepositoryMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/GeneratedMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/ForeignKeyMetadataArgs.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/metadata-args/MetadataArgsStorage.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/globals.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/common/RelationType.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/TypeORMError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/CannotReflectMethodParameterTypeError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/AlreadyHasActiveConnectionError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/persistence/SubjectChangeMap.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/persistence/Subject.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/SubjectWithoutIdentifierError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/CannotConnectAlreadyConnectedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/LockNotSupportedOnGivenDriverError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/ConnectionIsNotSetError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/CannotCreateEntityIdMapError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/MetadataAlreadyExistsError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/CannotDetermineEntityError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/UpdateValuesMissingError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/TreeRepositoryNotSupportedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/TransactionNotStartedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/TransactionAlreadyStartedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/EntityNotFoundError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/EntityMetadataNotFoundError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/MustBeEntityError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/OptimisticLockVersionMismatchError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/LimitOnUpdateNotSupportedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/PrimaryColumnCannotBeNullableError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/QueryRunnerProviderAlreadyReleasedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/CannotAttachTreeChildrenEntityError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/MissingDeleteDateColumnError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/NoConnectionForRepositoryError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/CircularRelationsError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/ReturningStatementNotSupportedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/UsingJoinTableIsNotAllowedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/MissingJoinColumnError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/MissingPrimaryColumnError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/EntityPropertyNotFoundError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/MissingDriverError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/DriverPackageNotInstalledError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/CannotGetEntityManagerNotConnectedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/ConnectionNotFoundError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/NoVersionOrUpdateDateColumnError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/InsertValuesMissingError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/OptimisticLockCanNotBeUsedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/MetadataWithSuchNameAlreadyExistsError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/DriverOptionNotSetError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/FindRelationsNotFoundError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/PessimisticLockTransactionRequiredError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/RepositoryNotTreeError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/DataTypeNotSupportedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/InitializedRelationError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/MissingJoinTableError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/QueryFailedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/NoNeedToReleaseEntityManagerError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/UsingJoinColumnOnlyOnOneSideAllowedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/UsingJoinTableOnlyOnOneSideAllowedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/SubjectRemovedAndUpdatedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/PersistedEntityNotFoundError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/UsingJoinColumnIsNotAllowedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/ColumnTypeUndefinedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/QueryRunnerAlreadyReleasedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/OffsetWithoutLimitNotSupportedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/CannotExecuteNotConnectedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/NoConnectionOptionError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/ForbiddenTransactionModeOverrideError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/NamedPlaceholdersNotSupportedError.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/error/index.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/ColumnEmbeddedOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/ColumnEnumOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/ColumnHstoreOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/ColumnNumericOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/ColumnUnsignedOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/ColumnWithLengthOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/columns/Column.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/columns/CreateDateColumn.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/columns/DeleteDateColumn.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/columns/PrimaryGeneratedColumn.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/columns/PrimaryColumn.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/columns/UpdateDateColumn.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/columns/VersionColumn.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/VirtualColumnOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/columns/VirtualColumn.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/ViewColumnOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/columns/ViewColumn.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/columns/ObjectIdColumn.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/listeners/AfterInsert.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/listeners/AfterLoad.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/listeners/AfterRemove.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/listeners/AfterSoftRemove.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/listeners/AfterRecover.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/listeners/AfterUpdate.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/listeners/BeforeInsert.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/listeners/BeforeRemove.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/listeners/BeforeSoftRemove.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/listeners/BeforeRecover.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/listeners/BeforeUpdate.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/listeners/EventSubscriber.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/IndexOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/EntityOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/relations/JoinColumn.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/relations/JoinTable.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/relations/ManyToMany.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/relations/ManyToOne.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/relations/OneToMany.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/relations/OneToOne.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/relations/RelationId.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/entity/Entity.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/entity/ChildEntity.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/entity/TableInheritance.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/ViewEntityOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/entity-view/ViewEntity.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/tree/TreeLevelColumn.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/tree/TreeParent.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/tree/TreeChildren.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/tree/Tree.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/Index.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/ForeignKey.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/UniqueOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/Unique.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/Check.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/options/ExclusionOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/Exclusion.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/decorator/Generated.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/And.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/Or.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/Any.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/ArrayContainedBy.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/ArrayContains.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/ArrayOverlap.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/Between.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/Equal.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/In.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/IsNull.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/LessThan.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/LessThanOrEqual.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/ILike.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/Like.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/MoreThan.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/MoreThanOrEqual.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/Not.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/Raw.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/operator/JsonContains.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/find-options/FindOptionsUtils.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/logger/AbstractLogger.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/logger/AdvancedConsoleLogger.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/logger/FormattedConsoleLogger.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/logger/SimpleConsoleLogger.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/logger/FileLogger.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/repository/BaseEntity.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/driver/sqlserver/MssqlParameter.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/connection/ConnectionOptionsReader.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/migration/MigrationExecutor.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/naming-strategy/DefaultNamingStrategy.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/schema-builder/RdbmsSchemaBuilder.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/util/InstanceChecker.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/repository/FindTreesOptions.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/util/TreeRepositoryUtils.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/util/DateUtils.d.ts","./node_modules/.pnpm/typeorm@1.1.1_sql.js@1.14.2_supports-color@5.5.0/node_modules/typeorm/index.d.ts","./node_modules/.pnpm/@nestjs+typeorm@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_f179a79fdbddc9ff240db705e0d1d4d1/node_modules/@nestjs/typeorm/dist/interfaces/entity-class-or-schema.type.d.ts","./node_modules/.pnpm/@nestjs+typeorm@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_f179a79fdbddc9ff240db705e0d1d4d1/node_modules/@nestjs/typeorm/dist/common/typeorm.decorators.d.ts","./node_modules/.pnpm/@nestjs+typeorm@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_f179a79fdbddc9ff240db705e0d1d4d1/node_modules/@nestjs/typeorm/dist/common/typeorm.utils.d.ts","./node_modules/.pnpm/@nestjs+typeorm@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_f179a79fdbddc9ff240db705e0d1d4d1/node_modules/@nestjs/typeorm/dist/common/index.d.ts","./node_modules/.pnpm/@nestjs+typeorm@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_f179a79fdbddc9ff240db705e0d1d4d1/node_modules/@nestjs/typeorm/dist/exceptions/duplicate-data-source.exception.d.ts","./node_modules/.pnpm/@nestjs+typeorm@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_f179a79fdbddc9ff240db705e0d1d4d1/node_modules/@nestjs/typeorm/dist/interfaces/typeorm-options.interface.d.ts","./node_modules/.pnpm/@nestjs+typeorm@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_f179a79fdbddc9ff240db705e0d1d4d1/node_modules/@nestjs/typeorm/dist/interfaces/index.d.ts","./node_modules/.pnpm/@nestjs+typeorm@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_f179a79fdbddc9ff240db705e0d1d4d1/node_modules/@nestjs/typeorm/dist/typeorm.module.d.ts","./node_modules/.pnpm/@nestjs+typeorm@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_f179a79fdbddc9ff240db705e0d1d4d1/node_modules/@nestjs/typeorm/dist/index.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-basic.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-bearer.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/interfaces/open-api-spec.interface.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/types/swagger-enum.type.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-body.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/interfaces/callback-object.interface.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-callbacks.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-consumes.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-cookie.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-default-getter.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-exclude-controller.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-exclude-endpoint.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-extension.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-extra-models.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-header.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-hide-property.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-include-endpoint.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-link.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-oauth2.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-operation.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/interfaces/enum-schema-attributes.interface.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-param.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-produces.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/interfaces/schema-object-metadata.interface.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-property.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-query.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/interfaces/swagger-document-options.interface.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-response.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-schema.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-security.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-use-tags.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/api-webhook.decorator.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/decorators/index.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/interfaces/swagger-ui-options.interface.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/interfaces/swagger-custom-options.interface.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/interfaces/index.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/document-builder.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/swagger-module.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/type-helpers/deep-partial-type.helper.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/type-helpers/intersection-type.helper.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/type-helpers/omit-type.helper.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/type-helpers/partial-type.helper.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/type-helpers/pick-type.helper.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/type-helpers/index.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/utils/get-schema-path.util.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/utils/generate-schema.util.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/utils/index.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/constants.d.ts","./node_modules/.pnpm/@nestjs+swagger@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports_661c278eb7976f40de249db5ae7b0766/node_modules/@nestjs/swagger/dist/index.d.ts","./src/services/http.service.ts","./src/services/routing/bgp.service.ts","./src/services/routing/ncc.service.ts","./src/services/registry/registry.service.ts","./src/services/entities.ts","./src/services/geonames.service.ts","./src/services/providers.service.ts","./src/services/peer-relay.service.ts","./src/services/triangulation.service.ts","./node_modules/.pnpm/@webgpu+types@0.1.38/node_modules/@webgpu/types/dist/index.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/types.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/tensor_info.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/tensor.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/backends/backend.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/io/types.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/platforms/platform.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/environment.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/tensor_types.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/tape.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/kernel_registry.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/engine.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/flags.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/platforms/platform_browser.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/platforms/platform_node.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/base_side_effects.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/io/router_registry.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/io/indexed_db.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/io/local_storage.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/io/browser_files.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/io/http.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/io/io_utils.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/io/passthrough.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/io/weights_loader.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/io/composite_array_buffer.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/io/model_management.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/io/io.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/confusion_matrix.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/math.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/browser.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/gather_nd_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/scatter_nd_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/serialization.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/tensor_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/test_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/util_base.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/hash_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/version.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/model_types.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/optimizer.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/adadelta_optimizer.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/adagrad_optimizer.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/adam_optimizer.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/adamax_optimizer.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/sgd_optimizer.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/momentum_optimizer.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/rmsprop_optimizer.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/optimizer_constructors.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/abs.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/acos.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/acosh.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/add.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/add_n.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/all.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/any.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/arg_max.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/arg_min.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/asin.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/asinh.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/atan.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/atan2.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/atanh.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool_3d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/basic_lstm_cell.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/batch_to_space_nd.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm3d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm4d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/bincount.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/bitwise_and.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_args.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_to.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/buffer.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/cast.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/ceil.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/clip_by_value.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/clone.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/complex.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat_1d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat_2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat_3d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat_4d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv1d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_transpose.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv3d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv3d_transpose.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/cos.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/cosh.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/cumprod.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/cumsum.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/dense_bincount.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/depth_to_space.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/diag.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/dilation2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/div.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/div_no_nan.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/dot.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/einsum.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/elu.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/ensure_shape.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/equal.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/erf.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/euclidean_norm.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/exp.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/expand_dims.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/expm1.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/eye.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/fill.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/floor.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/floorDiv.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/gather.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/greater.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/greater_equal.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/imag.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/is_finite.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/is_inf.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/is_nan.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/leaky_relu.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/less.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/less_equal.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/linspace.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/local_response_normalization.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/log.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/log1p.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/log_sigmoid.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/log_softmax.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/log_sum_exp.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/logical_and.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/logical_not.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/logical_or.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/logical_xor.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/lower_bound.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/mat_mul.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/max.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/max_pool.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/max_pool_3d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/max_pool_with_argmax.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/maximum.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/mean.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/meshgrid.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/min.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/minimum.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/mirror_pad.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/mod.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/moments.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/mul.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/multi_rnn_cell.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/multinomial.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/neg.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/not_equal.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/one_hot.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/ones.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/ones_like.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/outer_product.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/pad.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/pad1d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/pad2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/pad3d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/pad4d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/pool.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/pow.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/prelu.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/print.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/prod.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/ragged_gather.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/ragged_range.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/ragged_tensor_to_tensor.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/rand.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/random_gamma.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/random_normal.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/random_standard_normal.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/random_uniform.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/random_uniform_int.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/range.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/real.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/reciprocal.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/relu.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/relu6.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/reshape.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/reverse.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/reverse_1d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/reverse_2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/reverse_3d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/reverse_4d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/round.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/rsqrt.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/scalar.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/selu.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/separable_conv2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/setdiff1d_async.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/sigmoid.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/sign.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/sin.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/sinh.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice1d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice3d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice4d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/softmax.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/softplus.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/space_to_batch_nd.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/spectral/fft.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/spectral/ifft.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/spectral/irfft.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/spectral/rfft.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/split.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/sqrt.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/square.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/squared_difference.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/squeeze.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/stack.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/step.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/strided_slice.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/sub.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/sum.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/tan.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/tanh.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor1d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor3d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor4d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor5d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor6d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor_scatter_update.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/tile.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/topk.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/truncated_normal.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/unique.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/unsorted_segment_sum.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/unstack.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/upper_bound.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/variable.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/where.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/where_async.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/zeros.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/zeros_like.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/boolean_mask.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/transpose.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/norm.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/moving_average.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/scatter_nd.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/search_sorted.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/sparse_to_dense.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/gather_nd.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/dropout.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/signal_ops_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/in_top_k.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/operation.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused_types.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused/conv2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused/depthwise_conv2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused/mat_mul.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused_ops.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/ops.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/loss_ops_utils.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/train.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/globals.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/gradients.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/browser_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/axis_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/ragged_to_dense_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/reduce_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/rotate_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/array_ops_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/selu_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/erf_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/log.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/backends/complex_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/backends/einsum_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/split_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_fill_empty_rows_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_reshape_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_segment_reduction_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/segment_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/backends/backend_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/device_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/backends/non_max_suppression_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/backends/where_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/backends/kernel_impls.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/kernel_names.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/base.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/index.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/register_all_gradients.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/abs.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/acos.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/acosh.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/add.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/all.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/any.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/arg_max.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/arg_min.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as_scalar.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as_type.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as1d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as3d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as4d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as5d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/asin.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/asinh.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/atan.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/atan2.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/atanh.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/avg_pool.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/batch_to_space_nd.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/batchnorm.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/broadcast_to.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cast.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/ceil.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/clip_by_value.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/concat.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/conv1d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/conv2d_transpose.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/conv2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cos.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cosh.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cumprod.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cumsum.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/depth_to_space.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/depthwise_conv2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/dilation2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/div_no_nan.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/div.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/dot.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/elu.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/equal.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/erf.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/euclidean_norm.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/exp.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/expand_dims.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/expm1.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/fft.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/flatten.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/floor.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/floorDiv.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/gather.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/greater_equal.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/greater.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/ifft.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/irfft.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/is_finite.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/is_inf.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/is_nan.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/leaky_relu.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/less_equal.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/less.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/local_response_normalization.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log_sigmoid.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log_softmax.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log_sum_exp.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log1p.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_and.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_not.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_or.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_xor.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mat_mul.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/max_pool.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/max.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/maximum.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mean.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/min.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/minimum.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mirror_pad.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mod.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mul.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/neg.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/norm.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/not_equal.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/one_hot.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/ones_like.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/pad.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/pool.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/pow.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/prelu.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/prod.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reciprocal.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/relu.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/relu6.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reshape_as.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reshape.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/resize_bilinear.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/resize_nearest_neighbor.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reverse.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/rfft.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/round.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/rsqrt.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/selu.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/separable_conv2d.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sigmoid.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sign.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sin.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sinh.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/slice.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/softmax.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/softplus.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/space_to_batch_nd.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/split.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sqrt.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/square.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/squared_difference.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/squeeze.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/stack.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/step.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/strided_slice.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sub.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sum.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/tan.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/tanh.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/tile.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/to_bool.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/to_float.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/to_int.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/topk.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/transpose.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/unique.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/unsorted_segment_sum.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/unstack.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/where.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/zeros_like.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/register_all_chained_ops.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/flags_layers.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/constraints.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/exports_constraints.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/keras_format/common.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/keras_format/types.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/keras_format/initializer_config.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/initializers.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/exports_initializers.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/types.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/regularizers.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/variables.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/engine/topology.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/engine/input_layer.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/engine/container.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/logs.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/base_callbacks.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/keras_format/loss_config.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/keras_format/optimizer_config.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/keras_format/training_config.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/engine/dataset_stub.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/engine/training_utils.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/engine/training_dataset.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/engine/training_tensors.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/engine/training.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/models.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/exports.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/advanced_activations.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/keras_format/activation_config.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/activations.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional_depthwise.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/recurrent.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional_recurrent.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/keras_format/node_config.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/keras_format/topology_config.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/core.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/embeddings.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/merge.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/noise.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/normalization.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/padding.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/pooling.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/wrappers.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/preprocessing/image_preprocessing.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/preprocessing/center_crop.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/preprocessing/preprocessing_utils.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/preprocessing/category_encoding.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/preprocessing/image_resizing.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/backend/random_seed.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/engine/base_random_layer.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/layers/preprocessing/random_width.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/exports_layers.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/exports_metrics.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/exports_models.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/exports_regularizers.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/callbacks.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/version.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-layers@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-layers/dist/index.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-converter@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-converter/dist/flags.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-converter@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-converter/dist/data/compiled_api.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-converter@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-converter/dist/executor/hash_table.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-converter@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_array.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-converter@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_list.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-converter@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-converter/dist/data/types.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-converter@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-core/dist/ops/ops_for_converter.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-converter@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-converter/dist/executor/types.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-converter@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-converter/dist/executor/execution_context.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-converter@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-converter/dist/executor/resource_manager.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-converter@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-converter/dist/operations/types.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-converter@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-converter/dist/operations/custom_op/register.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-converter@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-converter/dist/version.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-converter@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-converter/dist/index.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/types.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/util/deep_map.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/util/ring_buffer.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/lazy_iterator.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/dataset.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/string_iterator.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/byte_chunk_iterator.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/datasource.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/datasets/text_line_dataset.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/datasets/csv_dataset.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/microphone_iterator.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/webcam_iterator.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/readers.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/file_chunk_iterator.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/sources/file_data_source.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/sources/url_data_source.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/version.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-data@4.22.0_@tensorflow+tfjs-core@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/index.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/backend_cpu.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Abs.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Add.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Bincount_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BitwiseAnd.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cast.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/unary_types.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Ceil.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Concat_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Equal.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Exp.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Expm1.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Floor.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FloorDiv.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherNd_Impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherV2_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Greater.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GreaterEqual.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Less.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LessEqual.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LinSpace_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Log.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Max_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Maximum.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Minimum.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Multiply.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Neg.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NotEqual.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Prod.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RaggedGather_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RaggedRange_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RaggedTensorToTensor_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Range_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Rsqrt.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Scatter_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sigmoid.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Slice.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseFillEmptyRows_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseReshape_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseSegmentReduction_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sqrt.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SquaredDifference.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StaticRegexReplace.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StridedSlice_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringNGrams_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringSplit_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringToHashBucketFast_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sub.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tile_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/TopK_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Transpose_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Unique_impl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/binary_types.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/shared.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/version.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/base.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/register_all_kernels.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/index.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/version.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/tex_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/webgl_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/flags_webgl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/webgl_types.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_context.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/shader_compiler.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_math.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/texture_manager.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/backend_webgl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/canvas_util.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/webgl.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/base.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/register_all_kernels.d.ts","./node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@4.22.0_@tensorflow+tfjs-core@4.22.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/index.d.ts","./node_modules/.pnpm/@tensorflow+tfjs@4.22.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs/dist/index.d.ts","./src/services/ml-geolocation.service.ts","./src/services/banner.service.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/.pnpm/@img+colour@1.1.0/node_modules/@img/colour/index.d.ts","./node_modules/.pnpm/sharp@0.35.4/node_modules/sharp/dist/index.d.mts","./src/services/favicon.service.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/adapters/ws-adapter.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/adapters/index.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/decorators/connected-socket.decorator.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/decorators/gateway-server.decorator.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/decorators/message-body.decorator.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/enums/route-paramtypes.enum.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/utils/shared.utils.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/utils/parameter-decorator-options.util.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/utils/load-package.util.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/utils/cli-colors.util.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/utils/random-string-generator.util.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/exceptions/exception-filter-metadata.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter-metadata.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/exceptions/index.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/utils/select-exception-filter-metadata.util.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/interfaces/microservices/nest-microservice-options.interface.d.ts","./node_modules/.pnpm/@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-color@5.5.0/node_modules/@nestjs/common/internal.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/interfaces/gateway-metadata.interface.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/interfaces/hooks/on-gateway-connection.interface.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/interfaces/hooks/on-gateway-disconnect.interface.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/interfaces/hooks/on-gateway-init.interface.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/interfaces/hooks/index.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/interfaces/server-and-event-streams-host.interface.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/interfaces/web-socket-server.interface.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/interfaces/ws-response.interface.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/interfaces/index.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/decorators/socket-gateway.decorator.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/decorators/subscribe-message.decorator.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/decorators/ack.decorator.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/decorators/index.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/errors/ws-exception.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/errors/index.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/exceptions/base-ws-exception-filter.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/exceptions/index.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/interfaces/nest-gateway.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/adapters/http-adapter.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/adapters/index.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/inspector/interfaces/edge.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/inspector/interfaces/entrypoint.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/inspector/interfaces/extras.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/inspector/interfaces/node.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/settlement-signal.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/injector.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/inspector/interfaces/serialized-graph-metadata.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/inspector/interfaces/serialized-graph-json.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/inspector/serialized-graph.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/compiler.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/modules-container.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/container.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/instance-links-host.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/abstract-instance-resolver.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/module-ref.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/module.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/instance-wrapper.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/router/interfaces/exclude-route-metadata.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/application-config.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/constants.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/discovery/discovery-module.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/discovery/discovery-service.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/discovery/index.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/helpers/http-adapter-host.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/exceptions/base-exception-filter.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/exceptions/index.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/helpers/context-id-factory.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/exceptions/exceptions-handler.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/router/router-proxy.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/helpers/context-creator.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/exceptions/base-exception-filter-context.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/exceptions/external-exception-filter.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/exceptions/external-exceptions-handler.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/exceptions/external-exception-filter-context.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/guards/constants.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/helpers/execution-context-host.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/guards/guards-consumer.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/guards/guards-context-creator.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/guards/index.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/interceptors/interceptors-consumer.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/interceptors/interceptors-context-creator.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/interceptors/index.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/pipes/params-token-factory.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/pipes/pipes-consumer.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/pipes/pipes-context-creator.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/pipes/index.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/helpers/context-utils.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/inquirer/inquirer-constants.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/inquirer/index.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/interfaces/module-definition.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/interfaces/module-override.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/inspector/interfaces/enhancer-metadata-cache-entry.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/inspector/graph-inspector.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/metadata-scanner.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/scanner.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/instance-loader.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader-options.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/injector/index.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/helpers/interfaces/external-handler-metadata.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/helpers/interfaces/params-metadata.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/helpers/external-context-creator.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/helpers/index.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/inspector/initialize-on-preview.allowlist.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/inspector/partial-graph.host.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/inspector/index.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/middleware/route-info-path-extractor.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/middleware/routes-mapper.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/middleware/builder.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/middleware/index.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/nest-application-context.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/nest-application.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/nest-factory.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/repl/repl.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/repl/index.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/router/interfaces/resolved-route.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/router/interfaces/route-conflict.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/router/interfaces/route-resolution-options.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/router/interfaces/routes.interface.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/router/interfaces/index.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/router/request/request-constants.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/router/request/index.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/router/router-module.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/router/index.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/services/reflector.service.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/services/index.d.ts","./node_modules/.pnpm/@nestjs+core@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_supports-co_a97e41df8ae3068e0d15d4a9f53bf982/node_modules/@nestjs/core/index.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/gateway-metadata-explorer.d.ts","./node_modules/.pnpm/@nestjs+websockets@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_suppo_431f06fa1c2227a54e7e1fda613a5f3b/node_modules/@nestjs/websockets/index.d.ts","./node_modules/.pnpm/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/esm/commons.d.ts","./node_modules/.pnpm/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/esm/encodePacket.d.ts","./node_modules/.pnpm/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/esm/decodePacket.d.ts","./node_modules/.pnpm/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/esm/index.d.ts","./node_modules/.pnpm/engine.io@6.6.10/node_modules/engine.io/build/parser-v3/index.d.ts","./node_modules/.pnpm/@types+ws@8.18.1/node_modules/@types/ws/index.d.ts","./node_modules/.pnpm/engine.io@6.6.10/node_modules/engine.io/build/transport.d.ts","./node_modules/.pnpm/engine.io@6.6.10/node_modules/engine.io/build/socket.d.ts","./node_modules/.pnpm/@types+cors@2.8.19/node_modules/@types/cors/index.d.ts","./node_modules/.pnpm/engine.io@6.6.10/node_modules/engine.io/build/contrib/types.cookie.d.ts","./node_modules/.pnpm/engine.io@6.6.10/node_modules/engine.io/build/server.d.ts","./node_modules/.pnpm/engine.io@6.6.10/node_modules/engine.io/build/transports/polling.d.ts","./node_modules/.pnpm/engine.io@6.6.10/node_modules/engine.io/build/transports/websocket.d.ts","./node_modules/.pnpm/engine.io@6.6.10/node_modules/engine.io/build/transports/webtransport.d.ts","./node_modules/.pnpm/engine.io@6.6.10/node_modules/engine.io/build/transports/index.d.ts","./node_modules/.pnpm/engine.io@6.6.10/node_modules/engine.io/build/userver.d.ts","./node_modules/.pnpm/engine.io@6.6.10/node_modules/engine.io/build/engine.io.d.ts","./node_modules/.pnpm/@socket.io+component-emitter@3.1.2/node_modules/@socket.io/component-emitter/lib/cjs/index.d.ts","./node_modules/.pnpm/socket.io-parser@4.2.7/node_modules/socket.io-parser/build/esm/index.d.ts","./node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/typed-events.d.ts","./node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/client.d.ts","./node_modules/.pnpm/socket.io-adapter@2.5.8/node_modules/socket.io-adapter/dist/in-memory-adapter.d.ts","./node_modules/.pnpm/socket.io-adapter@2.5.8/node_modules/socket.io-adapter/dist/cluster-adapter.d.ts","./node_modules/.pnpm/socket.io-adapter@2.5.8/node_modules/socket.io-adapter/dist/index.d.ts","./node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/socket-types.d.ts","./node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/broadcast-operator.d.ts","./node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/socket.d.ts","./node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/namespace.d.ts","./node_modules/.pnpm/socket.io@4.8.3/node_modules/socket.io/dist/index.d.ts","./src/services/scan.gateway.ts","./src/services/live-feed.service.ts","./src/services/background-inventory.service.ts","./src/services/dedup.util.ts","./src/services/dht.service.ts","./src/services/resolution.service.ts","./src/services/account.service.ts","./src/services/sweep.service.ts","./src/services/search-language.service.ts","./src/dto.ts","./src/resolution.controller.ts","./src/services/registry/afrinic.service.ts","./src/services/registry/apnic.service.ts","./src/services/registry/arin.service.ts","./src/services/registry/lacnic.service.ts","./src/services/registry/ripe.service.ts","./src/services/calibration-collector.service.ts","./src/app.module.ts","./node_modules/.pnpm/fast-uri@3.1.7/node_modules/fast-uri/types/index.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/code.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/scope.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/index.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/rules.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/util.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/subschema.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/errors.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/index.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/dataType.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/contains.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/not.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/if.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/index.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/pattern.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/required.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/const.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/enum.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/index.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/format/format.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/dependentRequired.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/types.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/index.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/errors.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/types/json-schema.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/types/jtd-schema.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/validation_error.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/ref_error.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/core.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/resolve.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/index.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/types/index.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/ajv.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/jtd/error.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/jtd/type.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/jtd/enum.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/jtd/elements.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/jtd/properties.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/jtd/discriminator.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/jtd/values.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/jtd/index.d.ts","./node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/jtd.d.ts","./node_modules/.pnpm/@fastify+ajv-compiler@4.0.6/node_modules/@fastify/ajv-compiler/types/index.d.ts","./node_modules/.pnpm/@fastify+error@4.2.0/node_modules/@fastify/error/types/index.d.ts","./node_modules/.pnpm/fast-json-stringify@7.0.1/node_modules/fast-json-stringify/types/index.d.ts","./node_modules/.pnpm/@fastify+fast-json-stringify-compiler@5.1.0/node_modules/@fastify/fast-json-stringify-compiler/types/index.d.ts","./node_modules/.pnpm/find-my-way@9.9.0/node_modules/find-my-way/index.d.ts","./node_modules/.pnpm/light-my-request@6.6.0/node_modules/light-my-request/types/index.d.ts","./node_modules/.pnpm/fastify@5.12.1/node_modules/fastify/types/utils.d.ts","./node_modules/.pnpm/fastify@5.12.1/node_modules/fastify/types/schema.d.ts","./node_modules/.pnpm/fastify@5.12.1/node_modules/fastify/types/type-provider.d.ts","./node_modules/.pnpm/fastify@5.12.1/node_modules/fastify/types/reply.d.ts","./node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/index.d.ts","./node_modules/.pnpm/sonic-boom@4.2.1/node_modules/sonic-boom/types/index.d.ts","./node_modules/.pnpm/thread-stream@4.2.0/node_modules/thread-stream/index.d.ts","./node_modules/.pnpm/pino@10.3.1/node_modules/pino/pino.d.ts","./node_modules/.pnpm/fastify@5.12.1/node_modules/fastify/types/logger.d.ts","./node_modules/.pnpm/fastify@5.12.1/node_modules/fastify/types/plugin.d.ts","./node_modules/.pnpm/fastify@5.12.1/node_modules/fastify/types/register.d.ts","./node_modules/.pnpm/fastify@5.12.1/node_modules/fastify/types/instance.d.ts","./node_modules/.pnpm/fastify@5.12.1/node_modules/fastify/types/hooks.d.ts","./node_modules/.pnpm/fastify@5.12.1/node_modules/fastify/types/route.d.ts","./node_modules/.pnpm/fastify@5.12.1/node_modules/fastify/types/context.d.ts","./node_modules/.pnpm/fastify@5.12.1/node_modules/fastify/types/request.d.ts","./node_modules/.pnpm/fastify@5.12.1/node_modules/fastify/types/content-type-parser.d.ts","./node_modules/.pnpm/fastify@5.12.1/node_modules/fastify/types/errors.d.ts","./node_modules/.pnpm/fastify@5.12.1/node_modules/fastify/types/server-factory.d.ts","./node_modules/.pnpm/fastify@5.12.1/node_modules/fastify/fastify.d.ts","./node_modules/.pnpm/@fastify+cors@11.3.0/node_modules/@fastify/cors/types/index.d.ts","./node_modules/.pnpm/@nestjs+platform-fastify@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_693f218860c6444765558a3cb3ac25f1/node_modules/@nestjs/platform-fastify/interfaces/external/fastify-static-options.interface.d.ts","./node_modules/.pnpm/@nestjs+platform-fastify@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_693f218860c6444765558a3cb3ac25f1/node_modules/@nestjs/platform-fastify/interfaces/external/fastify-view-options.interface.d.ts","./node_modules/.pnpm/@nestjs+platform-fastify@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_693f218860c6444765558a3cb3ac25f1/node_modules/@nestjs/platform-fastify/interfaces/external/index.d.ts","./node_modules/.pnpm/@nestjs+platform-fastify@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_693f218860c6444765558a3cb3ac25f1/node_modules/@nestjs/platform-fastify/interfaces/nest-fastify-body-parser-options.interface.d.ts","./node_modules/.pnpm/@nestjs+platform-fastify@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_693f218860c6444765558a3cb3ac25f1/node_modules/@nestjs/platform-fastify/interfaces/nest-fastify-application.interface.d.ts","./node_modules/.pnpm/@nestjs+platform-fastify@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_693f218860c6444765558a3cb3ac25f1/node_modules/@nestjs/platform-fastify/interfaces/index.d.ts","./node_modules/.pnpm/@nestjs+platform-fastify@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_693f218860c6444765558a3cb3ac25f1/node_modules/@nestjs/platform-fastify/adapters/fastify-adapter.d.ts","./node_modules/.pnpm/@nestjs+platform-fastify@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_693f218860c6444765558a3cb3ac25f1/node_modules/@nestjs/platform-fastify/adapters/index.d.ts","./node_modules/.pnpm/@nestjs+platform-fastify@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_693f218860c6444765558a3cb3ac25f1/node_modules/@nestjs/platform-fastify/decorators/route-config.decorator.d.ts","./node_modules/.pnpm/@nestjs+platform-fastify@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_693f218860c6444765558a3cb3ac25f1/node_modules/@nestjs/platform-fastify/decorators/route-constraints.decorator.d.ts","./node_modules/.pnpm/@nestjs+platform-fastify@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_693f218860c6444765558a3cb3ac25f1/node_modules/@nestjs/platform-fastify/decorators/route-schema.decorator.d.ts","./node_modules/.pnpm/@nestjs+platform-fastify@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_693f218860c6444765558a3cb3ac25f1/node_modules/@nestjs/platform-fastify/decorators/index.d.ts","./node_modules/.pnpm/@nestjs+platform-fastify@12.0.1_@nestjs+common@12.0.1_reflect-metadata@0.2.2_rxjs@7.8.2_693f218860c6444765558a3cb3ac25f1/node_modules/@nestjs/platform-fastify/index.d.ts","./node_modules/.pnpm/dotenv@17.4.2/node_modules/dotenv/lib/main.d.ts","./src/main.ts"],"fileIdsList":[[1480,1529,1546,1547,1797,1801,1810],[1480,1529,1546,1547,1579,1836],[1480,1529,1546,1547],[1480,1529,1546,1547,1813],[324,1480,1529,1546,1547],[428,1480,1529,1546,1547],[69,325,326,327,328,329,330,331,332,333,334,335,336,337,1480,1529,1546,1547],[272,310,1480,1529,1546,1547],[280,1480,1529,1546,1547],[269,324,343,428,1480,1529,1546,1547],[342,343,344,345,346,347,348,350,351,1480,1529,1546,1547],[275,1480,1529,1546,1547],[273,324,428,1480,1529,1546,1547],[275,349,1480,1529,1546,1547],[338,341,352,1480,1529,1546,1547],[339,340,1480,1529,1546,1547],[314,1480,1529,1546,1547],[275,276,277,278,1480,1529,1546,1547],[355,1480,1529,1546,1547],[293,354,1480,1529,1546,1547],[354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,1480,1529,1546,1547],[384,1480,1529,1546,1547],[381,382,1480,1529,1546,1547],[380,383,1480,1529,1546,1547,1561],[68,279,324,353,377,380,385,392,418,425,427,1480,1529,1546,1547],[74,272,1480,1529,1546,1547],[73,1480,1529,1546,1547],[74,264,265,1480,1529,1546,1547,1594,1595],[264,272,1480,1529,1546,1547],[73,263,1480,1529,1546,1547],[272,405,1480,1529,1546,1547],[266,407,1480,1529,1546,1547],[263,267,1480,1529,1546,1547],[267,1480,1529,1546,1547],[73,324,1480,1529,1546,1547],[271,272,273,1480,1529,1546,1547],[285,1480,1529,1546,1547],[287,288,289,290,291,1480,1529,1546,1547],[279,1480,1529,1546,1547],[279,280,300,1480,1529,1546,1547],[293,294,301,302,303,1480,1529,1546,1547],[70,71,72,73,74,264,265,266,267,268,269,270,271,272,274,280,285,286,292,299,300,304,305,306,307,308,310,318,319,320,321,322,323,1480,1529,1546,1547],[298,1480,1529,1546,1547],[281,282,283,284,1480,1529,1546,1547],[272,281,282,1480,1529,1546,1547],[272,279,280,1480,1529,1546,1547],[272,283,1480,1529,1546,1547],[272,314,1480,1529,1546,1547],[309,311,312,313,314,315,316,317,1480,1529,1546,1547],[70,272,1480,1529,1546,1547],[310,1480,1529,1546,1547],[70,272,309,313,315,1480,1529,1546,1547],[282,1480,1529,1546,1547],[311,1480,1529,1546,1547],[272,310,311,312,1480,1529,1546,1547],[297,1480,1529,1546,1547],[272,277,297,298,318,319,1480,1529,1546,1547],[295,296,298,299,1480,1529,1546,1547],[268,270,280,286,301,320,321,324,1480,1529,1546,1547],[74,263,268,270,274,307,308,320,321,1480,1529,1546,1547],[278,1480,1529,1546,1547],[263,1480,1529,1546,1547],[73,280,281,283,286,295,298,301,314,319,320,324,343,349,1480,1529,1546,1547,1588,1589,1590,1591,1592,1593,1594,1595,1597,1598],[297,324,386,390,1480,1529,1546,1547],[390,391,1480,1529,1546,1547],[324,386,1480,1529,1546,1547],[324,386,387,1480,1529,1546,1547],[387,388,1480,1529,1546,1547],[387,388,389,1480,1529,1546,1547],[274,1480,1529,1546,1547],[395,396,397,1480,1529,1546,1547],[395,1480,1529,1546,1547],[397,398,399,401,402,403,1480,1529,1546,1547],[394,1480,1529,1546,1547],[397,400,1480,1529,1546,1547],[397,398,399,401,402,1480,1529,1546,1547],[274,394,397,401,1480,1529,1546,1547],[393,404,409,410,411,412,413,414,415,416,417,1480,1529,1546,1547],[274,324,409,1480,1529,1546,1547],[274,400,1480,1529,1546,1547],[274,400,428,1480,1529,1546,1547],[273,274,400,1480,1529,1546,1547],[266,272,274,400,405,406,407,408,1480,1529,1546,1547],[263,324,405,406,419,1480,1529,1546,1547],[324,405,1480,1529,1546,1547],[422,1480,1529,1546,1547],[353,419,421,1480,1529,1546,1547],[419,420,421,423,424,1480,1529,1546,1547],[263,273,324,421,1480,1529,1546,1547],[273,1480,1529,1546,1547],[297,1480,1529,1546,1547,1573],[297,378,379,1480,1529,1546,1547],[309,1480,1529,1546,1547],[279,324,1480,1529,1546,1547],[426,1480,1529,1546,1547],[343,1480,1529,1546,1547],[1480,1529,1546,1547,1596],[428,1480,1529,1546,1547,1599],[1480,1529,1546,1547,1618],[428,1480,1529,1546,1547,1599,1637,1638],[1480,1529,1546,1547,1599],[428,1480,1529,1546,1547,1631,1636,1637],[1480,1529,1546,1547,1641,1642],[428,1480,1529,1546,1547,1632,1637,1650],[428,1480,1529,1546,1547,1619,1644],[428,1480,1529,1546,1547,1599,1645],[1480,1529,1546,1547,1599,1632,1637,1639,1649,1651,1653],[428,1480,1529,1546,1547,1599,1652],[1480,1529,1546,1547,1645],[263,428,1480,1529,1546,1547,1599,1656],[428,1480,1529,1546,1547,1599,1632,1637,1639,1650],[1480,1529,1546,1547,1655,1657,1658],[1480,1529,1546,1547,1599,1637],[1480,1529,1546,1547,1637],[273,428,1480,1529,1546,1547,1599,1656],[428,1480,1529,1546,1547,1599,1631,1632,1637,1654,1656,1659,1662,1666,1667,1680,1681],[263,1480,1529,1546,1547,1618],[1480,1529,1546,1547,1644,1647,1682],[1480,1529,1546,1547,1667,1679],[68,1480,1529,1546,1547,1619,1639,1640,1643,1646,1674,1679,1683,1686,1690,1691,1692,1693,1695,1704,1706],[428,1480,1529,1546,1547,1599,1625,1633,1636,1637],[428,1480,1529,1546,1547,1629],[428,1480,1529,1546,1547,1599,1628,1629,1630,1631,1636,1637,1639,1707],[1480,1529,1546,1547,1631,1632,1635,1637,1669,1678],[428,1480,1529,1546,1547,1599,1624,1636,1637],[1480,1529,1546,1547,1668],[428,1480,1529,1546,1547,1632,1637],[428,1480,1529,1546,1547,1625,1632,1636,1673],[428,1480,1529,1546,1547,1599,1624,1636],[428,1480,1529,1546,1547,1630,1631,1635,1671,1675,1676,1677],[428,1480,1529,1546,1547,1625,1632,1633,1634,1636,1637],[428,1480,1529,1546,1547,1599,1632,1635,1637],[263,1480,1529,1546,1547,1636],[1480,1529,1546,1547,1621,1622,1623,1632,1636,1637,1672],[1480,1529,1546,1547,1628,1673,1684,1685],[428,1480,1529,1546,1547,1599,1637],[1480,1529,1546,1547,1620,1621,1622,1623,1626,1628],[1480,1529,1546,1547,1625],[1480,1529,1546,1547,1627,1628],[428,1480,1529,1546,1547,1620,1621,1622,1623,1626,1627],[1480,1529,1546,1547,1660,1661],[1480,1529,1546,1547,1670],[428,1480,1529,1546,1547,1599,1687,1688],[1480,1529,1546,1547,1689],[1480,1529,1546,1547,1599,1639],[428,1480,1529,1546,1547,1599,1632,1639],[428,1480,1529,1546,1547,1599,1625,1632,1633,1634,1636,1637],[428,1480,1529,1546,1547,1599,1619,1632,1639,1673,1691],[428,1480,1529,1546,1547,1599,1618],[1480,1529,1546,1547,1663,1664,1665],[1480,1529,1546,1547,1694],[428,1480,1529,1546,1547,1558],[1480,1529,1546,1547,1700,1702,1703],[1480,1529,1546,1547,1696,1697,1698,1699],[428,1480,1529,1546,1547,1599,1637,1649],[1480,1529,1546,1547,1696],[1480,1529,1546,1547,1701],[428,1480,1529,1546,1547,1631,1636,1700],[1480,1529,1546,1547,1648],[428,1480,1529,1546,1547,1599,1632,1636,1637,1639,1670,1671,1673,1674],[1480,1529,1546,1547,1705],[428,1480,1529,1543,1544,1545,1546,1547,1599,1707,1816,1836,1837,1840,1843],[1480,1529,1546,1547,1844],[1480,1529,1546,1547,1846,1847,1848],[428,1480,1529,1546,1547,1836],[1480,1529,1546,1547,1843,1845,1849],[1480,1529,1541,1546,1547,1836],[1480,1529,1546,1547,1838,1839],[1480,1529,1546,1547,1841,1842],[428,1480,1529,1546,1547,1816,1836,1837,1840,1841],[1480,1529,1546,1547,1836],[428,817,818,1480,1529,1546,1547],[820,1480,1529,1546,1547],[817,818,1480,1529,1546,1547],[817,1480,1529,1546,1547],[428,817,818,835,1480,1529,1546,1547],[428,835,838,1480,1529,1546,1547],[428,817,841,1480,1529,1546,1547],[838,1480,1529,1546,1547],[815,816,819,821,822,823,824,825,826,827,828,829,830,831,832,833,834,836,837,839,840,842,843,844,845,846,1480,1529,1546,1547],[817,842,850,1480,1529,1546,1547],[68,847,850,851,852,858,861,862,1480,1529,1546,1547],[817,841,849,1480,1529,1546,1547],[428,817,835,1480,1529,1546,1547],[817,848,1480,1529,1546,1547],[301,428,850,1480,1529,1546,1547],[853,854,855,856,857,1480,1529,1546,1547],[428,817,1480,1529,1546,1547],[859,860,1480,1529,1546,1547],[807,808,1480,1529,1546,1547],[428,805,806,1480,1529,1546,1547],[263,428,805,806,1480,1529,1546,1547],[809,810,812,813,1480,1529,1546,1547],[805,1480,1529,1546,1547],[811,1480,1529,1546,1547],[428,805,1480,1529,1546,1547],[428,805,806,811,1480,1529,1546,1547],[1480,1529,1546,1547,1583],[263,428,1480,1529,1546,1547],[1480,1529,1546,1547,1585,1586,1587,1609,1610,1611],[1480,1529,1546,1547,1608],[1480,1529,1546,1547,1613],[1480,1529,1546,1547,1615],[263,1480,1529,1546,1547,1617,1707],[68,1480,1529,1546,1547,1584,1608,1612,1614,1616,1708],[1480,1529,1546,1547,1601,1602,1603],[1480,1529,1546,1547,1600,1604,1605,1606,1607],[1167,1480,1529,1546,1547],[1398,1451,1452,1480,1529,1546,1547],[1453,1454,1480,1529,1546,1547],[1167,1398,1480,1529,1546,1547],[1167,1451,1480,1529,1546,1547],[1167,1404,1480,1529,1546,1547],[1399,1400,1401,1402,1403,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1480,1529,1546,1547],[1167,1457,1460,1462,1464,1465,1480,1529,1546,1547],[1456,1468,1480,1529,1546,1547],[1167,1457,1461,1480,1529,1546,1547],[1167,1457,1462,1463,1480,1529,1546,1547],[1167,1457,1480,1529,1546,1547],[1469,1470,1480,1529,1546,1547],[1457,1462,1480,1529,1546,1547],[1458,1459,1462,1464,1466,1467,1480,1529,1546,1547],[1167,1367,1368,1369,1480,1529,1546,1547],[1167,1368,1369,1370,1373,1480,1529,1546,1547],[1167,1370,1480,1529,1546,1547],[1167,1367,1370,1480,1529,1546,1547],[1365,1366,1371,1376,1377,1378,1480,1529,1546,1547],[1376,1480,1529,1546,1547],[1167,1366,1370,1372,1374,1375,1480,1529,1546,1547],[874,875,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,884,902,904,905,906,938,1132,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1480,1529,1546,1547],[874,1480,1529,1546,1547],[876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[1162,1163,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,875,876,877,879,880,881,883,884,899,901,902,903,904,905,906,907,908,909,912,913,914,915,916,917,918,919,920,921,922,923,1137,1138,1139,1140,1141,1142,1160,1161,1164,1165,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[885,886,887,1480,1529,1546,1547],[874,875,876,877,880,881,882,883,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[879,1480,1529,1546,1547],[884,1480,1529,1546,1547],[876,877,879,881,884,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,881,884,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[888,1166,1480,1529,1546,1547],[878,885,889,1480,1529,1546,1547],[878,889,1480,1529,1546,1547],[878,889,890,891,892,893,894,895,896,897,898,1480,1529,1546,1547],[874,878,881,1480,1529,1546,1547],[878,1480,1529,1546,1547],[878,881,1480,1529,1546,1547],[874,875,883,938,1132,1480,1529,1546,1547],[874,875,876,882,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[900,1480,1529,1546,1547],[874,876,881,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,938,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,938,1132,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1132,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[1132,1133,1134,1135,1480,1529,1546,1547],[876,938,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[876,1132,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[875,1480,1529,1546,1547],[874,876,881,924,925,926,927,928,929,930,931,932,933,934,935,936,937,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1136,1166,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[1137,1480,1529,1546,1547],[875,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[881,907,915,1480,1529,1546,1547],[881,907,920,1480,1529,1546,1547],[876,881,907,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[916,917,918,919,920,921,922,1480,1529,1546,1547],[876,881,907,915,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[879,885,1480,1529,1546,1547],[874,876,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,938,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,938,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,938,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,938,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1301,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1302,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1303,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1304,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1305,1480,1529,1546,1547],[874,876,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1480,1529,1546,1547],[876,881,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1480,1529,1546,1547],[873,874,875,1480,1529,1546,1547],[923,1480,1529,1546,1547],[873,1480,1529,1546,1547],[874,910,911,1480,1529,1546,1547],[1167,1380,1383,1480,1529,1546,1547],[1167,1380,1383,1384,1387,1388,1480,1529,1546,1547],[1383,1384,1387,1480,1529,1546,1547],[1386,1480,1529,1546,1547],[1380,1384,1388,1389,1392,1394,1395,1396,1480,1529,1546,1547],[1383,1385,1480,1529,1546,1547],[1380,1386,1480,1529,1546,1547],[1167,1380,1381,1382,1480,1529,1546,1547],[1383,1480,1529,1546,1547],[1167,1380,1384,1389,1390,1391,1480,1529,1546,1547],[1380,1386,1387,1393,1480,1529,1546,1547],[1386,1387,1393,1480,1529,1546,1547],[1167,1334,1480,1529,1546,1547],[1167,1320,1321,1480,1529,1546,1547],[1320,1321,1322,1330,1480,1529,1546,1547],[1167,1318,1355,1480,1529,1546,1547],[1167,1310,1311,1315,1317,1318,1480,1529,1546,1547],[1167,1310,1315,1318,1480,1529,1546,1547],[1167,1308,1310,1313,1315,1316,1317,1480,1529,1546,1547],[1167,1310,1315,1318,1320,1322,1325,1326,1327,1328,1329,1480,1529,1546,1547],[1167,1315,1322,1326,1327,1480,1529,1546,1547],[1167,1322,1327,1480,1529,1546,1547],[1318,1319,1320,1322,1330,1331,1480,1529,1546,1547],[1308,1480,1529,1546,1547],[1313,1480,1529,1546,1547],[1318,1319,1332,1333,1336,1337,1338,1339,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1353,1354,1357,1480,1529,1546,1547],[1331,1480,1529,1546,1547],[1316,1480,1529,1546,1547],[1167,1168,1307,1309,1310,1314,1317,1318,1321,1322,1327,1328,1329,1330,1331,1332,1338,1358,1359,1360,1361,1362,1363,1480,1529,1546,1547],[1167,1310,1312,1480,1529,1546,1547],[1311,1480,1529,1546,1547],[1167,1310,1311,1340,1480,1529,1546,1547],[1310,1311,1323,1324,1480,1529,1546,1547],[1167,1308,1310,1313,1315,1316,1318,1480,1529,1546,1547],[1167,1308,1310,1313,1315,1316,1317,1318,1334,1335,1480,1529,1546,1547],[1167,1308,1310,1313,1315,1316,1336,1480,1529,1546,1547],[1167,1308,1310,1313,1315,1316,1335,1338,1480,1529,1546,1547],[1167,1308,1310,1313,1315,1316,1318,1334,1335,1341,1480,1529,1546,1547],[1167,1310,1315,1318,1352,1480,1529,1546,1547],[1167,1315,1318,1480,1529,1546,1547],[1167,1310,1315,1356,1480,1529,1546,1547],[1167,1310,1315,1317,1318,1338,1480,1529,1546,1547],[1167,1310,1311,1315,1318,1322,1326,1328,1329,1330,1480,1529,1546,1547],[1167,1310,1480,1529,1546,1547],[1167,1308,1310,1480,1529,1546,1547],[1167,1168,1306,1364,1379,1397,1455,1471,1480,1529,1546,1547],[1480,1529,1543,1546,1547,1579],[1480,1529,1540,1543,1545,1546,1547,1549,1561,1569,1572,1578,1579],[1480,1529,1546,1547,1760,1761,1765,1792,1793,1795,1796,1797,1799,1800],[1480,1529,1546,1547,1758,1759],[1480,1529,1546,1547,1758],[1480,1529,1546,1547,1760,1800],[1480,1529,1546,1547,1760,1761,1797,1798,1800],[1480,1529,1546,1547,1800],[1480,1529,1546,1547,1757,1800,1801],[1480,1529,1546,1547,1760,1761,1799,1800],[1480,1529,1546,1547,1760,1761,1763,1764,1799,1800],[1480,1529,1546,1547,1760,1761,1762,1799,1800],[1480,1529,1546,1547,1760,1761,1765,1792,1793,1794,1795,1796,1799,1800],[1480,1529,1546,1547,1760,1765,1794,1795,1796,1797,1799,1800,1809],[1480,1529,1546,1547,1757,1760,1761,1765,1797,1799],[1480,1529,1546,1547,1765,1800],[1480,1529,1546,1547,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1800],[1480,1529,1546,1547,1790,1800],[1480,1529,1546,1547,1766,1777,1785,1786,1787,1788,1789,1791],[1480,1529,1546,1547,1790,1800,1802],[1480,1529,1546,1547,1800,1802],[1480,1529,1546,1547,1800,1803,1804,1805,1806,1807,1808],[1480,1529,1546,1547,1765,1800,1802],[1480,1529,1546,1547,1770,1800],[1480,1529,1546,1547,1778,1779,1780,1781,1782,1783,1784,1800],[1480,1529,1546,1547,1572,1579],[1480,1529,1546,1547,1710],[1480,1529,1546,1547,1710,1711,1712],[1480,1529,1543,1546,1547,1713,1716,1717,1720,1724,1725],[1480,1529,1540,1543,1546,1547,1561,1715,1716,1717,1718,1719],[1480,1529,1540,1543,1546,1547,1713,1716,1720],[1480,1529,1540,1543,1546,1547,1713,1714,1715],[1480,1529,1546,1547,1716,1721,1722,1723],[1480,1529,1546,1547,1713,1716],[1480,1529,1546,1547,1713,1715,1716],[1480,1529,1546,1547,1716],[1480,1529,1546,1547,1716,1720],[1480,1529,1546,1547,1801],[1480,1529,1543,1544,1545,1546,1547,1549,1811,1812,1814,1815,1816,1817,1818,1819,1820,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835],[1480,1529,1546,1547,1817,1818,1819,1830,1832],[1480,1529,1546,1547,1817,1830],[1480,1529,1546,1547,1812],[1480,1529,1546,1547,1561,1812,1817,1818,1819,1820,1825,1826,1827,1828,1830,1832],[1480,1529,1543,1546,1547,1549,1812,1815,1816,1817,1818,1819,1820,1825,1827,1829,1830,1832,1833,1836],[1480,1529,1546,1547,1812,1817,1818,1819,1820,1824,1828,1830,1832],[1480,1529,1546,1547,1817,1819,1825,1828],[1480,1529,1546,1547,1817,1825,1826,1828,1836],[1480,1529,1546,1547,1817,1818,1819,1825,1828,1830,1832],[1480,1529,1546,1547,1811,1817,1818,1819,1825,1828,1830,1831],[1480,1529,1546,1547,1812,1815,1817,1818,1819,1820,1825,1828,1829,1831,1832],[1480,1529,1546,1547,1811,1814,1836],[1480,1529,1543,1544,1545,1546,1547,1817],[1480,1529,1546,1547,1817,1818,1830],[1480,1529,1543,1544,1545,1546,1547],[1480,1529,1543,1544,1546,1547],[1480,1529,1543,1546,1547,1561],[1480,1529,1540,1546,1547,1577,1821,1822,1823],[75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,131,132,133,134,135,136,137,138,139,140,141,142,144,145,146,147,148,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,194,195,196,198,207,209,210,211,212,213,214,216,217,219,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,1480,1529,1546,1547],[120,1480,1529,1546,1547],[78,79,1480,1529,1546,1547],[75,76,77,79,1480,1529,1546,1547],[76,79,1480,1529,1546,1547],[79,120,1480,1529,1546,1547],[75,79,197,1480,1529,1546,1547],[77,78,79,1480,1529,1546,1547],[75,79,1480,1529,1546,1547],[79,1480,1529,1546,1547],[78,1480,1529,1546,1547],[75,78,120,1480,1529,1546,1547],[76,78,79,236,1480,1529,1546,1547],[78,79,236,1480,1529,1546,1547],[78,244,1480,1529,1546,1547],[76,78,79,1480,1529,1546,1547],[88,1480,1529,1546,1547],[111,1480,1529,1546,1547],[132,1480,1529,1546,1547],[78,79,120,1480,1529,1546,1547],[79,127,1480,1529,1546,1547],[78,79,120,138,1480,1529,1546,1547],[78,79,138,1480,1529,1546,1547],[79,179,1480,1529,1546,1547],[75,79,198,1480,1529,1546,1547],[204,206,1480,1529,1546,1547],[75,79,197,204,205,1480,1529,1546,1547],[197,198,206,1480,1529,1546,1547],[204,1480,1529,1546,1547],[75,79,204,205,206,1480,1529,1546,1547],[220,1480,1529,1546,1547],[215,1480,1529,1546,1547],[218,1480,1529,1546,1547],[76,78,198,199,200,201,1480,1529,1546,1547],[120,198,199,200,201,1480,1529,1546,1547],[198,200,1480,1529,1546,1547],[78,199,200,202,203,207,1480,1529,1546,1547],[75,78,1480,1529,1546,1547],[79,222,1480,1529,1546,1547],[80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,121,122,123,124,125,126,128,129,130,131,132,133,134,135,136,137,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,1480,1529,1546,1547],[208,1480,1529,1546,1547],[1480,1529,1546,1547,1561,1579,1580],[1480,1529,1546,1547,1731],[1480,1529,1540,1546,1547],[1480,1529,1546,1547,1731,1732],[1480,1529,1546,1547,1727],[1480,1529,1546,1547,1729,1733,1734],[1480,1529,1543,1546,1547,1726,1728,1729,1736,1738],[1480,1529,1543,1544,1545,1546,1547,1726,1728,1729,1733,1734,1735,1736,1737],[1480,1529,1546,1547,1729,1730,1733,1735,1736,1738],[1480,1529,1543,1546,1547,1555],[1480,1529,1543,1546,1547,1726,1728,1729,1730,1733,1734,1735,1737],[1480,1529,1540,1546,1547,1579],[1480,1529,1540,1546,1547,1577],[436,560,1480,1529,1546,1547],[631,632,1480,1529,1546,1547],[607,1480,1529,1546,1547],[444,464,558,561,562,563,564,565,611,631,1480,1529,1546,1547],[435,464,500,509,532,547,551,553,554,556,558,559,560,561,564,571,572,573,607,608,609,610,633,1480,1529,1546,1547],[575,576,577,578,580,581,582,583,585,586,588,590,591,593,595,596,606,1480,1529,1546,1547],[607,611,1480,1529,1546,1547],[767,1480,1529,1546,1547],[616,632,1480,1529,1546,1547],[744,1480,1529,1546,1547],[764,1480,1529,1546,1547],[455,468,469,615,711,712,713,714,715,716,1480,1529,1546,1547],[469,1480,1529,1546,1547],[455,469,1480,1529,1546,1547],[720,721,722,1480,1529,1546,1547],[729,1480,1529,1546,1547],[455,727,1480,1529,1546,1547],[756,1480,1529,1546,1547],[745,1480,1529,1546,1547],[442,1480,1529,1546,1547],[442,455,468,1480,1529,1546,1547],[439,1480,1529,1546,1547],[430,1480,1529,1546,1547],[430,431,432,1480,1529,1546,1547],[510,1480,1529,1546,1547],[625,1480,1529,1546,1547],[455,1480,1529,1546,1547],[614,1480,1529,1546,1547],[500,612,1480,1529,1546,1547],[442,455,1480,1529,1546,1547],[626,627,1480,1529,1546,1547],[433,632,1480,1529,1546,1547],[500,1480,1529,1546,1547],[502,503,1480,1529,1546,1547],[431,1480,1529,1546,1547],[431,432,435,438,455,463,472,478,493,509,510,512,514,516,524,551,558,560,566,567,568,569,570,1480,1529,1546,1547],[549,1480,1529,1546,1547],[566,574,1480,1529,1546,1547],[566,1480,1529,1546,1547],[1480,1529,1546,1547,1569],[551,566,579,1480,1529,1546,1547],[447,566,1480,1529,1546,1547],[438,445,447,463,514,516,521,522,523,524,548,550,551,553,560,611,1480,1529,1546,1547],[445,446,1480,1529,1537,1546,1547,1549,1569],[551,566,584,1480,1529,1546,1547],[566,587,1480,1529,1546,1547],[551,566,589,1480,1529,1546,1547],[566,592,1480,1529,1546,1547],[551,566,594,1480,1529,1546,1547],[597,598,599,600,601,602,603,604,1480,1529,1546,1547],[551,558,566,605,1480,1529,1546,1547],[435,447,449,453,454,481,482,484,488,500,525,526,527,529,530,531,532,554,556,557,558,560,611,633,1480,1529,1546,1547],[435,447,450,454,472,481,482,484,488,509,533,534,552,559,611,633,1480,1529,1546,1547],[559,560,611,1480,1529,1546,1547],[630,1480,1529,1546,1547],[616,633,1480,1529,1546,1547],[442,455,615,617,1480,1529,1546,1547],[631,1480,1529,1546,1547],[439,440,500,504,612,613,618,619,620,621,622,623,624,628,629,1480,1529,1546,1547],[429,430,431,432,625,626,627,633,1480,1529,1546,1547],[649,1480,1529,1546,1547],[509,649,1480,1529,1546,1547],[444,455,472,649,1480,1529,1546,1547],[633,649,1480,1529,1546,1547],[573,649,1480,1529,1546,1547],[474,649,1480,1529,1546,1547],[474,509,649,1480,1529,1546,1547],[435,649,1480,1529,1546,1547],[649,653,1480,1529,1546,1547],[571,649,1480,1529,1546,1547],[649,650,651,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,1480,1529,1546,1547],[443,1480,1529,1546,1547],[453,1480,1529,1546,1547],[449,450,451,452,1480,1529,1546,1547],[435,441,442,1480,1529,1546,1547],[447,1480,1529,1546,1547],[435,453,454,474,500,509,555,1480,1529,1546,1547],[443,447,448,1480,1529,1546,1547],[533,1480,1529,1546,1547],[435,453,1480,1529,1546,1547],[443,448,1480,1529,1546,1547],[435,443,1480,1529,1546,1547],[646,1480,1529,1546,1547],[68,433,435,437,438,439,441,442,443,444,448,449,450,451,452,453,454,455,462,463,464,469,474,475,476,480,481,482,483,484,485,488,489,490,492,494,500,509,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,532,537,538,539,540,541,542,543,544,545,546,547,551,553,554,555,556,559,560,562,564,565,571,572,573,607,611,614,618,619,622,625,627,628,630,631,632,633,647,648,710,717,718,719,723,724,725,726,728,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,757,758,759,760,761,762,763,765,766,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,801,803,804,1480,1529,1546,1547],[435,560,564,565,1480,1529,1546,1547],[560,564,790,1480,1529,1546,1547],[560,564,565,790,1480,1529,1546,1547],[435,560,1480,1529,1546,1547],[564,1480,1529,1546,1547],[469,470,1480,1529,1546,1547],[459,1480,1529,1546,1547],[430,431,432,434,634,1480,1529,1546,1547],[637,1480,1529,1546,1547],[456,457,460,465,471,501,504,505,507,511,635,636,637,638,639,640,641,642,643,644,645,1480,1529,1546,1547],[429,433,434,634,1480,1529,1546,1547],[439,440,500,612,1480,1529,1546,1547],[464,505,509,1480,1529,1546,1547],[435,442,455,467,471,474,509,611,1480,1529,1546,1547],[456,458,461,466,472,474,509,512,611,1480,1529,1546,1547],[435,459,460,467,509,1480,1529,1546,1547],[435,439,440,458,461,466,467,472,473,474,500,501,502,503,504,506,508,512,560,611,1480,1529,1546,1547],[430,464,507,509,1480,1529,1546,1547],[430,431,432,464,472,509,1480,1529,1546,1547],[464,467,472,509,510,511,1480,1529,1546,1547],[435,457,474,500,509,1480,1529,1546,1547],[429,430,431,432,434,435,467,472,473,509,635,1480,1529,1546,1547],[430,464,465,467,472,509,1480,1529,1546,1547],[472,1480,1529,1546,1547],[633,1480,1529,1546,1547],[572,1480,1529,1546,1547],[560,573,611,1480,1529,1546,1547],[560,1480,1529,1546,1547],[464,524,1480,1529,1546,1547],[463,524,1480,1529,1546,1547],[435,472,474,509,652,1480,1529,1546,1547],[472,474,653,1480,1529,1546,1547],[444,1480,1529,1540,1541,1546,1547,1561],[509,1480,1529,1546,1547],[475,1480,1529,1546,1547],[435,475,476,484,494,560,611,633,1480,1529,1546,1547],[435,476,478,1480,1529,1546,1547],[435,472,482,487,488,494,500,633,1480,1529,1546,1547],[474,477,498,509,611,1480,1529,1546,1547],[476,1480,1529,1546,1547],[435,439,472,476,477,479,482,483,485,486,489,490,491,492,493,498,500,509,560,611,633,1480,1529,1546,1547],[435,439,472,474,477,478,479,491,494,495,496,497,499,509,611,1480,1529,1546,1547],[435,1480,1529,1546,1547],[435,474,500,560,611,1480,1529,1546,1547],[435,494,1480,1529,1546,1547],[435,439,445,449,450,451,452,454,474,475,476,494,496,497,498,499,509,560,633,1480,1529,1546,1547],[435,439,475,476,481,494,560,611,633,1480,1529,1546,1547],[435,439,475,476,481,482,494,560,611,1480,1529,1546,1547],[435,476,1480,1529,1546,1547],[474,498,500,509,1480,1529,1546,1547],[480,1480,1529,1546,1547],[435,480,1480,1529,1546,1547],[435,509,1480,1529,1546,1547],[435,438,445,463,480,514,516,521,522,523,524,548,550,551,558,559,611,1480,1529,1546,1547],[435,447,449,453,454,481,482,484,488,500,525,526,527,529,530,531,532,612,633,1480,1529,1546,1547],[435,447,453,454,500,532,533,534,553,560,1480,1529,1546,1547],[435,447,449,453,454,481,482,484,488,500,525,526,527,529,530,531,559,560,633,805,1480,1529,1546,1547],[435,500,532,555,1480,1529,1546,1547],[528,1480,1529,1546,1547],[478,487,528,1480,1529,1546,1547],[437,463,472,509,524,550,560,567,611,1480,1529,1546,1547],[550,1480,1529,1546,1547],[437,513,515,517,518,519,1480,1529,1546,1547],[438,509,514,516,520,521,522,523,571,1480,1529,1546,1547],[506,518,1480,1529,1546,1547],[437,1480,1529,1546,1547],[508,519,1480,1529,1546,1547],[473,515,571,1480,1529,1546,1547],[510,512,513,1480,1529,1546,1547],[466,517,1480,1529,1546,1547],[462,500,509,514,571,612,1480,1529,1546,1547],[435,472,474,509,535,547,560,1480,1529,1546,1547],[537,538,539,540,541,542,543,544,545,546,1480,1529,1546,1547],[435,509,536,1480,1529,1546,1547],[509,536,1480,1529,1546,1547],[435,536,1480,1529,1546,1547],[541,1480,1529,1546,1547],[536,1480,1529,1546,1547],[435,472,474,509,536,1480,1529,1546,1547],[438,443,448,463,472,476,483,485,486,489,490,492,500,509,514,516,521,522,523,524,549,553,608,612,631,653,795,796,800,1480,1529,1546,1547],[509,559,802,1480,1529,1546,1547],[1480,1526,1527,1529,1546,1547],[1480,1528,1529,1546,1547],[1529,1546,1547],[1480,1529,1534,1546,1547,1564],[1480,1529,1530,1535,1540,1546,1547,1549,1561,1572],[1480,1529,1530,1531,1540,1546,1547,1549],[1475,1476,1477,1480,1529,1546,1547],[1480,1529,1532,1546,1547,1573],[1480,1529,1533,1534,1541,1546,1547,1550],[1480,1529,1534,1546,1547,1561,1569],[1480,1529,1535,1537,1540,1546,1547,1549],[1480,1528,1529,1536,1546,1547],[1480,1529,1537,1538,1546,1547],[1480,1529,1539,1540,1546,1547],[1480,1528,1529,1540,1546,1547],[1480,1529,1540,1541,1542,1546,1547,1561,1572],[1480,1529,1540,1541,1542,1546,1547,1556,1561,1564],[1480,1521,1529,1537,1540,1543,1546,1547,1549,1561,1572],[1480,1529,1540,1541,1543,1544,1546,1547,1549,1561,1569,1572],[1480,1529,1543,1545,1546,1547,1561,1569,1572],[1478,1479,1480,1481,1482,1483,1484,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578],[1480,1529,1546,1547,1548,1572],[1480,1529,1537,1540,1546,1547,1549,1561],[1480,1529,1546,1547,1550],[1480,1529,1546,1547,1551],[1480,1528,1529,1546,1547,1552],[1480,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578],[1480,1529,1546,1547,1554],[1480,1529,1546,1547,1555],[1480,1529,1540,1546,1547,1556,1557],[1480,1529,1546,1547,1556,1558,1573,1575],[1480,1529,1541,1546,1547],[1480,1529,1540,1546,1547,1561,1562,1564],[1480,1529,1546,1547,1563,1564],[1480,1529,1546,1547,1561,1562],[1480,1529,1546,1547,1564],[1480,1529,1546,1547,1565],[1480,1526,1529,1546,1547,1561,1566,1572],[1480,1529,1540,1546,1547,1567,1568],[1480,1529,1546,1547,1567,1568],[1480,1529,1534,1546,1547,1549,1561,1569],[1480,1529,1546,1547,1570],[1480,1529,1546,1547,1549,1571],[1480,1529,1543,1546,1547,1555,1572],[1480,1529,1534,1546,1547,1573],[1480,1529,1546,1547,1561,1574],[1480,1529,1546,1547,1548,1575],[1480,1529,1546,1547,1576],[1480,1521,1529,1546,1547],[1480,1521,1529,1540,1542,1546,1547,1552,1561,1564,1572,1574,1575,1577],[1480,1529,1546,1547,1561,1578],[1480,1493,1497,1529,1546,1547,1572],[1480,1493,1529,1546,1547,1561,1572],[1480,1488,1529,1546,1547],[1480,1490,1493,1529,1546,1547,1569,1572],[1480,1529,1546,1547,1549,1569],[1480,1529,1546,1547,1579],[1480,1488,1529,1546,1547,1579],[1480,1490,1493,1529,1546,1547,1549,1572],[1480,1485,1486,1489,1492,1529,1540,1546,1547,1561,1572],[1480,1493,1500,1529,1546,1547],[1480,1485,1491,1529,1546,1547],[1480,1493,1514,1515,1529,1546,1547],[1480,1489,1493,1529,1546,1547,1564,1572,1579],[1480,1514,1529,1546,1547,1579],[1480,1487,1488,1529,1546,1547,1579],[1480,1493,1529,1546,1547],[1480,1487,1488,1489,1490,1491,1492,1493,1494,1495,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1515,1516,1517,1518,1519,1520,1529,1546,1547],[1480,1493,1508,1529,1546,1547],[1480,1493,1500,1501,1529,1546,1547],[1480,1491,1493,1501,1502,1529,1546,1547],[1480,1492,1529,1546,1547],[1480,1485,1488,1493,1529,1546,1547],[1480,1493,1497,1501,1502,1529,1546,1547],[1480,1497,1529,1546,1547],[1480,1491,1493,1496,1529,1546,1547,1572],[1480,1485,1490,1493,1500,1529,1546,1547],[1480,1529,1546,1547,1561],[1480,1488,1493,1514,1529,1546,1547,1577,1579],[428,814,864,865,866,868,869,870,871,872,1473,1474,1480,1529,1546,1547,1582,1739,1740,1741,1743,1744,1745,1746,1747,1749,1750,1751,1752,1753,1754,1755],[863,1480,1529,1546,1547],[68,863,1480,1529,1546,1547,1707,1756,1850,1851],[428,805,814,863,868,871,872,1473,1474,1480,1529,1537,1546,1547,1549,1582,1740,1743,1744,1745,1746,1747,1748],[428,805,814,868,1480,1529,1534,1546,1547,1573],[428,805,814,868,1474,1480,1529,1546,1547,1582,1739,1740],[428,1480,1529,1546,1547,1549],[428,805,814,868,1473,1480,1529,1546,1547,1744],[428,805,814,865,868,872,1480,1529,1546,1547,1740,1742],[428,805,814,868,1480,1529,1546,1547,1581],[428,864,1480,1529,1546,1547],[428,805,814,868,1480,1529,1546,1547,1739],[428,805,814,868,1472,1480,1529,1546,1547],[428,869,1480,1529,1546,1547],[428,864,867,1480,1529,1546,1547],[428,805,814,865,866,867,868,870,872,1473,1480,1529,1546,1547,1549,1739,1741,1742,1743],[428,1480,1529,1537,1546,1547],[1480,1529,1546,1547,1709,1738],[428,805,868,1480,1529,1546,1547],[428,805,814,864,865,868,1474,1480,1529,1546,1547,1582,1739],[428,805,814,868,871,1480,1529,1546,1547]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"785921608325fa246b450f05b238f4b3ed659f1099af278ce9ebbc9416a13f1d","impliedFormat":1},{"version":"8d6d51a5118d000ed3bfe6e1dd1335bebfff3fef23cd2af2f84a24d30f90cc90","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d8dedbec739bc79642c1e96e9bfc0b83b25b104a0486aebf016fc7b85b39f48","impliedFormat":99},{"version":"e89535c3ec439608bcd0f68af555d0e5ddf121c54abe69343549718bd7506b9c","impliedFormat":99},{"version":"622a984b60c294ffb2f9152cf1d4d12e91d2b733d820eec949cf54d63a3c1025","impliedFormat":99},{"version":"81aae92abdeaccd9c1723cef39232c90c1aed9d9cf199e6e2a523b7d8e058a11","impliedFormat":99},{"version":"a63a6c6806a1e519688ef7bd8ca57be912fc0764485119dbd923021eb4e79665","impliedFormat":99},{"version":"ac8318938c441b7d6e6e824785c697c55bad38404b8000a4a5925aeb17f14f54","impliedFormat":99},{"version":"073ca26c96184db9941b5ec0ddea6981c9b816156d9095747809e524fdd90e35","impliedFormat":1},{"version":"e41d17a2ec23306d953cda34e573ed62954ca6ea9b8c8b74e013d07a6886ce47","impliedFormat":1},{"version":"241bd4add06f06f0699dcd58f3b334718d85e3045d9e9d4fa556f11f4d1569c1","impliedFormat":1},{"version":"2ae3787e1498b20aad1b9c2ee9ea517ec30e89b70d242d8e3e52d1e091039695","impliedFormat":1},{"version":"c7c72c4cffb1bc83617eefed71ed68cc89df73cab9e19507ccdecb3e72b4967e","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bff8a60af0173430b18d9c3e5c443eaa3c515617210c0c7b3d2e1743c19ecb","impliedFormat":1},{"version":"38b38db08e7121828294dec10957a7a9ff263e33e2a904b346516d4a4acca482","impliedFormat":1},{"version":"a76ebdf2579e68e4cfe618269c47e5a12a4e045c2805ed7f7ab37af8daa6b091","impliedFormat":1},{"version":"8a2aaea564939c22be05d665cc955996721bad6d43148f8fa21ae8f64afecd37","impliedFormat":1},{"version":"e59d36b7b6e8ba2dd36d032a5f5c279d2460968c8b4e691ca384f118fb09b52a","impliedFormat":1},{"version":"e96885c0684c9042ec72a9a43ef977f6b4b4a2728f4b9e737edcbaa0c74e5bf6","impliedFormat":1},{"version":"95950a187596e206d32d5d9c7b932901088c65ed8f9040e614aa8e321e0225ef","impliedFormat":1},{"version":"89e061244da3fc21b7330f4bd32f47c1813dd4d7f1dc3d0883d88943f035b993","impliedFormat":1},{"version":"e46558c2e04d06207b080138678020448e7fc201f3d69c2601b0d1456105f29a","impliedFormat":1},{"version":"71549375db52b1163411dba383b5f4618bdf35dc57fa327a1c7d135cf9bf67d1","impliedFormat":1},{"version":"7e6b2d61d6215a4e82ea75bc31a80ebb8ad0c2b37a60c10c70dd671e8d9d6d5d","impliedFormat":1},{"version":"78bea05df2896083cca28ed75784dde46d4b194984e8fc559123b56873580a23","impliedFormat":1},{"version":"5dd04ced37b7ea09f29d277db11f160df7fd73ba8b9dba86cb25552e0653a637","impliedFormat":1},{"version":"f74b81712e06605677ae1f061600201c425430151f95b5ef4d04387ad7617e6a","impliedFormat":1},{"version":"9a72847fcf4ac937e352d40810f7b7aec7422d9178451148296cf1aa19467620","impliedFormat":1},{"version":"3ae18f60e0b96fa1e025059b7d25b3247ba4dcb5f4372f6d6e67ce2adac74eac","impliedFormat":1},{"version":"2b9260f44a2e071450ae82c110f5dc8f330c9e5c3e85567ed97248330f2bf639","impliedFormat":1},{"version":"4f196e13684186bda6f5115fc4677a87cf84a0c9c4fc17b8f51e0984f3697b6d","impliedFormat":1},{"version":"61419f2c5822b28c1ea483258437c1faab87d00c6f84481aa22afb3380d8e9a4","impliedFormat":1},{"version":"64479aee03812264e421c0bf5104a953ca7b02740ba80090aead1330d0effe91","impliedFormat":1},{"version":"0521108c9f8ddb17654a0a54dae6ba9667c99eddccfd6af5748113e022d1c37a","impliedFormat":1},{"version":"c5570e504be103e255d80c60b56c367bf45d502ca52ee35c55dec882f6563b5c","impliedFormat":1},{"version":"ee764e6e9a7f2b987cc1a2c0a9afd7a8f4d5ebc4fdb66ad557a7f14a8c2bd320","impliedFormat":1},{"version":"0520b5093712c10c6ef23b5fea2f833bf5481771977112500045e5ea7e8e2b69","impliedFormat":1},{"version":"5c3cf26654cf762ac4d7fd7b83f09acfe08eef88d2d6983b9a5a423cb4004ca3","impliedFormat":1},{"version":"e60fa19cf7911c1623b891155d7eb6b7e844e9afdf5738e3b46f3b687730a2bd","impliedFormat":1},{"version":"b1fd72ff2bb0ba91bb588f3e5329f8fc884eb859794f1c4657a2bfa122ae54d0","impliedFormat":1},{"version":"6cf42a4f3cfec648545925d43afaa8bb364ac10a839ffed88249da109361b275","impliedFormat":1},{"version":"d7058e75920120b142a9d57be25562a3cd9a936269fd52908505f530105f2ec4","impliedFormat":1},{"version":"6df52b70d7f7702202f672541a5f4a424d478ee5be51a9d37b8ccbe1dbf3c0f2","impliedFormat":1},{"version":"0ca7f997e9a4d8985e842b7c882e521b6f63233c4086e9fe79dd7a9dc4742b5e","impliedFormat":1},{"version":"91046b5c6b55d3b194c81fd4df52f687736fad3095e9d103ead92bb64dc160ee","impliedFormat":1},{"version":"db5704fdad56c74dfc5941283c1182ed471bd17598209d3ac4a49faa72e43cfc","impliedFormat":1},{"version":"758e8e89559b02b81bc0f8fd395b17ad5aff75490c862cbe369bb1a3d1577c40","impliedFormat":1},{"version":"2ee64342c077b1868f1834c063f575063051edd6e2964257d34aad032d6b657c","impliedFormat":1},{"version":"6f6b4b3d670b6a5f0e24ea001c1b3d36453c539195e875687950a178f1730fa7","impliedFormat":1},{"version":"a472a1d3f25ce13a1d44911cd3983956ac040ce2018e155435ea34afb25f864c","impliedFormat":1},{"version":"b48b83a86dd9cfe36f8776b3ff52fcd45b0e043c0538dc4a4b149ba45fe367b9","impliedFormat":1},{"version":"792de5c062444bd2ee0413fb766e57e03cce7cdaebbfc52fc0c7c8e95069c96b","impliedFormat":1},{"version":"a79e3e81094c7a04a885bad9b049c519aace53300fb8a0fe4f26727cb5a746ce","impliedFormat":1},{"version":"93181bac0d90db185bb730c95214f6118ae997fe836a98a49664147fbcaf1988","impliedFormat":1},{"version":"8a4e89564d8ea66ad87ee3762e07540f9f0656a62043c910d819b4746fc429c5","impliedFormat":1},{"version":"b9011d99942889a0f95e120d06b698c628b0b6fdc3e6b7ecb459b97ed7d5bcc6","impliedFormat":1},{"version":"4d639cbbcc2f8f9ce6d55d5d503830d6c2556251df332dc5255d75af53c8a0e7","impliedFormat":1},{"version":"cdb48277f600ab5f429ecf1c5ea046683bc6b9f73f3deab9a100adac4b34969c","impliedFormat":1},{"version":"75be84956a29040a1afbe864c0a7a369dfdb739380072484eff153905ef867ee","impliedFormat":1},{"version":"b06b4adc2ae03331a92abd1b19af8eb91ec2bf8541747ee355887a167d53145e","impliedFormat":1},{"version":"c54166a85bd60f86d1ebb90ce0117c0ecb850b8a33b366691629fdf26f1bbbd8","impliedFormat":1},{"version":"0d417c15c5c635384d5f1819cc253a540fe786cc3fda32f6a2ae266671506a21","impliedFormat":1},{"version":"80f23f1d60fbed356f726b3b26f9d348dddbb34027926d10d59fad961e70a730","impliedFormat":1},{"version":"cb59317243a11379a101eb2f27b9df1022674c3df1df0727360a0a3f963f523b","impliedFormat":1},{"version":"cc20bb2227dd5de0aab0c8d697d1572f8000550e62c7bf5c92f212f657dd88c5","impliedFormat":1},{"version":"06b8a7d46195b6b3980e523ef59746702fd210b71681a83a5cf73799623621f9","impliedFormat":1},{"version":"860e4405959f646c101b8005a191298b2381af8f33716dc5f42097e4620608f8","impliedFormat":1},{"version":"f7e32adf714b8f25d3c1783473abec3f2e82d5724538d8dcf6f51baaaff1ca7a","impliedFormat":1},{"version":"d0da80c845999a16c24d0783033fb5366ada98df17867c98ad433ede05cd87fd","impliedFormat":1},{"version":"bfbf80f9cd4558af2d7b2006065340aaaced15947d590045253ded50aabb9bc5","impliedFormat":1},{"version":"fd9a991b51870325e46ebb0e6e18722d313f60cd8e596e645ec5ac15b96dbf4e","impliedFormat":1},{"version":"c3bd2b94e4298f81743d92945b80e9b56c1cdfb2bef43c149b7106a2491b1fc9","impliedFormat":1},{"version":"a246cce57f558f9ebaffd55c1e5673da44ea603b4da3b2b47eb88915d30a9181","impliedFormat":1},{"version":"d993eacc103c5a065227153c9aae8acea3a4322fe1a169ee7c70b77015bf0bb2","impliedFormat":1},{"version":"fc2b03d0c042aa1627406e753a26a1eaad01b3c496510a78016822ef8d456bb6","impliedFormat":1},{"version":"063c7ebbe756f0155a8b453f410ca6b76ffa1bbc1048735bcaf9c7c81a1ce35f","impliedFormat":1},{"version":"314e402cd481370d08f63051ae8b8c8e6370db5ee3b8820eeeaaf8d722a6dac6","impliedFormat":1},{"version":"9669075ac38ce36b638b290ba468233980d9f38bdc62f0519213b2fd3e2552ec","impliedFormat":1},{"version":"4d123de012c24e2f373925100be73d50517ac490f9ed3578ac82d0168bfbd303","impliedFormat":1},{"version":"656c9af789629aa36b39092bee3757034009620439d9a39912f587538033ce28","impliedFormat":1},{"version":"3ac3f4bdb8c0905d4c3035d6f7fb20118c21e8a17bee46d3735195b0c2a9f39f","impliedFormat":1},{"version":"1f453e6798ed29c86f703e9b41662640d4f2e61337007f27ac1c616f20093f69","impliedFormat":1},{"version":"af43b7871ff21c62bf1a54ec5c488e31a8d3408d5b51ff2e9f8581b6c55f2fc7","impliedFormat":1},{"version":"70550511d25cbb0b6a64dcac7fffc3c1397fd4cbeb6b23ccc7f9b794ab8a6954","impliedFormat":1},{"version":"af0fbf08386603a62f2a78c42d998c90353b1f1d22e05a384545f7accf881e0a","impliedFormat":1},{"version":"cefc20054d20b85b534206dbcedd509bb74f87f3d8bc45c58c7be3a76caa45e1","impliedFormat":1},{"version":"ad6eee4877d0f7e5244d34bc5026fd6e9cf8e66c5c79416b73f9f6ebf132f924","impliedFormat":1},{"version":"4888fd2bcfee9a0ce89d0df860d233e0cee8ee9c479b6bd5a5d5f9aae98342fe","impliedFormat":1},{"version":"f4749c102ced952aa6f40f0b579865429c4869f6d83df91000e98005476bee87","impliedFormat":1},{"version":"56654d2c5923598384e71cb808fac2818ca3f07dd23bb018988a39d5e64f268b","impliedFormat":1},{"version":"8b6719d3b9e65863da5390cb26994602c10a315aa16e7d70778a63fee6c4c079","impliedFormat":1},{"version":"05f56cd4b929977d18df8f3d08a4c929a2592ef5af083e79974b20a063f30940","impliedFormat":1},{"version":"547d3c406a21b30e2b78629ecc0b2ddaf652d9e0bdb2d59ceebce5612906df33","impliedFormat":1},{"version":"b3a4f9385279443c3a5568ec914a9492b59a723386161fd5ef0619d9f8982f97","impliedFormat":1},{"version":"3fe66aba4fbe0c3ba196a4f9ed2a776fe99dc4d1567a558fb11693e9fcc4e6ed","impliedFormat":1},{"version":"140eef237c7db06fc5adcb5df434ee21e81ee3a6fd57e1a75b8b3750aa2df2d8","impliedFormat":1},{"version":"0944ec553e4744efae790c68807a461720cff9f3977d4911ac0d918a17c9dd99","impliedFormat":1},{"version":"cb46b38d5e791acaa243bf342b8b5f8491639847463ac965b93896d4fb0af0d9","impliedFormat":1},{"version":"7c7d9e116fe51100ff766703e6b5e4424f51ad8977fe474ddd8d0959aa6de257","impliedFormat":1},{"version":"af70a2567e586be0083df3938b6a6792e6821363d8ef559ad8d721a33a5bcdaf","impliedFormat":1},{"version":"006cff3a8bcb92d77953f49a94cd7d5272fef4ab488b9052ef82b6a1260d870b","impliedFormat":1},{"version":"7d44bfdc8ee5e9af70738ff652c622ae3ad81815e63ab49bdc593d34cb3a68e5","impliedFormat":1},{"version":"339814517abd4dbc7b5f013dfd3b5e37ef0ea914a8bbe65413ecffd668792bc6","impliedFormat":1},{"version":"34d5bc0a6958967ec237c99f980155b5145b76e6eb927c9ffc57d8680326b5d8","impliedFormat":1},{"version":"9eae79b70c9d8288032cbe1b21d0941f6bd4f315e14786b2c1d10bccc634e897","impliedFormat":1},{"version":"18ce015ed308ea469b13b17f99ce53bbb97975855b2a09b86c052eefa4aa013a","impliedFormat":1},{"version":"5a931bc4106194e474be141e0bc1046629510dc95b9a0e4b02a3783847222965","impliedFormat":1},{"version":"5e5f371bf23d5ced2212a5ff56675aefbd0c9b3f4d4fdda1b6123ac6e28f058c","impliedFormat":1},{"version":"907c17ad5a05eecb29b42b36cc8fec6437be27cc4986bb3a218e4f74f606911c","impliedFormat":1},{"version":"ce60a562cd2a92f37a88f2ddd99a3abfbc5848d7baf38c48fb8d3243701fcb75","impliedFormat":1},{"version":"a726ad2d0a98bfffbe8bc1cd2d90b6d831638c0adc750ce73103a471eb9a891c","impliedFormat":1},{"version":"f44c0c8ce58d3dacac016607a1a90e5342d830ea84c48d2e571408087ae55894","impliedFormat":1},{"version":"75a315a098e630e734d9bc932d9841b64b30f7a349a20cf4717bf93044eff113","impliedFormat":1},{"version":"9131d95e32b3d4611d4046a613e022637348f6cebfe68230d4e81b691e4761a1","impliedFormat":1},{"version":"b03aa292cfdcd4edc3af00a7dbd71136dd067ec70a7536b655b82f4dd444e857","impliedFormat":1},{"version":"b6e2b0448ced813b8c207810d96551a26e7d7bb73255eea4b9701698f78846d6","impliedFormat":1},{"version":"8ae10cd85c1bd94d2f2d17c4cbd25c068a4b2471c70c2d96434239f97040747a","impliedFormat":1},{"version":"9ed5b799c50467b0c9f81ddf544b6bcda3e34d92076d6cab183c84511e45c39f","impliedFormat":1},{"version":"b4fa87cc1833839e51c49f20de71230e259c15b2c9c3e89e4814acc1d1ef10de","impliedFormat":1},{"version":"e90ac9e4ac0326faa1bc39f37af38ace0f9d4a655cd6d147713c653139cf4928","impliedFormat":1},{"version":"ea27110249d12e072956473a86fd1965df8e1be985f3b686b4e277afefdde584","impliedFormat":1},{"version":"8776a368617ce51129b74db7d55c3373dadcce5d0701e61d106e99998922a239","impliedFormat":1},{"version":"5666075052877fe2fdddd5b16de03168076cf0f03fbca5c1d4a3b8f43cba570c","impliedFormat":1},{"version":"9108ab5af05418f599ab48186193b1b07034c79a4a212a7f73535903ba4ca249","impliedFormat":1},{"version":"bb4e2cdcadf9c9e6ee2820af23cee6582d47c9c9c13b0dca1baaffe01fbbcb5f","impliedFormat":1},{"version":"6e30d0b5a1441d831d19fe02300ab3d83726abd5141cbcc0e2993fa0efd33db4","impliedFormat":1},{"version":"423f28126b2fc8d8d6fa558035309000a1297ed24473c595b7dec52e5c7ebae5","impliedFormat":1},{"version":"fb30734f82083d4790775dae393cd004924ebcbfde49849d9430bf0f0229dd16","impliedFormat":1},{"version":"2c92b04a7a4a1cd9501e1be338bf435738964130fb2ad5bd6c339ee41224ac4c","impliedFormat":1},{"version":"c5c5f0157b41833180419dacfbd2bcce78fb1a51c136bd4bcba5249864d8b9b5","impliedFormat":1},{"version":"02ae43d5bae42efcd5a00d3923e764895ce056bca005a9f4e623aa6b4797c8af","impliedFormat":1},{"version":"db6e01f17012a9d7b610ae764f94a1af850f5d98c9c826ad61747dca0fb800bd","impliedFormat":1},{"version":"8a44b424edee7bb17dc35a558cc15f92555f14a0441205613e0e50452ab3a602","impliedFormat":1},{"version":"24a00d0f98b799e6f628373249ece352b328089c3383b5606214357e9107e7d5","impliedFormat":1},{"version":"33637e3bc64edd2075d4071c55d60b32bdb0d243652977c66c964021b6fc8066","impliedFormat":1},{"version":"0f0ad9f14dedfdca37260931fac1edf0f6b951c629e84027255512f06a6ebc4c","impliedFormat":1},{"version":"16ad86c48bf950f5a480dc812b64225ca4a071827d3d18ffc5ec1ae176399e36","impliedFormat":1},{"version":"8cbf55a11ff59fd2b8e39a4aa08e25c5ddce46e3af0ed71fb51610607a13c505","impliedFormat":1},{"version":"d5bc4544938741f5daf8f3a339bfbf0d880da9e89e79f44a6383aaf056fe0159","impliedFormat":1},{"version":"97f9169882d393e6f303f570168ca86b5fe9aab556e9a43672dae7e6bb8e6495","impliedFormat":1},{"version":"7c9adb3fcd7851497818120b7e151465406e711d6a596a71b807f3a17853cb58","impliedFormat":1},{"version":"6752d402f9282dd6f6317c8c048aaaac27295739a166eed27e00391b358fed9a","impliedFormat":1},{"version":"9fd7466b77020847dbc9d2165829796bf7ea00895b2520ff3752ffdcff53564b","impliedFormat":1},{"version":"fbfc12d54a4488c2eb166ed63bab0fb34413e97069af273210cf39da5280c8d6","impliedFormat":1},{"version":"85a84240002b7cf577cec637167f0383409d086e3c4443852ca248fc6e16711e","impliedFormat":1},{"version":"84794e3abd045880e0fadcf062b648faf982aa80cfc56d28d80120e298178626","impliedFormat":1},{"version":"053d8b827286a16a669a36ffc8ccc8acdf8cc154c096610aa12348b8c493c7b8","impliedFormat":1},{"version":"3cce4ce031710970fe12d4f7834375f5fd455aa129af4c11eb787935923ff551","impliedFormat":1},{"version":"8f62cbd3afbd6a07bb8c934294b6bfbe437021b89e53a4da7de2648ecfc7af25","impliedFormat":1},{"version":"62c3621d34fb2567c17a2c4b89914ebefbfbd1b1b875b070391a7d4f722e55dc","impliedFormat":1},{"version":"c05ac811542e0b59cb9c2e8f60e983461f0b0e39cea93e320fad447ff8e474f3","impliedFormat":1},{"version":"8e7a5b8f867b99cc8763c0b024068fb58e09f7da2c4810c12833e1ca6eb11c4f","impliedFormat":1},{"version":"132351cbd8437a463757d3510258d0fa98fd3ebef336f56d6f359cf3e177a3ce","impliedFormat":1},{"version":"df877050b04c29b9f8409aa10278d586825f511f0841d1ec41b6554f8362092b","impliedFormat":1},{"version":"33d1888c3c27d3180b7fd20bac84e97ecad94b49830d5dd306f9e770213027d1","impliedFormat":1},{"version":"ee942c58036a0de88505ffd7c129f86125b783888288c2389330168677d6347f","impliedFormat":1},{"version":"a3f317d500c30ea56d41501632cdcc376dae6d24770563a5e59c039e1c2a08ec","impliedFormat":1},{"version":"eb21ddc3a8136a12e69176531197def71dc28ffaf357b74d4bf83407bd845991","impliedFormat":1},{"version":"0c1651a159995dfa784c57b4ea9944f16bdf8d924ed2d8b3db5c25d25749a343","impliedFormat":1},{"version":"aaa13958e03409d72e179b5d7f6ec5c6cc666b7be14773ae7b6b5ee4921e52db","impliedFormat":1},{"version":"0a86e049843ad02977a94bb9cdfec287a6c5a0a4b6b5391a6648b1a122072c5a","impliedFormat":1},{"version":"40f06693e2e3e58526b713c937895c02e113552dc8ba81ecd49cdd9596567ddb","impliedFormat":1},{"version":"4ed5e1992aedb174fb8f5aa8796aa6d4dcb8bd819b4af1b162a222b680a37fa0","impliedFormat":1},{"version":"d7f4bd46a8b97232ea6f8c28012b8d2b995e55e729d11405f159d3e00c51420a","impliedFormat":1},{"version":"d604d413aff031f4bfbdae1560e54ebf503d374464d76d50a2c6ded4df525712","impliedFormat":1},{"version":"e4f4f9cf1e3ac9fd91ada072e4d428ecbf0aa6dc57138fb797b8a0ca3a1d521c","impliedFormat":1},{"version":"12bfd290936824373edda13f48a4094adee93239b9a73432db603127881a300d","impliedFormat":1},{"version":"340ceb3ea308f8e98264988a663640e567c553b8d6dc7d5e43a8f3b64f780374","impliedFormat":1},{"version":"c5a769564e530fba3ec696d0a5cff1709b9095a0bdf5b0826d940d2fc9786413","impliedFormat":1},{"version":"7124ef724c3fc833a17896f2d994c368230a8d4b235baed39aa8037db31de54f","impliedFormat":1},{"version":"5de1c0759a76e7710f76899dcae601386424eab11fb2efaf190f2b0f09c3d3d3","impliedFormat":1},{"version":"9c5ee8f7e581f045b6be979f062a61bf076d362bf89c7f966b993a23424e8b0d","impliedFormat":1},{"version":"1a11df987948a86aa1ec4867907c59bdf431f13ed2270444bf47f788a5c7f92d","impliedFormat":1},{"version":"8018dd2e95e7ce6e613ddd81672a54532614dc745520a2f9e3860ff7fb1be0ca","impliedFormat":1},{"version":"b756781cd40d465da57d1fc6a442c34ae61fe8c802d752aace24f6a43fedacee","impliedFormat":1},{"version":"0fe76167c87289ea094e01616dcbab795c11b56bad23e1ef8aba9aa37e93432a","impliedFormat":1},{"version":"3a45029dba46b1f091e8dc4d784e7be970e209cd7d4ff02bd15270a98a9ba24b","impliedFormat":1},{"version":"032c1581f921f8874cf42966f27fd04afcabbb7878fa708a8251cac5415a2a06","impliedFormat":1},{"version":"69c68ed9652842ce4b8e495d63d2cd425862104c9fb7661f72e7aa8a9ef836f8","impliedFormat":1},{"version":"0e704ee6e9fd8b6a5a7167886f4d8915f4bc22ed79f19cb7b32bd28458f50643","impliedFormat":1},{"version":"06f62a14599a68bcde148d1efd60c2e52e8fa540cc7dcfa4477af132bb3de271","impliedFormat":1},{"version":"904a96f84b1bcee9a7f0f258d17f8692e6652a0390566515fe6741a5c6db8c1c","impliedFormat":1},{"version":"11f19ce32d21222419cecab448fa335017ebebf4f9e5457c4fa9df42fa2dcca7","impliedFormat":1},{"version":"2e8ee2cbb5e9159764e2189cf5547aebd0e6b0d9a64d479397bb051cd1991744","impliedFormat":1},{"version":"1b0471d75f5adb7f545c1a97c02a0f825851b95fe6e069ac6ecaa461b8bb321d","impliedFormat":1},{"version":"1d157c31a02b1e5cca9bc495b3d8d39f4b42b409da79f863fb953fbe3c7d4884","impliedFormat":1},{"version":"07baaceaec03d88a4b78cb0651b25f1ae0322ac1aa0b555ae3749a79a41cba86","impliedFormat":1},{"version":"619a132f634b4ebe5b4b4179ea5870f62f2cb09916a25957bff17b408de8b56d","impliedFormat":1},{"version":"f60fa446a397eb1aead9c4e568faf2df8068b4d0306ebc075fb4be16ed26b741","impliedFormat":1},{"version":"f3cb784be4d9e91f966a0b5052a098d9b53b0af0d341f690585b0cc05c6ca412","impliedFormat":1},{"version":"350f63439f8fe2e06c97368ddc7fb6d6c676d54f59520966f7dbbe6a4586014e","impliedFormat":1},{"version":"eba613b9b357ac8c50a925fa31dc7e65ff3b95a07efbaa684b624f143d8d34ba","impliedFormat":1},{"version":"45b74185005ed45bec3f07cac6e4d68eaf02ead9ff5a66721679fb28020e5e7c","impliedFormat":1},{"version":"0f6199602df09bdb12b95b5434f5d7474b1490d2cd8cc036364ab3ba6fd24263","impliedFormat":1},{"version":"c8ca7fd9ec7a3ec82185bfc8213e4a7f63ae748fd6fced931741d23ef4ea3c0f","impliedFormat":1},{"version":"5c6a8a3c2a8d059f0592d4eab59b062210a1c871117968b10797dee36d991ef7","impliedFormat":1},{"version":"ad77fd25ece8e09247040826a777dc181f974d28257c9cd5acb4921b51967bd8","impliedFormat":1},{"version":"37e61b55ab133cec084353873341d0c9406dd824da45231402e38539586c5b5f","impliedFormat":99},{"version":"47c0b8e86adcb17cb4e88a5525db220b9eeac3e7b9c4410ecc08edc97fce6c90","impliedFormat":99},{"version":"a8150bc382dd12ce58e00764d2366e1d59a590288ee3123af8a4a2cb4ef7f9df","impliedFormat":99},{"version":"e0dcc4701b9aac511dac0cff9a383a1754c2faec2d5094cb2503bc9b8749c77f","impliedFormat":99},{"version":"b0a20574f900d765389e3609784e3203ff4b45af3b1c35a037a7e78b6d08698c","impliedFormat":99},{"version":"38d8df137743ccde3a47c5fb5b1ccbb84674f20900c421551eed59cdf4529763","impliedFormat":99},{"version":"f5f5978485e7781bd4b4a1bf8a4e9ba9ba9722719661fd730eeac708018b0ea0","impliedFormat":99},{"version":"c7135e329a18b0e712378d5c7bc2faec6f5ab0e955ea0002250f9e232af8b3e4","impliedFormat":99},{"version":"340a45cd77b41d8a6deda248167fa23d3dc67ec798d411bd282f7b3d555b1695","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"6ce3b5e3977634c8cee1bf0cea11c6015c3ace1e14faed4e946f63c4af89a42a","impliedFormat":99},{"version":"f9a45dfaaa412a019d102e4c3b2f778d58264e5eb4d46ecd2558ef5603a1f9ac","impliedFormat":99},{"version":"357b67529139e293a0814cb5b980c3487717c6fbf7c30934d67bc42dad316871","impliedFormat":99},{"version":"99d99a765426accf8133737843fb024a154dc6545fc0ffbba968a7c0b848959d","impliedFormat":99},{"version":"c782c5fd5fa5491c827ecade05c3af3351201dd1c7e77e06711c8029b7a9ee4d","impliedFormat":99},{"version":"0fadbd3090f00a5c94affd05f0f5e925cca1251426db13ed5d3a6193a359609d","impliedFormat":99},{"version":"5e32cdacf68e17a5d99f674e43f609d679c9b500aa34638ccea2fb5cf0d6c0c9","impliedFormat":99},{"version":"d87edd6f213aa1d92af04f80c20413f5c92c792c8e6c77f0e5877adf36744045","impliedFormat":99},{"version":"9bb210425f8083a50b3d88a27430c00903f874af01e15565bf04764b7488ce0b","impliedFormat":99},{"version":"e6002166b254df00416f4f4b42db99849269fd9715e52dd2608374e98123eda3","impliedFormat":99},{"version":"6559a36671052ca93cab9a289279a6cef6f9d1a72c34c34546a8848274a9c66c","impliedFormat":99},{"version":"c78a8a3fed29af8b123096d35c712b0dfd0b5a6937e903ef92cda197abd4cc86","impliedFormat":99},{"version":"d022dbd2a764ce3d2d629da30d21c12c6850acebbdb8191b884e64f4cb9e8464","impliedFormat":99},{"version":"6f622e7f054f5ab86258362ac0a64a2d6a27f1e88732d6f5f052f422e08a70e7","impliedFormat":99},{"version":"d62d2ef93ceeb41cf9dfab25989a1e5f9ca5160741aac7f1453c69a6c14c69be","impliedFormat":99},{"version":"1491e80d72873fc586605283f2d9056ee59b166333a769e64378240df130d1c9","impliedFormat":99},{"version":"c32c073d389cfaa3b3e562423e16c2e6d26b8edebbb7d73ccffff4aa66f2171d","impliedFormat":99},{"version":"eca72bf229eecadb63e758613c62fab13815879053539a22477d83a48a21cd73","impliedFormat":99},{"version":"2ac93d1c5189b63c8a45f899c476223c11387ffc7719197b6fb91b75f22fcf64","impliedFormat":99},{"version":"aef95b0fa13b44ae8cd74169e69ef3e264f0652f80b06c6a734c828e08b084af","impliedFormat":99},{"version":"829db2f1ddeb788d39fbe372d22323241174f41a92da9c140922345f34c12b10","impliedFormat":99},{"version":"eda4760e5d7b171132265e970b67c322bcfffacb84248f44def26ed160eb722e","impliedFormat":99},{"version":"142f5190d730259339be1433931c0eb31ae7c7806f4e325f8a470bd9221b6533","impliedFormat":99},{"version":"cbd19f594f0ee7beffeb37dc0367af3908815acf4ce46d86b0515478718cfed8","impliedFormat":99},{"version":"b0c0a9e7925903831a24c82583774fd333bbaddecc0de74f4b304a3f2b4066bd","impliedFormat":99},{"version":"340cc9084b90c2b3b92ed06fa766d1c0948927a4f4bf08d0b40456ef185606c4","impliedFormat":99},{"version":"7ec75e8e2263688d6e472295695573f4dc666a0e3044a76702c35412379b13fb","impliedFormat":99},{"version":"2ff134b8367ee4c755bd5a8a4a8ec1802b2bb7da308a599c81cd7f7de5f0c69f","impliedFormat":99},{"version":"3acbcfd4a3df0cddf7676e7f6535c2e7a64d55028d05ff17fcc56acb85ea8497","impliedFormat":99},{"version":"7030df3d920343df00324df59dc93a959a33e0f4940af3fefef8c07b7ee329bf","impliedFormat":99},{"version":"ae852dfa205c6387c9414a796ff632861ed45573accba44dee6c7e14f3e1b1c1","impliedFormat":99},{"version":"d12cc0e5b09943c4cd0848f787eb9d07bf78b60798e4588c50582db9d4decc70","impliedFormat":99},{"version":"7333ee6354964fd396297958e52e5bf62179aa2c88ca0a35c6d3a668293b7e0e","impliedFormat":99},{"version":"7aaff1bf177b5e2e7636e6c7c4617777997b3213553dc30122479e108da12b4b","impliedFormat":99},{"version":"c9af72afd15e23df5c3802cd707ab1f5197e95a2a3103fb28c71fc075e9c77ed","impliedFormat":99},{"version":"19c3760af3cbc9da99d5b7763b9e33aaf8d018bc2ed843287b7ff4343adf4634","impliedFormat":99},{"version":"9d1e38aeb76084848d2fcd39b458ec88246de028c0f3f448b304b15d764b23d2","impliedFormat":99},{"version":"547fadf09c14e258a709559e6141c57c1eb50122d223dad6288f253b58e145d6","impliedFormat":99},{"version":"0bca816026ce30933660288d49a26be47c82a1abd163362accf029f5696ea222","impliedFormat":99},{"version":"ba56838f4bcd29838a8ef83a868caf5ee1dd58c0e4e77fe11b33af6cd3dac0c3","impliedFormat":99},{"version":"51f6c8d76a0e2e59cee21593351ce81f885c192e3f1ef3f7497dd23c5217d622","impliedFormat":99},{"version":"f3a56a3fa3ccc190bb66c4fb10a6b30deac9eec4e1f831c8ae3ce4c98387ca12","impliedFormat":99},{"version":"02b7be7e66633461fc2dd4c2fb7e93725806642ef92af003fba49ae419033e31","impliedFormat":99},{"version":"2c52509baabe23472cbe9ee48f1f064cbbdcd8c9340ad2ee40285f2f16db6896","impliedFormat":99},{"version":"f891e25698279524478225b523f4dd895318d29f52ebc48c171a1f9e28dcc353","impliedFormat":99},{"version":"b5fd805b7c578ca6a42c42bbfa6fda95a85d9e332106d810bb18116dc13a45f8","impliedFormat":99},{"version":"d1d9a59a2c71558105621b3a6bb4e806e2f878fff46fb9937fc98285aad0b267","impliedFormat":99},{"version":"13e82862532619a727cff9a9ba78df7ca66e8a9b69e4cbd18e9809257b6bf7ba","impliedFormat":99},{"version":"aa3568140d52c55271bef4f59bfb8c1e0723b18e50710d559386c160718e27ff","impliedFormat":99},{"version":"0a9676700a3096ca7f2fe92500933bea1792dcf19a319c58f70cb6f6b3216f83","impliedFormat":99},{"version":"902b039eea1186ff3998b8f32b223b25b058401363f4701ea65783eea030bd0b","impliedFormat":99},{"version":"a29e7a7705d48299c41ced780e099b0cc875faab294ea73c833b48e04ee87555","impliedFormat":99},{"version":"021f2956455c89504ae46997b67e1db6c1f281a7f7aee49b0a54eeef580ed8d5","impliedFormat":99},{"version":"86dd7c5657a0b0bc6bee8002edcfd544458d3d3c60974555746eb9b2583dc35e","impliedFormat":99},{"version":"c80a8e552482b20a375a4d7af92e4865467b88b378f12b9421741717a3e0f0c6","impliedFormat":99},{"version":"749bf4170f864690b3290bb61a3a74047f71650ddc75abad876aef14d700a437","impliedFormat":99},{"version":"60f61702940aabb2a012d51875fb0e91bb000d2259f5e8ab6ccd35179b33fc4f","impliedFormat":99},{"version":"2035fb009b5fafa9a4f4e3b3fdb06d9225b89f2cbbf17a5b62413bf72cea721a","impliedFormat":99},{"version":"eefafec7c059f07b885b79b327d381c9a560e82b439793de597441a4e68d774a","impliedFormat":99},{"version":"7f9d63a8656e402270d933736ceefe8e2cb2f3bf6cb640f3094205312693da30","impliedFormat":99},{"version":"97d52938e84c6b6773558d0b7ad8cc36888e2ae2f93acae094806aaa41f3ed15","impliedFormat":99},{"version":"81aca5df31276dda10f38d292f037e46be0d10594bd9aca85e477586cafe42da","impliedFormat":99},{"version":"0c04cc14a807a5dc0e3752d18a3b2655a135fefbf76ddcdabd0c5df037530d41","impliedFormat":99},{"version":"003efc35dfb5f3d6474ce2914fd4e6bb07917e2f2dd0b790d6961892140ef94b","impliedFormat":99},{"version":"2964b9b0f7b8521cadc0b6551db06298a5fbb0b253e6baa94c561eca447b35d0","impliedFormat":99},{"version":"c704ff0e0cb86d1b791767a88af21dadfee259180720a14c12baee668d0eb8fb","impliedFormat":99},{"version":"cea4748874d80d56481f398a2771d42461e3ad46bbe0e6eee1289827a08d6010","impliedFormat":99},{"version":"639e2c764efea4b910cab8107a3686e762e1b2eefe2473a2c26dc225c4df372a","impliedFormat":99},{"version":"d6ba9205bd0e32ed18b4c26a44e5225a8ab7b9d39f72c97f36ba9cc33a776fa9","impliedFormat":99},{"version":"bbf8d432af73eb95e712b8de10f3ccea9a22747959eef3e6e877c6a844dd7bd1","impliedFormat":99},{"version":"d7a4309673b06223537bc9544b1a5fe9425628e1c8ab5605f3c5ebc27ecb8074","impliedFormat":99},{"version":"49252e6cd5b55627500f843e67880126bddf5ac493040868d88db983425dbccc","impliedFormat":99},{"version":"3eadfd083d40777b403f4f4eecfa40f93876f2a01779157cc114b2565a7afb51","impliedFormat":99},{"version":"cb6789ce3eba018d5a7996ccbf50e27541d850e9b4ee97fdcb3cbd8c5093691f","impliedFormat":99},{"version":"a3684ea9719122f9477902acd08cd363a6f3cff6d493df89d4dc12fa58204e27","impliedFormat":99},{"version":"ff3c48a17bf10dfbb62448152042e4a48a56c9972059997ab9e7ed03b191809b","impliedFormat":99},{"version":"6426b49816d82450c8c163747d7a91ca5e904b24788d8dcc50f98e15bcd9bde1","impliedFormat":99},{"version":"71f1636a06d314afcb22ee64bbdfe22fe416692383fa1757725e1ac0fd1a4bc4","impliedFormat":99},{"version":"e13c46d1211997579322e6f483589a10e1427073847859f277bbf93517863ffb","impliedFormat":99},{"version":"bb7c851fa615f311b10ba7a1a067141ce2f880ff2bc3f7255e430a5d38e01a25","impliedFormat":99},{"version":"01acd7f315e2493395292d9a02841f3b0300e77ccf42f84f4f11460e7623107d","impliedFormat":99},{"version":"d563d0117c471eb4a6ab634e4fb7c7e42bce20a52b8164ebabf8144288a718f8","impliedFormat":99},{"version":"6095253524710bf0527d132cbb321d1e664ace4791df1f8f617452136c9ecae2","impliedFormat":99},{"version":"3e74dfc1043e69d5ce0ebe44c10db8acf82a849957b75d9926cd648d1df1837d","impliedFormat":99},{"version":"4b2fabc4f2d7fb1947b99b6ef926511f0f74b67d998f0590b42ac23eef7d0157","impliedFormat":99},{"version":"241fd423139ec647bc1986ffb11104a3e2f3649a8bc22e375c5442f45b562b9c","impliedFormat":99},{"version":"cfd92466ef6d76027f3ad9b4d3eb4c36dbce76c9f60b8f79e00ed8658e894efe","impliedFormat":99},{"version":"027880a94ebb2aa3d245617608f596bc59f197bc808ea937135edd9948d831cc","impliedFormat":99},{"version":"4ddc5feada56eaba564dcafa33485d253decea4b287ff5f7406c452fec1c2b55","impliedFormat":99},{"version":"9dbac7e16c53a5ca2e3312b88f84e87e087f72817833f559ed61138b0d3e2d3d","impliedFormat":99},{"version":"ba99f475c955e7e49757662583821fd0ca64e9db621fc5562489409f5554738b","impliedFormat":99},{"version":"e10a9cfd55debc5f21b1310c99e64a49cacf6d6149e98df4cac0bdd85284827f","impliedFormat":99},{"version":"47a34a81e5462259a2c2bc51c6369047177252fd3a203e9effc09e4e14b55a4e","impliedFormat":99},{"version":"094262196faa70728bfe61c34389eefea9cf2c51c1d5e20f276e7a9102eaf52f","impliedFormat":99},{"version":"94874033292ae75f1c0d6476a16cdeb4226aec2601af090efb1ae2b7dd51c58a","impliedFormat":99},{"version":"cfacf591937252bc264f8c8a44ad855771a49ac0b82c00673dba8c05708f9b98","impliedFormat":99},{"version":"16736dda0a75e8bdd0169a4a2a4fbc06d2bd04082ee1a2ed3fa2b68d47e39e77","impliedFormat":99},{"version":"da03272b7961d98dd73b0459d01d6d8154bfad623f05c5517fdb371d6aefd1b7","impliedFormat":99},{"version":"3c38e0687b5459e23f78bb30345b2c8aea2c074ad2c3a77972d9a5754967c07d","impliedFormat":99},{"version":"3900e6ad904926a60137ec27df40df39a46dec31ede48583677abfe944e57f03","impliedFormat":99},{"version":"cc47915edd8adbe321674bf6d2c4c9235d161f92f784638975708ff0ac25f347","impliedFormat":99},{"version":"a16d734f76460f265520a1f73a6771d301e28ef585a64ba3091ae311fc852ae1","impliedFormat":99},{"version":"a1985fa40f35cc2442443c791b0b0178068ffd6841349642c74863b9949cfbaa","impliedFormat":99},{"version":"79559571304cf207a9af68777ed7c6517437cc427512dd0cdb278b18ff6fb2ed","impliedFormat":99},{"version":"df383a9af88d6dc61819ab3a5904a766648352b662138fd21f0649481cdfe72b","impliedFormat":99},{"version":"f45ecf8ee594108286d9365a220a44d80c670845909b2a0e97533bc4af47a7cf","impliedFormat":99},{"version":"c810cba93a0862fee59565a6160940c338fbbf45557a5bb078a9dba6f7f9f62f","impliedFormat":99},{"version":"deaf8eb392c46ea2c88553d3cc38d46cfd5ee498238dbc466e3f5be63ae0f651","impliedFormat":99},{"version":"6a79b61f57699de0a381c8a13f4c4bcd120556bfab0b4576994b6917cb62948b","impliedFormat":99},{"version":"e4f6ec2e3a4abc170c56b465a08ca4c7e71fbe61f39d21a31e70fb07889e3d6a","impliedFormat":99},{"version":"57053c48c0a9dc3d3932955cbcf6b51e79920bb5d7e2b838505cac6f7ea5c34e","impliedFormat":99},{"version":"c3893e8996e697c6fb60cce42cd37621ab50e055e9d1ac184d0f155fcf560682","impliedFormat":99},{"version":"d0da4f4fd66f37c13deabc1a641edd629141c333ccf862733788bd27e89436ac","impliedFormat":99},{"version":"588c39831bf3779c978d30d0ab3cf4c58d3e9b3f356e39170775a71646b8abbc","impliedFormat":99},{"version":"58b53920d40b857a9627dc4da219738ef194e7ad6542200b82bc2d8aab928f57","impliedFormat":99},{"version":"b672125d92814d2ff363a607ab2ce5995d5135cf23f0971417a4efb3fdfbca1b","impliedFormat":99},{"version":"c75f1cd6844364d019f2223da5abc213c9e24a31c225733219be8248a42fe8e4","impliedFormat":99},{"version":"ac646af5542544e489bdda0fd6a6a5d1552c82bac29f397b163c07ac2c6089da","impliedFormat":99},{"version":"fed19df48b12d7154aeda8c432be7285342bb3a6d72ad3f1fa44bee93450c3cc","impliedFormat":99},{"version":"5ae7dc80babfdc3989f0975fa6a23cebc6b8ba6ab1d9f973a8a1e8029428cfa9","impliedFormat":99},{"version":"0612b149cabbc136cb25de9daf062659f306b67793edc5e39755c51c724e2949","impliedFormat":99},{"version":"471484480fe5086cdd1c369eb84aa3fd450815b7821b8b09ac5754051279e29a","impliedFormat":99},{"version":"227b7917cc074ac4b2563ac123e347e6d5109d0bea365d61a73e115da700bc17","impliedFormat":99},{"version":"148b35d91aaa01a7024bbb28494b85b016bd2890dc21f452191da06d041dbcbc","impliedFormat":99},{"version":"2fce7e7247da58b65e7b5de5ddd1d2b6505449487685b7954463925450bd6e9c","impliedFormat":99},{"version":"f453d9c17bd2eba733b747985bc172f6af9d343ab2d91204b5662ed20f4735e5","impliedFormat":99},{"version":"c2a68e16fe72831b43cab02811dcb1014428bb00dfec45b2689b251e21e041a8","impliedFormat":99},{"version":"2bb7ae4d18c8929b1212b5eb176c016b8b93ff92c9ac41de336310a0f47901fd","impliedFormat":99},{"version":"9a42d5316e3f095d355b2d9f6f96aa6719b91102a53bf30dca8c2ad724bb4bfe","impliedFormat":99},{"version":"fcf13a077f4bae4a26581f47bbefdd90116ae73e352cdd120e1a89b28ffe2095","impliedFormat":99},{"version":"7d8647943fa04fccf7c867fb02dfabcc548565f00953cbe202da0aaf27ccde70","impliedFormat":99},{"version":"ebbe6765a836bfa7f03181bc433c8984ca29626270ca1e240c009851222cb8a7","impliedFormat":99},{"version":"48702b31ba438d939af01add9dc8fdb0399943f49f491a78b55848d6e4285445","impliedFormat":99},{"version":"468df9d24a6e2bc6b4351417e3b5b4c2ca08264d6d5045fe18eb42e7996e58b4","impliedFormat":99},{"version":"b482c05bf8e342c828c0a100a1d37590c6c4019bc754c745f992d93ab12f13ec","impliedFormat":99},{"version":"512b776ff7d04974e144c946bc6cbb51561b644350b2e14f12d692460f7c8cda","impliedFormat":99},{"version":"9f6e5d5da3a018037d7f6c0c386ab47f25ffa428d111d05ee15ff6808e96e0a8","impliedFormat":99},{"version":"7a2004143c90bc4d761e82356df073be2ed40e35b55237d9b6eb6481928f450a","impliedFormat":99},{"version":"c2657430dce8f2fb10e25a9633d99504842f226a3dbf274c4e1a45e63ff78948","impliedFormat":99},{"version":"f03cf3b9677a606c59354432f8ebd62468390be8344eb05f1df3d3d0ee0778e5","impliedFormat":99},{"version":"8bf2d7f0499a25bf98f1d427a8a2b2b403b2298dddcff86bab8c56ab1e2b54ed","impliedFormat":99},{"version":"af412eb1ae61c7d364d2ee79709a47a7d24d051498564b08cb69916043a55486","impliedFormat":99},{"version":"3fa9c437993dfff364e5f2f6d68f9e1dff4011e3472eff144127847ab81d614e","impliedFormat":99},{"version":"b01fd40e4673cad76e2897b8aed74759fa1dfa3d0df587988935ad557bd82930","impliedFormat":99},{"version":"58b8baf7a0dd88129b85f677e0917c59d21f393df44552f5b55f7ae254759c30","impliedFormat":99},{"version":"2eb3e235fbfc68b7941ae5f32ea014c43c44d20e5bb4f3b652bfb9b98f85552c","impliedFormat":99},{"version":"1ea635268024409dfa59a5c676c8607cf55bf902b6dcbd2ca79f994642b6be2e","impliedFormat":99},{"version":"1266a70e0fe2d9c5627ff5a4c02a09d1e33404c9f06ab93cd4d8be4972e10ddb","impliedFormat":99},{"version":"e228704ab0c25146652a3b83aa24b33c33dd3a7a8db1ff1e9661b79a11a7663d","impliedFormat":99},{"version":"ea8d59df1dee6d0da67594372569f13f3722630bced094c567125fcb233eaea7","impliedFormat":99},{"version":"8428ca6393c2b205a4d7df799135f80c0d51a3e6b56fe95ce6fe60fbdc258ff6","impliedFormat":99},{"version":"b3f1e1c321e03f551370a75ce4c636916b702499b0563374b90099097ddfb3f9","impliedFormat":99},{"version":"7002f9aa97582f121084aef3e5316d0cdff2b1200e4c65dbd2d2a3fdec9a7313","impliedFormat":99},{"version":"d6847d459653aa9c0b9687e0ba93025a36878ceac71ac065c2c893cbcac66c5f","impliedFormat":99},{"version":"9c9b8cee65bf2bc97fb14f32d125b8a6b6dd2b617abb527e97a97b8d898de231","impliedFormat":99},{"version":"2e2bc02af7b535d267be8cecbc5831466dd71c5af294401821791b26cb363c47","impliedFormat":1},{"version":"986affe0f60331f20df7d708ee097056b0973d85422ec2ce754af19c1fa4e4b1","impliedFormat":1},{"version":"8f06c2807459f1958b297f4ad09c6612d7dbd7997c9ccfc6ea384f7538e0cea8","impliedFormat":1},{"version":"a7de30cd043d7299bfe9daaca3732b086e734341587c3e923b01f3fd74d31126","impliedFormat":1},{"version":"9f7923be293b60d499697232b491a8313fe37cc661d5534a8066b5bf7f69eb1f","impliedFormat":1},{"version":"3bf58923a1d27819745bdad52bca1bdced9fef12cc0c7f8a3fd5f4e0206b684a","impliedFormat":1},{"version":"ad4277862bdcbe1cf5c1e0d43b39770e1ccc033da92f5b9ff75ca8c3a03a569b","impliedFormat":1},{"version":"f8c496656cb5fd737931b4d6c60bd72a97c48f37c07dcb74a593dd24ac3f684a","impliedFormat":1},{"version":"705352d1aac7b23a24e23f19924bdb8e4d8ea3f1526514001e040035c1993411","impliedFormat":1},{"version":"1cc5c6445de979e62fe09efa646e0c924fd4600732de1375d298de154151d6c0","impliedFormat":1},{"version":"c5948e8e8b534fc7c0e8958ffd319d7c6f53fb35381e576a97f5da552d09a730","impliedFormat":1},{"version":"4e82eed3c1b5084132708ce030f8ec90b69e4b7bb844dcaacd808045ae24c0e2","impliedFormat":1},{"version":"87fc4a324b9fa5c9b93a13b5ae1b55ea390929ec1b0450afebff9620921a9cc1","impliedFormat":1},{"version":"b0e6f1b1569779cf567317c2265d67460d1d3b4de4e79126533109d87dc16d50","impliedFormat":1},{"version":"58d8f77de14d30b3e1527d06d2a541aadfa2c242db7c26f8acbfbdb5efc42466","impliedFormat":1},{"version":"4eaa7f100b0074ec9c209ac8e96aac29dc801498af7f90c68be658e7c93d120e","impliedFormat":1},{"version":"4e38d735fd89ab5f92229302d3b1cf6f8c640bf1076bc3565cee486ac2f135c5","impliedFormat":1},{"version":"3bd56c6264b1db572ab2b0d3d424aa71ddc2bda5688f8b8903da5300c0097ab2","impliedFormat":1},{"version":"5dc765ecd380265113ec4e47849bd3881d8201d5af368ffbd6d8bd535a94ac97","impliedFormat":1},{"version":"d6db974317fd9ff66a923555464850dcf87976054a7adacf09d53323f64686d1","impliedFormat":1},{"version":"b4cf83e9db9ebfeeecb49425fdbc3550ea71266b5653b59159f99f7995834eb4","impliedFormat":1},{"version":"59c088d524607145ca875faa8a1979f7aa1a893c8c575cf583249a187666d028","impliedFormat":1},{"version":"c13f165ee7a1e824b962b79edbb43d6734f2dfd1c5affb1d6aa11a4f69734e8b","impliedFormat":1},{"version":"a4d53d7317ed35632ac64e63ae727ac32484e100443d44f8b540eacd5a05fbb4","impliedFormat":1},{"version":"24e95416dee22b1ecc1dcf9ecb2ae2f99d3470abd7bf015346c87f56bfeb909b","impliedFormat":1},{"version":"88f74c9a39fcb910f664a6d7f85fd2e59808355fc9b7902a542844677bb29ec0","impliedFormat":1},{"version":"bfd69eb6b00cc5324cca874fcc1b080dcb83cc30ecd90ae50ad830088bc180ea","impliedFormat":1},{"version":"3e5ebc3a6a938a03a361f4cdb9a26c9f5a1bac82b46273e11d5d37cd8eccc918","impliedFormat":1},{"version":"3e1f5703813c553c8ad79a333829b5f073bfaa720a93259e4412b95ada24e278","impliedFormat":1},{"version":"34d1f78b467d55c7020184ae46a08300ae06a19b1327a17026aff491c2d34168","impliedFormat":1},{"version":"80fc027e10234b809a9a40086114a8154657dcb8478d58c85ef850592d352870","impliedFormat":1},{"version":"6212d01750477cb779956c125610c8e6b2236ec2d6389b922a908506fb6354c6","impliedFormat":1},{"version":"fee643693294d6b4f53e7a0247b5f0760243d4315155a8f6f9a840aa3ca20774","impliedFormat":1},{"version":"46457b9cedf04d99dc2230450c43c8b1d6385d5e5f5148945adcceee88396591","impliedFormat":1},{"version":"f0fabbde656beb3f9bc9a4f4f6f1891bd3aae6493db9d21fe8b53a528fe16fd9","impliedFormat":1},{"version":"6fb58bbf40576867587baa97fc5881160538ddf53bb25a2cef6901d7dc68258c","impliedFormat":1},{"version":"51ca802ac7ee12fba3503a10ab57606f0c6d056f5380ef0f96ba8e8245c1cde5","impliedFormat":1},{"version":"b562266e243939654019537a392e54034f8f7a80af9ace1177cb6764d62494a9","impliedFormat":1},{"version":"6041a29295470f081073531f522b0c5b4f4058f5fd51422675819275e472aa58","impliedFormat":1},{"version":"76226829c245e5fd0958207c813a805fc1de9a46bacd1c5b2898b92fab47f2c1","impliedFormat":1},{"version":"846d610e8654411bddf9baca90795005e7c1539bc86b4ae658da2ba15653286b","impliedFormat":1},{"version":"0de68916e23c1e3df800f9f61cdd7c506ceb0656fcbc245ee9974aad26786781","impliedFormat":1},{"version":"873b6ce896e20d6ba63d274a00abccd7bdaa07ac18a60c31a4b754de4b6b9bb2","impliedFormat":1},{"version":"f9c3827fe0cacedfed2097f3f65323b57699d2b772d5f07c618db96365ef7977","impliedFormat":1},{"version":"42c66e3812df2f145ec65510375ad7f3a7ca75f42a69142796934753194f20b9","impliedFormat":1},{"version":"16effdcd823ff218070578f28f7e6fcdb40d678c13f550ace19c9bb01a9c2ffb","impliedFormat":1},{"version":"d9d023ab7f6f770f96926f7e0605bb510311ba54eba7c9f94cee74896de9725d","impliedFormat":1},{"version":"ce34703b33f761c48cfc7e672cbb35c1468d66c7fc9ee6d0edc949613d94b1e1","impliedFormat":1},{"version":"d25415f00260819a0a01ba244ed54c91623f4f376b75f1d6ed2a0c04a8a2419e","impliedFormat":1},{"version":"1f7eeb69504ad94d16f4731f707d2af879adc7487dc35b146e2d86825bb779b4","impliedFormat":1},{"version":"74ffa4541a56571f379060acaf9ab86da6c889dfe1f588425807e0117e62bba5","impliedFormat":1},{"version":"1b4fcfc691980d63a730d47d5309d9f85cdddc18a4c83f6e3af20936d103e3ff","impliedFormat":1},{"version":"267d224005bee03a4499e7ab53febb56dd2110408696e5ee542e7b0d08449f0b","impliedFormat":1},{"version":"db5459c6059d8e9bc24bd79ecdc1fe686f246a28959d30173beec2c7cb694409","impliedFormat":1},{"version":"13c0f3fe0a163ae5e7bd5c5df9f9694b36b94e75f71ba2c5990bbb9c85285c44","impliedFormat":1},{"version":"f3c81dffbf586a64c94db127603fdc4e24e78806b4bd754e95bc50e2c864c497","impliedFormat":1},{"version":"07ca724f09c7ddf56dacdd72ccae246ad588fc614682d31f1bb7611db2261c22","impliedFormat":1},{"version":"b6fba4956ec6a4951d0790934fb264c81475ed50befdb29c94f462c2e04eaf29","impliedFormat":1},{"version":"326f8b5715f1974dbe36f3600b00c8210340909328a545a3a0c7800de2ace8d6","impliedFormat":1},{"version":"9e9e02ff815bb0164dd028c68bbbf69dfad4540d9ede86c5489e79e4511e1aa0","impliedFormat":1},{"version":"6cc2a3178dd23c8a3bdf78815729652ac23ce9c1e4ba6d0a5c46eb5a18c7c028","impliedFormat":1},{"version":"c1193d6aad4bd4bbcf703e6767bd48115186d0deb6fc4f66118b9f440421a6cc","impliedFormat":1},{"version":"4c889ce7e61ca7f3b7733e0d2be80b3af373e080c922e04639aa25f22963ae63","impliedFormat":1},{"version":"08985cdb65bbfe3c70d0037794a3d0f0a5613f55c278c77277a7acc17205db57","impliedFormat":1},{"version":"9bfdb6e97240d400a84a8d415f616c0c685482f1bb95c5a88bebd13a1236c09b","impliedFormat":1},{"version":"e2b3a4fef5d33cba37189c67dfe9e6aafd3cbec423cb6bfd3221624733417253","impliedFormat":1},{"version":"8e1c4e4aa49e94641875436ab6e766800998b5c0ab8a64209b8dcb999237365c","impliedFormat":1},{"version":"3b5c6f451b7ad87e3fcd2008d3a6cb69bd33803e541e9c0fe35754201389158f","impliedFormat":1},{"version":"8329556a2e85e3c3ff3dff43141790ff624b0f5138cedec5bb793164cf8b088f","impliedFormat":1},{"version":"d4a9cec92a48fdc08df1909009ea0c8daa785d1365ed9130becc98ce229f8063","impliedFormat":1},{"version":"aaf8158cb9cdf79adef6f23201605266fb409b7cdf24e6ad29bd0ad5d32be1a9","impliedFormat":1},{"version":"170627ce698f96f9eb37db598b4cb3217812f7d0e0445e495515db37d5cd79f9","impliedFormat":1},{"version":"76c0bc48ac0129773f9d09a8213e2036532a3d551de4e9c6cb19ffa921981769","impliedFormat":1},{"version":"738ddac5ab5b61d70d3466f3906d6b3c83c8786e922c6e726a6597296181ae87","impliedFormat":1},{"version":"9667244cbc1859aa0b9bfd74874f27dc934a8381b95a64e812f12527dac0ad80","impliedFormat":1},{"version":"f2f2df1e27e1be2ed94947999f1b5556b430caa23b13c3ff5386ee3e5b98a3df","impliedFormat":1},{"version":"5994ed389d7fc28c03dad647ecb62e5349160bde443b0c7a54e0e10d6368bcbd","impliedFormat":1},{"version":"47c87fab380e45f6f16bef19fac41bbc9e936f705f5de451b71e93acf3f44693","impliedFormat":1},{"version":"8ba6ada43850cbb44f8bac22040104eaae32c5bad92fb18b61130094441fb58c","impliedFormat":1},{"version":"36d3418c2c2ca60e9e2c4f3b83ad1bade4c169db36e425166d838a170d64b385","impliedFormat":1},{"version":"15805e94017a91b5eba1491479b6cbbd7bc2e1d8b198798aa5daea4fd78bb119","impliedFormat":1},{"version":"6c7be6a12c829bda9cd2d447131e89fadee3fe701f89581640e094b07096c606","impliedFormat":1},{"version":"a2dff9db0ac155f5f5348f94e7a7c2e47d695a451bf9f2bce3985d039ead6884","impliedFormat":1},{"version":"0fb5bd98f5d689a0976020ea0bbe8f7a894d66457ccd79c4b11980f93eb6e016","impliedFormat":1},{"version":"8dded8d3572685ad71b1b6ea45de66247fc300ec2312218e26782bca4a2906e8","impliedFormat":1},{"version":"4e16af909d348dbdb98c3a5f3f68be78dd46fb1991624a33bbd30616baf8953c","impliedFormat":1},{"version":"e1e94e41f47a4496566a9f40e815687a2eca1e7b7910b67704813cf61248b869","impliedFormat":1},{"version":"95e9b40adb278810afb26bcc17d8cb37bacc13c57c8bebb2324daf98a2548304","impliedFormat":1},{"version":"0ef49170735d9e5902f55b72465accadd0db93cae52544e3c469cbc8fbdbf654","impliedFormat":1},{"version":"5eb09226bfa1928721a438e37c004647fc19d8d1f4817bddcc350e57fb32935f","impliedFormat":1},{"version":"5bb74178117fc72a70526fcfe1878cb7c38a800c5dda34ecdcdaf4dea9db69f4","impliedFormat":1},{"version":"79d0c847a43cae61ff1b4bab6b8ef99680753e376d2de9958170dfe4d2ce1f38","impliedFormat":1},{"version":"94551ce3f4b05ee00dabcbe3f7a7c530d8663b4950e0b4d625541161a5265c40","impliedFormat":1},{"version":"f720baec4d504d97c40b9664c905f2e8ac05b7bdf428c3c1a329a99f2f0959ad","impliedFormat":1},{"version":"51e761b5cca5737b2f71ec5b832a0d2cfd5d8eda50f98707930cc9237aa69979","impliedFormat":1},{"version":"3daaed3ce84b28ba0be872a4922eff405030cb6bf550e1b6c3c1b28b0cc228a3","impliedFormat":1},{"version":"ef8ff23609cec5eb95e2beb98132ad90c0c5075415b50228b12f89ffaf981a4a","impliedFormat":1},{"version":"174a3381f98fc78c451528cb1aa1baaa37a51852ec6fa90d42efd876301537c1","impliedFormat":1},{"version":"80bbc9365ca8398c69eae77cdf7284d07192a17dacf1904095ab4c89f4520a5d","impliedFormat":1},{"version":"e67053c6660baa8d7df56153e342ced270bdb49ff3bd8bdca4e990adb81e8ff7","impliedFormat":1},{"version":"0f04902d8796b1aff6d78e05ac9609e3345b86522589ed841e466d74d526f311","impliedFormat":1},{"version":"c3b6dc9ca982d76cad598f082b12b5f7ee45d4a3656a6e6f8f63d855898e2623","impliedFormat":1},{"version":"1cb0838371e8213ce116a1497bb86bcf01a11a755b77587980ee7cfb2d625ece","impliedFormat":1},{"version":"bd27cc1344a390fabe53786bc55a4651ef4ea064d93c2cbcd83d790792f823b1","impliedFormat":1},{"version":"b7f2643490a3b4d93355c6a28255dd7a69372e81fa5a14ad55053ca5b95875bf","impliedFormat":1},{"version":"a06270e7428fd4ad83d4dedc6f8ddc0cde4e3119eeaa7763f0a50bb2995a5686","impliedFormat":1},{"version":"d8acc6f92c85e784acbbc72036156a4c1168a18cba5390c7d363040479c39396","impliedFormat":1},{"version":"80654b0c5e86599d851607ec4881aff69639ac7809ad628fc4dbda095677d37a","impliedFormat":1},{"version":"768291f4d2d701bd6ccf2db3cc039262c451e0bc9d96e19d66712ab099b37e0e","impliedFormat":1},{"version":"6b1786e3b348888fb95f7ab0feda2a6e127bae822f25d58f6b1e456497a410ff","impliedFormat":1},{"version":"558d594e22d66b2a6fec4860281454b07428fb5f2fa0e11867a31ede2eba6a33","impliedFormat":1},{"version":"b5b46caf9cddb553c957bcb70eb28d5857d5275167bb8af5876187ef1a30237f","impliedFormat":1},{"version":"629aecc2685ae0af294ba3d6ab2bccef204ee69455c1dd77c4cd3ee41744ce9f","impliedFormat":1},{"version":"43549f36337045d84e9b253ffae02c6c1245b35179c90123c166f79c6ca45253","impliedFormat":1},{"version":"82451e431274dd2b5ffa2c09c1e7641e2de3460a082628e1bc4df1835aa60a28","impliedFormat":1},{"version":"cb5880fc55eae6071468ea127f465f692c1542ae85e82be5a1e95932e7ba3b01","impliedFormat":1},{"version":"efefe26654b18745c77fd5d35411d1cb9472fd6582a866ca921714cf58a01b44","impliedFormat":1},{"version":"a7dc3f552f0e17aacf145fd4dfaa82b2e8cc7d91b333ad23d4115436054fecd9","impliedFormat":1},{"version":"bc01d438cb232fa1a78fa9be00bbfac9b1aa3362bb6d7eeeb83c0f1574c4e654","impliedFormat":1},{"version":"2f69c57534788bd861d57fcd926a6692e984af470c239c860c7b0d432189b25c","impliedFormat":1},{"version":"fe29108f3ddf7030c3d573c5226ebe03213170b3beca5200ca7cb33755184017","impliedFormat":1},{"version":"c523bc6d871b058d48ae065be3b4c1a78ba3501db74adacdb318a2a467ae403d","impliedFormat":1},{"version":"a02db6aabaa291a85cf52b0c3f02a75301b80be856db63d44af4feea2179f37b","impliedFormat":1},{"version":"fa7d30970a6b8d20e47798a60a76049f75a231deb360d9beb466b2f3b54a80a1","impliedFormat":1},{"version":"1337669e81e0c7db93e19119e3bca9424c6ee13fc3f8539e9a76cb7a2466793a","impliedFormat":1},{"version":"0e0586f4b5164582a528a678eb28a9aaa45fd2f4bfacfe03ffe925698a02171f","impliedFormat":1},{"version":"c8eeffebe6c2c6800f73aa59d1436d4dadbad7f3ddda02a831ffa66114c3122d","impliedFormat":1},{"version":"52710311bb8e2ffd27898b9faa8f7c19a63df7b7dfb8cec0cec4ad6d427d717f","impliedFormat":1},{"version":"36526266b7ce7a7822da7e41f68094f8121faa373b468ae4659ff5c47a3fb8bf","impliedFormat":1},{"version":"a7ef0ab7712ce98f0e762e69d09b5df61454f7a7e75fe21f65932068830eaf69","impliedFormat":1},{"version":"54e12b449e61b43f37dcc260f3f81f603894cdf8e6dc0022c3794a088172efec","impliedFormat":1},{"version":"095b96e4abcb52a29743b140c17faab750df6520a4b5fd16da5e58b57a530e8d","impliedFormat":1},{"version":"35892382ce53c85e1ee66905b4093ef50179b2312b5a8943f5006b15b9b7b21b","impliedFormat":1},{"version":"0fa43815d4b05eafe97c056dae73c313f23a9f00b559f1e942d042c7a04db93c","impliedFormat":1},{"version":"db94ab0411e0b9a60a2144ac0c8a324ba9a98f16f9bbbce8646cae388580143f","impliedFormat":1},{"version":"238fc0962aeadfe753ececb4d30b4f1904372a8669e97ef3713025bbe51343db","impliedFormat":1},{"version":"a0f6029258f5c6bb52eaac42a5286fdce7dda2d36aedfec4a4cfe531d353e4df","impliedFormat":1},{"version":"b6ee9bedb98ca4f515a84d9d5a8d4e7f245dc1384aeb9d94afba71e1da356ec6","impliedFormat":1},{"version":"029578f738148bf4a488cc3c6f49395a801a96a157d3edfe101b0d832deeb1c8","impliedFormat":1},{"version":"c2956026078814be6dc01515213aeb1eb816e81715085952bbc97b7c81fe3f6d","impliedFormat":1},{"version":"44861c122de3c0e97934e2788d359658bca51adfe9fb2bbffb12faedc05bd8ee","impliedFormat":1},{"version":"4c1acad6ae29653e2b2096bb860f9954a389b6ef4225f1bc90d78494f9eb643c","impliedFormat":1},{"version":"9f969e573f44c3b8b21e35cc3e7a6e88c42d8b9e92252fb7d27593927d970170","impliedFormat":1},{"version":"d6ba1f4c827ca5a09790967fbb8e4f1192e855060fd917df1dbe7514672408dc","impliedFormat":1},{"version":"7e2266d96f5466a596954f708ed2801815929d5aa583545072b538bb396683c4","impliedFormat":1},{"version":"643efb9d7747ee1dd50ff5bd4b7a87351157e55988c7d2f90ffbdf124f063931","impliedFormat":1},{"version":"e31d3c7cbc3b62c796c30ee847ac90e5c1e28e4fbeb730dc9abc61e5733e8659","impliedFormat":1},{"version":"c34245a57cf442ca965f45f986fa5222f0f9a2d13cc07a4e4442b5e6019a56e5","impliedFormat":1},{"version":"e0167bbf324d83a840f52fd7215091d39ad26dbd284ae57e3ef3c4234dfc96e9","impliedFormat":1},{"version":"0ac4877e66eb958c522b01ef1baa44c4a8c990e02e733947d43ae6156bbf084b","impliedFormat":1},{"version":"c9f67c3153284dcd65252558be78ad870108f8151bc87c14419bc7b8644e00f5","impliedFormat":1},{"version":"4371d522051d372719be64cd39321c8af1e0bf86573586320dd794ec42b10df2","impliedFormat":1},{"version":"9d2f4fa9f6132781ad1e4af3d240056e73ccb1cda072cd5e910d472311f1ed23","impliedFormat":1},{"version":"2bdc75e0ab20bdce5594f747b219d28f468a4e15130458a82a16ad046ab8853d","impliedFormat":1},{"version":"67ab81f7158267ace96b49d20cbe2344c888e287820bd2506f4f1638b50e9526","impliedFormat":1},{"version":"4b954a3d432dca82c787c06d2f1cca0fe673a4b440c5e0195429bd1fe43b324a","impliedFormat":1},{"version":"5eaec1d2a956a9903f11241c26d647776f3c05e43a9da2bffbb4b77cc31c1ac2","impliedFormat":1},{"version":"c074469f687a4193b1fc3dad18242e0c5b2acfef6020cd722256e77dd088e5e4","impliedFormat":1},{"version":"3d24aec533fe2f035b0675ba1c0e55e8680a714fff2a517e0fb388279476701c","impliedFormat":1},{"version":"2ceb20d0427be32daad57e7b8135500d6794d0755e449acf9b1729863ef3b84d","impliedFormat":1},{"version":"1c1e44725c7a4886e33c2365f51d568e9d72327d26830d0ee2fd08b283e01128","impliedFormat":1},{"version":"497dd17156e0d6d3908dfa110d25c8b46917f57ef99bda373b50b07bc9e7b55a","impliedFormat":1},{"version":"393c6ff8c9c899795ff3eb9684b2ea6723e4886f0d5b793b53e417a5dfe6e878","impliedFormat":1},{"version":"d51a2e050c8a131b13ec9330a0869e5ac75b9ac4ebde52d5f474e819510b5263","impliedFormat":1},{"version":"8bc7858a9dfbdfb66c16c8e0c198d9ec85c94778c7e0f680165a8d2d6d77c20c","impliedFormat":1},{"version":"579d9d3c25058b854a6f7cc6368a473efcaa0740f45db13cb508761d35fc0156","impliedFormat":1},{"version":"7da0c2a6c551ce796e40c49f6d47cc6c6d27d547f08b430930985cbfe62d11b0","impliedFormat":1},{"version":"b92572870c938b1939e9780203f0beb009105bee4a656186332fdfd6a101f16a","impliedFormat":1},{"version":"59c2cbf84c22fae87f4f506f36a7258a72b931b602115067dfd6008ee526f8c0","impliedFormat":1},{"version":"1e09cd1bc6b6baa0733e1e799c4533105ea79cbb109937c71e8c870e14693216","impliedFormat":1},{"version":"0b60cfcd94fa9bd9fa58176650c7e4c72f99b9d30a50d0b55aa08b510276af96","impliedFormat":1},{"version":"ba25681012e5117866a2456dd3557e24aa5a946ed641126aa4469880db526883","impliedFormat":1},{"version":"2b1e058a8c3944890c7ce7c712ecfd0f2645420ee67537ac031d7afe6feda6e0","impliedFormat":1},{"version":"175dbcd1f226eebd93fd9628e9180fb537bb1171489b33db7b388ef0f4e73b37","impliedFormat":1},{"version":"69ec6331ee3a7cd6bade5d5f683f1705c1041ff77432aa18c50d2097e61f93db","impliedFormat":1},{"version":"06f34a0f2151b619314fc8a54e4352a40fd5606bda50623c326c3be365cc1ef9","impliedFormat":1},{"version":"5d4332fe701034ee5792b0291fb80f574e63df3af208a6a41df67ffce7957e8a","impliedFormat":1},{"version":"4143f667b1dd90b0051941c329122cfad9d6cdded8d449cb95f96138214d40df","impliedFormat":1},{"version":"48b1bd57c77cf869cc5eed0acb63c40d51de1b934c2fd89c685bcd6a70dd7634","impliedFormat":1},{"version":"74b0a0c98878fdbdd0bf3dc127093ac8f30daae04e1bc2da771e676302ffb737","impliedFormat":1},{"version":"9fa6fdc1379f21457baa7fd1f0e758eaa5112fc9bffeb791b811afcd693c8f74","impliedFormat":1},{"version":"d329bc1b7a5ff949f84b44bd67c8e2e869fc1a284d9b06b2ab2081e676c07a85","impliedFormat":1},{"version":"756624b5378a4a0eedb5ce154a6f5249341c5b76fbfe87a34052e8d9d4fb01d3","impliedFormat":1},{"version":"22522e8a7d885e19cc9eb7f401f0387e73b1074d8a846cdd8b915a7b02feca21","impliedFormat":1},{"version":"b3ded8e50b3cdf548d7c8d3b3b5b2105932b04a2f08b392564f4bc499407e4e5","impliedFormat":1},{"version":"7bd94408358caf1794ad24546ca0aa56f9be6be2d3245d0972fcb924b84a81fd","impliedFormat":1},{"version":"07344ac6f5a78c2391b76e54cbcedba8874234a5c2fb222907c0affedffc617d","impliedFormat":1},{"version":"920b283babbc97fb25bca96b0aba77b628e76c963e6de1891911d036e57bab68","impliedFormat":1},{"version":"a1284be154a27c000b03c905d0778989e174eec10c20195c484e695ae2b3f61c","impliedFormat":1},{"version":"ddf8781af4d3afef617ae07163e91515149671e5042605d90e4432d3ea051c4b","impliedFormat":1},{"version":"e239f06655edd65e81e25a8ccb9e4cc4ca07ed1d8f760736c623da63826c31aa","impliedFormat":1},{"version":"1577f6c355d10cb2ae0fbb2a9d8e2415693e656f037225498272302edc7e95a6","impliedFormat":1},{"version":"91f51fd21106fdd048ba6b63eef0c224d4f45d334fcc8cf562f1bf4650ca870e","impliedFormat":1},{"version":"9f00f2bc49f0c10275a52cb4f9e2991860d8b7b0922bfab6eafe14178377aa72","impliedFormat":1},{"version":"c7ad6a9bca1504fe7050caafa0930eb1155c61d6993c31d46b6bf4801c4b82fc","impliedFormat":1},{"version":"0a8fcef82392175b77fd702e9bcefe8ebdb63cf2a0f5ac1b12dacbed4b5ce3eb","impliedFormat":1},{"version":"c6688fd4c2a8a24c9b80da3660a7a06b93ed37d12d84f3ba4aa071ffc125e75f","impliedFormat":1},{"version":"4f15cbf654033c601afd9ce4e8b6245240e02ad9b6817bf63b9917041f7efbbc","impliedFormat":1},{"version":"74dd77a60652ab9276517b0909a23af8b3ce3e1e4ce75cc9675d15ece02bcb21","impliedFormat":1},{"version":"e26bbfe071ae9c4198a67ca2879a95c29482481d66aa5b5af1b0702a0b204d08","impliedFormat":1},{"version":"6b537325e789ad4586ac9946113be36983d3ca6cdd9c3e840e7d4b03ed3d08e9","impliedFormat":1},{"version":"8386725375f47af9a7d821c0c36c3cae8db8a3af71acd786cf8d30de9d0f7292","impliedFormat":1},{"version":"8a9db0f569f937f11c3fc7c4b552c934aacef0d123f55d2d429c1ddad9d5c35f","impliedFormat":1},{"version":"8fc11f102df58f03d36fcbf0da3efa37c177f5f18f534c76179ceef0c3a672cd","impliedFormat":1},{"version":"6d3b5e48915707dc1e9bd5fa4c2e0a05e7fe4c18253c831711237a1d80d28647","impliedFormat":1},{"version":"9fd00c3b41cc467245410ae5f197d2c43d11f59aa3b8e2ecff30700c8d672d9b","impliedFormat":1},{"version":"ffa71ac55b8aa40b9e5ea6c7d98eda90324095e7f5edaf764e857447e226edb2","impliedFormat":1},{"version":"05d41b3e7789381ff4d7f06d8739bf54cc8e75b835cb28f22e59c1d212e48ff3","impliedFormat":1},{"version":"6fbcfc270125b77808679b682663c7c6ad36518f5a528c5f7258bcd635096770","impliedFormat":1},{"version":"c37e8a3247c4eef59bc73e005c929ee8e1fd9c021fc1335d26739926f9b0ec81","impliedFormat":1},{"version":"f63be9b46a22ee5894316cf71a4ba7581809dd98cf046109060a1214ee9e2977","impliedFormat":1},{"version":"0ba518e0a026639f2899db9ec28723fcd37bf50391a37d5c55295eb520a4d291","impliedFormat":1},{"version":"b2dbb9485701a1d8250d9a35b74afd41b9a403c32484ed40ed195e8aa369ae70","impliedFormat":1},{"version":"eb54061f0e3d5a12f59a36d6ccbdf22e0521ce23564c56f46457fad2d79f6170","impliedFormat":1},{"version":"fc73f26a6742a110816d31227d0b7a25d7e66993b4e47ce2b824af6867afec4b","impliedFormat":1},{"version":"f9ec74382c95cbc85804daf0e9dabed56511a6dfb72f8a2868aa46a0b9b5eafc","impliedFormat":1},{"version":"b85c590b66fd3f340b550fdb2dfd7cafd4fc6396bb4118f97f4eaad16c5ce56d","impliedFormat":1},{"version":"e0a6dda33cc7d40128319e4cf7f15206580b3a95559511176556a43d8297d584","impliedFormat":1},{"version":"be9b0caec55c60ade497dc768706fb8595c5d9f652a3b6da3961abb164ad21af","impliedFormat":1},{"version":"4d4933c234fb40e577bd8a1af0ccd5a62da4dcbc5a36e2bc55f76ccde728dffb","impliedFormat":1},{"version":"90878ed33999d4ff8da72bd2ca3efb1cde76d81940767adc8c229a70eb9332b2","impliedFormat":1},{"version":"d7236656e70e3a7005dba52aa27b2c989ba676aff1cab0863795ac6185f8d54f","impliedFormat":1},{"version":"e327901e9f31d1ad13928a95d95604ee4917d72ad96092da65612879d89aba42","impliedFormat":1},{"version":"3fa5834eb3d40247fe3211c82d6545655e137aa81ad30f67ce70592f553a5fb4","impliedFormat":1},{"version":"beb9be3bcfed238e5757cd099c5e37b30f6d655d647fdbcaff5e2b2856daabe9","impliedFormat":1},{"version":"56471c69ca42d26f78feb56c12ca3f09b832e8de8eb85e6076bf4d170a1b5a92","impliedFormat":1},{"version":"d30d5c04b35eeddd3216295e2f5ba9b34ea7e9a18799a8e0f154c96e9b76e52a","impliedFormat":1},{"version":"81c3d9b4d90902aa6b3cbd22e4d956b6eb5c46c4ea2d42c8ff63201c3e9676da","impliedFormat":1},{"version":"5bfc3a4bd84a6f4b992b3d285193a8140c80bbb49d50a98c4f28ad14d10e0acc","impliedFormat":1},{"version":"c88a05bdbc3b36dd5ea7881050d8dc6ee709288736fc54e19a04476d61b7c52d","impliedFormat":1},{"version":"864c844c424536df0f6f745101d90d69dd14b36aa8bd6dde11268bb91e7de88e","impliedFormat":1},{"version":"c74a70a215bbd8b763610f195459193ab05c877b3654e74f6c8881848b9ddb7f","impliedFormat":1},{"version":"3fa94513af13055cd79ea0b70078521e4484e576f8973e0712db9aab2f5dd436","impliedFormat":1},{"version":"1e31715ac5aeb72ebdd19aa670feb4ce2d04e994c583311488783ddba928dad1","impliedFormat":1},{"version":"3d409649b4e73004b7561219ce791874818239913cac47accc083fad58f4f985","impliedFormat":1},{"version":"051908114dee3ca6d0250aacb0a4a201e60f458085177d5eda1fc3cde2e570f3","impliedFormat":1},{"version":"c8c173ea73bd41b956964fc44c437f1087744be6ac68e452c18b3034be7b19d0","impliedFormat":1},{"version":"6246da8a6d1e2a4b3bd22ba3e7478a82917d47c7ef71a6e084702c4bf64adbae","impliedFormat":1},{"version":"b0f8a6436fbaf3fb7b707e2551b3029650bfaeb51d4b98e089e9a104d5b559b5","impliedFormat":1},{"version":"eae0ac4f87d56dcf9fbcf9314540cc1447e7a206eee8371b44afa3e2911e520c","impliedFormat":1},{"version":"b585e7131070c77b28cc682f9b1be6710e5506c196a4b6b94c3028eb865de4a7","impliedFormat":1},{"version":"b92ac4cc40d551450a87f9154a8d088e31cff02c36e81db2976d9ff070ba9929","impliedFormat":1},{"version":"43700e8832b12f82e6f519b56fae2695e93bb18dddb485ddea6583a0d1482992","impliedFormat":1},{"version":"e8165ea64af5de7f400d851aeea5703a3b8ac021c08bebc958859d341fa53387","impliedFormat":1},{"version":"a84e99b46d8cca434903ad61735b2a85b3d400aa0da36b6c4d767df3b2b5c741","impliedFormat":1},{"version":"9d9f5ae35e41ce29d89882b295802d3929c0ff9b6c808fa4bb82e4e47f16bee5","impliedFormat":1},{"version":"a7d86611d7882643dd8c529d56d2e2b698afd3a13a5adc2d9e8157b57927c0da","impliedFormat":1},{"version":"7e4615c366c93399f288c7bfbaa00a1dc123578be9d8ac96b15d489efc3f4851","impliedFormat":1},{"version":"6428db5134571de46adfb40eb4b89ce7b5e2f0e2fc52a6b7ca38eb634f0201d3","impliedFormat":1},{"version":"5124e88a9353de0520f0f3f6e7807e95b8c9c8b9ff350d33afe1a74373b21e43","impliedFormat":1},{"version":"5216ed5ffd26830b98774147855243f47259453ba5a2efd894f76c357ca85cde","impliedFormat":1},{"version":"46ab802cac63e1d85c5e4e8f42e4fea774796aad65b60060e6d292d1dde4986c","impliedFormat":1},{"version":"4a800f1d740379122c473c18343058f4bd63c3dffdef4d0edba668caa9c75f54","impliedFormat":1},{"version":"8e6868a58ca21e92e09017440fdb42ebfe78361803be2c1e7f49883b7113fdc2","impliedFormat":1},{"version":"2fbb72a22faefa3c9ae0dfb2a7e83d7b3d82ec625a74a8800a9da973511b0672","impliedFormat":1},{"version":"3e8c1a811bad9e5cd313c3d90c39a99867befa746098cdad81a9578ac3392541","impliedFormat":1},{"version":"d88f78b4e272864f414d98e5ed0996cd09f7a3bb01c5b7528320386f7383153d","impliedFormat":1},{"version":"0b9c34da2c6f0170e6a357112b91f2351712c5a537b76e42adfee9a91308b122","impliedFormat":1},{"version":"47adac87ec85a52ed2562cb4a3b441383551727ed802e471aa05c12e7cc7e27e","impliedFormat":1},{"version":"d1cacf181763c5d0960986f6d0abd1a36fc58fc06a707c9f5060b6b5526179ca","impliedFormat":1},{"version":"92610d503212366ff87801c2b9dc2d1bccfa427f175261a5c11331bc3588bb3f","impliedFormat":1},{"version":"805e2737ce5d94d7da549ed51dfa2e27c2f06114b19573687e9bde355a20f0ff","impliedFormat":1},{"version":"a37b576e17cf09938090a0e7feaec52d5091a1d2bbd73d7335d350e5f0e8be95","impliedFormat":1},{"version":"885e52b8e728e3f4585c90e68ab02ef59f201007ad928306d01f648a33e69425","impliedFormat":1},{"version":"a75bd5becf59325ed846f783a30e8788859f72ac07f7202e39790cc2e2cc2b93","impliedFormat":1},{"version":"deeb63df4a20dd17a2faee7a8c600b0c283253ec73a8dc1014c7c1df67a4fbd2","impliedFormat":1},{"version":"62a34b15c383190a7f8518183e2757bd23e5dcbb9123ac8c08c72355f47e063c","impliedFormat":1},{"version":"6c4df7fb4fb528f865f710ba621b59d9e1bfc572e1796c7622434b1ece22016d","impliedFormat":1},{"version":"731d07940d9b4313122e6cc58829ea57dcc5748003df9a0cad7eb444b0644685","impliedFormat":1},{"version":"3535c999e9abf676d6436b49183546d879fdbb5255db946cecc91755c7c0141a","impliedFormat":1},{"version":"56a0e1373866bff7f7373a6a65f4e7c7d1f9d26dc794ec5b6f43dc42da99e363","impliedFormat":1},{"version":"32c0aae484ed8b3b6e71089ce06bcf8a0e36dc22c866c27f02617206236e1c65","impliedFormat":1},{"version":"033c269cd9631b3f56bb69a9f912c1f0d6f83cf2cff4d436ee1c98f6e655e3b5","impliedFormat":1},{"version":"3fbd94f4c9f9b5376e3cb272c0aafe489fe1ea5fc9b148b33227c42d5322a662","impliedFormat":1},{"version":"a9b6411417d4bffd9a89c41dc9dedda7d39fb4fa378eaa0ab55ec9ea1a94eb6a","impliedFormat":1},{"version":"1329e7cd7aca4d223ef5a088d82bc3f6f302ce70581c8d3823a050ea155eec3b","impliedFormat":1},{"version":"09248c76437c5b1efce189b4050c398f76a9385135af75c5fb46308b0d1432e0","impliedFormat":1},{"version":"4b606e3a6c5374e2080ac87279de3b554da96a7851a5f94310bd00ce16f5dff6","impliedFormat":1},{"version":"dde00f41a2d2b1e70df6df8ac33de7cb3a658956212c7bee326245cc01c990c2","impliedFormat":1},{"version":"fb8b5eb14a539b2aaac33b34032da8c8f41d3a9af77c6f549e7b1b5b71cf7c3e","impliedFormat":1},{"version":"b682ba9d0460d892ca732a50b85b6caffa2376f8664eefcaa5e760c4885b7ef1","impliedFormat":1},{"version":"4d0fb63ead6edd5c19c7617f48e86a18e79c2d964db4237133257179c8ab7bb2","impliedFormat":1},{"version":"53e65282ab040a9f535f4ad2e3c8d8346034d8d69941370886d17055874b348d","impliedFormat":1},{"version":"e6db934da4b03c1f4f1da6f4165a981ec004e9e7d956c585775326b392d4d886","impliedFormat":1},{"version":"6ecb85c8cbb289fe72e1d302684e659cc01ef76ae8e0ad01e8b2203706af1d56","impliedFormat":1},{"version":"896748cd459ea95f9b0602262c01fa7fbd12bc7e34809243e89b584defb9423f","impliedFormat":1},{"version":"47d6c2e44870155650a6e7a6ead4af5cb42a91e1046b5a96b2b205364a702e62","impliedFormat":1},{"version":"5cd5a999e218c635ea6c3e0d64da34a0f112757e793f29bc097fd18b5267f427","impliedFormat":1},{"version":"d1f5dad58d374b82cf30c31be749d27f65dbbfd0ce5b7bccacd89b300125c68c","impliedFormat":1},{"version":"646692746d1fe69a233a6211621265fc2d10262b0c580c444fc0573c213c5c0b","impliedFormat":1},{"version":"ab2e9c6b182fc7f08097c0f88377258733cb5457a4f481a8bbca2419a67a11bc","impliedFormat":1},{"version":"bbc8bfa3f3f514d7d40ebaabab137858c96cb525eb54a9dcfa500f2715741e51","impliedFormat":1},{"version":"b50f05738b1e82cbb7318eb35a7aaf25036f5585b75bbf4377cfa2bad15c40bf","impliedFormat":1},{"version":"952f8e7a8f430be7dc6492acdd73a9af524a2204c5c523fba9cafca092af6ed5","impliedFormat":1},{"version":"9a5ce69b4f5b550a108931d9280b80fb5b7e1e8a8711ebef63821ba6e498d478","impliedFormat":1},{"version":"ca350453a1bb8304e7fb90a538832598ecb397f2718b372be67e800a52a68c51","impliedFormat":1},{"version":"11a4715defaced80bf3555c7f456b2de8d31f34040570219b156d471e633313f","impliedFormat":1},{"version":"d002f4105b598fcfa68c97605f2083256afe1929b35abe1a314db1bfe0e8365b","impliedFormat":1},{"version":"ff019de57bbc37c21d4ad6a9ba077bc5614e5c7ca7df423371d08e5b91fdd72d","impliedFormat":1},{"version":"67b1ed683edb03b21a2d3a3a62747f5714ff80f6f1d6825756558605f2656797","impliedFormat":1},{"version":"bd2e4751c385085f4401175ed5800712b56cbe5212025ec2ee3a3c6f1990f756","impliedFormat":1},{"version":"5fe72b16ace5d8713434362d4b51531ee00ac455ef2f2963abc33d5b8bc92807","impliedFormat":1},{"version":"aea33475128a0fdd7920e80fa0dae88992387ff598ed0963ee9ead5890b85b00","impliedFormat":1},{"version":"93d20368cdb5fff7f7398bfc9b2b474b2a2d5867277a0631a33b7db7fd53d5b4","impliedFormat":1},{"version":"b1e69b9834104482fabf7fba40e86a282ee10e0600ffd75123622f4610b0ef9e","impliedFormat":1},{"version":"ad5bb6c450cb574289db945ff82be103ed5d0ad8ee8c76164cee7999c695ae01","impliedFormat":1},{"version":"217761e8a5482b3ad20588a801521c2f5f9f7fb2fbb416d4eff3aff9b57f8471","impliedFormat":1},{"version":"7ad780687331f05998c62277d73b6f15ee3e8045b0187a515ffc49c0ad993606","impliedFormat":1},{"version":"e9aa5ccb42e118f5418721d2ac8c0ebdebeb9502007db9b4c1b7c9b8d493013e","impliedFormat":1},{"version":"d300868212b3cc4d13228f5dc2e9880d5959dc742c0c55be2fc43bcda8504c8f","impliedFormat":1},{"version":"0c55daad827669843bd2401f1ddd163b74d9f922680b08ae6e162ceb6c11b078","impliedFormat":1},{"version":"fe45a9bc654dfd1550c9466c0dad9c8017f2626476ed9d25c65ddfc1943f6b74","impliedFormat":1},{"version":"03abcbc7b5b68887525be71a194dd7f9f68276b5fb5b8989abae9a91585ddc33","impliedFormat":1},{"version":"5055e86e689cfe39104ab71298757e5aac839c2ea9d1f12299e76fa79303d47d","impliedFormat":1},{"version":"42266c387025558423c19d624f671352aac3e449c23906cb636f9ae317b72d7e","impliedFormat":1},{"version":"9f5b8bb9039dbd4d9d7429af2628d64699ddb2afb8e30e9c6ec8e4a06a400075","impliedFormat":1},{"version":"965cf6054aa1243989d74f8560854b4e961152e22a98d2e3eea4f2e275785820","impliedFormat":1},{"version":"5acd76dfa7a013867806a5b6617556838f9e93462e1b45cfa98f60ffd9e8cd65","impliedFormat":1},{"version":"ef2cfa6e15794eea8df1065704cfdc37f3fee59ceeef7056fe830ebdf9513d38","impliedFormat":1},{"version":"8bd0a543896a5b8db5da2cec67c2feab02fda7d6659af9e7b69f4f0eb0d38dd8","impliedFormat":1},{"version":"5cb74ad3f044d65b2974538c836fe8ccc45eccb1fba940ea0d1ab00c87560ae9","impliedFormat":1},{"version":"3f5ed15fd908add3bc4944124ceb55ee3b51ec9acdd153930bf9aaab13932d11","impliedFormat":1},{"version":"50850c305a4b180a4b9ab635ab1f2f2cbec82a6890f62b3503fdb718be83f933","impliedFormat":1},{"version":"a5ff840ba4a80b834b5a65c1a6a31cf708228bbdfbd4b5a4d238b26914157f21","impliedFormat":1},{"version":"81a25280b528ab3a8403b3e442131122c4d72317b06f4988e6e1c944f8bb34fb","impliedFormat":1},{"version":"e487f453cd48a91b1f9de1599835abb7939b3572d26e13030c09278d55734f20","impliedFormat":1},{"version":"bd0658c8792583e76767fdd80568976e39a45042fe5a07b7bdf70a4025c11981","impliedFormat":1},{"version":"992d70b81a0e6969dcd8f83fed15d9365e4a68b5ac8909fc00bb4bca18e411e6","impliedFormat":1},{"version":"f3955a4a7ebc1d43c4889256499cda5361c89a50e32b055f5b6850ff8b7d3342","impliedFormat":1},{"version":"438247e782a8a9b9abdce618e963667cf95157cc6d3f5194a452d3c7d9e9655c","impliedFormat":1},{"version":"d0645cc714d3af385014b35de8638d1995b429d82011ddf512df9befd57ee493","impliedFormat":1},{"version":"7e8bafc114bee840722370c39472b5450de121feedb49f9080cf5a0d696b1664","impliedFormat":1},{"version":"c96e037286b438e2e8f6c29cd05fdfaa3e7b2b79eb69c1c059c278e612c89010","impliedFormat":1},{"version":"c28ab94298e30b0cf9f39bdb4a657f5fc6963663ba6f5002df6d527affcec6e7","impliedFormat":1},{"version":"ecc28b99875b862b8484c62f011b06763020e91fd15c4d79097027be48a0abc0","impliedFormat":1},{"version":"18de6228ba98fca2256a14117b485f600a9a5154f84a748b4051a5bfd3af4587","impliedFormat":1},{"version":"21b5b262afbf02e6ee4d7d901338ea33936e60553ebde1a1f26b1249c5fb2b28","impliedFormat":1},{"version":"44db358cd589a801a71dcaff646a1dc9766c4f337269bc71611d8dd46c967729","impliedFormat":1},{"version":"963d9e91573ae2f5c018161c76a7b719706876b5f3505ba7d013576b6a32f455","impliedFormat":1},{"version":"085fbca4b62f1f62f52d5c0bff1aad460e054c633c0c87f843a9ba716a76f90b","impliedFormat":1},{"version":"fdfb9bef02e332b26f08158403075da0f1a701eb31f702f5cd298d5b9391582f","impliedFormat":1},{"version":"adc7e983ef534b1da4bdb89eec88eb4471a082ee2984691134756d5c03f06545","impliedFormat":1},{"version":"6344d12d787fe100067ad4c721537a52372bfb3f08e7b02ef09487d57c4369ef","impliedFormat":1},{"version":"e76b62101c25b44360058506c2fcee33a229c0598352d25619cb982076602369","impliedFormat":1},{"version":"d6d30b3497e8bca3f06d987bf54849503878ad6fb9d97924d54498cff5b5872d","impliedFormat":1},{"version":"fb4014f2d805b0d5b23c201b0db6786464bd5dc5e74c5c82b68e402567d36498","impliedFormat":1},{"version":"656be93698aee87d9e7ba5d18ff4ac3c1651921252c0aecbc1fda93ac644ef41","impliedFormat":1},{"version":"d9604409dc0146ad099b37a6586fecb71aca2576688b63c9e5e0f12a610316cb","impliedFormat":1},{"version":"a163cb7fc0af330b0b11862308adda348f0d7786bc713a63008cca02cbcc526f","impliedFormat":1},{"version":"61392f9b6689c0faede7fbccfe21622d9059984754724aa216e1a340134de1e3","impliedFormat":1},{"version":"db64be6421238c39cf0891c22d9a3e12f7efffa43367a00dc42605c8fa1bb696","impliedFormat":1},{"version":"20495ef141a89b8314671057a034e501da2c220ef97c7368c887c32194637801","impliedFormat":1},{"version":"64feb279b6e24509de85d016867ac03eb3e98e83e7823094ce3353077475d605","impliedFormat":1},{"version":"893f9e002bc69dc06054732a23b97600279968256d25c091c9618a31ee54a379","impliedFormat":1},{"version":"5cee34b44849715e2143762eb5b1831153d1aa5b041dc2c62034ba420dd9bafa","impliedFormat":1},{"version":"91dac2ba1de6418fc476f2ad0386d3b4f628309430bc30e9bb676709d477ba6c","impliedFormat":1},{"version":"36c900a0a4918f5a68ddef7b2aa63390075c4097ecbbb95e6d28eff6f759a5d7","impliedFormat":1},{"version":"5d6e31a86578f858c70fd5f7d1d939f7d41b6f68191e76074f8449e5c3060324","impliedFormat":1},{"version":"a3e8e9c476ee3b80e5ea34c41ebebe440d2b4e566c420a225d6542702e077503","impliedFormat":1},{"version":"ea69df0c17a4d020767a20242837e45a1a31378111016c2edf3d824a10b89a39","impliedFormat":1},{"version":"1a5e60159b1a03cacb7b73e393fc0fc8b2f055970d215255868ffb2c27b992d0","impliedFormat":1},{"version":"672cd5482d581cea83eb32f9e629bcc9b1f81077b1079635b92325a2876a1ff4","impliedFormat":1},{"version":"29375574f9487e5a3a0bbb08bf55d01fbac144e6b00cec0ccb1d78ee1bacce27","impliedFormat":1},{"version":"709a6500f570e58884f28d273f2ea6edc6e372fb9d6530048782035b4cb1cc14","impliedFormat":1},{"version":"af68962727655ea00ce42736e31e1729fe6c5611f584f4ad46a0d970c638095b","impliedFormat":1},{"version":"7032669aea1ea3c4bc12685f164a9bc4c16b92f8aa36d006e887536b0711eb20","impliedFormat":1},{"version":"ad744506ec3551f1bc2de23ef8bad2135fe89c126b8e163f1810060a42b2088e","impliedFormat":1},{"version":"3e55a65822875e85f96e444b79787f619b9473e36c143dedc6d5441a2544b8ab","impliedFormat":1},{"version":"e97f399bb985377f80c07a8c687976bbc699d685f1262750f44409b1a4ff9c2f","impliedFormat":1},{"version":"40f88365d3ef00e51a23c752a707fed087144e1e0f93383aa76a55307efd2fda","impliedFormat":1},{"version":"7df7fe0af70c9e7a31ad35cc898aa2cf54eabbdd0a6d5975aa38487068d89b40","impliedFormat":1},{"version":"f67db248d03391ca83e7edd79a18f83bbf3a06b2b6765c845ce03da925128a7b","impliedFormat":1},{"version":"42775b84d240ac9d18cd8842bf5aa44b372eb2d5b612f7e4bfd764ec0a540f32","impliedFormat":1},{"version":"73b0fd6255f24e82be861f800a264f0175984062b6ccca3052578b03ed6f397b","impliedFormat":1},{"version":"bc457244be1dc0f575fe7044ac024360a6e4cdfffb9e82f3e940e563f2113930","impliedFormat":1},{"version":"0967b227e2feb1e3b4dbfdd265145290f300a5cf1bb41c96b2db173c8df89b2f","impliedFormat":1},{"version":"ccca9e138d9f5627aed5c1518e22b8e5456f0ff4842ab7a060f738e0970ccc2e","impliedFormat":1},{"version":"bc0b17d3fd0e34083fbc886367ed53563b569d1d05214f60b21117e2dbfb7fdd","impliedFormat":99},{"version":"b2a48e805ed15ce69bef67a2ec3db3f1191744cdf1aa2eb3ae52ba87245c4e71","impliedFormat":99},{"version":"cd4ea963673d9665957a76c56627e23e6a627b503a80668de42520799613bc1c","impliedFormat":99},{"version":"77d30b19c8f0c0381a450becc646e669d07480a1e220869f5581bc7a9e12abf3","impliedFormat":99},{"version":"5e8b5c0e945af7853835772e33785c4d4b157db31d7f9c62ea1a0c8f839ce4ce","impliedFormat":99},{"version":"058709777c09f2ef9b91ec305d4fd84cfa44eb4a0e39e39a3c759924b352f194","impliedFormat":99},{"version":"ed26ab5a8f96cf58b833ac7d4469a876792b6a7a2cef19bdadbb80ccff62b03d","impliedFormat":99},{"version":"6dc825b008778dc68a5ecf41f8c90fb36aa41178e485a01793ba92bdb9aa59b6","impliedFormat":99},{"version":"444ab992a8765953e4e5870a6f287b1000d1c86a222603894955e8f5d92ff398","impliedFormat":99},{"version":"6ecc423e71318bafbd230e6059e082c377170dfc7e02fccfa600586f8604d452","impliedFormat":99},{"version":"772f9bdd2bf50c9c01b0506001545e9b878faa7394ad6e7d90b49b179a024584","impliedFormat":99},{"version":"ff056b2d1c3840aedc9bcedef4e71fc7ad3525c5781540e27a160a83b1af09b6","impliedFormat":99},{"version":"df251aa7a87b6d003a45ad1f71b87ff4448e535db473cb3c897720012b5553d2","impliedFormat":99},{"version":"4964b70379078ef10fdccec4b350d598afdd4967dc5b6dc7cb87a167c68574de","impliedFormat":99},{"version":"0495afa06118083a11cd4da27acfd96a01b989aff0fc633823c5febe9668ef15","impliedFormat":99},{"version":"f9e605d0877ae459641968db7021e2dfd34f574ea9f4102c913403e60e96a27f","impliedFormat":99},{"version":"cd1ccdd9fd7980d43dfede5d42ee3d18064baed98b136089cf7c8221d562f058","impliedFormat":99},{"version":"d60f9a4fd1e734e7b79517f02622426ea1000deb7d6549dfdece043353691a4e","impliedFormat":99},{"version":"ec05ccc3a2e35ef2800a5b5ed2eb2ad4cd004955447bebd86883ddf49625b400","impliedFormat":99},{"version":"c73b59f91088c00886d44ca296d53a75c263c3bda31e3b2f37ceb137382282be","impliedFormat":99},{"version":"403d28b5e5f8fcff795ac038902033ec5890143e950af45bd91a3ed231e8b59c","impliedFormat":99},{"version":"75849f5ead7684bf85ee9cce7e84683ed4332fa187f8ee0978ba9df96c5cee06","impliedFormat":99},{"version":"e7aa2c584edb0970cb4bb01eb10344200286055f9a22bc3dadcc5a1f9199af3e","impliedFormat":99},{"version":"05aae6909bd7c48eeec63b3848884f0912b6cc1523d3b92b03f74e2ad9810537","impliedFormat":99},{"version":"ae23a65a2b664ffe979b0a2a98842e10bdf3af67a356f14bbc9d77eb3ab13585","impliedFormat":99},{"version":"0b17ac073f8dd236cb4ec1f16c84ac2632713bf421305c96a536c360b1500f01","impliedFormat":99},{"version":"2db00053dff66774bc4216209acf094dd70d9dfd8211e409fc4bd8d10f7f66f6","impliedFormat":99},{"version":"eccf6ad2a8624329653896e8dbd03f30756cbd902a81b5d3942d6cf0e1a21575","impliedFormat":99},{"version":"a0ed198890ccf547f658ca38674174d5ea7179fb0ec3607af9d99043f96fd418","impliedFormat":99},{"version":"6d57157eb3a6e1a3fbfb30a6797faf1ba198d5f2f0a4b602b374460ba6d691f0","impliedFormat":99},{"version":"4f82316c3b760ec09dbd7133437135a56154507fc6278ffd3fd046cbf8fdb0e6","impliedFormat":99},{"version":"62463aa3d299ae0cdc5473d2ac32213a05753c3adce87a8801c6d2b114a64116","impliedFormat":99},{"version":"091d3028e4421d187b94ee31d2a1476f43d3e5ac5b8c0303bf523a935b54ad56","impliedFormat":99},{"version":"f5a0a62de1afd5bc2768592fbcf08167d4d714a1dbd3820f250b1c60061ce56d","impliedFormat":99},{"version":"4866c3af5bb5bfd29023abfb6e139e43a0bfd689fc4dac3470f246117e5798d2","impliedFormat":99},{"version":"cbae5c219535f14c0826c0ebc5d62ca9da45d3766193b94770f80a63a5862990","impliedFormat":99},{"version":"7d763a113984bd3ebf2b4f01be618aee4b7480b4a0ad3d8d40394ddf9f01090e","impliedFormat":99},{"version":"10cc66970fd44c17449a2698afd29232bf473dd845747757f170d383847f6d6a","impliedFormat":99},{"version":"b8b3ec9494cff3b7892e971c33f3c2162af67bd86a1a7954976e75d084714856","impliedFormat":99},{"version":"feb095f1125923094f489af0548b503a655ccb46531da7320d1e12764d9a14c2","impliedFormat":99},{"version":"80ae880ac3e366a8aca79089c9d8467b1753e19fb65a9cf43bbfdb6db1ac588d","impliedFormat":99},{"version":"f078a62774233dbe41217f6649b8059313093144e762c644eb18cbbb110e90dd","impliedFormat":99},{"version":"a743cf98667fdbb6989d9a7629d25a9824a484ce639bbf2740dc809341e6dbce","impliedFormat":99},{"version":"93ec678351999a522a66515ec2d125b14977c893cfe137657c4d5c05a2938e3f","impliedFormat":99},{"version":"d2e5be84da29480808b2ee55069cfbf958ac76486ff05ccae65bf2f916b57dbf","impliedFormat":99},{"version":"246ad87da9bc86136d9fdce6046d565d6062e3ebd324ae928f013b6550cb4170","impliedFormat":99},{"version":"1244baccf8a7a79b994ab6414c79ef39910e2d23d60ccae5d02a8160d3b2ddf4","impliedFormat":99},{"version":"5e168f60c9132665853ccba13a29e4d311ac174c0fd3eda5cee7a6c5071802d6","impliedFormat":99},{"version":"1c225a18846203fafc4334658715b0d3fd3ee842c4cfd42e628a535eda17730d","impliedFormat":99},{"version":"7ce93da38595d1caf57452d57e0733474564c2b290459d34f6e9dcf66e2d8beb","impliedFormat":99},{"version":"d7b672c1c583e9e34ff6df2549d6a55d7ca3adaf72e6a05081ea9ee625dac59f","impliedFormat":99},{"version":"f3a2902e84ebdef6525ed6bf116387a1256ea9ae8eeb36c22f070b7c9ea4cf09","impliedFormat":99},{"version":"a9c208ca634f1bc797392cb73137350456b554b88b65387b532ece77c6697258","impliedFormat":99},{"version":"ae3e98448468e46474d817b5ebe74db11ab22c2feb60e292d96ce1a4ee963623","impliedFormat":99},{"version":"9739998da807666f2075caac313246961d9621bef4bb2eac28372f42e62dcd08","impliedFormat":99},{"version":"56fbc1a52f734c917d0726e8252aa62a999612069206c627707617f01b97c10a","impliedFormat":99},{"version":"4bac2738a569f77e13bff48946a7b8e98db314cc5c8e75d14e7efd6b1ed52a85","impliedFormat":99},{"version":"5057488c21f6b91bcaaaad40dd0f108e3f03d42223e25eb2e7dc438237520218","impliedFormat":99},{"version":"e1ae15fdc661c816198d54c257307029bbc20ac169bd461028dfa287779e2cbe","signature":"6cad6a2fddaa1dea9e9b838b279e4f3a127097afb946238aad3d7aec7c4494bb"},{"version":"0784c9af319f157980064f12e77e9ae827723ccfd3952988dfd894fd430f7b87","signature":"e1b5a53f4cdd191cd0472ef7501fdb9d37006ae240aa7833245d168be7f1d26f"},{"version":"647bc4dac705d11375cb2d063f91714b9e8ee400c5588b528ac66da597b9f5e4","signature":"6c89707a9a8afadd36189004b85e2c2d8b28b59c05dd6fc6626d3746cf0b1e57"},{"version":"96ac2549532f5669806b3343e0abf2c65f399c87c336ea07b4898e04054f7753","signature":"54ea64eb73f3544609b1167c53cd3b0f00e487b9d9ccddffe9a4a0b73b414b21"},{"version":"6d021b6f16d8366c85fca4823725c3093eae710a962ad8d8e738ee957b8fcb75","signature":"2b171c81d8fc436567ee7b83af7fd2c0873638f929580579ff6d00486b3ea612"},{"version":"bcb214eae87a8a383bb694db61ef1301d8d0aa57293592d0d888126010a3b063","signature":"55fad04aba6fd829a8b5a81285787688df382032dc20507468ecaedfc62039ab"},{"version":"ac8be21223f86265e32782a1214e40461b3aa1c09c3a892d9a97651c3531385a","signature":"c2f906ed14ea1863ef07b5cf4dbb98be1a0ee7a6dc14226b1ff0fd241be31c40"},{"version":"23fdf5d13b7e4c35cb97fd856d4493a42a4a69fb0e5537e5a66a5cf1d0a85998","signature":"a41388d99d193cdae43e0e506bc60a6e83b3993cae554212be670cfeabdb19fe"},{"version":"c9c8412608f2eba309ee370bf764ed19ca9efbd3908d89023222d360960d2630","signature":"ed2fd511677c484e15f69d35fa006911c561e4fe2bc63562a21c6318d97bc5bc"},{"version":"0d4999c586856d33c6e9871115367f93a31999391258f113e040911f15dc9851","affectsGlobalScope":true,"impliedFormat":1},{"version":"93e441f2bc7b069c29fa9c2d7481f3bb96c36208934402fad4cccd44e2da6de2","impliedFormat":1},{"version":"e72426b29ed5c9129fda0562f4f4c77c54ca6f7a64b4ccacd469c7f34d4bccb0","impliedFormat":1},{"version":"090ee3fba19b5fe92752e71f302065bcd9a84307866aa13473c075faf106a623","impliedFormat":1},{"version":"6e878b8ad8efd8f4e03b5e0e9426881fd2156f0f772dd145eef8ddccb1bea5c0","impliedFormat":1},{"version":"546345130223f93760dbe5d2db1d8729422b8fad3c892d7162749097beef07b7","impliedFormat":1},{"version":"15060487683cdd635b8cc810e8cac7cb0920b6530613c3cc76bafaa476a4515e","impliedFormat":1},{"version":"54242f0e1b51b56b2d724879a31b836d94b16a2f9d7584cde62cc55a22491137","impliedFormat":1},{"version":"66938a4e745d47580868a989f499e8525722886f169c294eacd4e9b1c1aaf081","impliedFormat":1},{"version":"8974fc92dfb8eda33f542b598c103b41e4ddb70eda0ce474f0cefd94fadae89f","impliedFormat":1},{"version":"f031fdd229a8063c5abebbae11083588a803adabc88693c8765a305359a9f53a","impliedFormat":1},{"version":"4255b496a2a883a0b9c2cfc8cd77d4d9d72e2b21091d68442656fa0575dd6514","impliedFormat":1},{"version":"f34836298ccd8457fc96b5dd9e2d202a86dac466e410ddd53071d0ae9285b4d4","impliedFormat":1},{"version":"fddded6600635bee2303dd02e02a79c41a074485825ccf068ff0201448f2ae98","impliedFormat":1},{"version":"c19efd3d19224da4d63b38e1d00bf4447a6ee38e3f062a58d1f0d8691bb5433e","impliedFormat":1},{"version":"a47575f92522ec12bda97d325d3bde9c81a5f0b18b3afbe21e8254d3cec62092","impliedFormat":1},{"version":"a1910d69ba104b085ff9041097c0057a7113d2e9be99f14d666e579354d6d628","impliedFormat":1},{"version":"a8369a81b61b642b3e59d5e8ea407b6a6a57216de3d1cd989783f3aa2e3ee707","impliedFormat":1},{"version":"7e3ce6d055ebf8666cbc9baf0a78688c880b6ab853b2cc2398408ffcb1d0bbad","impliedFormat":1},{"version":"5afce8b1a1e6c7b0fa72358326512a4bf537690b1d82e98072e6f565648ec9a4","impliedFormat":1},{"version":"e475c97dc1149ade2e031d6a7c556d11130bb53ce97e194bf4074730d95a2d7f","impliedFormat":1},{"version":"23a5c1d640bc311ff6e9c788cf3d2ea530529d78b47045abddf932bc6dfcd3ea","impliedFormat":1},{"version":"0f4044f55d69511bba98ab780213a8a3b0e30a01891b96bede8445ee014bdc5f","impliedFormat":1},{"version":"f548552a0d9161d61a6ab27a9a5dcc7a21502ee688da2d08a5e99e553960a038","impliedFormat":1},{"version":"958e83fdc2a2f06acdcf56cd4964eff0c2620d6c900d98698b54f23d9dc92174","impliedFormat":1},{"version":"f688954198914003a5162ee556c9e04720d844f2ac28ab69495e46849dd64a0c","impliedFormat":1},{"version":"76f4bce4b2e67fc8485d570819bd1b3857c8d5b4a1e87f60599516f577fb6623","impliedFormat":1},{"version":"ee7b8f8eba42465579ede66c5e41e2eb566ff7e908fe15018843ac314a2d7e73","impliedFormat":1},{"version":"29448517423f80524bec281e139118a3908d046c499c00beea91bbdb26a652f0","impliedFormat":1},{"version":"f5212f6d8c94ec975c5e63bc6a77030f0855334259a3b6cf44947eda5f8c34a3","impliedFormat":1},{"version":"52c89c5e8b0f366b3da1b8771f66f35a956e95efaa0eb6b5b4e050b386ac281e","impliedFormat":1},{"version":"8d28783e4453e2496e5f6bb4ffb4cab88b173f1435c2b30a238baf2501a84287","impliedFormat":1},{"version":"7719baed8ce04780d834bc4be158921153ea6cceffbc02d0e1907c1a94c2dab9","impliedFormat":1},{"version":"e9927cc836660ad71c5f96917a4ba0cadc9c7ba8d7c7acb5c43426d63d38226f","impliedFormat":1},{"version":"bbc0233489930b03f2ce8c22005fd8706960aa1cd1aa04952d2697c8c16ba6f8","impliedFormat":1},{"version":"236ba85b6069b28102b212c76607b6ec5b8c1c4fbc1dc3c281e1bf5270fef48e","impliedFormat":1},{"version":"f20f0eba42d91b8f9da8d35fb226cd3e9f4e9cec92a29150f7b061188e0f5360","impliedFormat":1},{"version":"73c80a43d015c4c622d372e5845ccfe6977d99c171517dd8a9028154b1f1c29c","impliedFormat":1},{"version":"36048ef79e8ec02c070aed5e8fca53d803653bc7b64d4ca2a8c2296ff57f2933","impliedFormat":1},{"version":"b81ef3c3783d1e868e16d4ea68725ea233417fffb0e52bc6dcb2e9f277079f4e","impliedFormat":1},{"version":"c2c1897ce1a8eca3f0b665f5f7fd0e2183da73c80fecd785eff474099c8d938e","impliedFormat":1},{"version":"1543a94455304a159bab754e54de99fc81405b075b6527a4f3b52fa965986bc4","impliedFormat":1},{"version":"99225b34972ee91985b105b7dfdc5063801995e492752d1c8d071d5860bc0864","impliedFormat":1},{"version":"544027af6054c31cc47fca2930963409814aae8a402ef2ba88d793132a1e76c7","impliedFormat":1},{"version":"5d870596e932ea1ce3ba5d50a9e60ae2059da99d60dd5d7fa8052e40898f35ec","impliedFormat":1},{"version":"c424f9ae986eff13f6df495ce2d08e88d7ded62340c735f1629da5be5781ff5b","impliedFormat":1},{"version":"5669393084e77417e29bf7343d403f3b3acc562a0e80b12e30ed1bdc459aebea","impliedFormat":1},{"version":"05ec34f3dd0614adcbbcc0c1ea69b87157d659812d978a8c322c38e68d06e4ef","impliedFormat":1},{"version":"4c50e0b87699f43a39f816b7113ad6e3de3476b769244acc2f1659ad05b54242","impliedFormat":1},{"version":"cad6edfee4b7dc0ca047388f76bf309c26bee8e72f99a53a96dc94222499055e","impliedFormat":1},{"version":"06d696388f98b31f5bcf78c4e3f4544995c3ca331ed6f8b3af014d4e9fa07819","impliedFormat":1},{"version":"b69f081db3db3eeab6e225dbe3cb68e1c328f677e2e8ba9e1e70685febe7ef5d","impliedFormat":1},{"version":"ab4773f4373d811c57c87b4af56ea967078be9599e4817fd01feb776cf4cc8e7","impliedFormat":1},{"version":"15c4f2177763c7e7ad4d0c6e1defe12905f610915f8dceb0d1d6d6ab17875799","impliedFormat":1},{"version":"b1dd11e2073c04e5b894c4a4469f915206fcca5da42882a33882a6938797b0c1","impliedFormat":1},{"version":"b6dd407ea17906a0497bbe5868ea8ae9dda0ec2b2d9b6984dadafe10abfa7313","impliedFormat":1},{"version":"f6b2bb4c12d24a177163912eadcaa5e22e6e300e98ce4f726698baca832a281c","impliedFormat":1},{"version":"e6aebb5887dcbac8f30b7411f2a7458bc32e4f87bd542c66533da8c050b08b5e","impliedFormat":1},{"version":"ecd71c5a364472706c0ccf8486d44e38bcdf22350895a9d7b62c3db32355fe9e","impliedFormat":1},{"version":"4b62127576146ff0847e2c1cdbaf7bcd7983138f9fdac2517651e5d7d5ee617c","impliedFormat":1},{"version":"4757338e6b897bc851572edccbc3ad09dd8bc21449a40ce2341ede38d7c5678a","impliedFormat":1},{"version":"9d52d626ecd72e80b28f4f5fe65bf2e9193285070cf9a18a96a63549a63b6601","impliedFormat":1},{"version":"2f04c22b734aebe5b7f8442da1e7e9f5fb82e5dc49928510c213bf704068fc9d","impliedFormat":1},{"version":"afc01e7ca7759dcef12c88f1b0b3d5017fcfff6d02fad777b34a927c955a1dd6","impliedFormat":1},{"version":"facccb3c719c0225a959b419d62f7fd107ce8bfe93f9a5c4bc551ee257734777","impliedFormat":1},{"version":"abb1d02b724165220a5608fbd81c40ed636e4efd2504b74e6c00e4fbe8fd837a","impliedFormat":1},{"version":"2a6c1eaa4121636af0f1315a2032e167061c2e51b4ceade50723a96a736a1207","impliedFormat":1},{"version":"aab034aea490671a68810d1ff07a707820c609e45d05ec7bf08c93890fdc5533","impliedFormat":1},{"version":"167079a0661a6bedcb1b8d62ede3f26f968bb27ae8fd2e1051f5cfefa3b588e0","impliedFormat":1},{"version":"b7b3dd484f6cdff309b9f7177a5659ea32a8b0f798caa778d0119829930c4a39","impliedFormat":1},{"version":"286282506b0e0b55e87cc1db16bf86997d0cd037a1b1f0d2faa854ceea1fbc17","impliedFormat":1},{"version":"66394672cf09f92068a4aab1a0d3b4079afb6a8a9affaf73c02d8b8dd752591c","impliedFormat":1},{"version":"e67bd741cabcf37f99e0e6a1226ec46baac758abde50d922b8f5facec7376e64","impliedFormat":1},{"version":"f5410407a881f5da96ccde2bef9ad05b0b7a8b58f4fb7391a26df3e5371afc82","impliedFormat":1},{"version":"f994f58f9a4f29b3665b441a1cef9e5b9307b6d2c0eb04c45deb8d2e61e1125d","impliedFormat":1},{"version":"856467857adc8c0f5fb555840e4008b9372ccf915d1531b37aa6c207ba097be6","impliedFormat":1},{"version":"c9206c48532733a47f9b4fa34d21b685b9290dafc481b68fb123f8e2b2117faa","impliedFormat":1},{"version":"2e6dccf2f78bd0b60d6e22ae3382192209d2014372f6f4b1f65ea243ca13de33","impliedFormat":1},{"version":"e2ce3f5ebaaa7e27e6cb398c4d704b71af3344dda324089cf984e5361563b422","impliedFormat":1},{"version":"e6928d6bc739c7d933e5d91d7979aad9eafe800300c4d773061f84156a4415b7","impliedFormat":1},{"version":"64b89ef101875fe633858c1cfdbf61e9dfeda00286fcdf122433bfa6fb3a343b","impliedFormat":1},{"version":"defc5999703af7390fd835fcc8d17e8e0c841d5afddb5ca38bbb23b42db1ebec","impliedFormat":1},{"version":"3983eb3a679797d2c79d00817093657b4be714413c6a7f17707d8aa0bb42ca9d","impliedFormat":1},{"version":"0634063441797585224003f9a83307e2ab02c8b5d35e27fe344b7cf1ebc90760","impliedFormat":1},{"version":"9e9e84b756c5658e338a966b8f65136b4af05d9137a691f73418c582e0422b9a","impliedFormat":1},{"version":"c243a175db0b65b50d50071eb43811399e9788482332a0d708563d55d2c33b1f","impliedFormat":1},{"version":"02304343494f1c42100908a5ce8c76324282c0dcf247073cd7d3d390c3f81426","impliedFormat":1},{"version":"cc531fb523a47db98fa7f31a5a1332b1cba6f20d3b5ab61057cc2ee543d48cfe","impliedFormat":1},{"version":"a29027d40d7b3578fefd25a2187a39074db4a2562d5c57030a3f6905964ecf68","impliedFormat":1},{"version":"a440bb7259bd047866d7116fa058902eb241e664b74065f169ecea0ff965f8d6","impliedFormat":1},{"version":"77092fd6e25c380f29e9ec5cdae0a1aa68e0c2d45d55bb359a1eb34a1c347dff","impliedFormat":1},{"version":"63197a8847f836ae73efb2f0a3d7097b772b2b7016f60ac577f35491c30f8ac8","impliedFormat":1},{"version":"79a3e93ca3a6dca9894f3ceca2ceef06a8cd4d2b23f683152b9179e7d0ecd982","impliedFormat":1},{"version":"1fa8b7206e7d5af70ded6496135ece73fe25a2348e36378958f2d39c240127a1","impliedFormat":1},{"version":"1509efd4de7c17d9baf73857917a53ad48377cf1e89dffece45cc6dbd168df79","impliedFormat":1},{"version":"a58466af471d051c02902e94d636bf841e0cc843805a6a2a9c7243b92a383bbb","impliedFormat":1},{"version":"1a272415792f190755199906e75174ac3e29d1f2bf14fc0ad3ba86c216d048b4","impliedFormat":1},{"version":"96cf41fa7460d5800d3c55fa1ae67adf33c2e1755484ab5d7b7b42d426f4dfcb","impliedFormat":1},{"version":"6ddba8d5951dc885b113a9e1b26a6421642bf2b2250e2cca8a0ddb43b5344471","impliedFormat":1},{"version":"58f5340b63a3fa243ac5a5d4bce42ddb3207d919dd0c86594a3bd0b75ecac5d3","impliedFormat":1},{"version":"c4b719ce1ae0a2894737ddfb8e442ff0f264a0a3ba6d7d648a372937362e7031","impliedFormat":1},{"version":"2a03c74d1db99aa24c0c284045cda2e74cc48d0c95194bda6e541d087af039f2","impliedFormat":1},{"version":"b1f87ffa19c6fd913e880960bdae941d5bdc8267a506e6f71f01883b9fcc2006","impliedFormat":1},{"version":"0cfdd8d3a9b2585b6c282727fde19a4bb58e3a8a6f4ab2390952850456442587","impliedFormat":1},{"version":"2bb266e24d6642328fea94aa0219ed2da07f44a662e2c89830709b056d1e3696","impliedFormat":1},{"version":"d33eb3ee4a54a524fb84103d91de59a040fce0851a96817443ba62d0796f0493","impliedFormat":1},{"version":"23ead8f62073e4af883eb5248d1472cbe0a124298d8bf28cd55c08bca057043d","impliedFormat":1},{"version":"0d862ec5f15930c7e91042d406b2ba12658cc63bce8e63854679480daf944e22","impliedFormat":1},{"version":"ac7f31aa675e21b8cbc545b2f91405287ed1a16647bef1b29e37561e410dba81","impliedFormat":1},{"version":"8cd9d8d64beb2061f63d54b98607c6a22f09bf0ebf3ea1b3b57520190e706b75","impliedFormat":1},{"version":"73ebc811016b730fc0ac22d12023359fc728c875dde8f054a884e6f22de84fd5","impliedFormat":1},{"version":"2f7933cf928f4502e190a63b55daa219aff9020efa5045927c23beffbd2d0e18","impliedFormat":1},{"version":"ee5ee93749cf7bc59e08b554a3f7057bb0796ba73ea3e1bae043d02bff84f2f3","impliedFormat":1},{"version":"69de4623215ccd52fafb41043b9a325cfa6bede242fd4352ee70e33d62ec6c5c","impliedFormat":1},{"version":"b023b6b3de675064e301a447ba2db258827b225077142f910642b26a71bb9e8a","impliedFormat":1},{"version":"a44c902015b58acb66d8f2aa8071ed7d1ed7a7a5f587c48e276292f36117bb1f","impliedFormat":1},{"version":"4b2918295f4f4c6be29e3eed6c4d39e78bbb3fc2ea4f3dc034648e0076ce4ac9","impliedFormat":1},{"version":"2473d9f95c2748775129a33ef2f563b95a08fcce88164210cc56dc30acb8e69f","impliedFormat":1},{"version":"9ac19289527d7d577dc1125421e5239fa00c7e637721f7d2f9b6f56e65cf727d","impliedFormat":1},{"version":"a7936232ed5e82ea73c8924c071d082cb687146520d77baf97f79ae3ce167476","impliedFormat":1},{"version":"cb90b243ff3b978f64574b8db39dabced1a5558afee52674d09dd7791400480a","impliedFormat":1},{"version":"7ad86daba6e8763014eb0c5ff4d560b90bd351dded63b85b024422e884b394e1","impliedFormat":1},{"version":"1972a0145ce15ef7dc0f09f4d4fb3565245eae835015b91c56fe454b8b99aef9","impliedFormat":1},{"version":"7f9b422c6765eff60fb16155e22c2fc46cd2ab4c6790e6ac6c16693b3c6ee222","impliedFormat":1},{"version":"502ee709b67ed4e55f80eb7a828d70e2a830a573c657fffd0554f0448170af7e","impliedFormat":1},{"version":"19921ffca751b16c1037f036d52183a9d2af388a2d661dbb2cc7d1169d24cb0c","impliedFormat":1},{"version":"7f9dac53f3e8d37132981270a6c7db880507015a11021308e69a6abc08dff4a9","impliedFormat":1},{"version":"4b097254e402ef1d1a7482db0309d2d824d6f6e312bb1c1da94d609e9baee753","impliedFormat":1},{"version":"4219c7a0a0ad110b18caed4c3a0ff67c1c89197b963e176fb4ef84adcb87ae0f","impliedFormat":1},{"version":"22afc2a7ed4a0aeb0834797b1f80713acd8776310e307ca6ab8978861b03b274","impliedFormat":1},{"version":"a5f669151a1397d04cd9b63058142df6d87e684d05683ff87466196704a414a0","impliedFormat":1},{"version":"8e51a81f1fa18fc68a613c12fe453b6d4238dc754848bd4e7a72a6cc118730ce","impliedFormat":1},{"version":"1c96e7e5499f62d720fefd83e3e0aaa2493644f4118ea223d4669b72511b074b","impliedFormat":1},{"version":"629a12d4a6523cab2c873aaf1efa23474b020b6bf1d2bad7c98cedd34b0296c2","impliedFormat":1},{"version":"9bb5fc9dd427a4dc43c132281d8f73c1cd49270ca7a86e3676fcc0f63286ffea","impliedFormat":1},{"version":"25354123883fb3ce73c086056ace0a47f6e9afe36841da44af896152cffa69c4","impliedFormat":1},{"version":"52b3d9818d4ea76e09f64fc05cacf946bc992cab1451699277b75d3de2b7f7f2","impliedFormat":1},{"version":"eb01f0332e951e121e2ad2a115e3904b45bb90628c9d44d5c1d4afc441792c9d","impliedFormat":1},{"version":"92c024b1c0b9f43cd011ea5baa3f8db34c22356a03da157d1cf034e3236d3441","impliedFormat":1},{"version":"f179b463b5b75b1c635544e230e9fa4a4afcc9dfd95012ff08cca8df526680ea","impliedFormat":1},{"version":"d8903f223fd8c08f25d7f0ebe41e07c1fbe272fff42e9774bab17ae166c9dfdc","impliedFormat":1},{"version":"d880a9f0d2842786b669852efcdd0691806f483c1a783da9e0a232d9bc7f46bf","impliedFormat":1},{"version":"1c160bc7f510767db1ed04f60eba344b501af25622524b3c967abcc97dfe548a","impliedFormat":1},{"version":"ac8fbc85937f34d2769abc2ae71497c28740a916c207fb0db17dea902374315d","impliedFormat":1},{"version":"82e6a279443c9c97cfc802f2cb5c7483fb6e8ec277bc78b31b5c6b17613044cf","impliedFormat":1},{"version":"6cc1a45f60e83009a910a8ea29d226342c31d7eb6a86c431e56ad706a0039c2a","impliedFormat":1},{"version":"eae15143c71393cbf3618402374d4dae33ecfd5065fbf299f300490657f9750c","impliedFormat":1},{"version":"66e269ea2bb913eeb2cbbd3355d60778e4b8b4a3f5468e25197b4705616e3992","impliedFormat":1},{"version":"31c1f8617f969c7fa1f4d262ed190dff65a6c01b8edc7f499df8252fd03f24d5","impliedFormat":1},{"version":"a2ef5cbb3388541b660f8d0dc2025a196ae652501beecf5ebbd2ef7a086d57e8","impliedFormat":1},{"version":"31447e3f2d3af43a8bdf15601f911b168e70424cc1684b1eda5cca861f2b1ba0","impliedFormat":1},{"version":"c12131e9451ca6fa1631cf729c71cc0a7a996255bb19bd0e7bdb9dba995b2627","impliedFormat":1},{"version":"37482ab003d2cbee774b60e1bbdf944736ac47e117164b43f5fca3114b2a12dc","impliedFormat":1},{"version":"5704f33f80cee3c961c6487a86db2357e2e927f13fa3cf5ff8101aa6285e1037","impliedFormat":1},{"version":"de279f52971ddd97a9314bab76f9aa2feebc9ce24e3942df668926fc6c8f8f6d","impliedFormat":1},{"version":"021a6cdf4268fb9c20d37caca908acfe0240671d429044c2d43246938cf22566","impliedFormat":1},{"version":"14f265621be95902becd02fe182973073477bb2f902996d8497f6a226c65aeb6","impliedFormat":1},{"version":"77dc80add3945851b818233fce4d4988730b22924d25c2b2a52d5a4be7c8a0b1","impliedFormat":1},{"version":"dcab7c74ed9b5f2cb422d318ec65e1721cca7ebff71a9724ce6940f0bb92e780","impliedFormat":1},{"version":"4910bed51fcd736249047d2fb87c6a46abefbf63795a446a0b3ab8d3cea9385a","impliedFormat":1},{"version":"f62a899bccece3bc2013337271359ca52e85f6cfb7dc19fb27f20b01c4251930","impliedFormat":1},{"version":"a41c809bdd3f986d09574ad87e9070835fdbddb69523ebdaac8673d7bb8cc4b7","impliedFormat":1},{"version":"58c73ddf2a7d17c18498bcad45ac791cc766112cd1f8c869e8176c26d34075da","impliedFormat":1},{"version":"c5c5ada2179100e1692f2e83ebb8b14540fc0c70ed89c8f3ce9334ce33b39040","impliedFormat":1},{"version":"30e78a4f3c062428ca3cf718de08badd12e89e36697c5c9a5baf18ba90d87eca","impliedFormat":1},{"version":"bcefa8f6df455b7edfe6d87128ae23c644fc2f566bfbcb4fff1c40e9bde5a662","impliedFormat":1},{"version":"e0aaf707195b5f52f3a6d19cb2239baedc861e5b0c465db9ddea4fd7235017e3","impliedFormat":1},{"version":"c9c6acce84da6ba03850a8071950491edb25d6c0647cc52a1a80287955557949","impliedFormat":1},{"version":"27c21a999b4af6659a5b5249d3b44f39a2e7f6c5c7ccf5cfcd48eac414ae881d","impliedFormat":1},{"version":"381b62d286390c596f7aadbc4ff5506292447d49b2d3b989df10db97ed5d16b3","impliedFormat":1},{"version":"be72c5f95cef5e8a1b10e4ddfcb3f2b1664779e4a835d190968a43e0b08f6705","impliedFormat":1},{"version":"5d29d797b4b615bd6eb0ff3ccc04ec4e0f2e29cb371ff62eeb87bc45328f1a6c","impliedFormat":1},{"version":"2c5acc8ece020bee5f85fd158e43ed6fe9fb272a27debebbf1cc64b4df798cb5","impliedFormat":1},{"version":"fe1ba8cddf0af4b8aa5350e15645177e786efec9f69c7e14b4128388a5035a54","impliedFormat":1},{"version":"12d0c8b8401e15cc138603a659c0a84ac95026ab3328a2421ddbd2e7291f01b6","impliedFormat":1},{"version":"01510fd28e8f1db6fdfbb6a79d18908aa63c3f08ab884a863b1720ad48d8bd35","impliedFormat":1},{"version":"4e8e4165cc23f665d92fdbb61136f375a2ec61c990c38fd4527d73004aa561c6","impliedFormat":1},{"version":"305a7549b5d383c6f9dcba79336819128c0ddc0c08b576d01b3c301bcc4aebd8","impliedFormat":1},{"version":"621ba4aeac55130e618d39bbe1d9f149a118caaa80f7b58129225654827c1aa9","impliedFormat":1},{"version":"3d2bdc1e927a89dfb74120e2305510b3f3ca8532cd622551c21e0b85fd4a9fcf","impliedFormat":1},{"version":"a2f0175565329f419ca22adcab220177c4a5b85346e02aff5057c2b796db1a76","impliedFormat":1},{"version":"f4851b813405c98df97fcb0a73372f56fcabea36b5d608a2613d4840526faad8","impliedFormat":1},{"version":"cd6c109fa7c4994f695b8c74fb66c644a8309871d0b9d56355a8691d005b50fc","impliedFormat":1},{"version":"5471abbd143d55255ef68360da364f9c40bd56356b22bea00596032d750b64b2","impliedFormat":1},{"version":"3288a269a5be14c4cbec2241d2c1cb42bab4dbc93f002a307021a6bb901e9da2","impliedFormat":1},{"version":"34c19ccfa1d9b63fe8ef6b67ec64aa677efef8184fa5163f887f62769b75d906","impliedFormat":1},{"version":"9ea28018625abcd737d108aff9321984b74ffe3b943f3a76bf4efbad37444bd4","impliedFormat":1},{"version":"1b4a8432b19b71188872da9e197c76c4bb9445159cc01d6612f14e86327a724b","impliedFormat":1},{"version":"3f2e7e9fd6712c5d61658f673483c22a05da818e46401a41d311ab929f2d8377","impliedFormat":1},{"version":"5005767c9d133e23f28b3f64b2758733a746a708fa8130a6d304793c2e3ffe91","impliedFormat":1},{"version":"1662bef6f7629e920b24ac8ca86f5d6c1e0031c4ea1cad1cb7e47a879d53977d","impliedFormat":1},{"version":"6fa21f75533a039652885e23eb803dc7a031ab27f97f5177ceaf19fc8ca130ba","impliedFormat":1},{"version":"2068e6b583be7539959e76407d4784c2a8734bf9cba1e0a68fb3d7d65d981aa2","impliedFormat":1},{"version":"4c3f273706348c5423a2a24cb5e25f5e88c220c0cdc1c68058fc61ac5a6ba780","impliedFormat":1},{"version":"81e0a1265b75e6c70e45cf1d4f27bb2db7cd4d235e012547016bcbeb79b3efa5","impliedFormat":1},{"version":"ae11ff0a444156d199ed384a45068d756fe14d92add33a015e6e3d358582f03a","impliedFormat":1},{"version":"8fb01fadee9580606af16d8d7636eadb8d6f7f73b40b98a6fefb84e4f09674e5","impliedFormat":1},{"version":"c2f2b38e870c11f011deef3b74fa265a937b8f373ca47d35760af3f2be893e4e","impliedFormat":1},{"version":"53305aaff3301584131ef61c0034a16d05a041a2d479096f4262db25282d76c9","impliedFormat":1},{"version":"589e80f87be16d8280b800dd215a07e050a6f9c2db5beb8863f8b52da6e09742","impliedFormat":1},{"version":"b24d283a291c15ed14eca5fdbe5c41f05becd29973001c292081401cc24deb6b","impliedFormat":1},{"version":"89fed4dca3af73a5cdadd15e4af4f3f3d05c1717a5081ceb5f7a1217bcd28b32","impliedFormat":1},{"version":"a744d27b448b63bd46291f8424773f44c85fc04dce1b5ae04897323a0239dc25","impliedFormat":1},{"version":"b4fac9c86c470f653814be3dbc14e222a190020ad27d3a1c08c1323b03126741","impliedFormat":1},{"version":"1bd0e7eee7e3bf827f7dd275c118e6dc26353713efe1f12ee51ae3815c36768b","impliedFormat":1},{"version":"9196c185f06ca1cb64cdca1935ea4eac3ae4cd913e6e5ad468f4f7c5c87831d2","impliedFormat":1},{"version":"d9f65708966047d042832a1a233b76e3c8ea43fb83ba757c99a2fc06b9c17ca5","impliedFormat":1},{"version":"0d20aa64f307021ce05bf4fc6d7c2e2fcec4fac357f5d11e1a092af50dd2e656","impliedFormat":1},{"version":"1232fe497f7ca7f3e0288ee8a31a772bf8dfa3e9c47eaa5fe5778dae05c43d6b","impliedFormat":1},{"version":"3cb8e2a7a9edf4be19dc70b3e62c26019750b284882f6b61abb11234975b21bb","impliedFormat":1},{"version":"73fe3de619263f4c77dd023a89b123e3c618f0f8fd54b027e979fc00f6cc9190","impliedFormat":1},{"version":"51b46ba2328c3645f6abab083c97bbbd76ae00e77617f34733f9f720a53e15f0","impliedFormat":1},{"version":"eff3ca3709693be9002262f66ac921cc6d7cf18932c3bd2f3871a72858121a1f","impliedFormat":1},{"version":"da592d15a12b8da8c095945bb84ef21fe675bd99f06d2a53079ffd65b7d8f9f0","impliedFormat":1},{"version":"de89b83e39bc8955bc98f4b3f499d2630e0ff99309ea3816cb3776df3c377f71","impliedFormat":1},{"version":"07321ad202630039126d113cf6e3df0a027deb6bdc2f55c3ee1722268059c341","impliedFormat":1},{"version":"589722c5538682fb0511dc1433294c8f9b6dbc4aca83888982a1b6a41b506682","impliedFormat":1},{"version":"a3615dc90b293d59a17b7bc2a51f19d59f0b9c67818bb9d2844035e79dde4480","impliedFormat":1},{"version":"bdf1d3431e13881e1497fee4477393e56179ecfac08a7911116a8d1880684d42","impliedFormat":1},{"version":"800e069d723ec48ac1f59470e840d8994743514156603463317538b5e68beb95","impliedFormat":1},{"version":"1c8f067f30993e4e233a85d04f73e792b672a60c2a64ee6dd625aef329abf5cd","impliedFormat":1},{"version":"15950c58d2d4af5ac2c3a02d4246f3305b316506ad71c6142756a527c240ecf7","impliedFormat":1},{"version":"f089b8316d10bfcd7c6dab15f22ea8489587d8f125661ca3643619023fe6a94d","impliedFormat":1},{"version":"e50a42e10582bb17fc7b2e05a74127a534fb5b33ab27eda0575d43747e4d1cf8","impliedFormat":1},{"version":"6b50d3683561e1e8cfe5d09d1ce7ab96d8f78959c98f50bbde9af824feec9543","impliedFormat":1},{"version":"37d063d2c278a1cfe58a269cdbb71f9040686c2d76569ed13231f46dfa09c3bf","impliedFormat":1},{"version":"949a389c4902fd04827ac3741a880748720025172048aff77dbd23a10e595d59","impliedFormat":1},{"version":"2d162b1f72f228c816e6de9fbdfce473a649a646cf9ed4df7772303c213f391b","impliedFormat":1},{"version":"2c9b9894bd46a0153469ef4cef38d3e36cfec62d157f47d87cadc4ddce8ed64d","impliedFormat":1},{"version":"134f0d1e3839c733a670c7f9d1e5f76ed68d01bdb05d289c443544edf980ff83","impliedFormat":1},{"version":"be3fd51c730462bde1048abd02185e08cd14cbe3e8e76b7528200e93f026a785","impliedFormat":1},{"version":"4b76aa93d3b400354fbcade6bab52bfb5660a920f51b41111871c4ecaa895404","impliedFormat":1},{"version":"b5355bd01eb1a7526255d444909adfaa9e8d43facfab8271895598ecff7894ee","impliedFormat":1},{"version":"e8b8eff5aa44875da4ec68a4b10bfe9339095b63a4558b391b75ffba849f78a1","impliedFormat":1},{"version":"e216a02854ca4f79749cf674148bac2fce620cb7e00625afa9747b3fa337b1b1","impliedFormat":1},{"version":"5f2149247b5af187c5465c1632ab1b210d0e939b19af09c5d24d920897ca4f9a","impliedFormat":1},{"version":"134e6d4d307a320bd25e92bf34900c5d19f7964cb0ab2c5e395fc4900235a049","impliedFormat":1},{"version":"adef4ef1fc7dee50cb3d34380067982717c1457141a487cd3608a531298b7ed1","impliedFormat":1},{"version":"fe4db928d70d4dcab644bd5e13548da5de5fd44c06ffdcce9828af9d498a24af","impliedFormat":1},{"version":"b3d90d14adef22dc402c75c24536fbd02050e62485d7c9f4352a1498334f94ec","impliedFormat":1},{"version":"4543f6d67c42925d2424b603b36163c85768a4967588a06b29abef1dfb62aa37","impliedFormat":1},{"version":"d70c9fbdd2bad5fe29dbf4dcd2ca150a6497415ad389d86bb723f1981d4f9a69","impliedFormat":1},{"version":"24a384127f9401fa5d95e8379276346ce235c1d8aad0fcd5200dc2706e972cd3","impliedFormat":1},{"version":"b42c3c5eef982407e32c05e4a3a30538a9df18119769f119ed4fef97b91b63ec","impliedFormat":1},{"version":"3303a11a59b62f106673fcd32e8525e4ff7006755cebbac30ed5d9956368ff9c","impliedFormat":1},{"version":"41eac446fa90b0a369d267a3c67be4fc51f9504a4c70f8b3c7781f907b682ef1","impliedFormat":1},{"version":"25601ae77f95fedd95f6530aa23b48d1057392aa9876976a3993bb5846584c4f","impliedFormat":1},{"version":"5aaac3e6562c64a3eed6bc1939dc14f58dca05f21098549e2c412bf53e8d3617","impliedFormat":1},{"version":"3e66af60c061036e42415bbaa903ef547ad173a49ed3ef82a69e5eb157947e6d","impliedFormat":1},{"version":"7c899221be57cbd886b9024c14369caebc46eccff33aa5ad75f0e784a4e606af","impliedFormat":1},{"version":"df18af0e80c910d8a3764c616c4523db3d6e01afc13aa7ebc5591e6e0d6b4998","impliedFormat":1},{"version":"71ca6aba1e4b2bc55a094edee893ae31ae6218bf17071a9a6ac1440edb5a3b15","impliedFormat":1},{"version":"d3167d0d896d945e10d4e039c58921e065705fc0c6e4816807b4bcb74581e50b","impliedFormat":1},{"version":"ff9e081072cb761c188f91d8c0d20c15d17e7c7c2cbbb212e6333ed4bc9e4941","impliedFormat":1},{"version":"8b58f7c085d50cd600b64c3e82a8de9813527b56d642033edcf5fcdbc7785fbe","impliedFormat":1},{"version":"9a82b2883e32a54b127f49e61e7c2b42b4114c50ba26796b35c924600d32390a","impliedFormat":1},{"version":"6baf6b5cf2f9cdab9446736eb83c8f89856873fe8008f6933a77bfb7bb518602","impliedFormat":1},{"version":"ab744d5520a796bc95f680e65699eacaaf742ac4ea1733d8aba5bd3d2d4b4a35","impliedFormat":1},{"version":"717538d3083508674571ca96b2ea2b3a9b4fb6d043e87e081f93063b81412dff","impliedFormat":1},{"version":"0f558c4be566d21cc8afdda14e5e5006e926b23d559e342f52bb3d35598a4856","impliedFormat":1},{"version":"2e03f50a48d3c2b2e53eb196fe0cfab7b393f689cd9ec1770398aa1c30553bb2","impliedFormat":1},{"version":"c0206f2f7c2010cddbadf8f2c255996f031a5814e520ef2cb86b36b778870467","impliedFormat":1},{"version":"ffaec16df578f509e0577cd870198c7de17d81ef4e7da6e2fe96777f8aa428c4","impliedFormat":1},{"version":"3455f598309663506079bd39badd30dca568291bd512476aa861432284e4ffc0","impliedFormat":1},{"version":"d136ec17008896b8c409a04f483a627ec691836516e33560b70b31fa5c7977c8","impliedFormat":1},{"version":"efcb605556603a2a1bb0d475a1140e5b0744447c0afa9e7c68333ae9e6943154","impliedFormat":1},{"version":"eeb5d05e6099f3d6c856ab1e2a36ea143442f3ccfc9e83617593d8ba0cb318ad","impliedFormat":1},{"version":"053fc1e52b7eed54f382e69bc6cf66471dc5bf11316152e7f0ac3ad460c2d1b5","impliedFormat":1},{"version":"233ee73e28895248017b2496fe6e7ef710f786b53408859bffda83c25f185be9","impliedFormat":1},{"version":"b4a45dbf945b0efb4326585542c7c6610c250b8c4aa5ad33f4e5180b8aee5227","impliedFormat":1},{"version":"1d1905f461b08a4324ea7e22e5ff6676bd63d4aa7ee1c555e16f85f87a1888fd","impliedFormat":1},{"version":"aa63fbb9f74dbc7e10f86f8e5dcc378dd4caa2a05401045968722ab249ea5dd7","impliedFormat":1},{"version":"aca1ad9c7e0a4c8b607ffe2f026535b517de9e9e6a6171c6d0fcdc7cd3f670c9","impliedFormat":1},{"version":"2a047b70eace0af0524e1f7cc0ad6d73634a12113963d34f489635527dc3eaff","impliedFormat":1},{"version":"5e19245e5769cbaa18ede25fed8fc29b0643eaa8392ee7953a6710547bb82cde","impliedFormat":1},{"version":"f832f5dd7eaf14c5e450bc8389df7f355270a4209c6d49f1548e945884b98641","impliedFormat":1},{"version":"f8a523792ba40aac8c2d551967613bb0406489964285324f26c66fa97a4bef98","impliedFormat":1},{"version":"aae4a1f48565201e165ed7644cfc1d3664b95b1458754a245a82e1cc1100eb33","impliedFormat":1},{"version":"36cd969868fce0672cc2262b4905aa520a78770cf9ede51e78364320825fe2d8","impliedFormat":1},{"version":"1098c7324bbb826fae81d3c695f110f2d366ac6c8a777ea9b63930262abdcac0","impliedFormat":1},{"version":"d9ca0af16cd17fb93d0a8d2750d6182fe05b34f453a93cea6ce9977cf8f7d97a","impliedFormat":1},{"version":"2c30da55763e9b2a65916db3fb902e2f734346641c549fbcbc8952cf419f245a","impliedFormat":1},{"version":"f50a03eb8b276a92bd0bac3ed6696ec7c8a386fd896b2c6d0080bdbfabe76a6b","impliedFormat":1},{"version":"d5cbfd315f41243d116dbf8108827e01919bbf35197a521130e5651866e10751","impliedFormat":1},{"version":"1bfa8a980334112c35e3ad80814ccd75268e907b4ff28d96e781542561bacfb2","impliedFormat":1},{"version":"6cd769f53210e534a02da8e4736612a629a2b62dc28727e27187c7c6e1aa29bd","impliedFormat":1},{"version":"47a4889c8037e3557fb95ad0afe8b4e6666f4e134f6c99faeb15e79ac2abdc3b","impliedFormat":1},{"version":"b9f061c4800d1a68c7dc1833ed8c19c6021c6bb915f8315b06fad0cfe819ad6d","impliedFormat":1},{"version":"b0dd46eeaa79899064473b06c249887055b1e63a53a00f251d50b2b4525b202d","impliedFormat":1},{"version":"56134e62e1a52f946d2197ecdd07e97df7c72ff7fbcdabb54db28742e0ab65d0","impliedFormat":1},{"version":"32a61f2d62b3d37b54a4391ac522c1664e51ea750c3e810074fd57529d534f26","impliedFormat":1},{"version":"e04996121d6a18a37dbbcd01f17b93b4815d7dfd5da9486d469673bfe289c3aa","impliedFormat":1},{"version":"aa9a3813ff36559c863a1e40fc4ca2da10f4df73405887e8e01c012fb9b68cff","impliedFormat":1},{"version":"14883cb37310095e49fc27b915a8f127d88cc8d47fee3a8feb0d8043735e6019","impliedFormat":1},{"version":"1fccc96e6f9de4d4804921ede2b102dec601710f84e8a0a0baba2fcfa965b07e","impliedFormat":1},{"version":"a0be3cbfa13f628deca6a530d6d3f825ac3affe9d4437595530c9c36f66509d7","impliedFormat":1},{"version":"3f8ae4771758eb3edcde3d1ddfd026e579b8817ad70c2af3a56e439a2dbe6e85","impliedFormat":1},{"version":"362fec411a81443c698ac551f91ecd2318e1d6ecb9b64d77a479e32a2f0be2ca","impliedFormat":1},{"version":"647f13fb0d0ab154e779e4bc5573ce67bac6d29fcb007973a4926d03ceb9f89e","impliedFormat":1},{"version":"8ce5153a54234bd2268bd0e4e2a8f1fc254db4a49427e702e74dc7d5282bdcff","impliedFormat":1},{"version":"b3224b0f30704746a65d66875bf90062a7d70a1316796359a56f12ab4529b800","impliedFormat":1},{"version":"77d8a937b0a513a8b4f60b4b75d997f4b0caca8a2dd19f7e8707b861611a8b2f","impliedFormat":1},{"version":"6c39e8e36ca398eb4fd000af12af715f7539b40277b7ee6d2611be70c519535a","impliedFormat":1},{"version":"26db93221e5d213db22c875d6560f3e2ccb7287b34812eed3f3dd6f201b9de28","impliedFormat":1},{"version":"2b926477bc645b85f6c78fd314130055818b2bf3595e03bb223484a160aba764","impliedFormat":1},{"version":"426f0598a7ceeafa8285168ef3ac2d1b991ecc3bdf8190dd16fda24b3b872653","impliedFormat":1},{"version":"7e7afa53d6ade1a13764646cf6c48bb3e0ecf029864ba49c62c99b01cfb4ef7f","impliedFormat":1},{"version":"baefb209fd04d2f31b399e08fc897d8de57b6dec88f7a9f06a3e18e7e8375c4e","impliedFormat":1},{"version":"2ea729ea0ce2f3db2f55a37652afe2a9bbcff3df9d9936b1f6203503b55a6077","impliedFormat":1},{"version":"b3871894cb38f490da09effcb05296901c8018a24a8384307bdafd64c2993d31","impliedFormat":1},{"version":"31285ea858227e62a47a5af6f22d83a7e4c6880c75f3da52467aaba984f9727e","impliedFormat":1},{"version":"6a37703dda1d4928cf02eb4807228348054939fc36eaa07e1ae9d955d76fb877","impliedFormat":1},{"version":"ab18eeaec9313fdb2461234477e867e08294b19eda9736b95236e9c4bf837ccb","impliedFormat":1},{"version":"0a30e843e847e12fc4416d0e8e67c1d7a1dcd90d02d360111643495054d58c14","impliedFormat":1},{"version":"fd8bbd2f367f5e5bce24efff8730ddc25f386b521d92c8152f831476ae3154b5","impliedFormat":1},{"version":"ff8fb54a8c4ad191cd5181c832980b0a9b8f990c510bb979eca00044757de924","impliedFormat":1},{"version":"d3e48d054f0d6a9a82be9bac0da10cc2c36c9c296f0e7b2281aef1156a9653be","impliedFormat":1},{"version":"c4882e0f72004273483831ac06180628c8e1d901685f0831f3b4515456abd67c","impliedFormat":1},{"version":"f6a6395fc99a89ad87c8d5688d4207c19a18dabc1d583931a6e021d71ef37450","impliedFormat":1},{"version":"e3a984fab10447bd024b2a9c4c7cd898a3124635c1ee7acae83a336286935d85","impliedFormat":1},{"version":"bd15da7448fe81fc4663c8f7de633c436673381c086216f6645b6606fa04023c","impliedFormat":1},{"version":"5af80ffbe4ef17fb599bb753f8398f4b9879ce96a2987ac9ba2e90476fcaa4cc","impliedFormat":1},{"version":"462f1a1e1703e623d145b17cd223ec8bea143a93806c7741c3f0842a1e512cf3","impliedFormat":1},{"version":"519e42b62ef252632263ff660b568de9055d312dfa195fa8e94be8e7c6216fc5","impliedFormat":1},{"version":"9d2a5f02f17961912910343ff038d4bab545911ce064d54ea996f7e53514dcf6","impliedFormat":1},{"version":"b2f6a9f22a0495dfc0403c468243dcd05dd04c32abb7bebb8eb040ac20935d61","impliedFormat":1},{"version":"58c9458275daf175ca524139dc0e82dcec969ab8afb50608e3018a7f0a730dd5","impliedFormat":1},{"version":"c0b8d14cf743d742c6e614fb7c5bfb78d1bbb7e1683e2c060e279fb5643df964","impliedFormat":1},{"version":"4a369d183620b5147f2152cc17511e901478773f8156297d74c6a6c190f810c5","impliedFormat":1},{"version":"62e89bf0538eb0373ceceb3a93e63f9f78bb38edeca7256edbdd50394d6792ec","impliedFormat":1},{"version":"c843699fff4c312f3d4ffff75bf3ff502165ead6f50c0eed20ecd380b719cf6a","impliedFormat":1},{"version":"1bc7ab58db67d5b69e8e6754f20dbb35ebd23587d8dec7f57f921d9b99e8c0c1","impliedFormat":1},{"version":"6b29bc0b22bb3773cdedb78d6a358aca9ee12a0c91449ce486833e12b63968de","impliedFormat":1},{"version":"b3c166e8ce349541ff1d426fe7d9e2cfb9d79effbf582ed505a1c445118a7032","impliedFormat":1},{"version":"ecc40ea7f7b46e262748582ca53f3a11dbcceb21b49c84ad6f78934a7b9550bb","impliedFormat":1},{"version":"4ce5bba6a7dc7ef0cc52ba0e2f1c6c2ebff8677d31925f216765dee733e47bb9","impliedFormat":1},{"version":"6bcbd212d5550c5d56298176341fd131e165204cc53b10b79c4c224a74899ca6","impliedFormat":1},{"version":"2184d9304c06580dbabc88bbc8cbfab88aaf35b8caad8cda1136483baca50549","impliedFormat":1},{"version":"1d640d9defab9b0e4b98a8629bb354ce317588777bba58cea995f9ff1754ce6e","impliedFormat":1},{"version":"7a0680f5849781b74591d32aa073d0cefb7c3f2a6dad8d34915e06d87b94bde0","impliedFormat":1},{"version":"f88d23793cd7606dca52eb0dbd00e02d5c4af26ae072be127726001e9f806fa3","impliedFormat":1},{"version":"81fd6947dbdf73e2334094b2e8f70dc8fb9d37874b374a3685d888868f8506e5","impliedFormat":1},{"version":"82dbf3208951d81ad546946b2e5835fab194d1a375565d479008c07c5f9280b0","impliedFormat":1},{"version":"6c51f70c9b6ef51d57fd3274b21b6be0a52700272f9f6da9d90c2f271b60b596","impliedFormat":1},{"version":"c1fdc340b6d598d0f533da27681390e260e8a7eccb166340951e8730cd561845","impliedFormat":1},{"version":"a6401ba1484a2d8c0dfccf3256a942a5a30c6c12e04a82329e3e75c340d0e0f3","impliedFormat":1},{"version":"1a506244ad05c8ae209cb2a47d88e03724c12a2892eddd2c91121fc166fdd1b6","impliedFormat":1},{"version":"dac8953b41c95e3afc8afcf1f61545c2b2f560bbcee012e637558dfedb0879ed","impliedFormat":1},{"version":"5f9436e61d01e57c08ef36ea93a72ae510dd99ff06f2dfd4639c5e63a974f5eb","impliedFormat":1},{"version":"a85eab806935c350f7031aaf2745bd1e5aac994cdeffea1935323abda3904f34","impliedFormat":1},{"version":"775326c6e12f464fbf6b0e6a2ce2b5f84bfebb34c2d2d86174113b12c59ba5d2","impliedFormat":1},{"version":"8686a9e446afb94f4e60872a7c673eb1d71faeae3b8dac2c39149c2bd50fa8b0","impliedFormat":1},{"version":"46bd4798b12dbe51f3fef3e0fb91a396cfab5e67637fd67924a98c31400000b6","impliedFormat":1},{"version":"84d7f471f485769ae1059ecd0ff6f6278f5d9ba71a77e0b09ec0467210ba432a","impliedFormat":1},{"version":"58bcf8a36bb66ebfcb410372c5136204fecd159da960ac375af7974005283232","impliedFormat":1},{"version":"4370cf435db80a24361e8cec9ca053b4e22a15d7bbaeeb14556e12f34f6ac7e9","impliedFormat":1},{"version":"b998dceb32b05976703c273ce76cec1e97d11d5c34e1087c3cebdb3ae47e4055","impliedFormat":1},{"version":"8ce64446d6d51e6455f74d97209d323d5b7bf4ced425bba59b6f41ce4225145d","impliedFormat":1},{"version":"972b28d78bcf4c8acde4c861c02d925fa87da6f400af4d165e99679a86c39d58","impliedFormat":1},{"version":"ecf5ec2efc2fd80109f50908ab16a59553d87d87271588bf3f6e807cd5f5af0c","impliedFormat":1},{"version":"83d6f75e6a86b590214249ae8384bdd51bbe12b7c630813dc406bde2e5581a74","impliedFormat":1},{"version":"3d3974d51c90be9cf07f930f5441f9885a5c1833b0c8f02568669096259fef70","impliedFormat":1},{"version":"fe9479372fce1df696ff3c3a8361c43586dd1a7bf42b01dcf2fd6c39201c6075","impliedFormat":1},{"version":"a8a475c7f617f6577649e4c36ae2790b090d1848373ed5799b292d0889d32bfc","impliedFormat":1},{"version":"b53b93507fef0cb949d698771527e06e42c85f7f8aeeefbf56e515b529c97f4c","impliedFormat":1},{"version":"1b57b7240ff53d4b561317b198b8425864c55007330021cbc511ef93b1ad5465","impliedFormat":1},{"version":"6c17280ec2aef1fb0acc81b7b10d11c294e7e6420de7cb5a39b61f7c8e72ab4e","impliedFormat":1},{"version":"c1ab3556492cdd47f8e1d2d2798ddfe2b1a9e597b78549eae0e04024fa527145","impliedFormat":1},{"version":"9108cf20b9ef945395ca3514ffe4412d46357a3671be8ec9800e4bf4cef4ddc2","impliedFormat":1},{"version":"e05df7344312bd670b67108231242fd972f15396caed6914c221a4b0fe04cf13","impliedFormat":1},{"version":"dfee3a41a9faf4dd83b3155769da9c06c379826557e890be92f7ebe8467df176","impliedFormat":1},{"version":"23a92a429dcf995898d4a518a0c3a7a48a75b220c14620df732cc9b900688899","impliedFormat":1},{"version":"44100beeef2ccb0a18d4d291f310a6ebf97cd0e1fd0d09d794233edf06cfe0d8","impliedFormat":1},{"version":"d7f9d761de19aa2a7a3d79728f4627858a282f4e9d723f23739c900e7890311c","impliedFormat":1},{"version":"4362da12e655dabfe02e1a61160f14d45848267c5af087e53073841d79f27342","impliedFormat":1},{"version":"84dcd2b7ad7f48121dbcbcbf8de5d2a5271f6fe650f0cfa4516bb22b2ebd5b95","impliedFormat":1},{"version":"e37977267fd8b24e22f9fe14d4d64a8223eef9d784abe9b84579ec4bae753e89","impliedFormat":1},{"version":"07de30365a929af8cca76c6865759aa2b012ff2192642206abfa3a65c2cf3fb6","impliedFormat":1},{"version":"47065dbe99832be88e63d596db41fd4f3a66b9f588a5885a31c83efdfe94e0ae","impliedFormat":1},{"version":"2103d7b120062340c8796be1d647659ba1be6352e69245fd74db6b8024fee1e9","impliedFormat":1},{"version":"996acb0921453e63a533c8a7f406054c61e466e62778869e552289781212c6f0","impliedFormat":1},{"version":"69964432a161492091fcee3648073e0d0078f3c956c928a799a740aecd37caf3","impliedFormat":1},{"version":"e8f4e6ff2d609bcb02ed5bab9b2432565900cbc0f815f1cfcc03dad6a510f831","impliedFormat":1},{"version":"88ae3a79ba899a842a7739098a286a543b6fade5b9d9de8898fd2fa1a070a570","impliedFormat":1},{"version":"55d9d0dffe12fc15019e4e166d80e4f7523b5a4041d58d731898febdac4fe7e7","impliedFormat":1},{"version":"1b37876e74fca9af2beef45c1bce02f04c802c552cbab9567a1f86e9b7a5b8ab","impliedFormat":1},{"version":"ca5f75a7274b0c2b2c263510640e3d6d722c5b5060b0be6c374bb1ce759f7e0c","impliedFormat":1},{"version":"71a35b9c06ff9781be2d966a90134a28a918d4c0dfa72548a455df3b5c4f9654","impliedFormat":1},{"version":"5b2121d2978d6fc1993cac049a8fbf559b2a0bd3032a87a837fb062702a6c8bf","impliedFormat":1},{"version":"a92ad0b7e654a8ddc409700e14d6f9a4a20988dd4536e68ae657b00ab29a7c84","impliedFormat":1},{"version":"9c2da67d9f477d945bf9e1265dc046fbae39bc1ee24b112a4db2def19eb8cbf7","impliedFormat":1},{"version":"ad7061da71468fb73118263e6c49ab7f0c5e26b078727c8b25b714e7c8b61187","impliedFormat":1},{"version":"14afc8729b08e939b23b944bd58d72f0ec89062c04aafb043c1e9e7bfa7c5e08","impliedFormat":1},{"version":"3c43ba86d53a4c7107571aa16eb257168c4433d85f9297cf9770900de7081bdc","impliedFormat":1},{"version":"1495df5c7d7f82444c2ed68165c3d2cbe9a5d6abf6d8e0e8ced478325b78fa8b","impliedFormat":1},{"version":"902371bb9b3ff249a46b47aed70012c80ce365560d518361086b63994da4bdfa","impliedFormat":1},{"version":"747faa24c7b2c2cdd141b9099886a88e2b1818ad95a11e66bf588a1bc7f53634","impliedFormat":1},{"version":"31f177fda73aa810e5a6b3b4b03b16f352bdc2690897d2188cfa882bbb40598a","impliedFormat":1},{"version":"3deada94b5fa75168c4a0f2fb2bd8ce4201aa37b2ab8998c13e964103b3384cd","impliedFormat":1},{"version":"1ed5ea76b9cd01b6290939c5aa339a8ca0a27421b171ee5095fd22b8492a3456","impliedFormat":1},{"version":"ae27d38c73c2a70851ed8ee38f8a702d62c5f4479d2eb711a7c9258bd4ef9aaa","impliedFormat":1},{"version":"6d4da08b07e1570f0e1747259de19ba737389c23ea109da820a57b587a308fd3","impliedFormat":1},{"version":"414d40e6a147a9118230d9c09ad804586a6aa751490c88dc79bace905b2b86bd","impliedFormat":1},{"version":"583c09ce205970d83057c955b7c33f47dce575ca04391076ecbbaeb2412953ed","impliedFormat":1},{"version":"d1e71be32d58d0a44cd1a5ad8c876b9a52c734a81f2b06f558591ff08b0d6373","impliedFormat":1},{"version":"05e892eabdd33c6b50360f3790d773b41f8941a42ef89219f21f9c74ceb66359","impliedFormat":1},{"version":"0fdcf84c1c1105b1d74b44af1baa1ff05f1aae9d22ebef574565cede14ab1be9","impliedFormat":1},{"version":"d53ae2baf4db4a716ae1004a4e2529a046b64d1cb7bf6a5b564426457e72080d","impliedFormat":1},{"version":"f9afc433d6440c7cf4acc8a37c833e7bd183d85e3e815820314a174b578a1163","impliedFormat":1},{"version":"6d2fb7e4e68a54eb5b014f5162d2c8b0dde09a1911c1271d5b571062beea35ec","impliedFormat":1},{"version":"92e973a7f8161c83247eca7bd10cd4c3e73acf8b1fc878ef4152aa68ada4eaae","impliedFormat":1},{"version":"62e1e7745698bdbd4dc8415e64b7112a264dec51f304bf35f8c05e94f15373b7","impliedFormat":1},{"version":"ade4e91215b6d4582ffa84364efcee26b41e8ad01a7c884d638a4d0f488e3147","impliedFormat":1},{"version":"6d2246bf94b0770b377c82b0d4898e5d00cee168aa223b661a493468ade64c05","impliedFormat":1},{"version":"baf1f96c648eeab59bd599a07a3fe79927caff4f1847b87a3fd9b3b4cf58702b","impliedFormat":1},{"version":"5fe9a899cc68cec70ce542544b990fc251d9843dfde21b9eff12a5132b2abc36","impliedFormat":1},{"version":"d2a3d4c43163a603e7d6dcc8ce9c2340eddcb12b29a6908ffbb073d94eefb9b1","impliedFormat":1},{"version":"ba3cab959f22397b7bea5ef4780049d07ab06c90dfd517b5d9756a3c546f6c3b","impliedFormat":1},{"version":"a7e92d0f83e8dcff39f6b03ce925b2c6a9321d5ebf62a59bf4c2cee10629b236","impliedFormat":1},{"version":"e24388979bb0e96e5cc4298049b0a579c85ef8c26e0420e2aa748ce669673939","impliedFormat":1},{"version":"bfd81fb72b5d80ec69ee66acc07b4c4db0b678deefc1a79a536269a75cce5317","impliedFormat":1},{"version":"3a57b439eb0bbd8e7d2afab06d93023c7d16a86a59c7514ca984002dec1e86c4","impliedFormat":1},{"version":"ec3886226f62fb68d552a828f14e19acb1fa2ee51eb044eddb1aa1d05a94d5a5","impliedFormat":1},{"version":"550050c0b433b21189ecda8183eaea6f35ec1aa2535c4ba27734cb1a6576362d","impliedFormat":1},{"version":"eecfa4502ffc6b5ba9f4fdfc4b992b5ef09deed2ac2c226d4232ad67d2ab0958","impliedFormat":1},{"version":"dc21dc18eebda7ffdb8540c6ca1f22705449dff38faf6a68c1c88225ddac3fbb","impliedFormat":1},{"version":"d0fac50d720e90f691e152bdb084ae031d711b4bfcde0d674dd854cf30660857","impliedFormat":1},{"version":"0479e8b173672939f9de3991c6a9d5d6a61486ff5acb110c8dcf68e66dc8a4f3","impliedFormat":1},{"version":"9d2159ba253acf34666753fc9e8a9c2263e1cd1003debb6283506ad0e7b80e88","impliedFormat":1},{"version":"82ef7afb36d3ccb169cf239a880c0e0e5d676226f112caa59bb0419da7f6b21f","impliedFormat":1},{"version":"0544bf1c48e164d92c3dfe47d33f725d4dc166a46675362a82b7ac9ed43e2010","impliedFormat":1},{"version":"1e433b8f59cb83c21f14b31fd416f302f4aaf48a41a1ae02007fe2622ce69092","impliedFormat":1},{"version":"834818e5bab5c77333dbb3dc8a1b920f674f92b402234b4407d713b1efe6c695","impliedFormat":1},{"version":"7ab8d7ecc6133fc19b4b8802c1e82f039b5990d1bf9e914bfaeac5f92f9aa3cf","impliedFormat":1},{"version":"b22a2fa16707079ac1e223315aea3fd14ec597bac6dd5b4f23fed8f5271a5b89","impliedFormat":1},{"version":"71982b07f60b6cb4269107604cfdbc6c428430459cd947abf789aa1df79a11c3","impliedFormat":1},{"version":"73739c1a6f68e730886ee3dc1b8923a07e640035b904f3754d19ca7ce59f3d47","impliedFormat":1},{"version":"b54071c162992a00d77c0f4dec98c398bd60120f99f25372111371505a4e9d69","impliedFormat":1},{"version":"98cf2bbd2b40be7a9876fb225ab44205683b283af6196fcf0458e720c2d12b88","impliedFormat":1},{"version":"f4e78c45879c9e033a9fb61b91ece62a07339fb05a7faa74a5029758a354d00d","impliedFormat":1},{"version":"d3b3c9c7bb847f42c4ba336fc1d0cc757d66b74e54ca7e3dbaa368607d417547","impliedFormat":1},{"version":"2ad8da087b0098a0904c5d444abf857118b64028fa4544352f2945ec96c647b6","impliedFormat":1},{"version":"cd7e694969c28e6c91146b80328fc4dde80d1cfd5a1c83ed08dfb257d1483905","impliedFormat":1},{"version":"b0fe6d73ed4d25e46095317d4bd1e7c2f2a50fffc519b7670f58924a9917b667","impliedFormat":1},{"version":"8df3bdc84cff8ca8686207d8437b378d6c435ecb64d484ae0e3d91389adf3790","impliedFormat":1},{"version":"203ccfcde44d6573c0df1448e233d43d055b77f91a851bbf3c84cafbb07e29e0","impliedFormat":1},{"version":"e774ee81053a30a565c45d5ebcdac1891d1e7e755a3e887292c2615d3bc69c16","impliedFormat":1},{"version":"2a92056f10a7a38058b0cb087bac908e8a688d80711a1a07ddd023a237014219","impliedFormat":1},{"version":"df0b1a91298acb2862bd037b35eb373491726830f2d68c04f5f7437e1eaece3b","impliedFormat":1},{"version":"5ba273eac0d614de35abb620790d49182fa24fe4fc7f8ebafaa3d92b32dcaf9b","impliedFormat":1},{"version":"cfed6bbaaa52adef16649b1eea64a14dc197aab46d13967e45c018e1876a168f","impliedFormat":1},{"version":"83908949d687e075f743f041b49e42d92c33795fb292f8584084e66f5c42550c","impliedFormat":1},{"version":"c289bd5d519c988dbb3cc750349bac149cfd5c87a74e061125f924c8f36f0b30","impliedFormat":1},{"version":"4004736f69ff0dae2dd5e2e65912422cfe2b7b43044e606fef6de409e22be71d","impliedFormat":1},{"version":"13375279658dbe18f3ec78abc145cd788ea3a284432fe3786c0f42e21b5d284f","impliedFormat":1},{"version":"d78fb1646a0e24379d976e494fde9e762ccbec13acb01df3e7f4861c1433f00b","impliedFormat":1},{"version":"b0a427d04f42d7eb0c4e56cb69439d105db603efa6491ac4ec078ae33e652586","impliedFormat":1},{"version":"95ad50877311bda13da54d39e2220766ec8502086e363181815b68f6c90fe6c1","impliedFormat":1},{"version":"109edef86d1fea3ea95c0086e2e3f0bd1aec101606141eff98719d3eff6a25ea","impliedFormat":1},{"version":"dea5f581d5147e0b8a85518d95bc6dc53a7b59cd24f52d10b7dd9c7392c80a58","impliedFormat":1},{"version":"8b37fa16e4fc197e58812f143f7a3c4ec917981cd3270ec2ca9040d93c8f9b3b","impliedFormat":1},{"version":"595dedad1a4d399559ff9da96ca7ce2fc9f703cbea4af5e1b168d84cce490ed2","impliedFormat":1},{"version":"4ecee54b87829124777ad0037d9276723b59e8d1648a85246786f5d71afbbbdc","impliedFormat":1},{"version":"8fda85f35fc553be805f9586ac2815bc12e2492c1f92cebb95f2db5d2ee25c61","impliedFormat":1},{"version":"c93e400641ca472bb9fa6870333ad80cb5fe7c25167df5013426f9f78e0adadb","impliedFormat":1},{"version":"add11a5df799f8e5978c94d491737537a583d583e9b70c65c56508b1812919b7","impliedFormat":1},{"version":"212631ad8bbfe0ae3d7736eff4f8625814e1f53b5020008790e4f73ede9249b8","impliedFormat":1},{"version":"7f18d7d9c28f659f2ecf9f38c5c4b85930b2bfb50d0955ee96d7c299fe3d0389","impliedFormat":1},{"version":"0102478ef4c13aff31c217b474f8bdb9cd43d998ac8941202c5c8e94b2b4c9a5","impliedFormat":1},{"version":"6d32705363308fdd94d5cd94d8bebd5fe26e6ded3d46627fa1f30527d9d83fb0","impliedFormat":1},{"version":"1f366db0d1310f3f2500e59eacfba6e04cd7977ce0365f84e86513d1533af542","impliedFormat":1},{"version":"4ae25eb723a62c424de725e9820ffece8ccf7a69775c86fdbc7313720eb72f0a","impliedFormat":1},{"version":"fe10bb235491c916529963c1a180b150ae6e5bcfba08e404011b143d5245e971","impliedFormat":1},{"version":"f32365f8cb802ca403541dda3478312cca153c965f67d44e6e6a3328b780e67d","impliedFormat":1},{"version":"a956fc0adaa75076f688a11443131bd368d383db0e1c4d5e81c10c36a35fd039","impliedFormat":1},{"version":"9f8df90af4fd2c687d6f59ab4dfb5c04e69432c4c353e5cc7e4a2158ccfcebb5","impliedFormat":1},{"version":"66ccb5dc0423bbe2f7486d41d34eda33df37124f04afa35f4f3d6171304c24e8","impliedFormat":1},{"version":"48f80060712be2cde0c4b9068bca640ff622933b1847cd571d494404b121b1ae","impliedFormat":1},{"version":"74b903f8af431520f8def7762f47ff9c6bb1257700e3388ae394787db32ab6da","impliedFormat":1},{"version":"7c23dd3039cc6b1396cfd3c1c27bfb5b87b4a7527f2343122aed6b516a3d6019","impliedFormat":1},{"version":"2140124bc4548316b237d34937ebad2c4b04a68c9fcc48d72eaa3f24a24c1309","impliedFormat":1},{"version":"a2f374ba95c07bdabec6ad3b2cd53892e93142cc523ebf2501a06884aec59eb5","impliedFormat":1},{"version":"3a9cb1ab4a0cf9703b488b0193bdd87e2c3057370657a2f4e104ea3068ecb212","impliedFormat":1},{"version":"1c365498849d891848ad01294002607ea66bad9ca28f9fbbbbe0148ae51a6ce2","impliedFormat":1},{"version":"a7b040962329732c0592518e4be72db0b8586599350c5f5150550b6df935ca95","impliedFormat":1},{"version":"5548fbed149009f5a55e4aa3a22cfdf0f226cc4022876554c53b8a2d105fe09c","impliedFormat":1},{"version":"0b603509a8055f03f5744b99561943312d33e21b632bad03b30017834176d207","impliedFormat":1},{"version":"f6f58b9964ca420845062cbff69aa3a136518bfcf5c01651a5d87027f79ea0ca","impliedFormat":1},{"version":"06ec8f54b5bd5ed5679ba10499f8debf742856bcdaa948e6b4009c32cdf10251","impliedFormat":1},{"version":"32c4e121785672619c9787b762c133d39d2cab879bd3b88037dd9af3b48a0606","impliedFormat":1},{"version":"36febdf08f839420af4efd54cf78de46073beb47bf4ad6bc65317cc16f5aed46","impliedFormat":1},{"version":"49dca42f53a6f96264e6ad3889e16e5edde679f069233d177f117d67f19d617c","impliedFormat":1},{"version":"9e940485121a1d57ac36902964bc56461c3f23ccb000c3903677c8adf53f3994","impliedFormat":1},{"version":"2580ee39e83bda2d8703fd799914722cf040c48ca57751c706c6596b5f81047a","impliedFormat":1},{"version":"1cb55efff813ddd20bd0992641d9651b6ca40327eac094d7c40a78452fabc925","impliedFormat":1},{"version":"7d4f74bfb2e7ef1e51f47cfcd8fe4061b98e5d7cb0b6e9cb804527284b1d3068","impliedFormat":1},{"version":"2d6826ac3d185245dd937c509b299a3cedf0a9d1fef0a4a178b083b7f1f9e6ff","impliedFormat":1},{"version":"18068e65fdf13ab35f1e6696bde621d6725a4dc5d4778d2263745d221c7aa986","impliedFormat":1},{"version":"f9032e7d3b1819121441971be29c8da45a554ef5395d0266ae7368d5601a5d06","impliedFormat":1},{"version":"45aab4e99ac9ed1cb04c1affc9b2e3b0d0cfd70913bd72d0f0681ccadbd124c0","impliedFormat":1},{"version":"6acaf9eec4e8c850772850f478e548952e60e0782488e20cc4fa1d184bc20da0","impliedFormat":1},{"version":"eedd40b8e411ccfdc8d21744ed89a4cdc6e8685430e1d7a10e819cf69dbe844a","impliedFormat":1},{"version":"59e5c6a78a677c16da48584f8d3f27bc29ddda5fe7565fa030b890a07f034636","impliedFormat":1},{"version":"e82d787a3184584ed505477ac43f75c873c3f16b189a06a91e8554d5889ceb8a","impliedFormat":1},{"version":"c450a67144797f004bedf14319697fc8d932a9cad7346522fb88fe8f3b780224","impliedFormat":1},{"version":"73e6cf63d26298b280fde783ef5817955f747e6df532f0b7195b78ea8d002b4a","impliedFormat":1},{"version":"2c467897c33e6be53ee68f10cdb2983a9d332da9ba634ba1928b8276e9aa2b61","impliedFormat":1},{"version":"1b6714c666d17e5b1bf9e313fa13a9b1bb4cbf630449bff009710b0be317cd8c","impliedFormat":1},{"version":"3c4bb60f8190efffd12f99488e2e6a5643db6b8a852473b22158fecaf3e4f2ac","impliedFormat":1},{"version":"05c3546fb65749899aa00870fc9be9d02d14ba03cc838a3f40163c8b8a19a390","impliedFormat":1},{"version":"69022d0550ce77e33087357ff2256af1920142186b5662f5d6165b7b07a91260","impliedFormat":1},{"version":"1b120fdaeeb29954fd681c5e1015696ec475dd04a3368840d9c3a7890f405d4d","impliedFormat":1},{"version":"9a7c2ff9e3a4e4bc120b4af7639fb26d2eac142a71c56d1c359ab69ce7bf6591","impliedFormat":1},{"version":"22d1f809b03db11e22722e760e3417a97ad0492b17300b6800c9f3d7a1c60587","impliedFormat":1},{"version":"820633c807d140fa4a4f33e05e57880087d271b8d650b176d7fa328a2c60b64b","impliedFormat":1},{"version":"451b4349c741618453a2ade15e274a7633bdeb6b52f7d79a6266ffbb543d54c8","impliedFormat":1},{"version":"01b35c6c21dda14ff8dbb9b563ba877e667e1481f5d870af911c9add867e716e","impliedFormat":1},{"version":"e31bc51d0f7eb8eea1012f3e0048effd2bf831086b8c46baa0519507a67e0a53","impliedFormat":1},{"version":"77bb98e83d665f5e19f9c2841d1bc580818ea6d9128d41e58670e573601dbf0d","impliedFormat":1},{"version":"df5535e2c7eed27fa0c406fb10bb23857d63e77ab8bfa3479cd08431f0063182","impliedFormat":1},{"version":"1b2ff08581c58b2764f9a91a48ef18f301550db20a37c44aac820ef35f3e2dcc","impliedFormat":1},{"version":"25b1d0933e4e074af01e46cd3031d1c8b4391729a8c3d8aa944437380230a7f6","impliedFormat":1},{"version":"a52467221505097b2c99cefae02b89d894e6a49af05fe20fd8731e88ae6fdc4b","impliedFormat":1},{"version":"285e6bf3f11b477ded28300e78c87dbbbd86741dc893bc6a7ba279ecca21145e","impliedFormat":1},{"version":"ab61fa2198aef6fa69542555dcf115a715a360338877a3ea4033ff4a0053896a","impliedFormat":1},{"version":"f6e0158d4585c22928ff47c70b12e48178c8ca7cbf27950068b7769f55520cbc","impliedFormat":1},{"version":"99ff747d2138fe08e9d2eba3915191fdb77865d6630292903381ad6e5a756b62","impliedFormat":1},{"version":"1e4a6df62588f94344c73fd22a6186f95e061b4ac8fe318fab22507fc6c496fa","impliedFormat":1},{"version":"418e4321e661ea63631914288279f36c8c86ce42d1914898a6d6b849e28819fd","impliedFormat":1},{"version":"cb71a85e3549ee39be04682a6ffe1cf7efd7bf513d788325993b6659482b825f","impliedFormat":1},{"version":"0e0a111771f59418b4674a87f60e40beb8bdddc4d701671df30035063e78264f","impliedFormat":1},{"version":"a235019b8a0b354c82bc4e006b7cbba0330a8aedbe275790b7d17cb06f34008c","impliedFormat":1},{"version":"bb2b3dfca2a623ddc33cbe1ad47f18f35622a2e34064652690599a9495353997","impliedFormat":1},{"version":"69d9ebfcd05adbb1b6900d79eb0cc88f9eb23984e6d0119d7b38b729ee554366","impliedFormat":1},{"version":"f7073b332610a8323fd411c30a79429a16b48e9e56fc9be18f9aaa36b27dbd7b","impliedFormat":1},{"version":"edc5f71597e9b2c3c70a6f5393da49662fa0445a92079e2e94848c64dc419213","impliedFormat":1},{"version":"371cc847f70236345195d6e4d38ecf94e1d48e24bd84138d1e93d1f4b74328b0","impliedFormat":1},{"version":"64d47df8528a6eca7eda9e092d11913748bdf50a8b5f8d322cc9ce0afda60d83","impliedFormat":1},{"version":"c491e36747e540354adb0e288a42b2c6d17d4edd7daaf8a7e63455647c07f219","impliedFormat":1},{"version":"a24d618047b637ee09f8017a5cd0da01ae0f20175214c27dbac27d35a5242970","impliedFormat":1},{"version":"81fc6d027cdbe6dc4a587fd021512d4b5014a5a544be2932b7aac085cd7238f1","impliedFormat":1},{"version":"135b0755989b3c3b640e9463e3a3145f38eaa44bb38ea2abbeffdae8dc95d433","impliedFormat":1},{"version":"e057fdb9bee006f78f6d8dc9aaedbbc9fec262f7d29a1ac1b1802f8bfbe8c147","impliedFormat":1},{"version":"db176597bef83637fef761b1f9c6c6cd2407ddc479a29624934d3f8d47304b66","impliedFormat":1},{"version":"da4cb47498ccd1785a2a5510f9c1532547d7f42f8fe17b1a0726eea405a32a1c","impliedFormat":1},{"version":"7edf8128e76fd623c09ba7ad9a917a18f036759f190c3916f14e38ad9a6d0853","impliedFormat":1},{"version":"bbac731d68609a1325ac2f53014db006730b313b044634862284f8a17be7dc37","impliedFormat":1},{"version":"eb9ca5d304463fca75530a5da1a8204c885a6952dd4fc08f20e8de57096488a0","impliedFormat":1},{"version":"1c933724d74e8faf9a2f4e8695b34c581d4dcdcb9fbc00f8f960b562447740f2","impliedFormat":1},{"version":"c2295b4175a6109853889f80b3c3fb078a6f22aab3e8ce6f0c4ebce2aefe5164","impliedFormat":1},{"version":"481c95365106bc3e1238e1372912a872c7b465eb2262b11833a989c507d4dd94","impliedFormat":1},{"version":"7a9f93a38b1dea8a54c9c6bd25f8222be1ca1b6846dd54042710efff89e27447","impliedFormat":1},{"version":"acd219708f7046de7917bd6012f39927d38d2ad355f56d82cec1e8754c5a3c87","impliedFormat":1},{"version":"a1af6bb8ece7353ef6769f004395bb3bee9ac35f435c0c6392d75424c02d9b92","impliedFormat":1},{"version":"1f636f3a4aa0f1bd15b9553f9965b427ca9dc78b262b5bd26a4612fcd60c2470","impliedFormat":1},{"version":"ab6df5e1c8d3feb54ab5ca6784a9f218b479db060b12b2c3aa2a32a049c98852","impliedFormat":1},{"version":"69a2fa86f2a0f17bba2108d4261287862440de17fee86cf9c3a1d5fd15746fcf","impliedFormat":1},{"version":"dc573be660be64ddffa5b7890a53db420a6a72c15127556edfdfea1cdbb0c550","impliedFormat":1},{"version":"4f18be01f6558fed637391fb31785436015b186196eafcc2c203aa2003089849","impliedFormat":1},{"version":"eb4bea987572411f2107d6b9c38d7d02b90069e844370b6c6d26ba823e78e924","impliedFormat":1},{"version":"84a3442d3ccd680a4fd7044d6ed19eaea6d41d6b3efcdb97ce74e76e49bd9092","impliedFormat":1},{"version":"22998b16ae6fb9c3c335bf8701ced45731a01f466ac97a8d7f252cfde79446b6","impliedFormat":1},{"version":"298c9c076970435de611e11a91e3de993024954d0936e915f856996a25b832d1","impliedFormat":1},{"version":"74da7af26adaed38996284b13c0991c65e0611495199851dbee6a48137884bd5","impliedFormat":1},{"version":"edbccee359ce50c3f11512691ccc980787b30616a05451290f07caea87357544","impliedFormat":1},{"version":"a6d0024f0e6ba4bb2833687c612feb6d17f009869354b21f2d288f26480cca36","impliedFormat":1},{"version":"57c32feadfa3e59d194e683c6f9f9d16691f1bbf9a52a62944f144451f3648d3","impliedFormat":1},{"version":"8ce805b95cf56d7c995791b45896d95953b633a19167f1beb9b30919be60817e","impliedFormat":1},{"version":"cb5914bd3359c14509b9a3ef2ecb4024b6324bbb5853246b131de411fcd110ea","impliedFormat":1},{"version":"769f173fa73f9aad21d0012f749472c44210f9bb5233adde9ceafb29cc17607f","impliedFormat":1},{"version":"5f4d315fbb7b904b5c6515e90273937f4d48f90adebf564728d89edc31d6b901","impliedFormat":1},{"version":"a623d5ba061c298385c2a0384976c8ff1f8295859997c5efacfe9aa82bcdbcde","impliedFormat":1},{"version":"05b88de2d87a2eab3635896b7700261666e6789816808d2f1fd9fc1c56270a15","impliedFormat":1},{"version":"44e400579e85507cf12f21df08ffd7615c6a2dc16ae642c45590b7b19df9e197","impliedFormat":1},{"version":"ce8d6a3c6fe2a69af42fdbb6bb0e4b43d8ba531e7f9e18ff4e0718f9461bc7a1","impliedFormat":1},{"version":"9a27ac694b2cd32a732309e2aaf8e5eda10a6707af05dc830f97b1e13bf13ce2","impliedFormat":1},{"version":"d284e25fc794af203943fb44cf8444b01a1ba7eace3f9b3e53b1e39033bb29ed","impliedFormat":1},{"version":"c559e2c686e346af7595af49b1c4a7a6d41651a8180f73d2c0a8d468293ef60d","impliedFormat":1},{"version":"949c6b2391ca0539fdb7770e1362b3ddc90feac973e836becdc22f5e50ad5b1b","impliedFormat":1},{"version":"fb109309218920d8e6c331ff632c32a3bd8f1cfcc0234519014d922eb4ff5fa1","impliedFormat":1},{"version":"2d96991e5d40e7c9d482728cbc0194e2ba0f37b01efcc6217eed47825e6f703e","impliedFormat":1},{"version":"1de6af73582a89d12b5daa1717c600958c413bf0b70dc90c76206a8ac401bae8","impliedFormat":1},{"version":"bf20a6ad8e4b9ccfb122eaa9e07651d6f37b28e686e985c6ef3856ea2c52d4ce","impliedFormat":1},{"version":"12d8c056b8aed052cfe9a98e4b8364d36289b7f95b4d533ca48f6009e358ecf1","impliedFormat":1},{"version":"48219a1168227eeaf159195800c71fb35d17a8ed0e5971e5e2c03f7f4eb3eac5","impliedFormat":1},{"version":"15cefa44dbdfbd986a4d4cbdfd148c4bd03d3983ca51c48d93240e62dbd9afa5","impliedFormat":1},{"version":"c6764d7e276f7aecb5d7623493b9ae635842cae0ccd26dd0fbed8df66c0c6e74","impliedFormat":1},{"version":"905192d3919b3a26a3bd2df1ff37318802a5283faa0852ddf0eacf2b6a01a5cc","impliedFormat":1},{"version":"c5d2d914a14adc1d7d88fc5faa4e32a55a01d5b6a50c01dc377c4cf3c190ab5b","impliedFormat":1},{"version":"cf895d10004eb04d328714f878b7a1156bd7ee1cbf6d5022ffb52272a3c78f95","impliedFormat":1},{"version":"6db6c008522e25cea49d05c04d9407444fcf136a7f35449b50450990900ae04f","impliedFormat":1},{"version":"b17855579d0c8513790bcb376871cb84795595aa2b235625bf09e80cdc8a2a2c","impliedFormat":1},{"version":"b38135216e120de9ab8aec8b181a4378d7b00974526d44748b3d117d8b82230b","impliedFormat":1},{"version":"9c7747f0d89050a5a90385785e1c0c8919474c60fac48d82cfa9a26737596da7","impliedFormat":1},{"version":"d2502433c5e71a0207f71542cb576c5d40fd49b9dee89fd34cfc4cd709cd9378","impliedFormat":1},{"version":"b5506046d42edd3dcd10549335a5d1ada795b23ee47caf6f9dd32c855cd9f7e1","impliedFormat":1},{"version":"d6e1acadb75ad4acc6afd5eed5a44b355fe847c883cebe40c181125980b64b81","impliedFormat":1},{"version":"b2b7e733164831293a986ac1cc027f14773036e9177f995a3aee81b64b3ac0e4","impliedFormat":1},{"version":"643a8b5a559535249a2f4e638262b3a44c54bac390f229bda674b42f8045f930","impliedFormat":1},{"version":"99a6fc744178097053a5825664b2e68d1c3f9d398389245007f81599d50556fc","impliedFormat":1},{"version":"fb5f8093ae439485713a7c17924ebb6d87695cc986427fc53238f21dad8f9aec","signature":"ed04f28b49d66edb95e762570fe6fc3966db983de55ead0fb4327b57c9d9d9b8"},{"version":"fcb19dc6ebb1f851e32b8261b9e7375979e9274695cacd1f2b4ccccec2e3d02c","signature":"363722d086149c4db2ff12411325701cc0141c2a34d3b0a0c301a61e9c1130ef"},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"78dbea00e90d2df8ea3dbef0cc379d95b8be9b71cd6bde4c28728f306811803b","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e1e46d0a9837ee058c100501080c920fa98081ea3956af0374308ba6f22a33e","impliedFormat":1},{"version":"272ca407e0c9068bdc5152552d876e68037ceae3de62e529306403e973dec8e1","impliedFormat":1},{"version":"fa7834c715d5357e4540cee40ce96c3250ddb67a7b879a6b7fa0e86d6696f121","impliedFormat":1},{"version":"22dfb07a7ab15b66ac043829056fe70124844636ae719551812ac631ba04985b","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"0cb167c371eaa8c869f8a7656a7296f2e4fae43b4d8b803a680236b24794e5f9","impliedFormat":1},{"version":"0a839dba0287cc0481ad4beedd48a1c64acf1e212ae865d1315f7007ca215161","impliedFormat":1},{"version":"38dc4655376cd1a4bd6bb3763d92949233e33d38d3dd3cbea7bbf218175a38ef","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"208a6a0bfb227bdf8fb964799d0a206c75cf03ccd72e63bf5495c9331354c6d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"48a679952eefe4cb776d5a0e1ccba2d3eb53b57448bbb7abc1fcebcbd5440188","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2d14da6ecb49bf828d83948765ec2d3a579d476bbb9645e749610baa6ec880ca","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"0aef708fb4c7a6b915e8305cbfac40cd207b032dbaabe9a01889a5fff3254681","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"ad9bdafb4e7abf14cc53ce7970486a84c87831e62891e5dfe798ddcd55e84701","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"71d3ae6a5e73ca4130762560425e00984ebaff64d5353a3333d1bb7eb86ef336","impliedFormat":1},{"version":"2467b00d963828f540f4acd7910f4c04cfe4b489550e6bb682212f65583bca5b","impliedFormat":1},{"version":"a68f36dc8c71757c01f7b0a32333997f510dd61a2de0a3ae1ac23072c368ec37","impliedFormat":99},{"version":"36d821a0e8e88a5e32abea7fc2aaeb4b2831e4e390c43d9dd036fe0f96c1e55a","signature":"65492a07e7dd886593ad1f4c2242cdaf600c61d4d93de427013c623df828fe62"},{"version":"dffac0e98808730a1ec8a72f06400a82db18ba1716a205ea3c9eba8dea12c1f7","impliedFormat":99},{"version":"00996ca313867810abb065cf60b968d308108a6a9e60aabd73b0c4bb413a3087","impliedFormat":99},{"version":"254510b0a3c2e04f55e98ae89a6aa42f67852c192c3502b3b8488e578b21c9d6","impliedFormat":99},{"version":"b75be7355591118207e7f24143b27a860da4043a1950c746e034313d9ded4137","impliedFormat":99},{"version":"001347f5cf4a36a041c80441fb050d7ec92b75446e66a30aceaf6dff9cf7f8fc","impliedFormat":99},{"version":"cb524ec077f3963e13e85747c6b53fbdf6bf407c84ca1873c6e43da1e96bee6d","impliedFormat":99},{"version":"40015c37055ef053b9038645c159785cb0200affedd77d544c964c04ef42b711","impliedFormat":99},{"version":"1dce257a8f5abc780d3486557c1879ee548150940c451c625b96bff68fc2ba80","impliedFormat":99},{"version":"5fc1373a65cc7b328a78873ec683c7932d5a81835f0c81a11a1d64c74a489af0","impliedFormat":99},{"version":"705d097503952d85a467f4fffb08bb04e19592d533f8184f1935b7eca86bdde3","impliedFormat":99},{"version":"7aa8bfe8a2d8222bb3641440f31cf6941119d772eb7a5f758969191c7fd768f1","impliedFormat":99},{"version":"56ca208f973c7b0670134f5f89aa40b129259a18b238f85f7477a2189e114bd3","impliedFormat":99},{"version":"fbfb2545745f62eb2ad7af59dfe7686e9fbb167db9addf60650c290df14d2b15","impliedFormat":99},{"version":"3a06b75b2a96275fda8ee5c6275ba7937d8f882a93a41d253491fc0f6c0ab955","impliedFormat":99},{"version":"926d8950ebbdb7709a1b836f7fe4f648a947c2170b24f7c9394ccb6f7e7ab3a6","impliedFormat":99},{"version":"8aaade86943aed56844ccbe2b75acd2d5b3ffde19ff3aaed247ec88b1a998f2d","impliedFormat":99},{"version":"5b3657ac4952d9298c9e802eb9ade19ec05ffba13630eefc1a058988513a7a4d","impliedFormat":99},{"version":"e70c176e12011334dacf5f7b6e070fffafd8233f501fde6548a514034535bfb3","impliedFormat":99},{"version":"d8c3b3c16a4a8656dcdd394df0df07d3149816cb96a89935d62cafe4dd84009a","impliedFormat":99},{"version":"17898d65fcfed611c5f863bd9b46191f895ed9efb0ee7f94e726163640362ee7","impliedFormat":99},{"version":"94616e40e31224cb261a78c5cb96fd3f65f9ead7052eac20fc6c975714f3840c","impliedFormat":99},{"version":"ed0476d920a535606ffe0ab079324002833d2b80dd24fa4277a3c01ce383c489","impliedFormat":99},{"version":"cd0c8c8b5002ec4cac9e8a5e26d853549c5c446a670fb375b9c052b345fb5da1","impliedFormat":99},{"version":"7d27796c034612b6016db97555b84f1005dc3d55e2286379d48ec8db475b6430","impliedFormat":99},{"version":"0d59de214eefc455e13a7f747c011729ee76f1554fdef55554ecf4bfeb20568b","impliedFormat":99},{"version":"c9accca5f68297d333c3c9dd2c9e5dd3cb12f7a6adf92e9128808cf5756bbdf0","impliedFormat":99},{"version":"1dca9186cf1875b242d729afc744f41069d291d09e3677a8e8febb77954c3b8e","impliedFormat":99},{"version":"cce34c68dd760a55d002eaa02390985f4aeaa39786679f54ade28be6229792e9","impliedFormat":99},{"version":"1245b8e5e176fc21ced594f675f3c8504eb0d026378fdbf69720df8d26a36d51","impliedFormat":99},{"version":"0d51d4e54377c751c75a6683536f48775e85da59b794f092d891e8ddbd6570b6","impliedFormat":99},{"version":"162ffbed80dad8ce0cf81c330c88dccaae85425fb457a6afcae0110419bdedfb","impliedFormat":99},{"version":"a3cd3c029155874631458cc745d98054ab21c739401eb161429b96bc5dade499","impliedFormat":99},{"version":"dec33c2516d9fb4449cfa3f09d904b1a5711c426c3941bad077a8efd2d11852d","impliedFormat":99},{"version":"382832cc588714542ddff121557592a2474483df65bf43be989eaf1f7e5b7fe5","impliedFormat":99},{"version":"a33c2fb6fb5a2a7a821892db6c3f6b7772c977e4c305e8536dabe9735674672e","impliedFormat":99},{"version":"8373b993346f57ab716d4061215b9b23e57ab081563616c46cd741f1b5685168","impliedFormat":99},{"version":"1c51e74dc17ef0653c461e11ffaa8e49db83997e80096b0d178661b24c6742c9","impliedFormat":99},{"version":"4c4c1d99c19d4eafe7f4d12443d74fe2c7b745c564fcf2d3deabd45c3e8a5084","impliedFormat":99},{"version":"49a78c0f3432bf1855e7b35a2c252b4c77d38a8d4d01e47ab1f8a8dbd029bb29","impliedFormat":99},{"version":"9fe7505ce259cddf0168f94d7e3b5b365f2f28d9ea4e892c5e2de8834f75cc8e","impliedFormat":99},{"version":"74efec06080e7dbd336e66df406b479f91b3185c39b34432174c71b1624f85bc","impliedFormat":99},{"version":"f2388b97b898a93d5a864e85627e3af8638695ebfa6d732ecd39d382824f0e63","impliedFormat":99},{"version":"f6dc932518b2028d7f06b057f68ff4c58451ebe56c8ae1710d7b247f95f3ffa9","impliedFormat":99},{"version":"b1030fc28f7c22a6860716af6d57c224e2bb5aa4444f32a1d1cb8b4b7444cdc4","impliedFormat":99},{"version":"52b04ff85d25e6b7508dc41c1a0ae1da9eb03d36d3b332125b500bde928dd1e4","impliedFormat":99},{"version":"ae2369b49f8638d8539969a4020afde6692abf9a59ca6b8f259ae82df02c6223","impliedFormat":99},{"version":"4ebe2a9a96949b586145bc51b4df6732b1778a8ad532ddc45810c930ce4440fe","impliedFormat":99},{"version":"bd993d6b88029f557ebac04111a0d4678a801173360554e81b1e0c0ff51dbc50","impliedFormat":99},{"version":"3b6163b3ff53976c8d441d1d39ec5c3c93ddf63cff8d23ce9f53bc57676507c1","impliedFormat":99},{"version":"8ec8bc7a8e8382a7d9a8fc93ebccef249f533d2d837a276d28aeee27007a316b","impliedFormat":99},{"version":"272c65a855950ed420008d6ce16c376525bcb4478a3fd51a9f2f8d8fb41d4557","impliedFormat":99},{"version":"db7582f6b63e0c91fec883cbe87c444eb7bc2a48722de7cb301edac18b158e4b","impliedFormat":99},{"version":"909645624c169d08692aa742671a79ab6a6e9959900286dc2cb27eff7d0ef64c","impliedFormat":99},{"version":"905ce2d127fb170716c65b24430aa2610dccaaee8806031846155cd4e09efd2b","impliedFormat":99},{"version":"e03cd30b875cfc6a06343b6fa3dc7c0ca1ed21be285092aa11a9c643087ea356","impliedFormat":99},{"version":"94318f1aeebdca6421c3853104d96ab6a3740d9f44ec29bc70bbf4cec26445b8","impliedFormat":99},{"version":"cd3e83879adce9d49745f923698a88a46e9b688366ba45266ef1963c5191ec70","impliedFormat":99},{"version":"22aec010dbc675d9faa0700a00004b1e961fcba6ade2f5f8c3d5428c957bf86c","impliedFormat":99},{"version":"50fd11b764194f06977c162c37e5a70bcf0d3579bf82dd4de4eee3ac68d0f82f","impliedFormat":99},{"version":"63cb28719a2f89c5fb9501bae33764b0a6d02bfefd93eb508aa9e84f7d6d2623","impliedFormat":99},{"version":"063ad9afba5969ece9ff4fe6f8a73b624b438f04ce306f350fb348a8c9b64ae7","impliedFormat":99},{"version":"2abf9a4a39c295140ff3ed755e2de2b4de70280a0ce675330cc010d6032b8dda","impliedFormat":99},{"version":"b48052cf5878d9601e083e5b1dc5d43708295fd656da109291fd5c14cc932a40","impliedFormat":99},{"version":"d59d1968c05b11196fc2bf761c2351101052c13656789fdaa09123bdf9ec9c7b","impliedFormat":99},{"version":"cf76a3176ccbc58b0b6096aefe324b4b7277f40e5ea322037db8c17b62982ba0","impliedFormat":99},{"version":"2612518d6222d3b54e7f0854fb75919682e6409114802ac34b5705c5a835b69c","impliedFormat":99},{"version":"f2cb7efb80804a8ebddbfe3f96b520cacb668a3c1fae8d2cf564ccbfed984e8f","impliedFormat":99},{"version":"a17771c1ed07f24b4fa8acb1792dc5d2521523c568c6642be7ef0c3bf93d457b","impliedFormat":99},{"version":"8edf116d74f8e2825ae4d9133a95fd214b2da113ae8c8cb1fe0120fe83bd428e","impliedFormat":99},{"version":"1c371d04b7e82bc573a7aed08c9ec336f90f1e2892deb598d7cadc5db1c5cfa4","impliedFormat":99},{"version":"bece3c43e77dc1f43324e491dcbdefdd79d5105b94b9ec7688314b54e313163a","impliedFormat":99},{"version":"0a329ec07e35cc10628ce5e5a33e51be16fb950ec659aec610a021befe1e568c","impliedFormat":99},{"version":"4a168e11fe0f46918721d2f6fcdb676333395736371db1c113ae30b6fde9ccd2","impliedFormat":99},{"version":"be0cc9cf2d3fdc0edb03b20a2bd42265a2411567c539e77ca34574d5189da038","impliedFormat":99},{"version":"301a2438eab88a6b528a1ea86f4c99563db71e604d4aa78cfc6cdcfc83c21181","impliedFormat":99},{"version":"37415a0c4ea993f72f9c0d0de745c75f21f453e9c4a4402390badef1d7260745","impliedFormat":99},{"version":"e2e0bada9329a6c7f5438feaf8bc1d37dda8403365db138c0cbdbbed01928ee4","impliedFormat":99},{"version":"96023b079934dbcaa5cde81b5b0eab721db6d371babd7f9ba788b64c25ae45db","impliedFormat":99},{"version":"084fb000599f7eea2f8750dd04d77a18d76fa29457c1c86555f3b450aeaf2d94","impliedFormat":99},{"version":"e14e6234b127e2513fe876e093d7fcd2ea758893e4862e2af723e80e315820ba","impliedFormat":99},{"version":"504b27cfc3ac4009e6beb8a1bdcf1332257593a7b1c2a1a239798eb5aa194a10","impliedFormat":99},{"version":"43f40db80b69fd942fc959c9435b8398353543533707773224ad982e7df75cde","impliedFormat":99},{"version":"82d472013f659ed47608a0d738e8577037ddefef6e8d90ffa785bd01d485d2d6","impliedFormat":99},{"version":"d6eeabf8c6d738eca697fa6369a93b899ff88ce689bbc212a0aa777780dd81b7","impliedFormat":99},{"version":"449d86efba63335b77a6f8598db00350484b536aeb860382e75bd4bc0ba9fc1e","impliedFormat":99},{"version":"396c1e5a39706999ec8cc582916e05fcb4f901631d2c192c1292e95089a494d9","impliedFormat":99},{"version":"cec21027e76c58b0ee626e56ae74440e7d447c649878941c9b4253c7b7e5c700","impliedFormat":99},{"version":"c3aa890ee662466f292d2f7cfd5bf62fbc44e03ffe67faa836230a28eaaaecaa","impliedFormat":99},{"version":"d7a14ca0ceaa7a0d2cd16da2e34f4fac19ca9358429c4d9d6b0867286d1ce873","impliedFormat":99},{"version":"10402f72db9d666f9857dc37958f7ac6c5329fb29fe51431f60fe35064d014c8","impliedFormat":99},{"version":"4b82f963e4f9685848d72fc59bd3870251effe2a88b291a831efc2f9c0c7d475","impliedFormat":99},{"version":"fbd2a69a681df874dce1e979502baefdf918731eff7a078082f0ad1232afc321","impliedFormat":99},{"version":"8727db7ffce81c537469cb9123085b0caf93c9b6c29c108a728e0fdd3278d06c","impliedFormat":99},{"version":"5905e7cacd3556c1b658bcdc6aca5d833c436f42eea9da7620ed6377715538fb","impliedFormat":99},{"version":"e6223b7263dd7a49f4691bf8df2b1e69f764fb46972937e6f9b28538d050b1ba","impliedFormat":99},{"version":"4ccb90626099da0ace311cfe43d83898e7e9ad8f821e3301aac5e6a450eb0db3","impliedFormat":99},{"version":"5a2883834fce388ee57236f00ce3ba4f2bea08053fabfb46ba30f3564737221d","impliedFormat":99},{"version":"314e9a1b2df91bd593d40b989a4cb4b746c3b7d0523328981e6b32b7bfd41f63","impliedFormat":99},{"version":"7bc096d5b67cbf7ab63ad1a52749466f8806261d25bb6c4b04e38a2289889f27","impliedFormat":99},{"version":"724931a0674ff40a752c335de4516cb569051dabefd61d7412fd5a57927e0047","impliedFormat":99},{"version":"e46b2b2723e7407836ca8f92ac84c6ad7b49b9cdc4d6b33eaebfc939896c24ca","impliedFormat":99},{"version":"ee7219a3fa20a6cc5eb9cc26547abe66baf3996885de58bb0aad30c07ca98d33","impliedFormat":99},{"version":"d13aed7bdde1b5bbaa7c242753c9164a44ac3da7ebfd0d73a3f82d8fd45ee816","impliedFormat":99},{"version":"5f8c5319e728fbe5c14734d7fcdbea74a241a04061352288b6b05700c6a6ee1d","impliedFormat":99},{"version":"748958abdbc386eec2063ea208aad8fa2e43387f0080f6bf7bdf16ed63ff1477","impliedFormat":99},{"version":"6d4114abca02c7c97399341b12bf3fb139681f4f4ac82cd2ad5669c2740b9ed8","impliedFormat":99},{"version":"470232f9628dadbdd5e652c5900e4be1d00decb2dbe591404019b358e2e0ed69","impliedFormat":99},{"version":"938db803f7593f8a7447b016d5a163ab6b23db6d6f8d67aba8824739039fb0be","impliedFormat":99},{"version":"1da78c6d820d4c2c1becc55258ed84f787fea783a8043a0c65d411d7b44224a7","impliedFormat":99},{"version":"164bb9dd9f931187a9685cf100524799f25cda3ab2e0644d919a928821a88b0c","impliedFormat":99},{"version":"10ff59fc423b04be91c2228f853184bbe84bc34d65db485b598fc9eaa466a173","impliedFormat":99},{"version":"b674f99496be547a5fe77ca3590687d97a32f03cd03fc3c1fea54689531e0786","impliedFormat":99},{"version":"74bdd237d72b876897b6ae4ce3f71ddef09e2ceec715e6968c778590fcf08d17","impliedFormat":99},{"version":"76268c3a7ba17b2d00ca1cea34b4af9485cfb26fe0bb08c04b61220037a45c57","impliedFormat":99},{"version":"854f0964a1620f7918d671dc4486b8adbf64ff6fa9323af5352c8ff4ce653623","impliedFormat":99},{"version":"64d027ab2759c6ae9fdae440cb46ee5e633959c06bc6c670adbb272ffd44f913","impliedFormat":99},{"version":"c0a3b79eb4aa5caae661b95c75afcac6d2d3661673a612b518af342bd3cbf6e3","impliedFormat":99},{"version":"d139ce49006ca9dde59727635888ea0aecd13af77802376e1968db1b025a462a","impliedFormat":99},{"version":"e47adc2176f43c617c0ab47f2d9b2bb1706d9e0669bf349a30c3fe09ddd63261","impliedFormat":99},{"version":"ce53e32e2079d5ab66e231f56807f47a3f19fcb01cbafc0195f0632e9d3b20fa","impliedFormat":99},{"version":"ae771d0031a2d1332cb0acf27fe83c191f78ec0c13fb636753ed4da9e648b376","impliedFormat":99},{"version":"e49c328ac55bee330ccb3c1e4b8705983eae89ba222b1880f2f7a9e6933c6df3","impliedFormat":99},{"version":"eed40a963fe55142d62b9da657ecbb31a0b7ce745f9304c92ed6a00be6db3cb2","impliedFormat":99},{"version":"daf532b8d104bff5cd6c90c8411b4acd9d1ab3bd5abc2b3a6f7d01a0eabbcb17","impliedFormat":99},{"version":"84b764615113da77b87c2496d6a78e0b78b8945ea5ba4eef4cb8b776e291b06e","impliedFormat":99},{"version":"ba765b5a4ebd0b7bff1749d3f92c789f73e3ad60dee4dacc0620d8f94489dda3","impliedFormat":99},{"version":"f611766369f8277a295a75b9e6ddd1e2eef32d82559de0c24cb3504074ef44a9","impliedFormat":99},{"version":"569e762cf47aafdad508360a443c6c757e56c61db3b652b65458a7d168d139c4","impliedFormat":99},{"version":"02ed2766d79a00719ac3cc77851d54bd7197c1b12085ea12126bc2a65068223e","impliedFormat":99},{"version":"4b84373e192b7e0f8569b65eb16857098a6ee279b75d49223db2a751fdd7efde","impliedFormat":99},{"version":"5aeea312cd1d3cc5d72fc8a9c964439d771bdf41d9cce46667471b896b997473","impliedFormat":99},{"version":"a9de04c9ecc184497995853cfcf529de92b58adc5bccfae0350157269aba9391","impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1},{"version":"f2c4a36eb216aadb0d9c79862a31b922ccfa1eaaa38d2124cc9192d40eda4779","impliedFormat":1},{"version":"cb5bb1db16ff4b534f56f7741e7ffd0a007ce36d387a377d4c196036e0932423","impliedFormat":1},{"version":"25be1eb939c9c63242c7a45446edb20c40541da967f43f1aa6a00ed53c0552db","impliedFormat":1},{"version":"08c2bb524b8ed271f194e1c7cc6ad0bcc773f596c41f68a207d0ec02c9727060","impliedFormat":1},{"version":"8ac41e0836522cc725d4541502cc2d433fa5b66d66d074ef6716b201bdf8ecc0","impliedFormat":1},{"version":"c0a4398261ab9b569fb4016576636c601c171ee983d124f68a2faa7ff82ce14b","impliedFormat":1},{"version":"d99e9f5aa43397599fe824e38c33d13d3a9e19198806a4363114bd7ac58b29cc","impliedFormat":1},{"version":"440099416057789b14f85af057d4924915f27043399c10d4ca67409d94b963cf","impliedFormat":1},{"version":"ac44995fc7d0781d77927bae7dd41a31f0309e695fd2694b175c0ce3bc4b3b50","impliedFormat":1},{"version":"0c1f802f7a60ca8084e5188ac7952accdfc00f39ded3ebbbd3cdcc9da51b9a7b","impliedFormat":1},{"version":"a32e3fc530d8d1a18bf54678d8d55714827a50c9fabdd4ede7155a56be7d1dcb","impliedFormat":1},{"version":"14ecfc29e0c44ad4c5e50f9b597492cd8f45a2a635db8b5fe911a5da83e26cf8","impliedFormat":1},{"version":"ba0badf6398010ef0ba77947d4b52078fc84cb4f209f6b70194b3b2cfb1823d8","impliedFormat":99},{"version":"c2f041fe0e7ae2d5a19c477d19e8ec13de3d65ef45e442fa081cf6098cdcbe2d","impliedFormat":1},{"version":"0cef678147928ef223ff7f2aae3442cc9f4e9996956e9ac92434e626d0e147f8","impliedFormat":1},{"version":"198ae766bb698feb66d3188cfce59fb33696c951b10f901aa3fc3db4847ce76a","impliedFormat":1},{"version":"6dc488fd3d01e4269f0492b3e0ee7961eec79f4fc3ae997c7d28cde0572dbd91","impliedFormat":1},{"version":"a09b706f16bda9372761bd70cf59814b6f0a0c2970d62a5b2976e2fd157b920f","impliedFormat":1},{"version":"70da4bfde55d1ec74e3aa7635eae741f81ced44d3c344e2d299e677404570ca9","impliedFormat":1},{"version":"bf4f6b0d2ae8d11dc940c20891f9a4a558be906a530b9d9a8ff1032afa1962cd","impliedFormat":1},{"version":"9975431639f84750a914333bd3bfa9af47f86f54edbaa975617f196482cfee31","impliedFormat":1},{"version":"70a5cb56f988602271e772c65cb6735039148d5e90a4c270e5806f59fc51d3a0","impliedFormat":1},{"version":"e083384623f90cfa7e8d2aa7efe78c51095a04ad51d1f82c3e4052689666895d","impliedFormat":1},{"version":"ace7593fa8835485be50ba3ca042be335d559dcf4686867db581bf84d0b1ee51","signature":"6c3c82f490eed9f2aba00d02391689f7c79806a770845c34a150180373b68557"},{"version":"b1ad73e2ed4c67e2665c5412eaa54f9a6bff419bc6f07294b9ca2e27ec217cfd","signature":"0372e8e8f15b3026a6bc2ef0994de6bb1724ccacd3c8310c2af448110dfb4a72"},{"version":"01d640c7aa3a604f53173fff8149898ad0354ce4685085262c6bc48d8814b356","signature":"a926cdf758c852314a08d6e848d2420f1e009c43757c9e30dd229aace5f07af3"},{"version":"3b6fa25bb9061501912bae8878e3b320ceaf02a4948d0a3ee789f85c418e02b5","signature":"92895f18c240f40c456e36680dfbd3990b371c112b88ca446a31164260e646fc"},{"version":"36bba51bdabe3f6872ba0b6be7335b48efe8794692ebc94f150f5431fdefde24","signature":"f4642cd24500cd4aa6b555395ef93d921e81629f580140919147c29b3d9ddc6d"},{"version":"d553c45e445670958d8b3a2681f1c2e5242fdb8c355810fb572ccf72e4a3944a","signature":"21011212e61554af148b25611da1cbe6194487b337f5d7eeec9f53861a226b8f"},{"version":"9fd2f83c97ff4f814730c6f698279468042eb9a7ae5c7fcb81a514dabb15dd36","signature":"c02b07a9f0b2cc9b7fb78b705f433a04d1cd0f5ca33d5a3de65f5e93f03cd0a9"},{"version":"e40a9da25c713ec66e4c74cf729919f65d14b064ed243a10982f57ffd86ac39d","signature":"531ff016e1bd1515a14d908a9b41d26cf03c39ed337907536d86e3adf13fba5b"},{"version":"45eefff9db17197d11108a8302ac84f80ee3db5f4985c898e8e54c47a7f74734","signature":"7a4cd94173579346e9ef652b094fc14f8c958ebcecfbd352c3728b26650001f1"},{"version":"526455f60ddbbbb9c344ac80fcf9de6b7a284be75758b11fdfb97390eaac4dc5","signature":"2c99095d5cab50111c6ce9fdc0fd3ff55b906ff6e5958d947a73ea9df38a939a"},{"version":"cee00bd8ef77254fcf77b22814615d05fe53f81025ca05d3dafb0cef5a144c43","signature":"c6764ca7ad446267daca8e31932d69719615fff68ddb57b20487b395db89b791"},{"version":"225949ade56fe055283a95c9a50a76f6706376cb339d864825af97be2a7b723a","signature":"fbe89e0b383cefd7f654864d191a0850533cdae019d5ea8527f9c273706f45dc"},{"version":"62e7948a77efcce513ce1c7a6e4eab83e9f08509f508efa6b6096be5cb841d75","signature":"3144a2c832511046d31909580cc188968832402ef46e011095ad02207d39e526"},{"version":"fc042d6005eef0efb0f5e541622abeb0aff70c4af8f30216992a6b6eb56bcd33","signature":"919edd9dc8ff891b51d5af08be72d827963dd3ca6ba3e23934a061e7a9540201"},{"version":"ad14c34e6759340164b98c46b5282af9184e42ddc2019fa3a86d27a764e14ea7","signature":"f9c6ab01d50d3ec2ff6613c102fd4cc485df21e910fe70b30792ce61a81ed293"},{"version":"198785468e678935a41f0c2d9be6fb181843d44b7a68d1f6a9b45583f80b3f7f","signature":"cee662c80ced2df415fc2179c80d0a1339bd7f781b8f9132ebec0f9919b88474"},{"version":"7b03e12aa5f11cd4bcbd203165de11410635b82b9b1db9caf2a89a686b23ae96","signature":"12b433e9c95af30d5d7345e033c61705075fab5ccd84a022a2c5a981102e7cf2"},{"version":"bfe0eb397a8c67b892ede8da6490c9ac8eaa55624f1c7b53fb720478e3fda53b","signature":"b82491e2990291580288c5602d4c017238977749d52b17391f0e45d9a29be644"},{"version":"84bcc7c6b06f4d643a55dc63b56be0c81d990f8d549b66ea615c553268774dc3","impliedFormat":1},{"version":"2d225e7bda2871c066a7079c88174340950fb604f624f2586d3ea27bb9e5f4ff","impliedFormat":1},{"version":"6a785f84e63234035e511817dd48ada756d984dd8f9344e56eb8b2bdcd8fd001","impliedFormat":1},{"version":"c1422d016f7df2ccd3594c06f2923199acd09898f2c42f50ea8159f1f856f618","impliedFormat":1},{"version":"2973b1b7857ca144251375b97f98474e9847a890331e27132d5a8b3aea9350a8","impliedFormat":1},{"version":"0eb6152d37c84d6119295493dfcc20c331c6fda1304a513d159cdaa599dcb78b","impliedFormat":1},{"version":"237df26f8c326ca00cd9d2deb40214a079749062156386b6d75bdcecc6988a6b","impliedFormat":1},{"version":"cd44995ee13d5d23df17a10213fed7b483fabfd5ea08f267ab52c07ce0b6b4da","impliedFormat":1},{"version":"58ce1486f851942bd2d3056b399079bc9cb978ec933fe9833ea417e33eab676e","impliedFormat":1},{"version":"7557d4d7f19f94341f4413575a3453ba7f6039c9591015bcf4282a8e75414043","impliedFormat":1},{"version":"a3b2cc16f3ce2d882eca44e1066f57a24751545f2a5e4a153d4de31b4cac9bb5","impliedFormat":1},{"version":"ac2b3b377d3068bfb6e1cb8889c99098f2c875955e2325315991882a74d92cc8","impliedFormat":1},{"version":"8deb39d89095469957f73bd194d11f01d9894b8c1f1e27fbf3f6e8122576b336","impliedFormat":1},{"version":"a38a9c41f433b608a0d37e645a31eecf7233ef3d3fffeb626988d3219f80e32f","impliedFormat":1},{"version":"8e1428dcba6a984489863935049893631170a37f9584c0479f06e1a5b1f04332","impliedFormat":1},{"version":"1fce9ecb87a2d3898941c60df617e52e50fb0c03c9b7b2ba8381972448327285","impliedFormat":1},{"version":"5ef0597b8238443908b2c4bf69149ed3894ac0ddd0515ac583d38c7595b151f1","impliedFormat":1},{"version":"ac52b775a80badff5f4ac329c5725a26bd5aaadd57afa7ad9e98b4844767312a","impliedFormat":1},{"version":"6ae5b4a63010c82bf2522b4ecfc29ffe6a8b0c5eea6b2b35120077e9ac54d7a1","impliedFormat":1},{"version":"dd7109c49f416f218915921d44f0f28975df78e04e437c62e1e1eb3be5e18a35","impliedFormat":1},{"version":"eee181112e420b345fc78422a6cc32385ede3d27e2eaf8b8c4ad8b2c29e3e52e","impliedFormat":1},{"version":"25fbe57c8ee3079e2201fe580578fab4f3a78881c98865b7c96233af00bf9624","impliedFormat":1},{"version":"62cc8477858487b4c4de7d7ae5e745a8ce0015c1592f398b63ee05d6e64ca295","impliedFormat":1},{"version":"cc2a9ec3cb10e4c0b8738b02c31798fad312d21ef20b6a2f5be1d077e9f5409d","impliedFormat":1},{"version":"4b4fadcda7d34034737598c07e2dca5d7e1e633cb3ba8dd4d2e6a7782b30b296","impliedFormat":1},{"version":"360fdc8829a51c5428636f1f83e7db36fef6c5a15ed4411b582d00a1c2bd6e97","impliedFormat":1},{"version":"1cf0d15e6ab1ecabbf329b906ae8543e6b8955133b7f6655f04d433e3a0597ab","impliedFormat":1},{"version":"7c9f98fe812643141502b30fb2b5ec56d16aaf94f98580276ae37b7924dd44a4","impliedFormat":1},{"version":"b3547893f24f59d0a644c52f55901b15a3fa1a115bc5ea9a582911469b9348b7","impliedFormat":1},{"version":"596e5b88b6ca8399076afcc22af6e6e0c4700c7cd1f420a78d637c3fb44a885e","impliedFormat":1},{"version":"adddf736e08132c7059ee572b128fdacb1c2650ace80d0f582e93d097ed4fbaf","impliedFormat":1},{"version":"d4cad9dc13e9c5348637170ddd5d95f7ed5fdfc856ddca40234fa55518bc99a6","impliedFormat":1},{"version":"d70675ba7ba7d02e52b7070a369957a70827e4b2bca2c1680c38a832e87b61fd","impliedFormat":1},{"version":"3be71f4ce8988a01e2f5368bdd58e1d60236baf511e4510ee9291c7b3729a27e","impliedFormat":1},{"version":"423d2ccc38e369a7527988d682fafc40267bcd6688a7473e59c5eea20a29b64f","impliedFormat":1},{"version":"2f9fde0868ed030277c678b435f63fcf03d27c04301299580a4017963cc04ce6","impliedFormat":1},{"version":"feeb73d48cc41c6dd23d17473521b0af877751504c30c18dc84267c8eeea429a","impliedFormat":1},{"version":"25f1159094dc0bf3a71313a74e0885426af21c5d6564a254004f2cadf9c5b052","impliedFormat":1},{"version":"cde493e09daad4bb29922fe633f760be9f0e8e2f39cdca999cce3b8690b5e13a","impliedFormat":1},{"version":"3d7f9eb12aface876f7b535cc89dcd416daf77f0b3573333f16ec0a70bcf902a","impliedFormat":1},{"version":"4304f640f7cb4724ea82441accb7c7607fa7207541182470d625adda99b2900b","impliedFormat":1},{"version":"e0205f04611bea8b5b82168065b8ef1476a8e96236201494eb8c785331c43118","impliedFormat":1},{"version":"62d26d8ba4fa15ab425c1b57a050ed76c5b0ecbffaa53f182110aa3a02405a07","impliedFormat":1},{"version":"9941cbf7ca695e95d588f5f1692ab040b078d44a95d231fa9a8f828186b7b77d","impliedFormat":1},{"version":"41b8775befd7ded7245a627e9f4de6110236688ce4c124d2d40c37bc1a3bfe05","impliedFormat":1},{"version":"a6613ee552418429af38391e37389036654a882c342a1b81f2711e8ddac597f2","impliedFormat":1},{"version":"da47cb979ae4a849f9b983f43ef34365b7050c4f5ae2ebf818195858774e1d67","impliedFormat":1},{"version":"ac3bcb82d7280fc313a967f311764258d18caf33db6d2b1a0243cde607ff01a0","impliedFormat":1},{"version":"c9b5632d6665177030428d02603aeac3e920d31ec83ac500b55d44c7da74bd84","impliedFormat":1},{"version":"46456824df16d60f243a7e386562b27bac838aaba66050b9bc0f31e1ab34c1f2","impliedFormat":1},{"version":"b91034069e217212d8dda6c92669ee9f180b4c36273b5244c3be2c657f9286c7","impliedFormat":1},{"version":"0697277dd829ac2610d68fe1b457c9e758105bb52d40e149d9c15e5e2fe6dca4","impliedFormat":1},{"version":"b0d06dbb409369169143ede5df1fb58b2fca8d44588e199bd624b6f6d966bf08","impliedFormat":1},{"version":"88dfdb2a44912a28aea3ebb657dc7fcec6ba59f7233005e3405824995b713dac","impliedFormat":1},{"version":"f38a45cbc0356dfb6455211e75ecd0f8aeaedbacd4cb8d6646c818d36a46d195","impliedFormat":1},{"version":"cc2d5d5687bdf9d7c49b6946b8769ac7abcbdcd1701d9bb9ca70a8bc1b003e8b","impliedFormat":1},{"version":"814e29fd63ffbadaa938eed9ed5b2da3bbdd3671312eaf8d2798010e123aae7a","impliedFormat":1},{"version":"9c0623d67471ddc5b9d82b4e06252c746d54f7ae8ccff8701cd51c249f7e7694","impliedFormat":1},{"version":"71654f68a41362f16a2690ec215e583d3cfa913d49327e43c3c7f354022f67a3","impliedFormat":1},{"version":"f69b484edf398d636992757d587e7e38ea91844a66dbca9d682c9cf7858b77cf","impliedFormat":1},{"version":"633f0cda8da5fc0465e0f3d19569e09e0a16f60a47b1ad24d440f58f72e14965","impliedFormat":1},{"version":"c3ccf44723b474b5d7a87c53eed9711e81422f0e29b3e8f8f8d42775fa802243","impliedFormat":1},{"version":"9f6d49a0b21b0a5adeb354ec8f42aca672a8e8c1b8196f062ea5309395f03380","impliedFormat":1},{"version":"fd4baead95dac76786410f7b870f1511d7be6cf36b752fbe7458d43e61e657d9","impliedFormat":1},{"version":"4fe80f12b1d5189384a219095c2eabadbb389c2d3703aae7c5376dbaa56061df","impliedFormat":1},{"version":"9eb1d2dceae65d1c82fc6be7e9b6b19cf3ca93c364678611107362b6ad4d2d41","impliedFormat":1},{"version":"eb81f582c0e1ae21f004b39c268c68ad13222cd7e72f45080d6cdf9b994dfecf","impliedFormat":1},{"version":"e40f9840e4686053a5d42b39fddfd6774172a3d12fa61c1edb8c35b452a5e74a","impliedFormat":1},{"version":"4be4c4bea246023f3a9be669a3a1b8cb0cfe28da3ce643d281e1cdb3b3578e27","impliedFormat":1},{"version":"1b9c3803fb0888f9ec9c398dd2bb6002654eaefa527f06c0c1c04c831c0b8b19","impliedFormat":1},{"version":"b8ab697fa1664caef9427ee3edfb687a35e88c06b2d12c63d1d32dfaf3b722a1","impliedFormat":1},{"version":"739731be7ff615eab4160e58549755ba4978b0692257e9a731c194faf4ef543b","impliedFormat":1},{"version":"3fd523f1afe8b61552c89e4e7e14a453ba843c40046ac8cd831886854393a523","impliedFormat":1},{"version":"aaf7da505f9167078132deef7f189f772e69b84b186a2ff3cefe64812a4093d5","impliedFormat":1},{"version":"64102e00cb41de7f423608037d17dff83954904383e5c45f1054c2246cf5e184","impliedFormat":1},{"version":"69b59327a18869d2168be6beb4ad0bf235fa85c1f3ad9ff1a08de5d26f6c6910","impliedFormat":1},{"version":"ee51197d5201fcde5614bdbe4c539ef568d98cf97f29f02023a6e63a7b2240e8","impliedFormat":1},{"version":"fe029999423fa40bb9e6b3cb94e0933049c7c13bb26bccd764b02528270231d5","impliedFormat":1},{"version":"44b227ad122395768f07a8f1b84041b096220335b34ff7af3b8caa61731b294d","impliedFormat":1},{"version":"a31d3c5f50d13db8bb892ea6c7667716accb8a4bfc3b350fdb72e96aa1c89a38","impliedFormat":1},{"version":"41a5fa167b1428ed96d3bc2ccb5ebf1d94d42dc63b3c44e9102fcd6b1f9b0fc4","impliedFormat":1},{"version":"ae2b39d629e335f75d922545bb0ef8a02ef2b7918541c024fc5b0f5cda960585","impliedFormat":99},{"version":"4388c59a46e2f37a43658e773e4993981ecae6fd92e3f081a1d345c70cf3ff0d","impliedFormat":99},{"version":"77cce42573ab1a4a41bd691086d8db1a9c4d0f2cc33b5ccd1006ffa0dabc6ae2","impliedFormat":99},{"version":"5958ccc3b8918a9a597dfaa0ca8b26c38bc2d848d227c264c26d1aff8f1eb17a","impliedFormat":99},{"version":"107192b0461aa45923478dce292c7718377ac08f30784a43311018d1fbd39f02","impliedFormat":99},{"version":"30c0cd89ca143db0300f11595ee8fcdb36167cbb2ee4e161bc9bd5ceb4961954","impliedFormat":99},{"version":"8015d26fbd62caf9d276430324032e1dba817f833d51d90f4370a76e4197ed17","impliedFormat":99},{"version":"89cff9490c7143ec3c956f9b9f1bf5dc8144e05c4438d6cfafb4fcadecf14330","impliedFormat":99},{"version":"8ca6228625e9eca84fef8f8296e5de49831d31e222fedc045403393ba7951a6a","impliedFormat":99},{"version":"4c03fdceb8ea073f3f9ba15ec4db7db680928da1b430fb53390dcaf9fd96b5dc","impliedFormat":99},{"version":"7536d7105ea97d42602467b5511dc0d1518f20d1c3cd3a16cb6f28d844fa4d63","impliedFormat":99},{"version":"77930b7c201e5a89d7385aa7ffbe600ee1c8680fe492ecd0798eb61bc5748896","impliedFormat":99},{"version":"97268b0b6e5fc7ee5d837a055fa22f4abb955e80229e3864d93480701c94cc66","impliedFormat":99},{"version":"85652d7bb13bd2141b3d0c68d07ac1a11e933dd32ca2bb4b1b83b8aa5f62251c","impliedFormat":1},{"version":"7550ce229d3b6b530a5e1e76eec645582a501f224edebbecff23c1f57b4e54f2","signature":"396a3607ca8288c7dd02dff9b04e6ffb057b3c6f3d12965421373c3da78b65cc"}],"root":[[864,872],1473,1474,1582,[1739,1756],1852],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"module":1,"outDir":"./dist","removeComments":true,"rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"strictPropertyInitialization":false,"target":10},"referencedMap":[[1811,1],[1837,2],[1812,3],[1814,4],[1580,3],[349,3],[336,3],[69,3],[325,5],[326,5],[327,3],[328,6],[338,7],[329,5],[330,8],[331,3],[332,3],[333,5],[334,5],[335,5],[337,9],[345,10],[347,3],[344,3],[352,11],[348,3],[346,3],[342,12],[343,13],[351,3],[350,14],[353,15],[339,3],[341,16],[340,17],[276,3],[279,18],[275,3],[1588,3],[277,3],[278,3],[356,19],[357,19],[358,19],[359,19],[360,19],[361,19],[362,19],[355,20],[363,19],[377,21],[364,19],[354,3],[365,19],[366,19],[367,19],[368,19],[369,19],[370,19],[371,19],[372,19],[373,19],[374,19],[375,19],[376,19],[385,22],[383,23],[382,3],[381,3],[384,24],[428,25],[70,3],[71,3],[72,3],[1594,26],[74,27],[1596,28],[1595,29],[264,30],[265,27],[405,3],[295,3],[296,3],[406,31],[266,3],[407,3],[408,32],[73,3],[268,33],[269,34],[267,35],[270,33],[271,3],[274,36],[286,37],[287,3],[292,38],[288,3],[289,3],[290,3],[291,3],[293,3],[294,39],[301,40],[304,41],[302,3],[303,3],[324,42],[305,3],[306,3],[1598,43],[307,33],[308,3],[285,44],[283,45],[281,46],[282,47],[284,3],[315,48],[309,3],[318,49],[311,50],[316,51],[314,52],[317,53],[312,54],[313,55],[298,56],[320,57],[300,58],[322,59],[323,60],[299,3],[310,3],[319,3],[272,3],[280,61],[321,62],[1599,63],[391,64],[386,3],[392,65],[387,66],[388,67],[389,68],[390,69],[393,70],[398,71],[396,72],[397,72],[404,73],[394,3],[395,74],[399,71],[401,75],[403,76],[402,77],[418,78],[410,79],[411,80],[412,80],[413,81],[414,81],[415,80],[416,80],[417,82],[409,83],[420,84],[419,85],[423,86],[422,87],[425,88],[424,89],[421,90],[378,91],[380,92],[297,3],[379,56],[1592,3],[426,93],[400,94],[427,95],[1591,3],[1590,96],[1593,3],[1597,97],[1589,3],[1618,98],[1619,99],[1639,100],[1640,101],[1641,3],[1642,102],[1643,103],[1651,104],[1645,105],[1648,106],[1654,107],[1652,6],[1653,108],[1646,109],[1655,3],[1657,110],[1658,111],[1659,112],[1650,113],[1647,114],[1667,115],[1656,98],[1682,116],[1644,117],[1683,118],[1680,119],[1681,6],[1707,120],[1634,121],[1630,122],[1632,123],[1679,124],[1625,125],[1669,126],[1668,3],[1633,127],[1676,128],[1637,129],[1677,3],[1678,130],[1635,131],[1636,132],[1631,133],[1629,6],[1624,3],[1673,134],[1686,135],[1684,6],[1620,6],[1672,136],[1621,98],[1622,101],[1623,98],[1627,137],[1626,138],[1685,139],[1628,140],[1662,141],[1660,110],[1661,111],[1670,6],[1671,142],[1674,101],[1689,143],[1690,144],[1687,145],[1688,146],[1691,147],[1692,148],[1693,149],[1666,150],[1663,98],[1664,6],[1665,111],[1695,151],[1694,152],[1704,153],[1638,6],[1700,154],[1696,155],[1697,156],[1698,156],[1699,6],[1702,157],[1701,3],[1703,158],[1649,159],[1675,160],[1706,161],[1705,6],[1844,162],[1845,163],[1849,164],[1846,6],[1847,165],[1848,165],[1850,166],[1838,167],[1839,3],[1840,168],[1843,169],[1842,170],[1841,171],[862,3],[815,3],[816,3],[819,172],[821,173],[822,3],[823,3],[824,6],[825,3],[826,3],[827,3],[828,3],[829,174],[830,3],[831,3],[832,6],[833,3],[834,175],[836,176],[837,3],[839,177],[840,176],[842,178],[843,179],[844,175],[845,175],[846,3],[847,180],[851,181],[863,182],[820,3],[835,175],[850,183],[817,3],[838,184],[849,185],[841,90],[848,3],[852,186],[853,6],[858,187],[854,6],[855,6],[856,6],[857,6],[818,3],[860,188],[859,3],[861,189],[809,190],[807,191],[808,192],[810,3],[814,193],[806,194],[812,195],[811,196],[813,197],[1584,198],[1583,199],[1611,3],[1585,3],[1586,3],[1612,200],[1587,6],[1609,201],[1610,3],[1614,202],[1613,3],[1615,6],[1616,203],[1708,204],[1709,205],[1600,101],[1604,206],[1601,3],[1602,3],[1603,3],[1608,207],[1617,3],[1605,62],[1606,3],[1607,3],[1727,3],[273,3],[1398,208],[1453,209],[1455,210],[1399,211],[1400,212],[1401,208],[1402,212],[1403,211],[1405,213],[1406,208],[1407,212],[1408,213],[1409,213],[1410,213],[1411,212],[1412,208],[1413,208],[1414,212],[1415,212],[1416,212],[1417,212],[1418,208],[1419,213],[1420,208],[1421,212],[1422,212],[1423,212],[1424,211],[1425,212],[1426,211],[1427,208],[1428,208],[1429,208],[1430,208],[1431,213],[1432,208],[1433,213],[1434,211],[1435,208],[1436,208],[1437,208],[1438,213],[1439,212],[1440,213],[1441,208],[1442,3],[1443,208],[1444,208],[1445,212],[1446,208],[1447,208],[1448,208],[1449,208],[1454,3],[1451,214],[1450,208],[1404,208],[1452,3],[1466,215],[1469,216],[1467,3],[1460,3],[1462,217],[1464,218],[1458,219],[1471,220],[1470,3],[1463,3],[1457,208],[1465,221],[1456,3],[1468,222],[1461,3],[1459,208],[1366,3],[1370,223],[1374,224],[1371,225],[1367,208],[1375,226],[1368,208],[1369,208],[1373,225],[1365,3],[1379,227],[1377,228],[1376,229],[1378,3],[877,230],[1160,231],[1153,232],[1154,233],[1164,234],[1162,232],[1163,235],[1166,236],[888,237],[1142,3],[1161,3],[884,238],[880,239],[885,240],[1140,241],[1141,242],[911,3],[1167,243],[892,244],[897,232],[893,245],[890,244],[899,246],[894,247],[891,244],[898,248],[895,248],[889,248],[878,3],[896,249],[1165,250],[883,251],[1152,3],[901,252],[914,253],[924,235],[925,235],[926,235],[927,235],[928,235],[929,235],[930,235],[931,235],[932,235],[1149,3],[933,235],[934,235],[935,235],[936,235],[937,235],[939,254],[940,235],[1143,3],[941,235],[942,235],[943,235],[944,235],[945,235],[946,235],[947,235],[948,235],[1120,235],[949,235],[950,235],[902,3],[903,235],[951,235],[952,235],[953,235],[954,235],[955,235],[956,235],[957,235],[958,235],[959,235],[960,235],[961,235],[1144,3],[900,235],[962,254],[963,254],[964,254],[965,235],[966,235],[938,3],[967,235],[968,235],[969,235],[970,235],[971,235],[972,235],[973,254],[974,233],[975,235],[976,235],[977,235],[978,235],[1128,235],[979,233],[980,235],[981,235],[982,235],[983,235],[1151,3],[984,235],[985,235],[986,235],[987,235],[988,235],[989,235],[990,235],[991,235],[1133,255],[1134,256],[1135,256],[1136,257],[1132,258],[1145,259],[992,235],[1127,235],[904,260],[993,235],[994,235],[995,235],[1130,235],[996,235],[997,235],[998,235],[999,235],[1000,235],[1001,235],[1002,233],[1003,235],[1004,235],[1005,235],[1006,235],[1007,235],[1008,235],[1009,235],[1010,235],[1011,235],[1012,235],[1138,3],[1013,235],[1014,235],[1015,235],[1016,254],[1017,235],[1018,253],[1019,235],[1020,235],[1021,235],[1022,235],[1023,235],[1024,235],[1025,235],[1026,235],[1123,235],[1027,235],[1028,235],[1029,235],[1030,235],[1122,235],[1031,235],[1032,235],[1033,235],[1034,235],[1131,3],[1137,261],[1372,262],[1035,235],[1036,235],[1037,235],[1038,235],[1039,235],[1040,235],[1041,254],[1042,235],[1043,235],[1044,233],[1045,235],[1046,235],[1047,253],[1048,235],[1146,3],[1049,235],[1050,235],[1051,235],[1052,235],[1053,235],[1054,235],[1055,233],[1056,235],[1057,235],[1147,3],[1058,235],[1059,235],[1060,235],[1061,235],[1062,235],[1063,235],[1064,235],[1065,235],[1148,3],[1066,235],[1067,235],[1068,235],[1124,235],[905,263],[1125,235],[1159,260],[1069,235],[1150,3],[1070,235],[1071,235],[1072,235],[1073,235],[1129,233],[1074,235],[1075,235],[1076,235],[1077,235],[1078,235],[1079,235],[1080,235],[906,260],[1081,235],[1082,235],[1083,235],[1156,3],[1157,3],[1158,3],[1126,235],[1084,233],[1085,233],[1086,233],[1087,233],[1088,235],[1155,263],[1089,235],[1090,235],[1091,235],[1092,235],[1093,235],[1094,235],[1095,235],[1096,235],[1097,235],[1098,235],[1099,235],[1100,235],[1101,235],[1102,235],[1103,235],[1104,235],[1105,235],[1106,235],[1107,235],[1108,235],[1109,235],[1121,235],[1110,235],[1111,235],[1112,235],[1113,235],[1114,235],[1115,235],[1116,235],[1117,235],[1118,235],[1119,235],[916,264],[917,264],[918,264],[919,264],[921,265],[915,266],[923,267],[922,264],[920,268],[879,248],[886,269],[887,239],[1169,270],[1170,271],[1171,272],[1172,273],[1173,274],[1174,275],[1175,276],[1176,277],[1179,278],[1180,279],[1181,280],[1182,281],[1183,282],[1177,283],[1178,284],[1184,285],[1185,286],[1186,287],[1187,288],[1188,289],[1189,290],[1190,291],[1191,292],[1192,293],[1193,294],[1194,295],[1195,296],[1196,297],[1197,298],[1199,299],[1198,300],[1200,301],[1201,302],[1202,303],[1203,304],[1204,305],[1205,306],[1206,307],[1208,308],[1207,309],[1209,310],[1210,311],[1211,312],[1212,313],[1213,314],[1214,315],[1215,316],[1216,317],[1217,318],[1218,319],[1219,320],[1220,321],[1221,322],[1223,323],[1222,324],[1224,325],[1225,326],[1226,327],[1227,328],[1228,329],[1229,330],[1231,331],[1230,332],[1232,333],[1236,334],[1237,335],[1233,336],[1234,337],[1235,338],[1238,339],[1239,340],[1240,341],[1241,342],[1242,343],[1244,344],[1243,345],[1245,346],[1246,347],[1247,348],[1248,349],[1249,350],[1250,351],[1251,352],[1252,353],[1253,354],[1254,355],[1255,356],[1256,357],[1257,358],[1258,359],[1259,360],[1260,361],[1261,362],[1262,363],[1306,364],[1263,365],[1264,366],[1266,367],[1265,368],[1267,369],[1268,370],[1269,371],[1270,372],[1271,373],[1272,374],[1273,375],[1274,376],[1275,377],[1276,378],[1277,379],[1278,380],[1279,381],[1280,382],[1281,383],[1282,384],[1283,385],[1284,386],[1285,387],[1286,388],[1287,389],[1288,390],[1289,391],[1290,392],[1291,393],[1292,394],[1293,395],[1294,396],[1295,397],[1296,398],[1297,399],[1298,400],[1299,401],[1300,402],[1301,403],[1302,404],[1303,405],[1304,406],[1305,407],[1168,3],[907,3],[882,408],[876,409],[875,232],[881,233],[908,408],[909,232],[1139,410],[874,411],[912,412],[910,232],[913,3],[1384,413],[1389,414],[1388,415],[1387,416],[1397,417],[1386,418],[1393,419],[1383,420],[1390,413],[1385,421],[1391,413],[1392,422],[1394,423],[1395,424],[1380,208],[1381,3],[1382,3],[1396,3],[1335,425],[1355,3],[1322,426],[1362,427],[1308,208],[1356,428],[1320,429],[1326,3],[1319,430],[1318,431],[1330,432],[1328,433],[1329,434],[1327,208],[1332,435],[1309,436],[1314,437],[1358,438],[1359,208],[1360,439],[1361,440],[1307,208],[1364,441],[1313,442],[1334,3],[1310,3],[1312,443],[1323,3],[1340,443],[1324,443],[1341,444],[1325,445],[1311,3],[1333,446],[1336,447],[1337,448],[1339,449],[1342,450],[1343,446],[1344,430],[1345,430],[1346,446],[1347,430],[1348,430],[1353,451],[1351,430],[1350,452],[1354,430],[1352,208],[1357,453],[1338,447],[1349,454],[1321,208],[1331,455],[1316,208],[1315,456],[1317,457],[1363,3],[1472,458],[1718,459],[1715,460],[873,3],[1801,461],[1758,3],[1760,462],[1759,463],[1764,464],[1799,465],[1796,466],[1798,467],[1761,466],[1762,468],[1766,468],[1765,469],[1763,470],[1797,471],[1810,472],[1795,466],[1800,473],[1793,3],[1794,3],[1767,474],[1772,466],[1774,466],[1769,466],[1770,474],[1776,466],[1777,475],[1768,466],[1773,466],[1775,466],[1771,466],[1791,476],[1790,466],[1792,477],[1786,466],[1807,478],[1805,479],[1804,466],[1802,464],[1809,480],[1806,481],[1803,479],[1808,479],[1788,466],[1787,466],[1783,466],[1789,482],[1784,466],[1785,483],[1778,466],[1779,466],[1780,466],[1781,466],[1782,466],[1851,484],[1710,3],[1712,485],[1711,485],[1713,486],[1719,3],[1726,487],[1714,3],[1720,488],[1717,489],[1716,490],[1724,491],[1721,492],[1722,493],[1723,494],[1725,495],[1813,496],[1757,3],[1836,497],[1833,498],[1831,499],[1834,500],[1829,501],[1828,502],[1825,503],[1826,504],[1827,505],[1820,506],[1832,507],[1830,508],[1818,509],[1835,510],[1819,511],[1817,512],[1815,513],[1816,514],[1821,459],[1824,515],[68,3],[263,516],[236,3],[214,517],[212,517],[127,518],[78,519],[77,520],[213,521],[198,522],[120,523],[76,524],[75,525],[262,520],[227,526],[226,526],[138,527],[234,518],[235,518],[237,528],[238,518],[239,525],[240,518],[211,518],[241,518],[242,529],[243,518],[244,526],[245,530],[246,518],[247,518],[248,518],[249,518],[250,526],[251,518],[252,518],[253,518],[254,518],[255,531],[256,518],[257,518],[258,518],[259,518],[260,518],[80,525],[81,525],[82,525],[83,525],[84,525],[85,525],[86,525],[87,518],[89,532],[90,525],[88,525],[91,525],[92,525],[93,525],[94,525],[95,525],[96,525],[97,518],[98,525],[99,525],[100,525],[101,525],[102,525],[103,518],[104,525],[105,525],[106,525],[107,525],[108,525],[109,525],[110,518],[112,533],[111,525],[113,525],[114,525],[115,525],[116,525],[117,531],[118,518],[119,518],[133,534],[121,535],[122,525],[123,525],[124,518],[125,525],[126,525],[128,536],[129,525],[130,525],[131,525],[132,525],[134,525],[135,525],[136,525],[137,525],[139,537],[140,525],[141,525],[142,525],[143,518],[144,525],[145,538],[146,538],[147,538],[148,518],[149,525],[150,525],[151,525],[156,525],[152,525],[153,518],[154,525],[155,518],[157,525],[158,525],[159,525],[160,525],[161,525],[162,525],[163,518],[164,525],[165,525],[166,525],[167,525],[168,525],[169,525],[170,525],[171,525],[172,525],[173,525],[174,525],[175,525],[176,525],[177,525],[178,525],[179,525],[180,539],[181,525],[182,525],[183,525],[184,525],[185,525],[186,525],[187,518],[188,518],[189,518],[190,518],[191,518],[192,525],[193,525],[194,525],[195,525],[261,518],[197,540],[220,541],[215,541],[206,542],[204,543],[218,544],[207,545],[221,546],[216,547],[217,544],[219,548],[205,3],[210,3],[202,549],[203,550],[200,3],[201,551],[199,525],[208,552],[79,553],[228,3],[229,3],[230,3],[231,3],[232,3],[233,3],[222,3],[225,526],[224,3],[223,554],[196,555],[209,556],[1581,557],[1732,558],[1731,559],[1733,560],[1728,561],[1735,562],[1730,563],[1738,564],[1737,565],[1734,566],[1736,567],[1729,559],[1822,568],[1823,569],[561,570],[436,3],[525,3],[633,571],[562,3],[435,3],[632,3],[531,3],[648,3],[797,572],[566,573],[611,574],[607,575],[612,576],[766,3],[768,577],[763,578],[769,3],[762,579],[765,580],[717,581],[718,582],[719,582],[731,582],[724,583],[723,584],[725,582],[726,582],[730,585],[728,586],[757,587],[754,3],[753,588],[755,582],[732,3],[733,3],[736,3],[734,3],[735,3],[737,3],[738,3],[741,3],[739,3],[740,3],[742,3],[743,3],[468,589],[711,3],[712,3],[713,3],[714,3],[469,590],[715,3],[716,3],[745,591],[767,592],[616,593],[744,594],[625,3],[626,595],[627,595],[722,596],[720,596],[721,3],[433,593],[615,597],[764,592],[442,3],[729,589],[756,598],[727,599],[746,595],[747,600],[748,601],[749,601],[750,601],[751,601],[752,602],[761,603],[760,3],[758,3],[759,604],[571,605],[549,3],[550,606],[574,3],[575,607],[576,608],[577,608],[578,608],[579,609],[580,610],[581,608],[582,608],[583,611],[552,612],[446,3],[447,613],[584,3],[585,614],[586,608],[587,3],[588,615],[589,609],[590,616],[591,608],[592,3],[593,617],[594,3],[595,618],[596,608],[796,3],[605,619],[606,620],[598,3],[599,3],[600,3],[601,3],[602,3],[603,3],[597,3],[604,3],[455,3],[568,3],[569,3],[444,3],[614,3],[563,3],[558,3],[570,596],[551,3],[493,3],[478,3],[559,621],[553,622],[608,623],[631,624],[613,3],[617,625],[618,626],[619,627],[620,592],[621,625],[622,3],[623,582],[630,628],[624,602],[628,629],[629,592],[651,630],[672,630],[655,630],[658,631],[660,630],[706,630],[683,630],[650,630],[675,630],[703,630],[657,630],[684,630],[693,632],[689,630],[682,630],[666,633],[665,633],[680,631],[690,630],[708,634],[694,635],[686,630],[669,630],[656,630],[659,630],[688,630],[673,631],[681,630],[678,636],[695,636],[679,631],[667,630],[709,630],[674,630],[707,630],[697,630],[685,630],[705,630],[687,630],[668,630],[701,630],[691,630],[670,630],[696,637],[704,630],[671,630],[692,633],[676,630],[700,638],[654,638],[664,630],[663,630],[662,639],[649,3],[661,630],[702,636],[698,636],[677,636],[699,636],[710,640],[448,641],[454,642],[453,643],[443,644],[441,3],[452,645],[451,645],[450,645],[789,646],[449,647],[555,3],[439,3],[534,648],[533,649],[770,641],[772,641],[773,641],[774,641],[775,641],[776,641],[777,650],[782,641],[778,641],[779,641],[788,641],[780,641],[781,641],[783,641],[784,641],[785,641],[786,641],[771,641],[787,651],[647,652],[805,653],[790,654],[791,655],[794,656],[792,655],[564,657],[565,658],[793,655],[505,3],[471,659],[641,3],[456,3],[460,660],[639,3],[507,592],[645,661],[644,3],[511,594],[640,582],[637,3],[638,662],[646,663],[636,3],[457,602],[635,664],[501,665],[642,3],[643,3],[504,603],[465,592],[470,3],[506,666],[472,667],[467,668],[461,669],[509,670],[508,671],[473,672],[512,673],[458,674],[474,675],[466,676],[503,677],[430,3],[459,3],[431,3],[432,3],[434,3],[634,678],[429,3],[440,3],[502,3],[573,679],[798,680],[572,681],[799,682],[464,683],[653,684],[652,685],[445,686],[477,687],[476,688],[485,689],[487,690],[489,691],[499,692],[492,693],[494,694],[479,3],[498,695],[482,696],[610,697],[609,697],[490,698],[528,3],[496,3],[500,699],[497,3],[486,700],[483,701],[491,3],[475,702],[495,703],[484,704],[488,705],[481,705],[557,706],[480,3],[560,707],[795,708],[802,3],[554,709],[526,3],[532,710],[527,3],[556,711],[530,712],[529,713],[800,714],[567,715],[518,3],[437,3],[519,3],[515,3],[513,594],[510,3],[520,716],[517,3],[462,598],[524,717],[522,718],[438,719],[523,720],[516,721],[514,722],[521,723],[463,724],[548,725],[535,3],[547,726],[536,623],[542,727],[543,728],[546,729],[545,730],[541,728],[544,730],[537,731],[538,731],[539,731],[540,732],[804,677],[801,733],[803,734],[1526,735],[1527,735],[1528,736],[1480,737],[1529,738],[1530,739],[1531,740],[1475,3],[1478,741],[1476,3],[1477,3],[1532,742],[1533,743],[1534,744],[1535,745],[1536,746],[1537,747],[1538,747],[1539,748],[1540,749],[1541,750],[1542,751],[1481,3],[1479,3],[1543,752],[1544,753],[1545,754],[1579,755],[1546,559],[1547,3],[1548,756],[1549,757],[1550,758],[1551,759],[1552,760],[1553,761],[1554,762],[1555,763],[1556,764],[1557,764],[1558,765],[1559,3],[1560,766],[1561,767],[1563,768],[1562,769],[1564,770],[1565,771],[1566,772],[1567,773],[1568,774],[1569,775],[1570,776],[1571,777],[1572,778],[1573,779],[1574,780],[1575,781],[1576,782],[1482,3],[1483,3],[1484,3],[1522,783],[1523,3],[1524,3],[1525,770],[1577,784],[1578,785],[65,3],[66,3],[13,3],[11,3],[12,3],[17,3],[16,3],[2,3],[18,3],[19,3],[20,3],[21,3],[22,3],[23,3],[24,3],[25,3],[3,3],[26,3],[27,3],[4,3],[28,3],[32,3],[29,3],[30,3],[31,3],[33,3],[34,3],[35,3],[5,3],[36,3],[37,3],[38,3],[39,3],[6,3],[43,3],[40,3],[41,3],[42,3],[44,3],[7,3],[45,3],[50,3],[51,3],[46,3],[47,3],[48,3],[49,3],[8,3],[55,3],[52,3],[53,3],[54,3],[56,3],[9,3],[57,3],[58,3],[59,3],[61,3],[60,3],[62,3],[63,3],[10,3],[67,3],[64,3],[1,3],[15,3],[14,3],[1500,786],[1510,787],[1499,786],[1520,788],[1491,789],[1490,790],[1519,791],[1513,792],[1518,793],[1493,794],[1507,795],[1492,796],[1516,797],[1488,798],[1487,791],[1517,799],[1489,800],[1494,801],[1495,3],[1498,801],[1485,3],[1521,802],[1511,803],[1502,804],[1503,805],[1505,806],[1501,807],[1504,808],[1514,791],[1496,809],[1497,810],[1506,811],[1486,812],[1509,803],[1508,801],[1512,3],[1515,813],[1756,814],[1748,815],[1852,816],[1749,817],[1745,818],[1741,819],[1474,820],[1755,821],[1742,3],[1743,822],[868,194],[1582,823],[869,824],[864,6],[1740,825],[1473,826],[871,6],[870,827],[1750,828],[1751,828],[1752,828],[1753,828],[867,824],[1754,828],[1744,829],[865,824],[866,830],[1739,831],[1747,832],[1746,833],[872,834]],"version":"5.9.3"} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..5897e2a --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "esModuleInterop": true, + "isolatedModules": true, + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "target": "ES2023", + "sourceMap": true, + "outDir": "./dist", + "incremental": true, + "skipLibCheck": true, + "strict": true, + "strictPropertyInitialization": false, + "types": ["node"] + } +}